2020_09_25_mqtt

Dependencies:   HTS221 VL53L0X BSP_B-L475E-IOT01 MQTT

main.cpp

Committer:
PINGTING
Date:
2021-02-23
Revision:
3:1da698331ec8
Parent:
2:a21eb3abb874

File content as of revision 3:1da698331ec8:

/* WiFi+MQTT Example*/

#include "mbed.h"
#include "TCPSocket.h"
#include "wifi-ism43362/ISM43362Interface.h"
#define logMessage printf
#define MQTTCLIENT_QOS2 1
#include "MQTTNetwork.h"
#include "MQTTmbed.h"
#include "MQTTClient.h"
#include "HTS221Sensor.h"
//#define MQTT_HOST              "demo.thingsboard.io"
#define MQTT_HOST               "172.20.10.6"
#define MQTT_PORT               1883
#define MQTT_TOPIC              "Voltage"
#include <string>
//#include "VL53L0X.h"
ISM43362Interface net;
// WiFiInterface *wifi;
Serial pc(USBTX,USBRX);
void messageArrived(MQTT::MessageData& md)
{
    MQTT::Message &message = md.message;
    logMessage("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
    logMessage("Payload %.*s\r\n", message.payloadlen, (char*)message.payload);
    //++arrivedcount;
}
static DevI2C devI2c(PB_11,PB_10);
static DigitalOut shutdown_pin(PC_6);
//static VL53L0X range(&devI2c, &shutdown_pin, PC_7);
Serial uart(PA_0, PA_1);//TX,RX

int idx=0;
std::string inputdata;
char ch1;
int main(void){
    uart.baud(115200);
    //range.init_sensor(VL53L0X_DEFAULT_ADDRESS);
    int count = 0;

    printf("\r\nWiFi+MQTT Example Demo\n");

    // Connect to Wifi
    printf("\nConnecting to %s...\n", MBED_CONF_APP_WIFI_SSID);
    int ret = net.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
    if (ret != 0) {
        printf("\nConnection error: %d\n", ret);
        return -1;
    }

    printf("Success\n\n");
    printf("MAC: %s\n", net.get_mac_address());
    printf("IP: %s\n", net.get_ip_address());
    printf("Netmask: %s\n", net.get_netmask());
    printf("Gateway: %s\n", net.get_gateway());
    printf("RSSI: %d\n\n", net.get_rssi());

    printf("\Wifi Example Done,MQTT Example Start\n");
    
    // MQTT Example Start
    //float version = 0.6;
    char* publishtopic = "publishtest";
    char* subscribetopic = "subscribtest";

    //logMessage("HelloMQTT: version is %.2f\r\n", version);
    //char assess_token[] = "uNYseQgqntIrL7q5F2tL";
    NetworkInterface* network = &net;
    if (!network) {
        return -1;
    }

    MQTTNetwork mqttNetwork(network);

    MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);

    const char* hostname = MQTT_HOST;
    int port = MQTT_PORT;
    logMessage("Connecting to %s:%d\r\n", hostname, port);
    int rc = mqttNetwork.connect(hostname, port);
    if (rc != 0)
        logMessage("rc from TCP connect is %d\r\n", rc);

    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
    //data.MQTTVersion = 3;
    data.clientID.cstring = "mbed-sample";
    //data.username.cstring = assess_token;
    //data.password.cstring = "";
    if ((rc = client.connect(data)) != 0)
        logMessage("rc from MQTT connect is %d\r\n", rc);

    if ((rc = client.subscribe(publishtopic, MQTT::QOS2, messageArrived)) != 0)
        logMessage("rc from MQTT subscribe is %d\r\n", rc);
    if ((rc = client.subscribe(subscribetopic, MQTT::QOS2, messageArrived)) != 0)
        logMessage("rc from MQTT subscribe is %d\r\n", rc);
   

    
    printf("successfully connect!\n\n");
    
// Initialize sensors --------------------------------------------------
    
    std::string inputdata;
  while (1) {
      char ch;
      while (uart.readable()) {
     ch = uart.getc();
      if (ch == 's') {
      inputdata.clear();
      }
     inputdata += ch;
     if (ch == '#') {
    inputdata.erase(0,1);
    inputdata.erase(inputdata.length()-1,1);
    pc.printf("%s\r\n",inputdata);
    char msg[inputdata.size()+1];
            inputdata.copy(msg,inputdata.size()+1);
            msg[inputdata.size()]='\0';
            int n=strlen(msg); 
            void *payload = reinterpret_cast<void*>(msg);
            size_t payload_len = n;
            //printf("publish to: %s %d %s\r\n", MQTT_HOST, MQTT_PORT,MQTT_TOPIC);

            if(client.publish(MQTT_TOPIC, payload, n) < 0) {
               printf("failed to publish MQTT message");
            }
        }
   }        
}
        
    

   // net.disconnect();

}