MQTT-STM32
Dependencies: MbedJSONValue wifi-ism43362 LSM6DSL HTS221 MQTT
main.cpp
- Committer:
- jingege
- Date:
- 2020-09-23
- Revision:
- 0:775536f6b40b
File content as of revision 0:775536f6b40b:
#include "mbed.h"
#include <string>
#include "ISM43362Interface.h"
#include "LSM6DSLSensor.h"
#include "HTS221Sensor.h"
#include "MQTTNetwork.h"
#include "MQTTClient.h"
#include "MQTTmbed.h"
#include "MbedJSONValue.h"
char* hostname = "192.168.22.165";
int port = 1883;
#define QOS MQTT::QOS0
DigitalOut led(LED3);
int main()
{
Serial pc(SERIAL_TX, SERIAL_RX);
char exchangebuf[50];
ThisThread::sleep_for(10000);
printf("start!");
DevI2C I2C(PB_11, PB_10);
LSM6DSLSensor Lsm(&I2C, 0xD4);
HTS221Sensor Hts(&I2C, 0xBE);
void* init;
int ret;
ret = Hts.init(init);
if (0 == ret)
{
printf("init_hts succeed!!\n ");
}
else
{
printf("init_hts failed!!\n");
return -1;
}
ret = Hts.enable();
if (0 == ret)
{
printf("enable_hts succeed!!\n ");
}
else
{
printf("enable_hts failed!!\n");
return -1;
}
ret = Lsm.init(init);
if(0 == ret)
{
printf("init succeed!!\n");
}
else
{
printf("init failed!!\n");
return -1;
}
ret = Lsm.enable_x();
if(0 == ret)
{
printf("enable succeed!!\n");
}
else
{
printf("enable failed!!\n");
return -1;
}
ret = Lsm.set_x_odr(400.0);
if(0 == ret)
{
printf("set_x_odr succeed!!\n");
}
else
{
printf("set_x_odr failed!!\n");
return -1;
}
ret = Lsm.set_x_fs(8.0);
if(0 == ret)
{
printf("set_x_fs succeed!!\n");
}
else
{
printf("set_x_fs failed!!\n");
return -1;
}
ISM43362Interface net(PC_12,PC_11,PC_10,PE_0,PE_8,PE_1,PB_13);
ret = net.connect("Google_2.4G","abcd1234",NSAPI_SECURITY_NONE);
if(0 == ret)
{
printf("connect wifi succeed ip = %s\n",net.get_ip_address());
}
else
{
printf("connect wifi failed!!!");
return -1;
}
NetworkStack* network = &net;
MQTTNetwork mqttNetwork(network);
MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);
ret = mqttNetwork.connect(hostname, port);
client.connect();
if (0 == ret)
{
printf("connect succeed!!\n");
}
else
{
printf("connect failed!!\n");
}
MQTT::Message message;
message.qos = QOS;
message.retained = false;
message.dup = false;
string str;
while(1)
{
memset(exchangebuf, 0, sizeof(exchangebuf));
float hum,temp;
ret = Hts.get_temperature(&temp);
if(ret != 0)
{
printf("get_temperature failed!\n");
}
MbedJSONValue value;
value["temp"] = (int)temp;
str = value.serialize();
message.payload = (void*)str.c_str();
message.payloadlen = str.size();
int rc = client.publish("temp", message);
printf("rc ==== %d",rc);
ret = Hts.get_humidity(&hum);
if(ret != 0)
{
printf("get_humidity failed!\n");
}
printf("hum = %.2f temp = %.2f\n", hum, temp);
str.clear();
MbedJSONValue value_hum;
value_hum["hum"] = (int)hum;
str = value_hum.serialize();
message.payload = (void*)str.c_str();
message.payloadlen = str.size();
rc = client.publish("hum", message);
printf("rc ==== %d",rc);
str.clear();
int32_t buf[3];
ret = Lsm.get_x_axes(buf);
if(0 == ret)
{
printf("get_x_axes succeed!!\n");
}
else
{
printf("get_x_axes failed!!\n");
return -1;
}
printf("x = %d y = %d z = %d\n",buf[0]/1000,buf[1]/1000,buf[2]/1000);
MbedJSONValue value_xyz;
value_xyz["x"] = buf[0]/1000;
value_xyz["y"] = buf[1]/1000;
value_xyz["z"] = buf[2]/1000;
str = value_xyz.serialize();
message.payload = (void*)str.c_str();
message.payloadlen = str.size();
rc = client.publish("xyz", message);
ThisThread::sleep_for(10);
}
}