Duy tran / Mbed OS iot_water_monitor_v2

Dependencies:   easy-connect-v16 Watchdog FP MQTTPacket RecordType-v-16 watersenor_and_temp_code

main.cpp

Committer:
DuyLionTran
Date:
2017-11-28
Revision:
3:1bc26dfb6d35
Parent:
2:61d34bc22590
Child:
5:7f353f2b63b9

File content as of revision 3:1bc26dfb6d35:

/***************************************************************
 * Includes
 ***************************************************************/
#include "mbed.h"
#include "easy-connect.h"
#include "MQTTNetwork.h"
#include "MQTTmbed.h"
#include "MQTTClient.h"
#include "string.h"

/***************************************************************
 * Definitions
 ***************************************************************/
#define logMessage printf
#define MQTTCLIENT_QOS2 (0)
#define MQTT_OK         (0)
#define MQTT_FAIL       (-1)
 
#define SENSOR_1_PIN  (A0)
#define SENSOR_2_PIN  (A1)
#define SENSOR_3_PIN  (A3)
#define SENSOR_4_PIN  (A4)

#define RELAY_1_PIN   (D11)
#define RELAY_2_PIN   (D12)

#define ORG           "a4nvkh"
#define DEVICE_TYPE   "Nucleo_8266"
#define DEVICE_ID     "PROEVN"
#define TOKEN         "PROEVN2017"

/***************************************************************
 * Variables
 ***************************************************************/
float firmwareVersion = 0.85;
//char* topic = "command";
char* event = "event";
const char* hostname = "m11.cloudmqtt.com";
int port = 16416;
char* clientID = "Duy";
char* username = "gbmswwpl";
char* password = "jZf8eSGw39X4";

char server[]     = ORG ".messaging.internetofthings.ibmcloud.com";
char topic[]      = "iot-2/evt/status/fmt/json";
char authMethod[] = "use-token-auth";
char token[]      = TOKEN;
char clientId[]   = "d:" ORG ":" DEVICE_TYPE ":" DEVICE_ID;
int  ibmPort      = 1883;

int arrivedcount = 0;
uint32_t lastRead = 0;
uint32_t timer_last_read = 0;

uint8_t readVal1 = 0, readVal2 = 7;;

Timer  readTime;
Thread thread;
Serial serial(USBTX, USBRX);

/***************************************************************
 * Structs/Classess
 ***************************************************************/
NetworkInterface* network = easy_connect(true);
MQTTNetwork mqttNetwork(network);
MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);

/***************************************************************
 * Callbacks
 ***************************************************************/
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);
}

/***************************************************************
 * Unity function definitions
 ***************************************************************/
int MQTT_publish(char *sendMessage);
void clientYield();


/***************************************************************
 * Main
 ***************************************************************/
void main(int argc, char* argv[]) {
    serial.baud(115200);
    
    logMessage("IoT Water Monitor project, firmware version is %.2f\r\n", firmwareVersion);
    
    if (!network) {
        logMessage("Failed to connect to the internet\r\n");
        return ;
    }
    
    logMessage("Connecting to %s:%d\r\n", server, ibmPort);
    int rc = mqttNetwork.connect(server, ibmPort);
    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 = clientId;
    data.username.cstring = authMethod;
    data.password.cstring = token;
    
    if ((rc = client.connect(data)) != 0)
        logMessage("rc from MQTT connect is %d\r\n", rc);
    
    char* payload = "{\"d\":{\"Name\":\"PROEVN\",\"Firmware Version\":\"0.86\"}}";    
    
    printf("Sending payload: %s\r\n", payload);
    if (!MQTT_publish(payload)) {
        printf("Publish ok\r\n");
    }    
    else {
        printf("Publish failed\r\n");
    }

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


    readTime.start();
    
    
    
//    thread.start(callback(clientYield));
//    timer.attach(&publish, 2);

        
    while(true) {  
        
//        if ((uint32_t)(readTime.read() - lastRead) > 3) {
//            printf("MQTT publish\r\n");
//            int ret = MQTT_publish("Hello from STM32_pew_pew\r\n");
//            printf("Public result %d\r\n", ret);
//            lastRead = readTime.read();
//        }
//        client.yield(100);
    
    }
        
}

/***************************************************************
 * Unity function declarations
 ***************************************************************/
int MQTT_publish(char *sendMessage) {
    
    MQTT::Message msg;
    msg.qos = MQTT::QOS0;
    msg.retained = false;
    msg.dup = false;
    msg.payload = sendMessage;
    msg.payloadlen = strlen(sendMessage) + 1;

    return client.publish(topic, msg);
           
}