client
Dependencies: DISCO_L475VG_IOT01A_wifi mbed stm-spirit1-rf-driver
main.cpp@4:40e6ed9dbfaf, 2017-09-25 (annotated)
- Committer:
- apate131
- Date:
- Mon Sep 25 16:19:27 2017 +0000
- Revision:
- 4:40e6ed9dbfaf
- Parent:
- 2:9a54ede37c7e
asdjnakjsd
Who changed what in which revision?
User | Revision | Line number | New 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 | } |