mqtt_lora_thingsboard
Dependencies: HTS221 VL53L0X BSP_B-L475E-IOT01 MQTT
main.cpp@3:a21eb3abb874, 2020-01-04 (annotated)
- Committer:
- cornetlin
- Date:
- Sat Jan 04 16:47:24 2020 +0000
- Revision:
- 3:a21eb3abb874
- Parent:
- 1:5a9fdc848911
WIFI+MQTT+LORA
Who changed what in which revision?
User | Revision | Line number | New 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 | 3:a21eb3abb874 | 12 | #include "HTS221Sensor.h" |
cornetlin | 3:a21eb3abb874 | 13 | //#define MQTT_HOST "demo.thingsboard.io" |
cornetlin | 3:a21eb3abb874 | 14 | #define MQTT_HOST "192.168.43.14" |
cornetlin | 3:a21eb3abb874 | 15 | #define MQTT_PORT 1883 |
cornetlin | 3:a21eb3abb874 | 16 | #define MQTT_TOPIC "Pubtest" |
cornetlin | 3:a21eb3abb874 | 17 | #include <string> |
cornetlin | 3:a21eb3abb874 | 18 | #include "VL53L0X.h" |
JunkoNakajima |
0:8d0ccf7acecd | 19 | ISM43362Interface net; |
JunkoNakajima |
0:8d0ccf7acecd | 20 | // WiFiInterface *wifi; |
cornetlin | 3: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 | 3:a21eb3abb874 | 29 | static DevI2C devI2c(PB_11,PB_10); |
cornetlin | 3:a21eb3abb874 | 30 | static DigitalOut shutdown_pin(PC_6); |
cornetlin | 3:a21eb3abb874 | 31 | static VL53L0X range(&devI2c, &shutdown_pin, PC_7); |
cornetlin | 3:a21eb3abb874 | 32 | Serial uart(PC_4, PC_5);//TX,RX |
cornetlin | 1:5a9fdc848911 | 33 | |
cornetlin | 3:a21eb3abb874 | 34 | int idx=0; |
cornetlin | 3:a21eb3abb874 | 35 | std::string inputdata; |
cornetlin | 3:a21eb3abb874 | 36 | char ch1; |
JunkoNakajima |
0:8d0ccf7acecd | 37 | int main(void){ |
cornetlin | 3:a21eb3abb874 | 38 | uart.baud(115200); |
cornetlin | 3: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 | 3: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 | 3:a21eb3abb874 | 77 | const char* hostname = MQTT_HOST; |
cornetlin | 3: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 | 3:a21eb3abb874 | 85 | //data.MQTTVersion = 3; |
cornetlin | 1:5a9fdc848911 | 86 | data.clientID.cstring = "mbed-sample"; |
cornetlin | 3:a21eb3abb874 | 87 | data.username.cstring = assess_token; |
cornetlin | 3: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 | 3:a21eb3abb874 | 98 | |
cornetlin | 3:a21eb3abb874 | 99 | printf("successfully connect!\n\n"); |
cornetlin | 3:a21eb3abb874 | 100 | |
cornetlin | 3:a21eb3abb874 | 101 | // Initialize sensors -------------------------------------------------- |
cornetlin | 3:a21eb3abb874 | 102 | |
cornetlin | 3:a21eb3abb874 | 103 | //uint8_t id; |
cornetlin | 3:a21eb3abb874 | 104 | //DevI2C i2c_2(PB_11, PB_10); |
cornetlin | 3:a21eb3abb874 | 105 | //HTS221Sensor hum_temp(&i2c_2); |
cornetlin | 3:a21eb3abb874 | 106 | |
cornetlin | 3:a21eb3abb874 | 107 | // hum_temp.init(NULL); |
cornetlin | 3:a21eb3abb874 | 108 | //hum_temp.enable(); |
cornetlin | 3:a21eb3abb874 | 109 | //hum_temp.read_id(&id); |
cornetlin | 3:a21eb3abb874 | 110 | |
cornetlin | 3:a21eb3abb874 | 111 | //printf("HTS221 humidity & temperature sensor = 0x%X\r\n", id); |
cornetlin | 3:a21eb3abb874 | 112 | //std::string inputdata; |
cornetlin | 3:a21eb3abb874 | 113 | //inputdata="{\"PM2.5\":10,\"PM10\":20,\"temperature\":20,\"humidity\":45}"; |
cornetlin | 3:a21eb3abb874 | 114 | while (1) { |
cornetlin | 3:a21eb3abb874 | 115 | |
cornetlin | 3:a21eb3abb874 | 116 | //buffer variables |
cornetlin | 3:a21eb3abb874 | 117 | char ch; |
cornetlin | 3:a21eb3abb874 | 118 | //if data is ready in the buffer |
cornetlin | 3:a21eb3abb874 | 119 | while (uart.readable()) { |
cornetlin | 3:a21eb3abb874 | 120 | //read 1 character |
cornetlin | 3:a21eb3abb874 | 121 | |
cornetlin | 3:a21eb3abb874 | 122 | ch = uart.getc(); |
cornetlin | 3:a21eb3abb874 | 123 | //pc.printf("datacomming:%c",ch); |
cornetlin | 3:a21eb3abb874 | 124 | /////Pm25/////// |
JunkoNakajima |
0:8d0ccf7acecd | 125 | |
cornetlin | 3:a21eb3abb874 | 126 | if (ch == 's') { |
cornetlin | 3:a21eb3abb874 | 127 | //so the pointer should be set to the first position |
cornetlin | 3:a21eb3abb874 | 128 | inputdata.clear(); |
cornetlin | 3:a21eb3abb874 | 129 | //pc.printf("start string"); |
cornetlin | 3:a21eb3abb874 | 130 | } |
cornetlin | 3:a21eb3abb874 | 131 | //write buffer character to big buffer string |
cornetlin | 3:a21eb3abb874 | 132 | inputdata += ch; |
cornetlin | 3:a21eb3abb874 | 133 | //pc.printf("input string:%s",inputdata); |
cornetlin | 3:a21eb3abb874 | 134 | //if the character is # than the end of the sentence is |
cornetlin | 3:a21eb3abb874 | 135 | //reached and some stuff has to be done |
cornetlin | 3:a21eb3abb874 | 136 | if (ch == '#') { |
cornetlin | 3:a21eb3abb874 | 137 | //remove start and stop characters |
cornetlin | 3:a21eb3abb874 | 138 | inputdata.erase(0,1); |
cornetlin | 3:a21eb3abb874 | 139 | inputdata.erase(inputdata.length()-1,1); |
cornetlin | 3:a21eb3abb874 | 140 | pc.printf("%s",inputdata); |
cornetlin | 3:a21eb3abb874 | 141 | char msg[inputdata.size()+1]; |
cornetlin | 3:a21eb3abb874 | 142 | inputdata.copy(msg,inputdata.size()+1); |
cornetlin | 3:a21eb3abb874 | 143 | msg[inputdata.size()]='\0'; |
cornetlin | 3:a21eb3abb874 | 144 | int n=strlen(msg); |
cornetlin | 3:a21eb3abb874 | 145 | void *payload = reinterpret_cast<void*>(msg); |
cornetlin | 3:a21eb3abb874 | 146 | size_t payload_len = n; |
JunkoNakajima |
0:8d0ccf7acecd | 147 | |
cornetlin | 3:a21eb3abb874 | 148 | printf("publish to: %s %d %s\r\n", MQTT_HOST, MQTT_PORT, MQTT_TOPIC); |
cornetlin | 1:5a9fdc848911 | 149 | |
cornetlin | 3:a21eb3abb874 | 150 | if (client.publish(MQTT_TOPIC, payload, n) < 0) { |
cornetlin | 3:a21eb3abb874 | 151 | printf("failed to publish MQTT message"); |
cornetlin | 3:a21eb3abb874 | 152 | } |
cornetlin | 3:a21eb3abb874 | 153 | } |
cornetlin | 3:a21eb3abb874 | 154 | } |
cornetlin | 3:a21eb3abb874 | 155 | |
cornetlin | 3:a21eb3abb874 | 156 | } |
cornetlin | 3:a21eb3abb874 | 157 | |
cornetlin | 3:a21eb3abb874 | 158 | |
JunkoNakajima |
0:8d0ccf7acecd | 159 | |
cornetlin | 1:5a9fdc848911 | 160 | // net.disconnect(); |
JunkoNakajima |
0:8d0ccf7acecd | 161 | |
cornetlin | 3:a21eb3abb874 | 162 | } |