client

Dependencies:   DISCO_L475VG_IOT01A_wifi mbed stm-spirit1-rf-driver

Committer:
apate131
Date:
Mon Sep 25 16:19:27 2017 +0000
Revision:
4:40e6ed9dbfaf
Parent:
2:9a54ede37c7e
asdjnakjsd

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adustm 0:c301ccc87f5b 1 #include "mbed.h"
apate131 4:40e6ed9dbfaf 2 #include <string>
apate131 4:40e6ed9dbfaf 3
adustm 0:c301ccc87f5b 4 #include "wifi.h"
adustm 0:c301ccc87f5b 5
apate131 4:40e6ed9dbfaf 6 #include "MQTTmbed.h"
apate131 4:40e6ed9dbfaf 7 #include "MQTTClient.h"
apate131 4:40e6ed9dbfaf 8 #include "MQTT_wifi.h"
adustm 0:c301ccc87f5b 9
apate131 4:40e6ed9dbfaf 10 #include "SimpleSpirit1.h"
apate131 4:40e6ed9dbfaf 11
adustm 0:c301ccc87f5b 12
adustm 0:c301ccc87f5b 13 /* Private defines -----------------------------------------------------------*/
adustm 0:c301ccc87f5b 14 #define WIFI_WRITE_TIMEOUT 10000
adustm 0:c301ccc87f5b 15 #define WIFI_READ_TIMEOUT 10000
adustm 2:9a54ede37c7e 16 #define CONNECTION_TRIAL_MAX 10
adustm 0:c301ccc87f5b 17
apate131 4:40e6ed9dbfaf 18
adustm 0:c301ccc87f5b 19 /* Private typedef------------------------------------------------------------*/
adustm 0:c301ccc87f5b 20 /* Private macro -------------------------------------------------------------*/
adustm 0:c301ccc87f5b 21 /* Private variables ---------------------------------------------------------*/
adustm 0:c301ccc87f5b 22 Serial pc(SERIAL_TX, SERIAL_RX);
adustm 2:9a54ede37c7e 23 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};
adustm 2:9a54ede37c7e 24 uint8_t RxData [500];
adustm 2:9a54ede37c7e 25 char* modulename;
adustm 2:9a54ede37c7e 26 uint8_t TxData[] = "STM32 : Hello!\n";
adustm 2:9a54ede37c7e 27 uint16_t RxLen;
apate131 4:40e6ed9dbfaf 28 uint8_t MAC_Addr[6];
apate131 4:40e6ed9dbfaf 29 uint8_t IP_Addr[4];
apate131 4:40e6ed9dbfaf 30
apate131 4:40e6ed9dbfaf 31 void messageArrived(MQTT::MessageData& md)
apate131 4:40e6ed9dbfaf 32 {
apate131 4:40e6ed9dbfaf 33 MQTT::Message &message = md.message;
apate131 4:40e6ed9dbfaf 34 printf("message recieved\r\n");
apate131 4:40e6ed9dbfaf 35 }
apate131 4:40e6ed9dbfaf 36
apate131 4:40e6ed9dbfaf 37 static volatile bool tx_done_flag = false;
apate131 4:40e6ed9dbfaf 38 static void callback_func(int event)
apate131 4:40e6ed9dbfaf 39 {
apate131 4:40e6ed9dbfaf 40 if (event == SimpleSpirit1::TX_DONE) {
apate131 4:40e6ed9dbfaf 41 tx_done_flag = true;
apate131 4:40e6ed9dbfaf 42 }
apate131 4:40e6ed9dbfaf 43 }
adustm 0:c301ccc87f5b 44
adustm 0:c301ccc87f5b 45 int main()
adustm 0:c301ccc87f5b 46 {
apate131 4:40e6ed9dbfaf 47
adustm 2:9a54ede37c7e 48
adustm 0:c301ccc87f5b 49 pc.baud(115200);
adustm 2:9a54ede37c7e 50
adustm 2:9a54ede37c7e 51 /*Initialize WIFI module */
adustm 0:c301ccc87f5b 52 if(WIFI_Init() == WIFI_STATUS_OK) {
apate131 4:40e6ed9dbfaf 53
apate131 4:40e6ed9dbfaf 54 printf("> WIFI Module Initialized.\r\n");
adustm 2:9a54ede37c7e 55 if(WIFI_GetMAC_Address(MAC_Addr) == WIFI_STATUS_OK) {
apate131 4:40e6ed9dbfaf 56 printf("> es-wifi module MAC Address : %X:%X:%X:%X:%X:%X\r\n",
adustm 0:c301ccc87f5b 57 MAC_Addr[0],
adustm 0:c301ccc87f5b 58 MAC_Addr[1],
adustm 0:c301ccc87f5b 59 MAC_Addr[2],
adustm 0:c301ccc87f5b 60 MAC_Addr[3],
adustm 0:c301ccc87f5b 61 MAC_Addr[4],
apate131 4:40e6ed9dbfaf 62 MAC_Addr[5]);
adustm 0:c301ccc87f5b 63 } else {
apate131 4:40e6ed9dbfaf 64 printf("> ERROR : CANNOT get MAC address\r\n");
adustm 0:c301ccc87f5b 65 }
apate131 4:40e6ed9dbfaf 66
adustm 0:c301ccc87f5b 67 if( WIFI_Connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, WIFI_ECN_WPA2_PSK) == WIFI_STATUS_OK) {
apate131 4:40e6ed9dbfaf 68 printf("> es-wifi module connected \r\n");
adustm 0:c301ccc87f5b 69 if(WIFI_GetIP_Address(IP_Addr) == WIFI_STATUS_OK) {
apate131 4:40e6ed9dbfaf 70 printf("> es-wifi module got IP Address : %d.%d.%d.%d\r\n",
adustm 0:c301ccc87f5b 71 IP_Addr[0],
adustm 0:c301ccc87f5b 72 IP_Addr[1],
adustm 0:c301ccc87f5b 73 IP_Addr[2],
apate131 4:40e6ed9dbfaf 74 IP_Addr[3]);
apate131 4:40e6ed9dbfaf 75
apate131 4:40e6ed9dbfaf 76 printf("> Trying to connect to Server: %d.%d.%d.%d:8002 ...\r\n",
adustm 2:9a54ede37c7e 77 RemoteIP[0],
adustm 2:9a54ede37c7e 78 RemoteIP[1],
adustm 2:9a54ede37c7e 79 RemoteIP[2],
adustm 2:9a54ede37c7e 80 RemoteIP[3]);
apate131 4:40e6ed9dbfaf 81
apate131 4:40e6ed9dbfaf 82
apate131 4:40e6ed9dbfaf 83 uint8_t colca_addr[4];
apate131 4:40e6ed9dbfaf 84 WIFI_GetHostAddress("colcaweb01.duckdns.org", colca_addr);
apate131 4:40e6ed9dbfaf 85
apate131 4:40e6ed9dbfaf 86 printf("---- Colca IP address : %d.%d.%d.%d\r\n",
apate131 4:40e6ed9dbfaf 87 colca_addr[0],
apate131 4:40e6ed9dbfaf 88 colca_addr[1],
apate131 4:40e6ed9dbfaf 89 colca_addr[2],
apate131 4:40e6ed9dbfaf 90 colca_addr[3]);
apate131 4:40e6ed9dbfaf 91
apate131 4:40e6ed9dbfaf 92 MQTT_wifi wf;
apate131 4:40e6ed9dbfaf 93 int rc;
apate131 4:40e6ed9dbfaf 94 printf("rc from connect:%d\r\n", rc);
apate131 4:40e6ed9dbfaf 95 MQTT::Client<MQTT_wifi, Countdown> client(wf);
apate131 4:40e6ed9dbfaf 96 wf.connect("colcaweb01.duckdns.org", 1883);
apate131 4:40e6ed9dbfaf 97
apate131 4:40e6ed9dbfaf 98 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
apate131 4:40e6ed9dbfaf 99 data.MQTTVersion = 3;
apate131 4:40e6ed9dbfaf 100 data.clientID.cstring = "test-client";
apate131 4:40e6ed9dbfaf 101 data.username.cstring = "test-user";
apate131 4:40e6ed9dbfaf 102 data.password.cstring = "Tall5Duck";
apate131 4:40e6ed9dbfaf 103 data.cleansession = 1;
apate131 4:40e6ed9dbfaf 104 if ((rc = client.connect(data)) != 0)
apate131 4:40e6ed9dbfaf 105 printf("rc from MQTT connect is %d\r\n", rc);
apate131 4:40e6ed9dbfaf 106
apate131 4:40e6ed9dbfaf 107
apate131 4:40e6ed9dbfaf 108 SimpleSpirit1 &subghz = SimpleSpirit1::CreateInstance(PC_12, PC_11, PC_10, PE_5, PB_5, PB_15);
apate131 4:40e6ed9dbfaf 109 subghz.attach_irq_callback(callback_func);
apate131 4:40e6ed9dbfaf 110 subghz.on();
apate131 4:40e6ed9dbfaf 111
apate131 4:40e6ed9dbfaf 112 while(true) {
apate131 4:40e6ed9dbfaf 113
apate131 4:40e6ed9dbfaf 114
apate131 4:40e6ed9dbfaf 115 char buf[SPIRIT1_MAX_PAYLOAD];
apate131 4:40e6ed9dbfaf 116 int size = subghz.read(buf, 25);
apate131 4:40e6ed9dbfaf 117 buf[size] = '\0';
apate131 4:40e6ed9dbfaf 118
apate131 4:40e6ed9dbfaf 119
apate131 4:40e6ed9dbfaf 120 rc = client.yield(5000);
apate131 4:40e6ed9dbfaf 121 if (rc) {
apate131 4:40e6ed9dbfaf 122 printf("Problem with client.yeild()\r\n");
apate131 4:40e6ed9dbfaf 123 client.connect(data);
apate131 4:40e6ed9dbfaf 124 } else {
apate131 4:40e6ed9dbfaf 125 printf("Still connected\r\n");
adustm 2:9a54ede37c7e 126 }
apate131 4:40e6ed9dbfaf 127
apate131 4:40e6ed9dbfaf 128 if (!strncmp(buf, "complete message", 16)) {
apate131 4:40e6ed9dbfaf 129 MQTT::Message message;
apate131 4:40e6ed9dbfaf 130 char msg_buf[100];
apate131 4:40e6ed9dbfaf 131 sprintf(msg_buf, buf);
apate131 4:40e6ed9dbfaf 132 message.qos = MQTT::QOS2;
apate131 4:40e6ed9dbfaf 133 message.retained = false;
apate131 4:40e6ed9dbfaf 134 message.dup = false;
apate131 4:40e6ed9dbfaf 135 message.payload = (void*)msg_buf;
apate131 4:40e6ed9dbfaf 136 message.payloadlen = strlen(msg_buf)+1;
apate131 4:40e6ed9dbfaf 137 client.publish("test/st/range", message);
apate131 4:40e6ed9dbfaf 138 printf("Received subghz message, sent mqtt message\r\n");
apate131 4:40e6ed9dbfaf 139
apate131 4:40e6ed9dbfaf 140 }
adustm 2:9a54ede37c7e 141 }
adustm 2:9a54ede37c7e 142 } else {
adustm 0:c301ccc87f5b 143 printf("> ERROR : es-wifi module CANNOT get IP address\n");
adustm 0:c301ccc87f5b 144 }
adustm 0:c301ccc87f5b 145 } else {
adustm 0:c301ccc87f5b 146 printf("> ERROR : es-wifi module NOT connected\n");
adustm 0:c301ccc87f5b 147 }
adustm 0:c301ccc87f5b 148 } else {
apate131 4:40e6ed9dbfaf 149 printf("> ERROR : WIFI Module cannot be initialized.\n");
adustm 0:c301ccc87f5b 150 }
adustm 0:c301ccc87f5b 151 }