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: MbedJSONValue MQTT
Revision 6:cd4d7e943f96, committed 2019-12-12
- Comitter:
- zixuanlim
- Date:
- Thu Dec 12 02:18:11 2019 +0000
- Parent:
- 5:9b664d736a6a
- Commit message:
- Commit for testing again in local....
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 9b664d736a6a -r cd4d7e943f96 main.cpp
--- a/main.cpp Wed Dec 11 09:52:56 2019 +0000
+++ b/main.cpp Thu Dec 12 02:18:11 2019 +0000
@@ -9,17 +9,22 @@
#define RELAY_TIMEOUT 1
+#define DEVICE_MAC "1f00000001000000"
+#define SOFTWARE_VERSION "0.9.0"
+#define BROKER_URL "ec2-3-0-92-18.ap-southeast-1.compute.amazonaws.com"
+#define BROKER_PORT 1883
+
#if (defined(TARGET_DISCO_L475VG_IOT01A) || defined(TARGET_DISCO_F413ZH))
#include "ISM43362Interface.h"
-//ISM43362Interface _Wifi(MBED_CONF_APP_WIFI_SPI_MOSI, MBED_CONF_APP_WIFI_SPI_MISO, MBED_CONF_APP_WIFI_SPI_SCLK, MBED_CONF_APP_WIFI_SPI_NSS, MBED_CONF_APP_WIFI_RESET, MBED_CONF_APP_WIFI_DATAREADY, MBED_CONF_APP_WIFI_WAKEUP, false);
-ISM43362Interface _Wifi(false);
+//ISM43362Interface _wifi(MBED_CONF_APP_WIFI_SPI_MOSI, MBED_CONF_APP_WIFI_SPI_MISO, MBED_CONF_APP_WIFI_SPI_SCLK, MBED_CONF_APP_WIFI_SPI_NSS, MBED_CONF_APP_WIFI_RESET, MBED_CONF_APP_WIFI_DATAREADY, MBED_CONF_APP_WIFI_WAKEUP, false);
+ISM43362Interface _wifi(false);
//
//#else // External WiFi modules
//
//#if MBED_CONF_APP_WIFI_SHIELD == WIFI_IDW0XX1
//#include "SpwfSAInterface.h"
-//SpwfSAInterface _Wifi(MBED_CONF_APP_WIFI_TX, MBED_CONF_APP_WIFI_RX);
+//SpwfSAInterface _wifi(MBED_CONF_APP_WIFI_TX, MBED_CONF_APP_WIFI_RX);
//
//#endif // MBED_CONF_APP_WIFI_SHIELD == WIFI_IDW0XX1
@@ -40,6 +45,7 @@
Thread _dioManagerThread;
Thread _wifiManagerThread;
+Thread _mqttClientThread;
int _currentRelayTimeout = RELAY_TIMEOUT;
@@ -59,6 +65,8 @@
int _isWifiLedOn = 0;
+MQTT::Client<MQTTNetwork, Countdown>* _mqttClient;
+
void OnRelay()
{
//_relayLed = 1;
@@ -116,35 +124,105 @@
}
}
+int arrivedcount = 0;
+
+void messageArrived(MQTT::MessageData& md)
+{
+ MQTT::Message &message = md.message;
+ char* payload = (char*)message.payload;
+ printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
+ printf("Payload %.*s\r\n", message.payloadlen, payload);
+ arrivedcount++;
+
+ MQTT::Message newMessage;
+ // QoS 0
+ char buf[100];
+ sprintf(buf, "Bello From another side! QoS 0 newMessage from app version %s\r\n", SOFTWARE_VERSION);
+ newMessage.qos = MQTT::QOS0;
+ newMessage.retained = false;
+ newMessage.dup = false;
+ newMessage.payload = (void*)buf;
+ newMessage.payloadlen = strlen(buf)+1;
+ _mqttClient->publish("testing123", newMessage);
+
+}
+
+void ConnectBroker(NetworkInterface *net)
+{
+ MQTTNetwork mqttNetwork(net);
+ char* topic = "testing123";
+
+ MQTT::Client<MQTTNetwork, Countdown> client (mqttNetwork);
+
+ _mqttClient = &client;
+
+ int rc = mqttNetwork.connect(BROKER_URL, BROKER_PORT);
+ if (rc != 0)
+ printf("rc from TCP connect is %d\r\n", rc);
+
+ MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
+ data.MQTTVersion = 3;
+ data.clientID.cstring = DEVICE_MAC;
+ data.username.cstring = DEVICE_MAC;
+ data.password.cstring = DEVICE_MAC;
+
+ if ((rc = _mqttClient->connect(data)) != 0)
+ printf("rc from MQTT connect is %d\r\n", rc);
+
+ if ((rc = _mqttClient->subscribe(topic, MQTT::QOS2, messageArrived)) != 0)
+ printf("rc from MQTT subscribe is %d\r\n", rc);
+
+ MQTT::Message message;
+
+ // QoS 0
+ char buf[100];
+ sprintf(buf, "Hello World! QoS 0 message from app version %s\r\n", SOFTWARE_VERSION);
+ message.qos = MQTT::QOS0;
+ message.retained = false;
+ message.dup = false;
+ message.payload = (void*)buf;
+ message.payloadlen = strlen(buf)+1;
+ rc = _mqttClient->publish(topic, message);
+ while (arrivedcount < 1)
+ _mqttClient->yield(100);
+
+ // QoS 1
+ sprintf(buf, "Hello World! QoS 1 message from app version %s\r\n", SOFTWARE_VERSION);
+ message.qos = MQTT::QOS1;
+ message.payloadlen = strlen(buf)+1;
+ rc = _mqttClient->publish(topic, message);
+ while (arrivedcount < 2)
+ _mqttClient->yield(100);
+
+ // QoS 2
+ sprintf(buf, "Hello World! QoS 2 message from app version %s\r\n", SOFTWARE_VERSION);
+ message.qos = MQTT::QOS2;
+ message.payloadlen = strlen(buf)+1;
+ rc = _mqttClient->publish(topic, message);
+
+ while (arrivedcount < 3)
+ _mqttClient->yield(100);
+
+ while(true)
+ {
+ _mqttClient->yield(100);
+ }
+}
void ConnectWifi()
{
- do
- {
- if(!_isWifiConnected)
- {
- _Wifi.disconnect();
-
- int ret = 0;
- do
- {
- ret = _Wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
- if(ret != 0)
- {
- thread_sleep_for(500);
- }
- }while(ret != 0);
-
- //Connected to WiFi interface or WIFI?
-
- //Start connectivity
- }
- else
- {
- _relayLed = !_relayLed;
- }
- thread_sleep_for(500);
- }while(true);
+ _wifi.disconnect();
+ _wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
+ //int ret = 0;
+// do
+// {
+// ret = _wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
+// if(ret != 0)
+// {
+// thread_sleep_for(500);
+// }
+// }while(ret != 0);
+//
}
void status_callback(nsapi_event_t status, intptr_t param)
@@ -155,6 +233,7 @@
{
_isWifiConnected = true;
_currentRelayTimeout = 10; //ZXLIM - Assume connected to broker and control by broker
+ _mqttClientThread.start(callback(ConnectBroker,&_wifi));
WIFI_LED_ON;
break;
}
@@ -162,18 +241,19 @@
{
_isWifiConnected = false; //ZXLIM - Ignore connected LAN 1st.
_currentRelayTimeout = 1;
+ WIFI_LED_OFF;
break;
}
}
}
}
-
int main()
{
_dioManagerThread.start(callback(HandlePIR));
- _Wifi.attach(&status_callback);
+ _wifi.attach(&status_callback);
+ _wifi.set_blocking(false);
_wifiManagerThread.start(callback(ConnectWifi));
while(true)