L475VG-IOT01A+WIFI+MQTT

Dependencies:   HTS221 VL53L0X BSP_B-L475E-IOT01 MQTT

Committer:
cornetlin
Date:
Sat Jan 04 16:47:24 2020 +0000
Revision:
2:a21eb3abb874
Parent:
1:5a9fdc848911
WIFI+MQTT+LORA

Who changed what in which revision?

UserRevisionLine numberNew contents of line
cornetlin 1:5a9fdc848911 1 /* WiFi+MQTT Example
cornetlin 1:5a9fdc848911 2 */
JunkoNakajima 0:8d0ccf7acecd 3
JunkoNakajima 0:8d0ccf7acecd 4 #include "mbed.h"
JunkoNakajima 0:8d0ccf7acecd 5 #include "TCPSocket.h"
JunkoNakajima 0:8d0ccf7acecd 6 #include "wifi-ism43362/ISM43362Interface.h"
cornetlin 1:5a9fdc848911 7 #define logMessage printf
cornetlin 1:5a9fdc848911 8 #define MQTTCLIENT_QOS2 1
cornetlin 1:5a9fdc848911 9 #include "MQTTNetwork.h"
cornetlin 1:5a9fdc848911 10 #include "MQTTmbed.h"
cornetlin 1:5a9fdc848911 11 #include "MQTTClient.h"
cornetlin 2:a21eb3abb874 12 #include "HTS221Sensor.h"
cornetlin 2:a21eb3abb874 13 //#define MQTT_HOST "demo.thingsboard.io"
cornetlin 2:a21eb3abb874 14 #define MQTT_HOST "192.168.43.14"
cornetlin 2:a21eb3abb874 15 #define MQTT_PORT 1883
cornetlin 2:a21eb3abb874 16 #define MQTT_TOPIC "Pubtest"
cornetlin 2:a21eb3abb874 17 #include <string>
cornetlin 2:a21eb3abb874 18 #include "VL53L0X.h"
JunkoNakajima 0:8d0ccf7acecd 19 ISM43362Interface net;
JunkoNakajima 0:8d0ccf7acecd 20 // WiFiInterface *wifi;
cornetlin 2:a21eb3abb874 21 Serial pc(USBTX,USBRX);
cornetlin 1:5a9fdc848911 22 void messageArrived(MQTT::MessageData& md)
cornetlin 1:5a9fdc848911 23 {
cornetlin 1:5a9fdc848911 24 MQTT::Message &message = md.message;
cornetlin 1:5a9fdc848911 25 logMessage("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
cornetlin 1:5a9fdc848911 26 logMessage("Payload %.*s\r\n", message.payloadlen, (char*)message.payload);
cornetlin 1:5a9fdc848911 27 //++arrivedcount;
cornetlin 1:5a9fdc848911 28 }
cornetlin 2:a21eb3abb874 29 static DevI2C devI2c(PB_11,PB_10);
cornetlin 2:a21eb3abb874 30 static DigitalOut shutdown_pin(PC_6);
cornetlin 2:a21eb3abb874 31 static VL53L0X range(&devI2c, &shutdown_pin, PC_7);
cornetlin 2:a21eb3abb874 32 Serial uart(PC_4, PC_5);//TX,RX
cornetlin 1:5a9fdc848911 33
cornetlin 2:a21eb3abb874 34 int idx=0;
cornetlin 2:a21eb3abb874 35 std::string inputdata;
cornetlin 2:a21eb3abb874 36 char ch1;
JunkoNakajima 0:8d0ccf7acecd 37 int main(void){
cornetlin 2:a21eb3abb874 38 uart.baud(115200);
cornetlin 2:a21eb3abb874 39 range.init_sensor(VL53L0X_DEFAULT_ADDRESS);
JunkoNakajima 0:8d0ccf7acecd 40 int count = 0;
JunkoNakajima 0:8d0ccf7acecd 41
cornetlin 1:5a9fdc848911 42 printf("\r\nWiFi+MQTT Example Demo\n");
JunkoNakajima 0:8d0ccf7acecd 43
JunkoNakajima 0:8d0ccf7acecd 44 // Connect to Wifi
JunkoNakajima 0:8d0ccf7acecd 45 printf("\nConnecting to %s...\n", MBED_CONF_APP_WIFI_SSID);
JunkoNakajima 0:8d0ccf7acecd 46 int ret = net.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
JunkoNakajima 0:8d0ccf7acecd 47 if (ret != 0) {
JunkoNakajima 0:8d0ccf7acecd 48 printf("\nConnection error: %d\n", ret);
JunkoNakajima 0:8d0ccf7acecd 49 return -1;
JunkoNakajima 0:8d0ccf7acecd 50 }
JunkoNakajima 0:8d0ccf7acecd 51
JunkoNakajima 0:8d0ccf7acecd 52 printf("Success\n\n");
JunkoNakajima 0:8d0ccf7acecd 53 printf("MAC: %s\n", net.get_mac_address());
JunkoNakajima 0:8d0ccf7acecd 54 printf("IP: %s\n", net.get_ip_address());
JunkoNakajima 0:8d0ccf7acecd 55 printf("Netmask: %s\n", net.get_netmask());
JunkoNakajima 0:8d0ccf7acecd 56 printf("Gateway: %s\n", net.get_gateway());
JunkoNakajima 0:8d0ccf7acecd 57 printf("RSSI: %d\n\n", net.get_rssi());
JunkoNakajima 0:8d0ccf7acecd 58
cornetlin 1:5a9fdc848911 59 printf("\Wifi Example Done,MQTT Example Start\n");
cornetlin 1:5a9fdc848911 60
cornetlin 1:5a9fdc848911 61 // MQTT Example Start
cornetlin 1:5a9fdc848911 62 float version = 0.6;
cornetlin 1:5a9fdc848911 63 char* publishtopic = "publishtest";
cornetlin 1:5a9fdc848911 64 char* subscribetopic = "subscribtest";
cornetlin 1:5a9fdc848911 65
cornetlin 1:5a9fdc848911 66 logMessage("HelloMQTT: version is %.2f\r\n", version);
cornetlin 2:a21eb3abb874 67 char assess_token[] = "uNYseQgqntIrL7q5F2tL";
cornetlin 1:5a9fdc848911 68 NetworkInterface* network = &net;
cornetlin 1:5a9fdc848911 69 if (!network) {
cornetlin 1:5a9fdc848911 70 return -1;
cornetlin 1:5a9fdc848911 71 }
JunkoNakajima 0:8d0ccf7acecd 72
cornetlin 1:5a9fdc848911 73 MQTTNetwork mqttNetwork(network);
cornetlin 1:5a9fdc848911 74
cornetlin 1:5a9fdc848911 75 MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);
JunkoNakajima 0:8d0ccf7acecd 76
cornetlin 2:a21eb3abb874 77 const char* hostname = MQTT_HOST;
cornetlin 2:a21eb3abb874 78 int port = MQTT_PORT;
cornetlin 1:5a9fdc848911 79 logMessage("Connecting to %s:%d\r\n", hostname, port);
cornetlin 1:5a9fdc848911 80 int rc = mqttNetwork.connect(hostname, port);
cornetlin 1:5a9fdc848911 81 if (rc != 0)
cornetlin 1:5a9fdc848911 82 logMessage("rc from TCP connect is %d\r\n", rc);
JunkoNakajima 0:8d0ccf7acecd 83
cornetlin 1:5a9fdc848911 84 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
cornetlin 2:a21eb3abb874 85 //data.MQTTVersion = 3;
cornetlin 1:5a9fdc848911 86 data.clientID.cstring = "mbed-sample";
cornetlin 2:a21eb3abb874 87 data.username.cstring = assess_token;
cornetlin 2:a21eb3abb874 88 //data.password.cstring = "";
cornetlin 1:5a9fdc848911 89 if ((rc = client.connect(data)) != 0)
cornetlin 1:5a9fdc848911 90 logMessage("rc from MQTT connect is %d\r\n", rc);
JunkoNakajima 0:8d0ccf7acecd 91
cornetlin 1:5a9fdc848911 92 if ((rc = client.subscribe(publishtopic, MQTT::QOS2, messageArrived)) != 0)
cornetlin 1:5a9fdc848911 93 logMessage("rc from MQTT subscribe is %d\r\n", rc);
cornetlin 1:5a9fdc848911 94 if ((rc = client.subscribe(subscribetopic, MQTT::QOS2, messageArrived)) != 0)
cornetlin 1:5a9fdc848911 95 logMessage("rc from MQTT subscribe is %d\r\n", rc);
cornetlin 1:5a9fdc848911 96
JunkoNakajima 0:8d0ccf7acecd 97
cornetlin 2:a21eb3abb874 98
cornetlin 2:a21eb3abb874 99 printf("successfully connect!\n\n");
cornetlin 2:a21eb3abb874 100
cornetlin 2:a21eb3abb874 101 // Initialize sensors --------------------------------------------------
cornetlin 2:a21eb3abb874 102
cornetlin 2:a21eb3abb874 103 //uint8_t id;
cornetlin 2:a21eb3abb874 104 //DevI2C i2c_2(PB_11, PB_10);
cornetlin 2:a21eb3abb874 105 //HTS221Sensor hum_temp(&i2c_2);
cornetlin 2:a21eb3abb874 106
cornetlin 2:a21eb3abb874 107 // hum_temp.init(NULL);
cornetlin 2:a21eb3abb874 108 //hum_temp.enable();
cornetlin 2:a21eb3abb874 109 //hum_temp.read_id(&id);
cornetlin 2:a21eb3abb874 110
cornetlin 2:a21eb3abb874 111 //printf("HTS221 humidity & temperature sensor = 0x%X\r\n", id);
cornetlin 2:a21eb3abb874 112 //std::string inputdata;
cornetlin 2:a21eb3abb874 113 //inputdata="{\"PM2.5\":10,\"PM10\":20,\"temperature\":20,\"humidity\":45}";
cornetlin 2:a21eb3abb874 114 while (1) {
cornetlin 2:a21eb3abb874 115
cornetlin 2:a21eb3abb874 116 //buffer variables
cornetlin 2:a21eb3abb874 117 char ch;
cornetlin 2:a21eb3abb874 118 //if data is ready in the buffer
cornetlin 2:a21eb3abb874 119 while (uart.readable()) {
cornetlin 2:a21eb3abb874 120 //read 1 character
cornetlin 2:a21eb3abb874 121
cornetlin 2:a21eb3abb874 122 ch = uart.getc();
cornetlin 2:a21eb3abb874 123 //pc.printf("datacomming:%c",ch);
cornetlin 2:a21eb3abb874 124 /////Pm25///////
JunkoNakajima 0:8d0ccf7acecd 125
cornetlin 2:a21eb3abb874 126 if (ch == 's') {
cornetlin 2:a21eb3abb874 127 //so the pointer should be set to the first position
cornetlin 2:a21eb3abb874 128 inputdata.clear();
cornetlin 2:a21eb3abb874 129 //pc.printf("start string");
cornetlin 2:a21eb3abb874 130 }
cornetlin 2:a21eb3abb874 131 //write buffer character to big buffer string
cornetlin 2:a21eb3abb874 132 inputdata += ch;
cornetlin 2:a21eb3abb874 133 //pc.printf("input string:%s",inputdata);
cornetlin 2:a21eb3abb874 134 //if the character is # than the end of the sentence is
cornetlin 2:a21eb3abb874 135 //reached and some stuff has to be done
cornetlin 2:a21eb3abb874 136 if (ch == '#') {
cornetlin 2:a21eb3abb874 137 //remove start and stop characters
cornetlin 2:a21eb3abb874 138 inputdata.erase(0,1);
cornetlin 2:a21eb3abb874 139 inputdata.erase(inputdata.length()-1,1);
cornetlin 2:a21eb3abb874 140 pc.printf("%s",inputdata);
cornetlin 2:a21eb3abb874 141 char msg[inputdata.size()+1];
cornetlin 2:a21eb3abb874 142 inputdata.copy(msg,inputdata.size()+1);
cornetlin 2:a21eb3abb874 143 msg[inputdata.size()]='\0';
cornetlin 2:a21eb3abb874 144 int n=strlen(msg);
cornetlin 2:a21eb3abb874 145 void *payload = reinterpret_cast<void*>(msg);
cornetlin 2:a21eb3abb874 146 size_t payload_len = n;
JunkoNakajima 0:8d0ccf7acecd 147
cornetlin 2:a21eb3abb874 148 printf("publish to: %s %d %s\r\n", MQTT_HOST, MQTT_PORT, MQTT_TOPIC);
cornetlin 1:5a9fdc848911 149
cornetlin 2:a21eb3abb874 150 if (client.publish(MQTT_TOPIC, payload, n) < 0) {
cornetlin 2:a21eb3abb874 151 printf("failed to publish MQTT message");
cornetlin 2:a21eb3abb874 152 }
cornetlin 2:a21eb3abb874 153 }
cornetlin 2:a21eb3abb874 154 }
cornetlin 2:a21eb3abb874 155
cornetlin 2:a21eb3abb874 156 }
cornetlin 2:a21eb3abb874 157
cornetlin 2:a21eb3abb874 158
JunkoNakajima 0:8d0ccf7acecd 159
cornetlin 1:5a9fdc848911 160 // net.disconnect();
JunkoNakajima 0:8d0ccf7acecd 161
cornetlin 2:a21eb3abb874 162 }