MQTT-STM32

Dependencies:   MbedJSONValue wifi-ism43362 LSM6DSL HTS221 MQTT

Committer:
jingege
Date:
Wed Sep 23 09:12:20 2020 +0000
Revision:
0:775536f6b40b
stm32-MQTT

Who changed what in which revision?

UserRevisionLine numberNew 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 }