WizFi310, WiFi module example, based NetworkSocketAPI TCP Server, TCP Client, AP mode, STA mode
Dependencies: NetworkSocketAPI WizFi310Interface mbed-rtos mbed
main.cpp
- Committer:
- jehoon
- Date:
- 2017-06-26
- Revision:
- 0:f9930710e655
File content as of revision 0:f9930710e655:
#include "mbed.h" #include "rtos.h" #include "TCPSocket.h" #include "TCPServer.h" #include "WizFi310Interface.h" //#define SOFTAPMODE //#define RUN_SERVER #ifdef SOFTAPMODE #define AP_SSID "AP_SSID" #define AP_PASSWORD "AP_PASSWORD" #define AP_SECURITY NSAPI_SECURITY_WPA2 #else #define AP_SSID "AP_SSID" #define AP_PASSWORD "AP_PASSWORD" #define AP_SECURITY NSAPI_SECURITY_WPA2 #endif //server ip, clinet mode uint8_t ipaddr[4] = {192,168,1,194}; #define PORT 5000 Serial pc(USBTX,USBRX); WizFi310Interface wifi(D8, D2, D7, D6, D9, NC, 115200); char rx_buf[512] = {'\0',}; TCPServer server; TCPSocket client; int TryApUp(); int TryServerUpAndWaitClient(); int ClientExample(); int RunEcho(); typedef enum ConnectionStep { DISASSOCIATED = 1, ASSOCIATED, LISTENED, CONNECTED, DISCONNECTED } conStep; conStep ConnectionStep = DISASSOCIATED; void print_char(char c = '*') { printf("%c", c); fflush(stdout); } DigitalOut led1(LED1); void print_star(void const *argument) { while (true) { Thread::wait(1000); print_char(); } } void connection_thread(void const *arg) { while(true){ TryApUp(); #ifdef RUN_SERVER TryServerUpAndWaitClient(); #else ClientExample(); #endif RunEcho(); } } int main() { pc.baud(115200); printf("\n\n*** Run WizFi310 on RTOS ***\r\n"); Thread star_thread(print_star, NULL, osPriorityNormal, DEFAULT_STACK_SIZE); Thread con_thread(connection_thread, NULL, osPriorityNormal, DEFAULT_STACK_SIZE); while (true) { led1 = !led1; Thread::wait(500); } } int TryApUp() { if( ConnectionStep == DISASSOCIATED){ printf(" AP UP\r\n"); printf("SSID: %s\r\nPASS: %s\r\n", AP_SSID, AP_PASSWORD); for(int i= 0; i<5; i++) { #ifdef SOFTAPMODE if ( wifi.connectAP(AP_SSID, AP_PASSWORD, AP_SECURITY) < 0 ) #else if ( wifi.connect(AP_SSID, AP_PASSWORD, AP_SECURITY) < 0 ) #endif continue; else { const char *ip = wifi.get_ip_address(); printf("my IP address is: %s\r\n", ip ? ip : "No IP"); ConnectionStep = ASSOCIATED; return 0; } } printf("Fail to make AP\r\n"); ConnectionStep = DISASSOCIATED; } return -1; } int ClientExample() { int ret = 0; if( ConnectionStep == ASSOCIATED ) { SocketAddress addr((void*)ipaddr, NSAPI_IPv4, PORT); //SocketAddress addr(&wifi, "www.google.com", 80); printf("server IP address is: %s\r\n", addr.get_ip_address()); client.set_timeout(1000); // Set Block Mode. client.open(&wifi); if(client.connect(addr) < 0){ printf("Connection fail\r\n"); } else{ printf("Connection Success!!\r\nIP: %s, %d\r\n", addr.get_ip_address(), addr.get_port()); ConnectionStep = CONNECTED; } } } int TryServerUpAndWaitClient() { if( ConnectionStep == ASSOCIATED ) { if( server.open(&wifi) < 0 ) { printf("WiFi Binding fail..\r\n"); return -1; } if( server.bind(wifi.get_ip_address(), PORT) < 0 ) { printf("Bind fail..\r\n"); return -1; } if( server.listen(0) < 0 ) { printf("Listen fail..\r\n"); return -1; } else { printf("Listen PORT: %d\r\n",PORT); ConnectionStep = LISTENED; } } //server.set_blocking(true); while(ConnectionStep == LISTENED) { if( server.accept(&client) < 0 ) { printf("accept fail..\r\n"); return -1; }else{ printf("Connection Success!!\r\n"); ConnectionStep = CONNECTED; return 0; } } return -1; } int RunEcho() { int rcv_length = 0; if(ConnectionStep == CONNECTED) { memset(rx_buf, 0, sizeof(rx_buf)); rcv_length = client.recv(rx_buf, sizeof(rx_buf)); if(rcv_length > 0) { printf("RECV: %s\r\n", rx_buf); client.send(rx_buf, rcv_length); } } }