client
Dependencies: DISCO_L475VG_IOT01A_wifi mbed stm-spirit1-rf-driver
Diff: main.cpp
- Revision:
- 4:40e6ed9dbfaf
- Parent:
- 2:9a54ede37c7e
--- a/main.cpp Thu Aug 17 16:37:16 2017 +0000 +++ b/main.cpp Mon Sep 25 16:19:27 2017 +0000 @@ -1,22 +1,21 @@ #include "mbed.h" +#include <string> + #include "wifi.h" -/*------------------------------------------------------------------------------ -Hyperterminal settings: 115200 bauds, 8-bit data, no parity -This example - - connects to a wifi network (SSID & PWD to set in mbed_app.json) - - Connects to a TCP server (set the address in RemoteIP) - - Sends "Hello" to the server when data is received +#include "MQTTmbed.h" +#include "MQTTClient.h" +#include "MQTT_wifi.h" -This example uses SPI3 ( PE_0 PC_10 PC_12 PC_11), wifi_wakeup pin (PB_13), -wifi_dataready pin (PE_1), wifi reset pin (PE_8) -------------------------------------------------------------------------------*/ +#include "SimpleSpirit1.h" + /* Private defines -----------------------------------------------------------*/ #define WIFI_WRITE_TIMEOUT 10000 #define WIFI_READ_TIMEOUT 10000 #define CONNECTION_TRIAL_MAX 10 + /* Private typedef------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ @@ -26,67 +25,119 @@ char* modulename; uint8_t TxData[] = "STM32 : Hello!\n"; uint16_t RxLen; -uint8_t MAC_Addr[6]; -uint8_t IP_Addr[4]; +uint8_t MAC_Addr[6]; +uint8_t IP_Addr[4]; + +void messageArrived(MQTT::MessageData& md) +{ + MQTT::Message &message = md.message; + printf("message recieved\r\n"); +} + +static volatile bool tx_done_flag = false; +static void callback_func(int event) +{ + if (event == SimpleSpirit1::TX_DONE) { + tx_done_flag = true; + } +} int main() { - int32_t Socket = -1; - uint16_t Datalen; - uint16_t Trials = CONNECTION_TRIAL_MAX; + pc.baud(115200); - printf("\n"); - printf("************************************************************\n"); - printf("*** STM32 IoT Discovery kit for STM32L475 MCU ***\n"); - printf("*** WIFI Module in TCP Client mode demonstration ***\n\n"); - printf("*** TCP Client Instructions :\n"); - printf("*** 1- Make sure your Phone is connected to the same network that\n"); - printf("*** you configured using the Configuration Access Point.\n"); - printf("*** 2- Create a server by using the android application TCP Server\n"); - printf("*** with port(8002).\n"); - printf("*** 3- Get the Network Name or IP Address of your phone from the step 2.\n\n"); - printf("************************************************************\n"); - /*Initialize WIFI module */ if(WIFI_Init() == WIFI_STATUS_OK) { - printf("> WIFI Module Initialized.\n"); + + printf("> WIFI Module Initialized.\r\n"); if(WIFI_GetMAC_Address(MAC_Addr) == WIFI_STATUS_OK) { - printf("> es-wifi module MAC Address : %X:%X:%X:%X:%X:%X\n", + printf("> es-wifi module MAC Address : %X:%X:%X:%X:%X:%X\r\n", MAC_Addr[0], MAC_Addr[1], MAC_Addr[2], MAC_Addr[3], MAC_Addr[4], - MAC_Addr[5]); + MAC_Addr[5]); } else { - printf("> ERROR : CANNOT get MAC address\n"); + printf("> ERROR : CANNOT get MAC address\r\n"); } - + if( WIFI_Connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, WIFI_ECN_WPA2_PSK) == WIFI_STATUS_OK) { - printf("> es-wifi module connected \n"); + printf("> es-wifi module connected \r\n"); if(WIFI_GetIP_Address(IP_Addr) == WIFI_STATUS_OK) { - printf("> es-wifi module got IP Address : %d.%d.%d.%d\n", + printf("> es-wifi module got IP Address : %d.%d.%d.%d\r\n", IP_Addr[0], IP_Addr[1], IP_Addr[2], - IP_Addr[3]); - - printf("> Trying to connect to Server: %d.%d.%d.%d:8002 ...\n", + IP_Addr[3]); + + printf("> Trying to connect to Server: %d.%d.%d.%d:8002 ...\r\n", RemoteIP[0], RemoteIP[1], RemoteIP[2], RemoteIP[3]); - - while (Trials--){ - if( WIFI_OpenClientConnection(0, WIFI_TCP_PROTOCOL, "TCP_CLIENT", RemoteIP, 8002, 0) == WIFI_STATUS_OK){ - printf("> TCP Connection opened successfully.\n"); - Socket = 0; + + + uint8_t colca_addr[4]; + WIFI_GetHostAddress("colcaweb01.duckdns.org", colca_addr); + + printf("---- Colca IP address : %d.%d.%d.%d\r\n", + colca_addr[0], + colca_addr[1], + colca_addr[2], + colca_addr[3]); + + MQTT_wifi wf; + int rc; + printf("rc from connect:%d\r\n", rc); + MQTT::Client<MQTT_wifi, Countdown> client(wf); + wf.connect("colcaweb01.duckdns.org", 1883); + + MQTTPacket_connectData data = MQTTPacket_connectData_initializer; + data.MQTTVersion = 3; + data.clientID.cstring = "test-client"; + data.username.cstring = "test-user"; + data.password.cstring = "Tall5Duck"; + data.cleansession = 1; + if ((rc = client.connect(data)) != 0) + printf("rc from MQTT connect is %d\r\n", rc); + + + SimpleSpirit1 &subghz = SimpleSpirit1::CreateInstance(PC_12, PC_11, PC_10, PE_5, PB_5, PB_15); + subghz.attach_irq_callback(callback_func); + subghz.on(); + + while(true) { + + + char buf[SPIRIT1_MAX_PAYLOAD]; + int size = subghz.read(buf, 25); + buf[size] = '\0'; + + + rc = client.yield(5000); + if (rc) { + printf("Problem with client.yeild()\r\n"); + client.connect(data); + } else { + printf("Still connected\r\n"); } - } - if(!Trials) { - printf("> ERROR : Cannot open Connection\n"); + + if (!strncmp(buf, "complete message", 16)) { + MQTT::Message message; + char msg_buf[100]; + sprintf(msg_buf, buf); + message.qos = MQTT::QOS2; + message.retained = false; + message.dup = false; + message.payload = (void*)msg_buf; + message.payloadlen = strlen(msg_buf)+1; + client.publish("test/st/range", message); + printf("Received subghz message, sent mqtt message\r\n"); + + } } } else { printf("> ERROR : es-wifi module CANNOT get IP address\n"); @@ -95,20 +146,6 @@ printf("> ERROR : es-wifi module NOT connected\n"); } } else { - printf("> ERROR : WIFI Module cannot be initialized.\n"); - } - - while(1){ - if(Socket != -1) { - if(WIFI_ReceiveData(Socket, RxData, sizeof(RxData), &Datalen, WIFI_READ_TIMEOUT) == WIFI_STATUS_OK){ - if(Datalen > 0) { - if(WIFI_SendData(Socket, TxData, sizeof(TxData), &Datalen, WIFI_WRITE_TIMEOUT) != WIFI_STATUS_OK) { - printf("> ERROR : Failed to send Data.\n"); - } - } - } else { - printf("> ERROR : Failed to Receive Data.\n"); - } - } + printf("> ERROR : WIFI Module cannot be initialized.\n"); } }