MQTT-STM32
Dependencies: MbedJSONValue wifi-ism43362 LSM6DSL HTS221 MQTT
main.cpp@0:775536f6b40b, 2020-09-23 (annotated)
- Committer:
- jingege
- Date:
- Wed Sep 23 09:12:20 2020 +0000
- Revision:
- 0:775536f6b40b
stm32-MQTT
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| jingege | 0:775536f6b40b | 1 | #include "mbed.h" |
| jingege | 0:775536f6b40b | 2 | #include <string> |
| jingege | 0:775536f6b40b | 3 | #include "ISM43362Interface.h" |
| jingege | 0:775536f6b40b | 4 | #include "LSM6DSLSensor.h" |
| jingege | 0:775536f6b40b | 5 | #include "HTS221Sensor.h" |
| jingege | 0:775536f6b40b | 6 | #include "MQTTNetwork.h" |
| jingege | 0:775536f6b40b | 7 | #include "MQTTClient.h" |
| jingege | 0:775536f6b40b | 8 | #include "MQTTmbed.h" |
| jingege | 0:775536f6b40b | 9 | #include "MbedJSONValue.h" |
| jingege | 0:775536f6b40b | 10 | char* hostname = "192.168.22.165"; |
| jingege | 0:775536f6b40b | 11 | int port = 1883; |
| jingege | 0:775536f6b40b | 12 | #define QOS MQTT::QOS0 |
| jingege | 0:775536f6b40b | 13 | DigitalOut led(LED3); |
| jingege | 0:775536f6b40b | 14 | int main() |
| jingege | 0:775536f6b40b | 15 | { |
| jingege | 0:775536f6b40b | 16 | Serial pc(SERIAL_TX, SERIAL_RX); |
| jingege | 0:775536f6b40b | 17 | char exchangebuf[50]; |
| jingege | 0:775536f6b40b | 18 | ThisThread::sleep_for(10000); |
| jingege | 0:775536f6b40b | 19 | printf("start!"); |
| jingege | 0:775536f6b40b | 20 | DevI2C I2C(PB_11, PB_10); |
| jingege | 0:775536f6b40b | 21 | LSM6DSLSensor Lsm(&I2C, 0xD4); |
| jingege | 0:775536f6b40b | 22 | HTS221Sensor Hts(&I2C, 0xBE); |
| jingege | 0:775536f6b40b | 23 | void* init; |
| jingege | 0:775536f6b40b | 24 | int ret; |
| jingege | 0:775536f6b40b | 25 | ret = Hts.init(init); |
| jingege | 0:775536f6b40b | 26 | if (0 == ret) |
| jingege | 0:775536f6b40b | 27 | { |
| jingege | 0:775536f6b40b | 28 | printf("init_hts succeed!!\n "); |
| jingege | 0:775536f6b40b | 29 | } |
| jingege | 0:775536f6b40b | 30 | else |
| jingege | 0:775536f6b40b | 31 | { |
| jingege | 0:775536f6b40b | 32 | printf("init_hts failed!!\n"); |
| jingege | 0:775536f6b40b | 33 | return -1; |
| jingege | 0:775536f6b40b | 34 | } |
| jingege | 0:775536f6b40b | 35 | ret = Hts.enable(); |
| jingege | 0:775536f6b40b | 36 | if (0 == ret) |
| jingege | 0:775536f6b40b | 37 | { |
| jingege | 0:775536f6b40b | 38 | printf("enable_hts succeed!!\n "); |
| jingege | 0:775536f6b40b | 39 | } |
| jingege | 0:775536f6b40b | 40 | else |
| jingege | 0:775536f6b40b | 41 | { |
| jingege | 0:775536f6b40b | 42 | printf("enable_hts failed!!\n"); |
| jingege | 0:775536f6b40b | 43 | return -1; |
| jingege | 0:775536f6b40b | 44 | } |
| jingege | 0:775536f6b40b | 45 | ret = Lsm.init(init); |
| jingege | 0:775536f6b40b | 46 | if(0 == ret) |
| jingege | 0:775536f6b40b | 47 | { |
| jingege | 0:775536f6b40b | 48 | printf("init succeed!!\n"); |
| jingege | 0:775536f6b40b | 49 | } |
| jingege | 0:775536f6b40b | 50 | else |
| jingege | 0:775536f6b40b | 51 | { |
| jingege | 0:775536f6b40b | 52 | printf("init failed!!\n"); |
| jingege | 0:775536f6b40b | 53 | return -1; |
| jingege | 0:775536f6b40b | 54 | } |
| jingege | 0:775536f6b40b | 55 | ret = Lsm.enable_x(); |
| jingege | 0:775536f6b40b | 56 | if(0 == ret) |
| jingege | 0:775536f6b40b | 57 | { |
| jingege | 0:775536f6b40b | 58 | printf("enable succeed!!\n"); |
| jingege | 0:775536f6b40b | 59 | } |
| jingege | 0:775536f6b40b | 60 | else |
| jingege | 0:775536f6b40b | 61 | { |
| jingege | 0:775536f6b40b | 62 | printf("enable failed!!\n"); |
| jingege | 0:775536f6b40b | 63 | return -1; |
| jingege | 0:775536f6b40b | 64 | } |
| jingege | 0:775536f6b40b | 65 | ret = Lsm.set_x_odr(400.0); |
| jingege | 0:775536f6b40b | 66 | if(0 == ret) |
| jingege | 0:775536f6b40b | 67 | { |
| jingege | 0:775536f6b40b | 68 | printf("set_x_odr succeed!!\n"); |
| jingege | 0:775536f6b40b | 69 | } |
| jingege | 0:775536f6b40b | 70 | else |
| jingege | 0:775536f6b40b | 71 | { |
| jingege | 0:775536f6b40b | 72 | printf("set_x_odr failed!!\n"); |
| jingege | 0:775536f6b40b | 73 | return -1; |
| jingege | 0:775536f6b40b | 74 | } |
| jingege | 0:775536f6b40b | 75 | ret = Lsm.set_x_fs(8.0); |
| jingege | 0:775536f6b40b | 76 | if(0 == ret) |
| jingege | 0:775536f6b40b | 77 | { |
| jingege | 0:775536f6b40b | 78 | printf("set_x_fs succeed!!\n"); |
| jingege | 0:775536f6b40b | 79 | } |
| jingege | 0:775536f6b40b | 80 | else |
| jingege | 0:775536f6b40b | 81 | { |
| jingege | 0:775536f6b40b | 82 | printf("set_x_fs failed!!\n"); |
| jingege | 0:775536f6b40b | 83 | return -1; |
| jingege | 0:775536f6b40b | 84 | } |
| jingege | 0:775536f6b40b | 85 | ISM43362Interface net(PC_12,PC_11,PC_10,PE_0,PE_8,PE_1,PB_13); |
| jingege | 0:775536f6b40b | 86 | ret = net.connect("Google_2.4G","abcd1234",NSAPI_SECURITY_NONE); |
| jingege | 0:775536f6b40b | 87 | if(0 == ret) |
| jingege | 0:775536f6b40b | 88 | { |
| jingege | 0:775536f6b40b | 89 | printf("connect wifi succeed ip = %s\n",net.get_ip_address()); |
| jingege | 0:775536f6b40b | 90 | } |
| jingege | 0:775536f6b40b | 91 | else |
| jingege | 0:775536f6b40b | 92 | { |
| jingege | 0:775536f6b40b | 93 | printf("connect wifi failed!!!"); |
| jingege | 0:775536f6b40b | 94 | return -1; |
| jingege | 0:775536f6b40b | 95 | } |
| jingege | 0:775536f6b40b | 96 | NetworkStack* network = &net; |
| jingege | 0:775536f6b40b | 97 | MQTTNetwork mqttNetwork(network); |
| jingege | 0:775536f6b40b | 98 | MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork); |
| jingege | 0:775536f6b40b | 99 | ret = mqttNetwork.connect(hostname, port); |
| jingege | 0:775536f6b40b | 100 | client.connect(); |
| jingege | 0:775536f6b40b | 101 | if (0 == ret) |
| jingege | 0:775536f6b40b | 102 | { |
| jingege | 0:775536f6b40b | 103 | printf("connect succeed!!\n"); |
| jingege | 0:775536f6b40b | 104 | } |
| jingege | 0:775536f6b40b | 105 | else |
| jingege | 0:775536f6b40b | 106 | { |
| jingege | 0:775536f6b40b | 107 | printf("connect failed!!\n"); |
| jingege | 0:775536f6b40b | 108 | } |
| jingege | 0:775536f6b40b | 109 | MQTT::Message message; |
| jingege | 0:775536f6b40b | 110 | message.qos = QOS; |
| jingege | 0:775536f6b40b | 111 | message.retained = false; |
| jingege | 0:775536f6b40b | 112 | message.dup = false; |
| jingege | 0:775536f6b40b | 113 | string str; |
| jingege | 0:775536f6b40b | 114 | while(1) |
| jingege | 0:775536f6b40b | 115 | { |
| jingege | 0:775536f6b40b | 116 | memset(exchangebuf, 0, sizeof(exchangebuf)); |
| jingege | 0:775536f6b40b | 117 | float hum,temp; |
| jingege | 0:775536f6b40b | 118 | ret = Hts.get_temperature(&temp); |
| jingege | 0:775536f6b40b | 119 | if(ret != 0) |
| jingege | 0:775536f6b40b | 120 | { |
| jingege | 0:775536f6b40b | 121 | printf("get_temperature failed!\n"); |
| jingege | 0:775536f6b40b | 122 | } |
| jingege | 0:775536f6b40b | 123 | MbedJSONValue value; |
| jingege | 0:775536f6b40b | 124 | value["temp"] = (int)temp; |
| jingege | 0:775536f6b40b | 125 | str = value.serialize(); |
| jingege | 0:775536f6b40b | 126 | message.payload = (void*)str.c_str(); |
| jingege | 0:775536f6b40b | 127 | message.payloadlen = str.size(); |
| jingege | 0:775536f6b40b | 128 | int rc = client.publish("temp", message); |
| jingege | 0:775536f6b40b | 129 | printf("rc ==== %d",rc); |
| jingege | 0:775536f6b40b | 130 | ret = Hts.get_humidity(&hum); |
| jingege | 0:775536f6b40b | 131 | if(ret != 0) |
| jingege | 0:775536f6b40b | 132 | { |
| jingege | 0:775536f6b40b | 133 | printf("get_humidity failed!\n"); |
| jingege | 0:775536f6b40b | 134 | } |
| jingege | 0:775536f6b40b | 135 | printf("hum = %.2f temp = %.2f\n", hum, temp); |
| jingege | 0:775536f6b40b | 136 | str.clear(); |
| jingege | 0:775536f6b40b | 137 | MbedJSONValue value_hum; |
| jingege | 0:775536f6b40b | 138 | value_hum["hum"] = (int)hum; |
| jingege | 0:775536f6b40b | 139 | str = value_hum.serialize(); |
| jingege | 0:775536f6b40b | 140 | message.payload = (void*)str.c_str(); |
| jingege | 0:775536f6b40b | 141 | message.payloadlen = str.size(); |
| jingege | 0:775536f6b40b | 142 | rc = client.publish("hum", message); |
| jingege | 0:775536f6b40b | 143 | printf("rc ==== %d",rc); |
| jingege | 0:775536f6b40b | 144 | str.clear(); |
| jingege | 0:775536f6b40b | 145 | int32_t buf[3]; |
| jingege | 0:775536f6b40b | 146 | ret = Lsm.get_x_axes(buf); |
| jingege | 0:775536f6b40b | 147 | if(0 == ret) |
| jingege | 0:775536f6b40b | 148 | { |
| jingege | 0:775536f6b40b | 149 | printf("get_x_axes succeed!!\n"); |
| jingege | 0:775536f6b40b | 150 | } |
| jingege | 0:775536f6b40b | 151 | else |
| jingege | 0:775536f6b40b | 152 | { |
| jingege | 0:775536f6b40b | 153 | printf("get_x_axes failed!!\n"); |
| jingege | 0:775536f6b40b | 154 | return -1; |
| jingege | 0:775536f6b40b | 155 | } |
| jingege | 0:775536f6b40b | 156 | printf("x = %d y = %d z = %d\n",buf[0]/1000,buf[1]/1000,buf[2]/1000); |
| jingege | 0:775536f6b40b | 157 | MbedJSONValue value_xyz; |
| jingege | 0:775536f6b40b | 158 | value_xyz["x"] = buf[0]/1000; |
| jingege | 0:775536f6b40b | 159 | value_xyz["y"] = buf[1]/1000; |
| jingege | 0:775536f6b40b | 160 | value_xyz["z"] = buf[2]/1000; |
| jingege | 0:775536f6b40b | 161 | str = value_xyz.serialize(); |
| jingege | 0:775536f6b40b | 162 | message.payload = (void*)str.c_str(); |
| jingege | 0:775536f6b40b | 163 | message.payloadlen = str.size(); |
| jingege | 0:775536f6b40b | 164 | rc = client.publish("xyz", message); |
| jingege | 0:775536f6b40b | 165 | ThisThread::sleep_for(10); |
| jingege | 0:775536f6b40b | 166 | } |
| jingege | 0:775536f6b40b | 167 | } |