2020_09_25_mqtt
Dependencies: HTS221 VL53L0X BSP_B-L475E-IOT01 MQTT
main.cpp@3:1da698331ec8, 2021-02-23 (annotated)
- Committer:
- PINGTING
- Date:
- Tue Feb 23 11:14:09 2021 +0000
- Revision:
- 3:1da698331ec8
- Parent:
- 2:a21eb3abb874
2021_02_23
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
PINGTING | 3:1da698331ec8 | 1 | /* WiFi+MQTT Example*/ |
JunkoNakajima |
0:8d0ccf7acecd | 2 | |
JunkoNakajima |
0:8d0ccf7acecd | 3 | #include "mbed.h" |
JunkoNakajima |
0:8d0ccf7acecd | 4 | #include "TCPSocket.h" |
JunkoNakajima |
0:8d0ccf7acecd | 5 | #include "wifi-ism43362/ISM43362Interface.h" |
cornetlin | 1:5a9fdc848911 | 6 | #define logMessage printf |
cornetlin | 1:5a9fdc848911 | 7 | #define MQTTCLIENT_QOS2 1 |
cornetlin | 1:5a9fdc848911 | 8 | #include "MQTTNetwork.h" |
cornetlin | 1:5a9fdc848911 | 9 | #include "MQTTmbed.h" |
cornetlin | 1:5a9fdc848911 | 10 | #include "MQTTClient.h" |
cornetlin | 2:a21eb3abb874 | 11 | #include "HTS221Sensor.h" |
PINGTING | 3:1da698331ec8 | 12 | //#define MQTT_HOST "demo.thingsboard.io" |
PINGTING | 3:1da698331ec8 | 13 | #define MQTT_HOST "172.20.10.6" |
cornetlin | 2:a21eb3abb874 | 14 | #define MQTT_PORT 1883 |
PINGTING | 3:1da698331ec8 | 15 | #define MQTT_TOPIC "Voltage" |
cornetlin | 2:a21eb3abb874 | 16 | #include <string> |
PINGTING | 3:1da698331ec8 | 17 | //#include "VL53L0X.h" |
JunkoNakajima |
0:8d0ccf7acecd | 18 | ISM43362Interface net; |
JunkoNakajima |
0:8d0ccf7acecd | 19 | // WiFiInterface *wifi; |
cornetlin | 2:a21eb3abb874 | 20 | Serial pc(USBTX,USBRX); |
cornetlin | 1:5a9fdc848911 | 21 | void messageArrived(MQTT::MessageData& md) |
cornetlin | 1:5a9fdc848911 | 22 | { |
cornetlin | 1:5a9fdc848911 | 23 | MQTT::Message &message = md.message; |
cornetlin | 1:5a9fdc848911 | 24 | logMessage("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id); |
cornetlin | 1:5a9fdc848911 | 25 | logMessage("Payload %.*s\r\n", message.payloadlen, (char*)message.payload); |
cornetlin | 1:5a9fdc848911 | 26 | //++arrivedcount; |
cornetlin | 1:5a9fdc848911 | 27 | } |
cornetlin | 2:a21eb3abb874 | 28 | static DevI2C devI2c(PB_11,PB_10); |
cornetlin | 2:a21eb3abb874 | 29 | static DigitalOut shutdown_pin(PC_6); |
PINGTING | 3:1da698331ec8 | 30 | //static VL53L0X range(&devI2c, &shutdown_pin, PC_7); |
PINGTING | 3:1da698331ec8 | 31 | Serial uart(PA_0, PA_1);//TX,RX |
cornetlin | 1:5a9fdc848911 | 32 | |
cornetlin | 2:a21eb3abb874 | 33 | int idx=0; |
cornetlin | 2:a21eb3abb874 | 34 | std::string inputdata; |
cornetlin | 2:a21eb3abb874 | 35 | char ch1; |
JunkoNakajima |
0:8d0ccf7acecd | 36 | int main(void){ |
cornetlin | 2:a21eb3abb874 | 37 | uart.baud(115200); |
PINGTING | 3:1da698331ec8 | 38 | //range.init_sensor(VL53L0X_DEFAULT_ADDRESS); |
JunkoNakajima |
0:8d0ccf7acecd | 39 | int count = 0; |
JunkoNakajima |
0:8d0ccf7acecd | 40 | |
cornetlin | 1:5a9fdc848911 | 41 | printf("\r\nWiFi+MQTT Example Demo\n"); |
JunkoNakajima |
0:8d0ccf7acecd | 42 | |
JunkoNakajima |
0:8d0ccf7acecd | 43 | // Connect to Wifi |
JunkoNakajima |
0:8d0ccf7acecd | 44 | printf("\nConnecting to %s...\n", MBED_CONF_APP_WIFI_SSID); |
JunkoNakajima |
0:8d0ccf7acecd | 45 | int ret = net.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2); |
JunkoNakajima |
0:8d0ccf7acecd | 46 | if (ret != 0) { |
JunkoNakajima |
0:8d0ccf7acecd | 47 | printf("\nConnection error: %d\n", ret); |
JunkoNakajima |
0:8d0ccf7acecd | 48 | return -1; |
JunkoNakajima |
0:8d0ccf7acecd | 49 | } |
JunkoNakajima |
0:8d0ccf7acecd | 50 | |
JunkoNakajima |
0:8d0ccf7acecd | 51 | printf("Success\n\n"); |
JunkoNakajima |
0:8d0ccf7acecd | 52 | printf("MAC: %s\n", net.get_mac_address()); |
JunkoNakajima |
0:8d0ccf7acecd | 53 | printf("IP: %s\n", net.get_ip_address()); |
JunkoNakajima |
0:8d0ccf7acecd | 54 | printf("Netmask: %s\n", net.get_netmask()); |
JunkoNakajima |
0:8d0ccf7acecd | 55 | printf("Gateway: %s\n", net.get_gateway()); |
JunkoNakajima |
0:8d0ccf7acecd | 56 | printf("RSSI: %d\n\n", net.get_rssi()); |
JunkoNakajima |
0:8d0ccf7acecd | 57 | |
cornetlin | 1:5a9fdc848911 | 58 | printf("\Wifi Example Done,MQTT Example Start\n"); |
cornetlin | 1:5a9fdc848911 | 59 | |
cornetlin | 1:5a9fdc848911 | 60 | // MQTT Example Start |
PINGTING | 3:1da698331ec8 | 61 | //float version = 0.6; |
cornetlin | 1:5a9fdc848911 | 62 | char* publishtopic = "publishtest"; |
cornetlin | 1:5a9fdc848911 | 63 | char* subscribetopic = "subscribtest"; |
cornetlin | 1:5a9fdc848911 | 64 | |
PINGTING | 3:1da698331ec8 | 65 | //logMessage("HelloMQTT: version is %.2f\r\n", version); |
PINGTING | 3:1da698331ec8 | 66 | //char assess_token[] = "uNYseQgqntIrL7q5F2tL"; |
cornetlin | 1:5a9fdc848911 | 67 | NetworkInterface* network = &net; |
cornetlin | 1:5a9fdc848911 | 68 | if (!network) { |
cornetlin | 1:5a9fdc848911 | 69 | return -1; |
cornetlin | 1:5a9fdc848911 | 70 | } |
JunkoNakajima |
0:8d0ccf7acecd | 71 | |
cornetlin | 1:5a9fdc848911 | 72 | MQTTNetwork mqttNetwork(network); |
cornetlin | 1:5a9fdc848911 | 73 | |
cornetlin | 1:5a9fdc848911 | 74 | MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork); |
JunkoNakajima |
0:8d0ccf7acecd | 75 | |
cornetlin | 2:a21eb3abb874 | 76 | const char* hostname = MQTT_HOST; |
cornetlin | 2:a21eb3abb874 | 77 | int port = MQTT_PORT; |
cornetlin | 1:5a9fdc848911 | 78 | logMessage("Connecting to %s:%d\r\n", hostname, port); |
cornetlin | 1:5a9fdc848911 | 79 | int rc = mqttNetwork.connect(hostname, port); |
cornetlin | 1:5a9fdc848911 | 80 | if (rc != 0) |
cornetlin | 1:5a9fdc848911 | 81 | logMessage("rc from TCP connect is %d\r\n", rc); |
JunkoNakajima |
0:8d0ccf7acecd | 82 | |
cornetlin | 1:5a9fdc848911 | 83 | MQTTPacket_connectData data = MQTTPacket_connectData_initializer; |
cornetlin | 2:a21eb3abb874 | 84 | //data.MQTTVersion = 3; |
cornetlin | 1:5a9fdc848911 | 85 | data.clientID.cstring = "mbed-sample"; |
PINGTING | 3:1da698331ec8 | 86 | //data.username.cstring = assess_token; |
cornetlin | 2:a21eb3abb874 | 87 | //data.password.cstring = ""; |
cornetlin | 1:5a9fdc848911 | 88 | if ((rc = client.connect(data)) != 0) |
cornetlin | 1:5a9fdc848911 | 89 | logMessage("rc from MQTT connect is %d\r\n", rc); |
JunkoNakajima |
0:8d0ccf7acecd | 90 | |
cornetlin | 1:5a9fdc848911 | 91 | if ((rc = client.subscribe(publishtopic, MQTT::QOS2, messageArrived)) != 0) |
cornetlin | 1:5a9fdc848911 | 92 | logMessage("rc from MQTT subscribe is %d\r\n", rc); |
cornetlin | 1:5a9fdc848911 | 93 | if ((rc = client.subscribe(subscribetopic, MQTT::QOS2, messageArrived)) != 0) |
cornetlin | 1:5a9fdc848911 | 94 | logMessage("rc from MQTT subscribe is %d\r\n", rc); |
cornetlin | 1:5a9fdc848911 | 95 | |
JunkoNakajima |
0:8d0ccf7acecd | 96 | |
cornetlin | 2:a21eb3abb874 | 97 | |
cornetlin | 2:a21eb3abb874 | 98 | printf("successfully connect!\n\n"); |
cornetlin | 2:a21eb3abb874 | 99 | |
PINGTING | 3:1da698331ec8 | 100 | // Initialize sensors -------------------------------------------------- |
PINGTING | 3:1da698331ec8 | 101 | |
PINGTING | 3:1da698331ec8 | 102 | std::string inputdata; |
cornetlin | 2:a21eb3abb874 | 103 | while (1) { |
PINGTING | 3:1da698331ec8 | 104 | char ch; |
PINGTING | 3:1da698331ec8 | 105 | while (uart.readable()) { |
PINGTING | 3:1da698331ec8 | 106 | ch = uart.getc(); |
PINGTING | 3:1da698331ec8 | 107 | if (ch == 's') { |
PINGTING | 3:1da698331ec8 | 108 | inputdata.clear(); |
PINGTING | 3:1da698331ec8 | 109 | } |
PINGTING | 3:1da698331ec8 | 110 | inputdata += ch; |
PINGTING | 3:1da698331ec8 | 111 | if (ch == '#') { |
PINGTING | 3:1da698331ec8 | 112 | inputdata.erase(0,1); |
PINGTING | 3:1da698331ec8 | 113 | inputdata.erase(inputdata.length()-1,1); |
PINGTING | 3:1da698331ec8 | 114 | pc.printf("%s\r\n",inputdata); |
PINGTING | 3:1da698331ec8 | 115 | char msg[inputdata.size()+1]; |
cornetlin | 2:a21eb3abb874 | 116 | inputdata.copy(msg,inputdata.size()+1); |
cornetlin | 2:a21eb3abb874 | 117 | msg[inputdata.size()]='\0'; |
cornetlin | 2:a21eb3abb874 | 118 | int n=strlen(msg); |
PINGTING | 3:1da698331ec8 | 119 | void *payload = reinterpret_cast<void*>(msg); |
PINGTING | 3:1da698331ec8 | 120 | size_t payload_len = n; |
PINGTING | 3:1da698331ec8 | 121 | //printf("publish to: %s %d %s\r\n", MQTT_HOST, MQTT_PORT,MQTT_TOPIC); |
cornetlin | 1:5a9fdc848911 | 122 | |
PINGTING | 3:1da698331ec8 | 123 | if(client.publish(MQTT_TOPIC, payload, n) < 0) { |
PINGTING | 3:1da698331ec8 | 124 | printf("failed to publish MQTT message"); |
PINGTING | 3:1da698331ec8 | 125 | } |
cornetlin | 2:a21eb3abb874 | 126 | } |
PINGTING | 3:1da698331ec8 | 127 | } |
cornetlin | 2:a21eb3abb874 | 128 | } |
cornetlin | 2:a21eb3abb874 | 129 | |
cornetlin | 2:a21eb3abb874 | 130 | |
JunkoNakajima |
0:8d0ccf7acecd | 131 | |
cornetlin | 1:5a9fdc848911 | 132 | // net.disconnect(); |
JunkoNakajima |
0:8d0ccf7acecd | 133 | |
cornetlin | 2:a21eb3abb874 | 134 | } |