Final project Network enabled hardware development

Dependencies:   DISCO_L475VG_IOT01A_wifi BSP_B-L475E-IOT01

Committer:
diego92sigma6
Date:
Wed Apr 22 12:01:03 2020 +0000
Revision:
1:d7452fd9f05b
Parent:
0:e7a19c004965
master;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
diego92sigma6 0:e7a19c004965 1 #include "mbed.h"
diego92sigma6 0:e7a19c004965 2 #include "wifi.h"
diego92sigma6 1:d7452fd9f05b 3 #include "stm32l475e_iot01_tsensor.h"//temperature sensor
diego92sigma6 1:d7452fd9f05b 4 #include "stm32l475e_iot01_hsensor.h"//humidity sensor
diego92sigma6 1:d7452fd9f05b 5 #include <sstream>
diego92sigma6 0:e7a19c004965 6 /*------------------------------------------------------------------------------
diego92sigma6 0:e7a19c004965 7 Hyperterminal settings: 115200 bauds, 8-bit data, no parity
diego92sigma6 0:e7a19c004965 8
diego92sigma6 1:d7452fd9f05b 9 This example
diego92sigma6 0:e7a19c004965 10 - connects to a wifi network (SSID & PWD to set in mbed_app.json)
diego92sigma6 0:e7a19c004965 11 - Connects to a TCP server (set the address in RemoteIP)
diego92sigma6 0:e7a19c004965 12 - Sends "Hello" to the server when data is received
diego92sigma6 0:e7a19c004965 13
diego92sigma6 1:d7452fd9f05b 14 This example uses SPI3 ( PE_0 PC_10 PC_12 PC_11), wifi_wakeup pin (PB_13),
diego92sigma6 0:e7a19c004965 15 wifi_dataready pin (PE_1), wifi reset pin (PE_8)
diego92sigma6 0:e7a19c004965 16 ------------------------------------------------------------------------------*/
diego92sigma6 0:e7a19c004965 17
diego92sigma6 0:e7a19c004965 18 /* Private defines -----------------------------------------------------------*/
diego92sigma6 1:d7452fd9f05b 19 #define WIFI_WRITE_TIMEOUT 100
diego92sigma6 1:d7452fd9f05b 20 #define WIFI_READ_TIMEOUT 100
diego92sigma6 0:e7a19c004965 21 #define CONNECTION_TRIAL_MAX 10
diego92sigma6 0:e7a19c004965 22
diego92sigma6 0:e7a19c004965 23 /* Private typedef------------------------------------------------------------*/
diego92sigma6 0:e7a19c004965 24 /* Private macro -------------------------------------------------------------*/
diego92sigma6 0:e7a19c004965 25 /* Private variables ---------------------------------------------------------*/
diego92sigma6 0:e7a19c004965 26 Serial pc(SERIAL_TX, SERIAL_RX);
diego92sigma6 0:e7a19c004965 27 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};
diego92sigma6 0:e7a19c004965 28 uint8_t RxData [500];
diego92sigma6 0:e7a19c004965 29 char* modulename;
diego92sigma6 1:d7452fd9f05b 30 uint8_t * TxData;
diego92sigma6 0:e7a19c004965 31 uint16_t RxLen;
diego92sigma6 1:d7452fd9f05b 32 uint8_t MAC_Addr[6];
diego92sigma6 1:d7452fd9f05b 33 uint8_t IP_Addr[4];
diego92sigma6 0:e7a19c004965 34
diego92sigma6 0:e7a19c004965 35 int main()
diego92sigma6 0:e7a19c004965 36 {
diego92sigma6 0:e7a19c004965 37 int32_t Socket = -1;
diego92sigma6 0:e7a19c004965 38 uint16_t Datalen;
diego92sigma6 0:e7a19c004965 39 uint16_t Trials = CONNECTION_TRIAL_MAX;
diego92sigma6 0:e7a19c004965 40
diego92sigma6 0:e7a19c004965 41 pc.baud(9600);
diego92sigma6 0:e7a19c004965 42
diego92sigma6 0:e7a19c004965 43 printf("\n");
diego92sigma6 0:e7a19c004965 44 printf("************************************************************\n");
diego92sigma6 0:e7a19c004965 45 printf("*** STM32 IoT Discovery kit for STM32L475 MCU ***\n");
diego92sigma6 0:e7a19c004965 46 printf("*** WIFI Module in TCP Client mode demonstration ***\n\n");
diego92sigma6 0:e7a19c004965 47 printf("*** TCP Client Instructions :\n");
diego92sigma6 0:e7a19c004965 48 printf("*** 1- Make sure your Phone is connected to the same network that\n");
diego92sigma6 0:e7a19c004965 49 printf("*** you configured using the Configuration Access Point.\n");
diego92sigma6 0:e7a19c004965 50 printf("*** 2- Create a server by using the android application TCP Server\n");
diego92sigma6 1:d7452fd9f05b 51 printf("*** with port(7331).\n");
diego92sigma6 1:d7452fd9f05b 52 printf("*** 3- Get the Network Name or IP Address of your phone from the step 2.\n\n");
diego92sigma6 0:e7a19c004965 53 printf("************************************************************\n");
diego92sigma6 0:e7a19c004965 54
diego92sigma6 0:e7a19c004965 55 /*Initialize WIFI module */
diego92sigma6 0:e7a19c004965 56 if(WIFI_Init() == WIFI_STATUS_OK) {
diego92sigma6 1:d7452fd9f05b 57 printf("> WIFI Module Initialized.\n");
diego92sigma6 0:e7a19c004965 58 if(WIFI_GetMAC_Address(MAC_Addr) == WIFI_STATUS_OK) {
diego92sigma6 1:d7452fd9f05b 59 printf("> es-wifi module MAC Address : %X:%X:%X:%X:%X:%X\n",
diego92sigma6 0:e7a19c004965 60 MAC_Addr[0],
diego92sigma6 0:e7a19c004965 61 MAC_Addr[1],
diego92sigma6 0:e7a19c004965 62 MAC_Addr[2],
diego92sigma6 0:e7a19c004965 63 MAC_Addr[3],
diego92sigma6 0:e7a19c004965 64 MAC_Addr[4],
diego92sigma6 1:d7452fd9f05b 65 MAC_Addr[5]);
diego92sigma6 0:e7a19c004965 66 } else {
diego92sigma6 0:e7a19c004965 67 printf("> ERROR : CANNOT get MAC address\n");
diego92sigma6 0:e7a19c004965 68 }
diego92sigma6 1:d7452fd9f05b 69
diego92sigma6 0:e7a19c004965 70 if( WIFI_Connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, WIFI_ECN_WPA2_PSK) == WIFI_STATUS_OK) {
diego92sigma6 0:e7a19c004965 71 printf("> es-wifi module connected \n");
diego92sigma6 0:e7a19c004965 72 if(WIFI_GetIP_Address(IP_Addr) == WIFI_STATUS_OK) {
diego92sigma6 1:d7452fd9f05b 73 printf("> es-wifi module got IP Address : %d.%d.%d.%d\n",
diego92sigma6 0:e7a19c004965 74 IP_Addr[0],
diego92sigma6 0:e7a19c004965 75 IP_Addr[1],
diego92sigma6 0:e7a19c004965 76 IP_Addr[2],
diego92sigma6 1:d7452fd9f05b 77 IP_Addr[3]);
diego92sigma6 1:d7452fd9f05b 78
diego92sigma6 1:d7452fd9f05b 79 printf("> Trying to connect to Server: %d.%d.%d.%d:7331 ...\n",
diego92sigma6 0:e7a19c004965 80 RemoteIP[0],
diego92sigma6 0:e7a19c004965 81 RemoteIP[1],
diego92sigma6 0:e7a19c004965 82 RemoteIP[2],
diego92sigma6 0:e7a19c004965 83 RemoteIP[3]);
diego92sigma6 1:d7452fd9f05b 84
diego92sigma6 1:d7452fd9f05b 85 while (Trials--) {
diego92sigma6 1:d7452fd9f05b 86 if( WIFI_OpenClientConnection(0, WIFI_TCP_PROTOCOL, "TCP_CLIENT", RemoteIP, 7331, 0) == WIFI_STATUS_OK) {
diego92sigma6 1:d7452fd9f05b 87 printf("> TCP Connection opened successfully.\n");
diego92sigma6 0:e7a19c004965 88 Socket = 0;
diego92sigma6 0:e7a19c004965 89 }
diego92sigma6 0:e7a19c004965 90 }
diego92sigma6 0:e7a19c004965 91 if(!Trials) {
diego92sigma6 0:e7a19c004965 92 printf("> ERROR : Cannot open Connection\n");
diego92sigma6 0:e7a19c004965 93 }
diego92sigma6 0:e7a19c004965 94 } else {
diego92sigma6 0:e7a19c004965 95 printf("> ERROR : es-wifi module CANNOT get IP address\n");
diego92sigma6 0:e7a19c004965 96 }
diego92sigma6 0:e7a19c004965 97 } else {
diego92sigma6 0:e7a19c004965 98 printf("> ERROR : es-wifi module NOT connected\n");
diego92sigma6 0:e7a19c004965 99 }
diego92sigma6 0:e7a19c004965 100 } else {
diego92sigma6 1:d7452fd9f05b 101 printf("> ERROR : WIFI Module cannot be initialized.\n");
diego92sigma6 0:e7a19c004965 102 }
diego92sigma6 1:d7452fd9f05b 103
diego92sigma6 1:d7452fd9f05b 104 printf("Initializing sensors...\n");
diego92sigma6 1:d7452fd9f05b 105 BSP_TSENSOR_Init(); //initilize the temperature sensor
diego92sigma6 1:d7452fd9f05b 106 BSP_HSENSOR_Init(); //iitilize the humidity sensor
diego92sigma6 1:d7452fd9f05b 107 float sensor_value_temp = 0;
diego92sigma6 1:d7452fd9f05b 108 float sensor_value_humid = 0;
diego92sigma6 1:d7452fd9f05b 109
diego92sigma6 1:d7452fd9f05b 110
diego92sigma6 1:d7452fd9f05b 111 while(1) {
diego92sigma6 1:d7452fd9f05b 112 //ThisThread::sleep_for(1000);
diego92sigma6 1:d7452fd9f05b 113 printf("Resting...\n");
diego92sigma6 1:d7452fd9f05b 114 //wait(2);
diego92sigma6 1:d7452fd9f05b 115 //Get readings
diego92sigma6 1:d7452fd9f05b 116 printf("Reading Sensors...\n");
diego92sigma6 1:d7452fd9f05b 117 sensor_value_temp = BSP_TSENSOR_ReadTemp();
diego92sigma6 1:d7452fd9f05b 118 sensor_value_humid = BSP_HSENSOR_ReadHumidity();
diego92sigma6 1:d7452fd9f05b 119
diego92sigma6 1:d7452fd9f05b 120 //Format readings
diego92sigma6 1:d7452fd9f05b 121 stringstream ss;
diego92sigma6 1:d7452fd9f05b 122 ss << "{ \"temp\":" << sensor_value_temp << ",\"humid\":"<<sensor_value_humid<<"}";
diego92sigma6 1:d7452fd9f05b 123 std::uint8_t readingLength = ss.str().length() + 1;
diego92sigma6 1:d7452fd9f05b 124 char * rawData = (char *) malloc(sizeof(char) * readingLength);
diego92sigma6 1:d7452fd9f05b 125 strcpy(rawData,ss.str().c_str());
diego92sigma6 1:d7452fd9f05b 126 TxData = new uint8_t[readingLength];
diego92sigma6 1:d7452fd9f05b 127 for (int i = 0; i < readingLength; i++) {
diego92sigma6 1:d7452fd9f05b 128 TxData[i] = (uint8_t) rawData[i];
diego92sigma6 1:d7452fd9f05b 129 }
diego92sigma6 1:d7452fd9f05b 130 printf("String length: %d", readingLength);
diego92sigma6 1:d7452fd9f05b 131 printf(ss.str().c_str());
diego92sigma6 1:d7452fd9f05b 132 printf("\n");
diego92sigma6 1:d7452fd9f05b 133
diego92sigma6 1:d7452fd9f05b 134 //Send readings
diego92sigma6 0:e7a19c004965 135 if(Socket != -1) {
diego92sigma6 1:d7452fd9f05b 136 printf("Waiting for data...\n");
diego92sigma6 1:d7452fd9f05b 137 if(WIFI_ReceiveData(Socket, RxData, sizeof(RxData), &Datalen, WIFI_READ_TIMEOUT) == WIFI_STATUS_OK) {
diego92sigma6 1:d7452fd9f05b 138 printf("Received Data. Sending...\n");
diego92sigma6 1:d7452fd9f05b 139 if(Datalen > 0 || true) {
diego92sigma6 1:d7452fd9f05b 140 printf("Sending data...\n");
diego92sigma6 1:d7452fd9f05b 141 if(WIFI_SendData(Socket, (std::uint8_t*)TxData, readingLength, &Datalen, WIFI_WRITE_TIMEOUT) != WIFI_STATUS_OK) {
diego92sigma6 1:d7452fd9f05b 142 printf("> ERROR : Failed to send Data.\n");
diego92sigma6 1:d7452fd9f05b 143 } else {
diego92sigma6 1:d7452fd9f05b 144 printf("OK");
diego92sigma6 1:d7452fd9f05b 145 }
diego92sigma6 0:e7a19c004965 146 }
diego92sigma6 0:e7a19c004965 147 }
diego92sigma6 0:e7a19c004965 148 }
diego92sigma6 1:d7452fd9f05b 149
diego92sigma6 0:e7a19c004965 150 }
diego92sigma6 0:e7a19c004965 151 }