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
Revision 1:e7a545497bca, committed 2017-11-24
- Comitter:
- DuyLionTran
- Date:
- Fri Nov 24 17:49:30 2017 +0000
- Parent:
- 0:24bec4d463a5
- Child:
- 2:61d34bc22590
- Commit message:
- send oke
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
| mbed-os.lib | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Fri Nov 24 11:19:55 2017 +0000
+++ b/main.cpp Fri Nov 24 17:49:30 2017 +0000
@@ -1,11 +1,20 @@
-/*******************************************************************************
+/***************************************************************
* Includes
- *******************************************************************************/
+ ***************************************************************/
#include "mbed.h"
+#include "easy-connect.h"
+#include "MQTTNetwork.h"
+#include "MQTTmbed.h"
+#include "MQTTClient.h"
-/*******************************************************************************
- * Defines
- *******************************************************************************/
+/***************************************************************
+ * 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)
@@ -13,37 +22,153 @@
#define RELAY_1_PIN (D11)
#define RELAY_2_PIN (D12)
-
-/*******************************************************************************
+
+/***************************************************************
* Variables
- *******************************************************************************/
-/* Global Varialbles */
-
-/* Private Variables */
+ ***************************************************************/
+float version = 0.6;
+char* topic = "command";
+char* event = "event";
+const char* hostname = "m11.cloudmqtt.com";
+int port = 16416;
+char* clientID = "Duy";
+char* username = "gbmswwpl";
+char* password = "jZf8eSGw39X4";
+
+int arrivedcount = 0;
+uint32_t lastRead = 0;
+
+uint8_t readVal = 0;
+
+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);
+ ++arrivedcount;
+}
+
+/***************************************************************
+ * Unity functions
+ ***************************************************************/
+/* Definitions */
-/* Structs/Classes */
-AnalogIn sensor_1_value(SENSOR_1_PIN);
-AnalogIn sensor_2_value(SENSOR_2_PIN);
-AnalogIn sensor_3_value(SENSOR_3_PIN);
-AnalogIn sensor_4_value(SENSOR_4_PIN);
-
-DigitalOut relay_1(RELAY_1_PIN);
-DigitalOut relay_2(RELAY_2_PIN);
+/* Declarations */
+void timeoutCallback() {
+ readVal++;
+ char buf[100];
+
+ MQTT::Message msg;
+ sprintf(buf, "{\"Analog Value 1\":\"%d\"}", readVal);
+ msg.qos = MQTT::QOS0;
+ msg.retained = false;
+ msg.dup = false;
+ msg.payload = (void*)buf;
+ msg.payloadlen = strlen(buf)+1;
+ int ret = client.publish(event, msg);
+
+ logMessage("Publish result: %d\r\n", ret);
+}
-DigitalOut led(LED1);
-
-Serial serial(USBTX, USBRX);
-
-/*******************************************************************************
+void yield_thread() {
+ while (true) {
+ if ((uint32_t)(readTime.read_ms() - lastRead) > 5000) {
+ readVal++;
+ char buf[100];
+
+ MQTT::Message msg;
+ sprintf(buf, "{\"Analog Value 1\":\"%d\"}", readVal);
+ msg.qos = MQTT::QOS0;
+ msg.retained = false;
+ msg.dup = false;
+ msg.payload = (void*)buf;
+ msg.payloadlen = strlen(buf)+1;
+ int ret = client.publish(event, msg);
+ logMessage("Publish result: %d\r\n", ret);
+ lastRead = readTime.read_ms();
+ }
+ }
+}
+/***************************************************************
* Main
- *******************************************************************************/
-
-void main() {
+ ***************************************************************/
+int main(int argc, char* argv[]) {
+ serial.baud(115200);
+
+ logMessage("IoT Water Monitor: version is %.2f\r\n", version);
+ network = easy_connect(true);
- serial.baud(115200);
+ if (!network) {
+ logMessage("Failed to connect to the internet\r\n");
+ return ;
+ }
+ MQTTNetwork mqttNetwork(network);
+ MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);
+
+ 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 = clientID;
+ data.username.cstring = username;
+ data.password.cstring = password;
+ if ((rc = client.connect(data)) != 0)
+ logMessage("rc from MQTT connect is %d\r\n", rc);
+
+ if ((rc = client.subscribe(topic, MQTT::QOS0, messageArrived)) != 0)
+ logMessage("rc from MQTT subscribe is %d\r\n", rc);
-
- while(1) {
+ MQTT::Message message;
+
+ char buf[100];
+ sprintf(buf, "Hello from IoT Water Monitor! QoS 0 message from app version %f\r\n", version);
+ message.qos = MQTT::QOS0;
+ message.retained = false;
+ message.dup = false;
+ message.payload = (void*)buf;
+ message.payloadlen = strlen(buf)+1;
+ rc = client.publish(event, message);
+ while (arrivedcount < 1)
+ client.yield(100);
+ logMessage("Version %.2f: finish %d msgs\r\n", version, arrivedcount);
+ thread.start(callback(yield_thread));
+ readTime.start();
+
+ while(true) {
+// client.yield(100);
+ if ((uint32_t)(readTime.read_ms() - lastRead) > 5000) {
+ readVal++;
+ char buf[100];
+
+ MQTT::Message msg;
+ sprintf(buf, "{\"Analog Value 1\":\"%d\"}", readVal);
+ msg.qos = MQTT::QOS0;
+ msg.retained = false;
+ msg.dup = false;
+ msg.payload = (void*)buf;
+ msg.payloadlen = strlen(buf)+1;
+ int ret = client.publish(event, msg);
+
+ logMessage("Publish result: %d\r\n", ret);
+ lastRead = readTime.read_ms();
+ }
}
-}
\ No newline at end of file
+
+}
--- a/mbed-os.lib Fri Nov 24 11:19:55 2017 +0000 +++ b/mbed-os.lib Fri Nov 24 17:49:30 2017 +0000 @@ -1,1 +1,1 @@ -https://github.com/ARMmbed/mbed-os/#34b61d1612aaec2e5d61a8a43c9764bc2fe8aac0 +https://github.com/ARMmbed/mbed-os/#2885c1b41e63158cb6faf5f107cd821ae06ef26c