33

Dependencies:   DISCO_L475VG_IOT01A_wifi

Committer:
ascension2
Date:
Wed Aug 21 08:45:28 2019 +0000
Revision:
3:32b328935a54
Parent:
2:a460007a35c7
55

Who changed what in which revision?

UserRevisionLine numberNew 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 }