33
Dependencies: DISCO_L475VG_IOT01A_wifi
Wificonnect.cpp@3:32b328935a54, 2019-08-21 (annotated)
- Committer:
- ascension2
- Date:
- Wed Aug 21 08:45:28 2019 +0000
- Revision:
- 3:32b328935a54
- Parent:
- 2:a460007a35c7
55
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ascension2 | 0:dc1150daf908 | 1 | #include "mbed.h" |
ascension2 | 0:dc1150daf908 | 2 | #include "wifi.h" |
ascension2 | 0:dc1150daf908 | 3 | #include "Motorcontrol.h" |
ascension2 | 0:dc1150daf908 | 4 | #include "datacheck.h" |
ascension2 | 0:dc1150daf908 | 5 | /*------------------------------------------------------------------------------ |
ascension2 | 0:dc1150daf908 | 6 | Hyperterminal settings: 115200 bauds, 8-bit data, no parity |
ascension2 | 0:dc1150daf908 | 7 | |
ascension2 | 0:dc1150daf908 | 8 | This example |
ascension2 | 0:dc1150daf908 | 9 | - connects to a wifi network (SSID & PWD to set in mbed_app.json) |
ascension2 | 0:dc1150daf908 | 10 | - Connects to a TCP server (set the address in RemoteIP) |
ascension2 | 0:dc1150daf908 | 11 | - Sends "Hello" to the server when data is received |
ascension2 | 0:dc1150daf908 | 12 | |
ascension2 | 0:dc1150daf908 | 13 | This example uses SPI3 ( PE_0 PC_10 PC_12 PC_11), wifi_wakeup pin (PB_13), |
ascension2 | 0:dc1150daf908 | 14 | wifi_dataready pin (PE_1), wifi reset pin (PE_8) |
ascension2 | 0:dc1150daf908 | 15 | ------------------------------------------------------------------------------*/ |
ascension2 | 0:dc1150daf908 | 16 | |
ascension2 | 0:dc1150daf908 | 17 | /* Private defines -----------------------------------------------------------*/ |
ascension2 | 0:dc1150daf908 | 18 | #define WIFI_WRITE_TIMEOUT 10000 |
ascension2 | 0:dc1150daf908 | 19 | #define WIFI_READ_TIMEOUT 10000 |
ascension2 | 0:dc1150daf908 | 20 | #define CONNECTION_TRIAL_MAX 10 |
ascension2 | 0:dc1150daf908 | 21 | |
ascension2 | 0:dc1150daf908 | 22 | /* Private typedef------------------------------------------------------------*/ |
ascension2 | 0:dc1150daf908 | 23 | /* Private macro -------------------------------------------------------------*/ |
ascension2 | 0:dc1150daf908 | 24 | /* Private variables ---------------------------------------------------------*/ |
ascension2 | 0:dc1150daf908 | 25 | Serial pc(SERIAL_TX, SERIAL_RX); |
ascension2 | 0:dc1150daf908 | 26 | uint8_t RemoteIP[] = {MBED_CONF_APP_SERVER_IP_1,MBED_CONF_APP_SERVER_IP_2,MBED_CONF_APP_SERVER_IP_3, MBED_CONF_APP_SERVER_IP_4}; |
ascension2 | 0:dc1150daf908 | 27 | uint8_t RxData [500]; |
ascension2 | 0:dc1150daf908 | 28 | char* modulename; |
ascension2 | 1:98939393d0db | 29 | uint8_t TxData[100]; |
ascension2 | 0:dc1150daf908 | 30 | uint16_t RxLen; |
ascension2 | 0:dc1150daf908 | 31 | uint8_t MAC_Addr[6]; |
ascension2 | 0:dc1150daf908 | 32 | uint8_t IP_Addr[4]; |
ascension2 | 1:98939393d0db | 33 | extern int cds_state; |
ascension2 | 1:98939393d0db | 34 | extern int motor1_state; |
ascension2 | 1:98939393d0db | 35 | extern int motor2_state; |
ascension2 | 2:a460007a35c7 | 36 | extern int window_state; |
ascension2 | 2:a460007a35c7 | 37 | extern int blind_state; |
ascension2 | 1:98939393d0db | 38 | extern int led_state; |
ascension2 | 2:a460007a35c7 | 39 | extern int T_dust_value; |
ascension2 | 2:a460007a35c7 | 40 | extern int AutoMode; |
ascension2 | 3:32b328935a54 | 41 | extern int firstCycle; |
ascension2 | 3:32b328935a54 | 42 | |
ascension2 | 0:dc1150daf908 | 43 | void update_state(); |
ascension2 | 0:dc1150daf908 | 44 | |
ascension2 | 0:dc1150daf908 | 45 | Ticker tick; |
ascension2 | 0:dc1150daf908 | 46 | |
ascension2 | 0:dc1150daf908 | 47 | int wifi_connect() |
ascension2 | 0:dc1150daf908 | 48 | { |
ascension2 | 0:dc1150daf908 | 49 | int32_t Socket = -1; |
ascension2 | 0:dc1150daf908 | 50 | uint16_t Datalen; |
ascension2 | 0:dc1150daf908 | 51 | uint16_t Trials = CONNECTION_TRIAL_MAX; |
ascension2 | 0:dc1150daf908 | 52 | |
ascension2 | 0:dc1150daf908 | 53 | pc.baud(115200); |
ascension2 | 0:dc1150daf908 | 54 | |
ascension2 | 0:dc1150daf908 | 55 | printf("\n"); |
ascension2 | 0:dc1150daf908 | 56 | printf("************************************************************\n"); |
ascension2 | 0:dc1150daf908 | 57 | printf("*** STM32 IoT Discovery kit for STM32L475 MCU ***\n"); |
ascension2 | 0:dc1150daf908 | 58 | printf("*** WIFI Module in TCP Client mode demonstration ***\n\n"); |
ascension2 | 0:dc1150daf908 | 59 | printf("*** TCP Client Instructions :\n"); |
ascension2 | 0:dc1150daf908 | 60 | printf("*** 1- Make sure your Phone is connected to the same network that\n"); |
ascension2 | 0:dc1150daf908 | 61 | printf("*** you configured using the Configuration Access Point.\n"); |
ascension2 | 0:dc1150daf908 | 62 | printf("*** 2- Create a server by using the android application TCP Server\n"); |
ascension2 | 0:dc1150daf908 | 63 | printf("*** with port(8002).\n"); |
ascension2 | 0:dc1150daf908 | 64 | printf("*** 3- Get the Network Name or IP Address of your phone from the step 2.\n\n"); |
ascension2 | 0:dc1150daf908 | 65 | printf("************************************************************\n"); |
ascension2 | 0:dc1150daf908 | 66 | |
ascension2 | 0:dc1150daf908 | 67 | /*Initialize WIFI module */ |
ascension2 | 0:dc1150daf908 | 68 | if(WIFI_Init() == WIFI_STATUS_OK) { |
ascension2 | 0:dc1150daf908 | 69 | printf("> WIFI Module Initialized.\n"); |
ascension2 | 0:dc1150daf908 | 70 | if(WIFI_GetMAC_Address(MAC_Addr) == WIFI_STATUS_OK) { |
ascension2 | 0:dc1150daf908 | 71 | printf("> es-wifi module MAC Address : %X:%X:%X:%X:%X:%X\n", |
ascension2 | 0:dc1150daf908 | 72 | MAC_Addr[0], |
ascension2 | 0:dc1150daf908 | 73 | MAC_Addr[1], |
ascension2 | 0:dc1150daf908 | 74 | MAC_Addr[2], |
ascension2 | 0:dc1150daf908 | 75 | MAC_Addr[3], |
ascension2 | 0:dc1150daf908 | 76 | MAC_Addr[4], |
ascension2 | 0:dc1150daf908 | 77 | MAC_Addr[5]); |
ascension2 | 0:dc1150daf908 | 78 | } else { |
ascension2 | 0:dc1150daf908 | 79 | printf("> ERROR : CANNOT get MAC address\n"); |
ascension2 | 0:dc1150daf908 | 80 | } |
ascension2 | 0:dc1150daf908 | 81 | |
ascension2 | 0:dc1150daf908 | 82 | if( WIFI_Connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, WIFI_ECN_WPA_PSK)== WIFI_STATUS_OK) { |
ascension2 | 0:dc1150daf908 | 83 | |
ascension2 | 0:dc1150daf908 | 84 | printf("> es-wifi module connected \n"); |
ascension2 | 0:dc1150daf908 | 85 | if(WIFI_GetIP_Address(IP_Addr) == WIFI_STATUS_OK) { |
ascension2 | 0:dc1150daf908 | 86 | printf("> es-wifi module got IP Address : %d.%d.%d.%d\n", |
ascension2 | 0:dc1150daf908 | 87 | IP_Addr[0], |
ascension2 | 0:dc1150daf908 | 88 | IP_Addr[1], |
ascension2 | 0:dc1150daf908 | 89 | IP_Addr[2], |
ascension2 | 0:dc1150daf908 | 90 | IP_Addr[3]); |
ascension2 | 0:dc1150daf908 | 91 | |
ascension2 | 0:dc1150daf908 | 92 | printf("> Trying to connect to Server: %d.%d.%d.%d:8002 ...\n", |
ascension2 | 0:dc1150daf908 | 93 | RemoteIP[0], |
ascension2 | 0:dc1150daf908 | 94 | RemoteIP[1], |
ascension2 | 0:dc1150daf908 | 95 | RemoteIP[2], |
ascension2 | 0:dc1150daf908 | 96 | RemoteIP[3]); |
ascension2 | 0:dc1150daf908 | 97 | |
ascension2 | 0:dc1150daf908 | 98 | while (Trials--){ |
ascension2 | 0:dc1150daf908 | 99 | if( WIFI_OpenClientConnection(0, WIFI_TCP_PROTOCOL, "TCP_CLIENT", RemoteIP, 8002, 0) == WIFI_STATUS_OK){ |
ascension2 | 0:dc1150daf908 | 100 | //if( WIFI_OpenClientConnection(0, WIFI_TCP_PROTOCOL, "TCP_CLIENT", RemoteIP, 80, 0) == WIFI_STATUS_OK){ |
ascension2 | 0:dc1150daf908 | 101 | printf("> TCP Connection opened successfully.\n"); |
ascension2 | 0:dc1150daf908 | 102 | Socket = 0; |
ascension2 | 0:dc1150daf908 | 103 | } |
ascension2 | 0:dc1150daf908 | 104 | } |
ascension2 | 0:dc1150daf908 | 105 | if(!Trials) { |
ascension2 | 0:dc1150daf908 | 106 | printf("> ERROR : Cannot open Connection\n"); |
ascension2 | 0:dc1150daf908 | 107 | } |
ascension2 | 0:dc1150daf908 | 108 | } else { |
ascension2 | 0:dc1150daf908 | 109 | printf("> ERROR : es-wifi module CANNOT get IP address\n"); |
ascension2 | 0:dc1150daf908 | 110 | } |
ascension2 | 0:dc1150daf908 | 111 | } else { |
ascension2 | 0:dc1150daf908 | 112 | printf("> ERROR : es-wifi module NOT connected\n"); |
ascension2 | 0:dc1150daf908 | 113 | } |
ascension2 | 0:dc1150daf908 | 114 | } else { |
ascension2 | 0:dc1150daf908 | 115 | printf("> ERROR : WIFI Module cannot be initialized.\n"); |
ascension2 | 0:dc1150daf908 | 116 | } |
ascension2 | 0:dc1150daf908 | 117 | |
ascension2 | 3:32b328935a54 | 118 | while(1) |
ascension2 | 3:32b328935a54 | 119 | { |
ascension2 | 1:98939393d0db | 120 | tick.attach(&update_state,1); |
ascension2 | 3:32b328935a54 | 121 | if(Socket != -1) |
ascension2 | 3:32b328935a54 | 122 | { |
ascension2 | 0:dc1150daf908 | 123 | if(WIFI_ReceiveData(Socket, RxData, sizeof(RxData), &Datalen, WIFI_READ_TIMEOUT) == WIFI_STATUS_OK){ |
ascension2 | 3:32b328935a54 | 124 | if(Datalen > 0) |
ascension2 | 3:32b328935a54 | 125 | { |
ascension2 | 0:dc1150daf908 | 126 | printf("%s \n",RxData); |
ascension2 | 2:a460007a35c7 | 127 | printf("%d \n",motor1_state); |
ascension2 | 0:dc1150daf908 | 128 | Data_Receive(RxData); |
ascension2 | 3:32b328935a54 | 129 | if(WIFI_SendData(Socket, TxData, sizeof(TxData), &Datalen, WIFI_WRITE_TIMEOUT) != WIFI_STATUS_OK) |
ascension2 | 3:32b328935a54 | 130 | { |
ascension2 | 0:dc1150daf908 | 131 | printf("> ERROR : Failed to send Data.\n"); |
ascension2 | 0:dc1150daf908 | 132 | } |
ascension2 | 0:dc1150daf908 | 133 | } |
ascension2 | 3:32b328935a54 | 134 | } |
ascension2 | 3:32b328935a54 | 135 | else |
ascension2 | 3:32b328935a54 | 136 | { |
ascension2 | 0:dc1150daf908 | 137 | printf("> ERROR : Failed to Receive Data.\n"); |
ascension2 | 0:dc1150daf908 | 138 | } |
ascension2 | 0:dc1150daf908 | 139 | } |
ascension2 | 3:32b328935a54 | 140 | if(firstCycle==1) |
ascension2 | 3:32b328935a54 | 141 | { |
ascension2 | 3:32b328935a54 | 142 | firstCycle=0; |
ascension2 | 3:32b328935a54 | 143 | } |
ascension2 | 0:dc1150daf908 | 144 | } |
ascension2 | 0:dc1150daf908 | 145 | } |
ascension2 | 0:dc1150daf908 | 146 | |
ascension2 | 0:dc1150daf908 | 147 | |
ascension2 | 0:dc1150daf908 | 148 | int update_flag=0; |
ascension2 | 0:dc1150daf908 | 149 | void update_state() |
ascension2 | 0:dc1150daf908 | 150 | { |
ascension2 | 2:a460007a35c7 | 151 | |
ascension2 | 2:a460007a35c7 | 152 | TxData[0]=(char)(AutoMode+48); |
ascension2 | 2:a460007a35c7 | 153 | TxData[1]=(char)(motor1_state+48); |
ascension2 | 2:a460007a35c7 | 154 | TxData[2]=(char)(motor2_state+48); |
ascension2 | 2:a460007a35c7 | 155 | TxData[3]=(char)(T_dust_value+48); |
ascension2 | 2:a460007a35c7 | 156 | TxData[4]=(char)(cds_state+48); |
ascension2 | 2:a460007a35c7 | 157 | TxData[5]=(char)(led_state+48); |
ascension2 | 1:98939393d0db | 158 | |
ascension2 | 2:a460007a35c7 | 159 | TxData[6]='f'; |
ascension2 | 2:a460007a35c7 | 160 | TxData[7]='f'; |
ascension2 | 2:a460007a35c7 | 161 | TxData[8]='f'; |
ascension2 | 2:a460007a35c7 | 162 | TxData[9]='f'; |
ascension2 | 2:a460007a35c7 | 163 | TxData[10]='f'; |
ascension2 | 2:a460007a35c7 | 164 | TxData[11]='f'; |
ascension2 | 2:a460007a35c7 | 165 | TxData[12]='f'; |
ascension2 | 2:a460007a35c7 | 166 | TxData[13]='f'; |
ascension2 | 2:a460007a35c7 | 167 | TxData[14]='f'; |
ascension2 | 2:a460007a35c7 | 168 | TxData[15]='\n'; |
ascension2 | 2:a460007a35c7 | 169 | |
ascension2 | 0:dc1150daf908 | 170 | } |