MQTT and Sensor integration

Dependencies:   X_NUCLEO_IKS01A2

Committer:
ga58bin
Date:
Thu Nov 05 19:07:22 2020 +0000
Revision:
0:0f878e3e5401
Child:
1:ba4c33393a52
Updated for Mbed OS 5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ga58bin 0:0f878e3e5401 1 #include "mbed.h"
ga58bin 0:0f878e3e5401 2
ga58bin 0:0f878e3e5401 3 #include <MQTTClientMbedOs.h>
ga58bin 0:0f878e3e5401 4 #include "SpwfSAInterface.h"
ga58bin 0:0f878e3e5401 5
ga58bin 0:0f878e3e5401 6
ga58bin 0:0f878e3e5401 7 #include "XNucleoIKS01A2.h"
ga58bin 0:0f878e3e5401 8
ga58bin 0:0f878e3e5401 9 #define MQTT_MAX_PACKET_SIZE 250
ga58bin 0:0f878e3e5401 10 #define MQTT_MAX_PAYLOAD_SIZE 300
ga58bin 0:0f878e3e5401 11
ga58bin 0:0f878e3e5401 12 SpwfSAInterface wifi(MBED_CONF_APP_WIFI_TX, MBED_CONF_APP_WIFI_RX);
ga58bin 0:0f878e3e5401 13
ga58bin 0:0f878e3e5401 14 static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5);
ga58bin 0:0f878e3e5401 15 static LSM6DSLSensor *acc_gyro = mems_expansion_board->acc_gyro;
ga58bin 0:0f878e3e5401 16
ga58bin 0:0f878e3e5401 17 int main()
ga58bin 0:0f878e3e5401 18 {
ga58bin 0:0f878e3e5401 19 uint8_t id;
ga58bin 0:0f878e3e5401 20 int16_t axes[3];
ga58bin 0:0f878e3e5401 21 int32_t axes_gyro[3];
ga58bin 0:0f878e3e5401 22 acc_gyro->enable_x();
ga58bin 0:0f878e3e5401 23 acc_gyro->enable_g();
ga58bin 0:0f878e3e5401 24 acc_gyro->read_id(&id);
ga58bin 0:0f878e3e5401 25 acc_gyro->set_x_fs(2.0f);
ga58bin 0:0f878e3e5401 26
ga58bin 0:0f878e3e5401 27 printf("MQTT Integration\n\n");
ga58bin 0:0f878e3e5401 28
ga58bin 0:0f878e3e5401 29 printf("\nConnecting to %s...\n", MBED_CONF_APP_WIFI_SSID);
ga58bin 0:0f878e3e5401 30 int ret = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
ga58bin 0:0f878e3e5401 31 if (ret != 0) {
ga58bin 0:0f878e3e5401 32 printf("\nConnection error\n");
ga58bin 0:0f878e3e5401 33 return -1;
ga58bin 0:0f878e3e5401 34 }
ga58bin 0:0f878e3e5401 35
ga58bin 0:0f878e3e5401 36 printf("Success\n\n");
ga58bin 0:0f878e3e5401 37
ga58bin 0:0f878e3e5401 38
ga58bin 0:0f878e3e5401 39 //NetworkInterface *net = NetworkInterface::get_default_instance();
ga58bin 0:0f878e3e5401 40 TCPSocket socket;
ga58bin 0:0f878e3e5401 41 MQTTClient client(&socket);
ga58bin 0:0f878e3e5401 42 socket.open(&wifi);
ga58bin 0:0f878e3e5401 43 int rc = socket.connect("mqtt.eclipse.org", 1883);
ga58bin 0:0f878e3e5401 44
ga58bin 0:0f878e3e5401 45 if (rc == 0)
ga58bin 0:0f878e3e5401 46 printf("Connection Successful");
ga58bin 0:0f878e3e5401 47 else
ga58bin 0:0f878e3e5401 48 printf("Connection Failed");
ga58bin 0:0f878e3e5401 49
ga58bin 0:0f878e3e5401 50 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
ga58bin 0:0f878e3e5401 51
ga58bin 0:0f878e3e5401 52 data.MQTTVersion = 4;
ga58bin 0:0f878e3e5401 53 data.struct_version=0;
ga58bin 0:0f878e3e5401 54 data.clientID.cstring = "clientId-Scf7TcRtbgasdseg";
ga58bin 0:0f878e3e5401 55 data.username.cstring = "bob";
ga58bin 0:0f878e3e5401 56 data.password.cstring = "123";
ga58bin 0:0f878e3e5401 57
ga58bin 0:0f878e3e5401 58 rc = client.connect(data);
ga58bin 0:0f878e3e5401 59
ga58bin 0:0f878e3e5401 60 if (rc == 0)
ga58bin 0:0f878e3e5401 61 printf("Client Connection Successful");
ga58bin 0:0f878e3e5401 62 else
ga58bin 0:0f878e3e5401 63 printf("Client Connection Failed");
ga58bin 0:0f878e3e5401 64
ga58bin 0:0f878e3e5401 65 while(1)
ga58bin 0:0f878e3e5401 66 {
ga58bin 0:0f878e3e5401 67 int con = client.isConnected();
ga58bin 0:0f878e3e5401 68 if (con == false)
ga58bin 0:0f878e3e5401 69 client.connect(data);
ga58bin 0:0f878e3e5401 70
ga58bin 0:0f878e3e5401 71 acc_gyro->get_x_axes_raw(axes);
ga58bin 0:0f878e3e5401 72 MQTT::Message message;
ga58bin 0:0f878e3e5401 73 char* pubTopic = "SLG/ACC";
ga58bin 0:0f878e3e5401 74 char buf[MQTT_MAX_PAYLOAD_SIZE];
ga58bin 0:0f878e3e5401 75 sprintf(buf,"%d,%d,%d",axes[0],axes[1],axes[2]);
ga58bin 0:0f878e3e5401 76 message.qos = MQTT::QOS0;
ga58bin 0:0f878e3e5401 77 message.retained = false;
ga58bin 0:0f878e3e5401 78 message.dup = false;
ga58bin 0:0f878e3e5401 79 message.payload = (void*)buf;
ga58bin 0:0f878e3e5401 80 message.payloadlen = strlen(buf);
ga58bin 0:0f878e3e5401 81 client.publish(pubTopic, message);
ga58bin 0:0f878e3e5401 82 printf("%d,%d,%d \n",axes[0],axes[1],axes[2]);
ga58bin 0:0f878e3e5401 83 }
ga58bin 0:0f878e3e5401 84
ga58bin 0:0f878e3e5401 85
ga58bin 0:0f878e3e5401 86
ga58bin 0:0f878e3e5401 87
ga58bin 0:0f878e3e5401 88 wifi.disconnect();
ga58bin 0:0f878e3e5401 89
ga58bin 0:0f878e3e5401 90 printf("\nDone\n");
ga58bin 0:0f878e3e5401 91 }