Final project Network enabled hardware development
Dependencies: DISCO_L475VG_IOT01A_wifi BSP_B-L475E-IOT01
main.cpp@1:d7452fd9f05b, 2020-04-22 (annotated)
- Committer:
- diego92sigma6
- Date:
- Wed Apr 22 12:01:03 2020 +0000
- Revision:
- 1:d7452fd9f05b
- Parent:
- 0:e7a19c004965
master;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |