Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: easy-connect-v16 Watchdog FP MQTTPacket RecordType-v-16 watersenor_and_temp_code
main.cpp
- Committer:
- DuyLionTran
- Date:
- 2017-11-28
- Revision:
- 5:7f353f2b63b9
- Parent:
- 3:1bc26dfb6d35
- Child:
- 6:3efc470a9f35
File content as of revision 5:7f353f2b63b9:
/***************************************************************
* 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.86;
char server[] = ORG ".messaging.internetofthings.ibmcloud.com";
char topicCMD[] = "iot-2/cmd/test/fmt/json";
char topicEvent[] = "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);
if ((rc = client.subscribe(topicCMD, MQTT::QOS0, messageArrived)) != 0)
logMessage("rc from MQTT subscribe is %d\r\n", rc);
// char* payload = "{\"d\":{\"Name\":\"PROEVN\",\"Firmware Version\":\"0.86\"}}";
char greetingMessage[100];
sprintf(greetingMessage, "{\"d\":{\"Device ID\":\"PROEVN\",\"Firmware Version\":\"%f\"}}", firmwareVersion);
printf("Sending payload: %s\r\n", greetingMessage);
if (!MQTT_publish((char *)greetingMessage)) {
printf("Publish ok\r\n");
}
else {
printf("Publish failed\r\n");
}
readTime.start();
wait(2);
// thread.start(callback(clientYield));
// timer.attach(&publish, 2);
uint8_t counter = 0;
uint16_t cmdID = 0;
while(true) {
if ((uint32_t)(readTime.read() - lastRead) > 10) {
counter++;
char payload[100];
sprintf(payload, "{\"d\":{\"Type\":\"1\",\"Command ID\":\"%d\",\"ADC0\":\"%d\",\"ADC1\":\"%d\"}}", cmdID, counter, counter++);
printf("MQTT publish %s\r\n", payload);
if (!MQTT_publish((char *)payload)) {
printf("Publish ok\r\n");
cmdID++;
}
else {
printf("Publish failed\r\n");
}
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(topicEvent, msg);
}