Fork of Hello MQTT, using mbed TLS for secure mqtt transport
Fork of HelloMQTT by
Revision 20:49c9daf2b0ff, committed 2017-01-10
- Comitter:
- Jan Jongboom
- Date:
- Tue Jan 10 18:10:17 2017 -0600
- Parent:
- 19:7f7aba7a4a8b
- Child:
- 21:4534812bb94f
- Commit message:
- Update to mbed OS 5, use NetworkInterface for multiple connectivity methods - not just ethernet
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.mbedignore Tue Jan 10 18:10:17 2017 -0600 @@ -0,0 +1,1 @@ +Linux-example/
--- a/C027.h Thu Jul 30 13:49:18 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2014 IBM Corp.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * and Eclipse Distribution License v1.0 which accompany this distribution.
- *
- * The Eclipse Public License is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- * Ian Craggs - initial implementation
- *******************************************************************************/
-
-#if !defined(K64F_H)
-#define K64F_H
-
-C12832 lcd(D11, D13, D12, D7, D10);
-PwmOut r(D5);
-PwmOut g(D9);
-PwmOut b(D8);
-DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3);
-DigitalIn Up(A2); DigitalIn Down(A3); DigitalIn Left(A4); DigitalIn Right(A5); DigitalIn Click(D4);
-AnalogIn ain1 (A0); AnalogIn ain2 (A1);
-
-#define LED2_OFF 0
-#define LED2_ON 1
-
-#define DEFAULT_TYPE_NAME "iotsample-mbed-c027"
-
-#include "lpc_phy.h"
-// need a wrapper since K64F and LPC1768 wont have the same name for mii read methods
-static uint32_t linkStatus(void)
-{
- return (lpc_mii_read_data() & 1);
-}
-
-#endif
\ No newline at end of file
--- a/EthernetInterface.lib Thu Jul 30 13:49:18 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://mbed.org/users/mbed_official/code/EthernetInterface/#f69b81aa9eb1
--- a/K64F.h Thu Jul 30 13:49:18 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2014 IBM Corp.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * and Eclipse Distribution License v1.0 which accompany this distribution.
- *
- * The Eclipse Public License is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- * Ian Craggs - initial implementation
- * Sam Grove - added method to check the status of the Ethernet cable
- *******************************************************************************/
-
-#if !defined(K64F_H)
-#define K64F_H
-
-C12832 lcd(D11, D13, D12, D7, D10);
-BusOut led2 (LED_BLUE);
-BusOut r (D5);
-BusOut g (D9);
-BusOut b (D8);
-DigitalIn Up(A2); DigitalIn Down(A3); DigitalIn Right(A4); DigitalIn Left(A5); DigitalIn Click(D4);
-AnalogIn ain1(A0); AnalogIn ain2(A1);
-
-#define LED2_OFF 1
-#define LED2_ON 0
-
-#define DEFAULT_TYPE_NAME "iotsample-mbed-k64f"
-
-//#include "lpc_phy.h"
-// need a wrapper since K64F and LPC1768 wont have the same name for mii read methods
-static uint32_t linkStatus(void)
-{
- return (1);
-}
-
-#endif
\ No newline at end of file
--- a/LPC1768.h Thu Jul 30 13:49:18 2015 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2014 IBM Corp.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * and Eclipse Distribution License v1.0 which accompany this distribution.
- *
- * The Eclipse Public License is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- * Ian Craggs - initial implementation
- * Sam Grove - added mehtod to check the status of the Ethernet cable
- *******************************************************************************/
-
-#if !defined(LPC1768_H)
-#define LPC1768_H
-
-C12832 lcd(p5, p7, p6, p8, p11);
-DigitalOut led2(LED2);
-PwmOut r(p23);
-PwmOut g(p24);
-PwmOut b(p25);
-DigitalIn Down(p12);
-DigitalIn Left(p13);
-DigitalIn Click(p14);
-DigitalIn Up(p15);
-DigitalIn Right(p16);
-AnalogIn ain1(p19);
-AnalogIn ain2(p20);
-
-#define LED2_OFF 0
-#define LED2_ON 1
-
-#define DEFAULT_TYPE_NAME "iotsample-mbed-lpc1768"
-
-#include "lpc_phy.h"
-// need a wrapper since K64F and LPC1768 wont have the same name for mii read methods
-static uint32_t linkStatus(void)
-{
- return (lpc_mii_read_data() & 1);
-}
-
-#endif
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MQTTNetwork.h Tue Jan 10 18:10:17 2017 -0600
@@ -0,0 +1,38 @@
+#ifndef _MQTTNETWORK_H_
+#define _MQTTNETWORK_H_
+
+#include "NetworkInterface.h"
+
+class MQTTNetwork {
+public:
+ MQTTNetwork(NetworkInterface* aNetwork) : network(aNetwork) {
+ socket = new TCPSocket();
+ }
+
+ ~MQTTNetwork() {
+ delete socket;
+ }
+
+ int read(unsigned char* buffer, int len, int timeout) {
+ return socket->recv(buffer, len);
+ }
+
+ int write(unsigned char* buffer, int len, int timeout) {
+ return socket->send(buffer, len);
+ }
+
+ int connect(const char* hostname, int port) {
+ socket->open(network);
+ return socket->connect(hostname, port);
+ }
+
+ void disconnect() {
+
+ }
+
+private:
+ NetworkInterface* network;
+ TCPSocket* socket;
+};
+
+#endif // _MQTTNETWORK_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/easy-connect.lib Tue Jan 10 18:10:17 2017 -0600 @@ -0,0 +1,1 @@ +https://github.com/ARMmbed/easy-connect/#cb933fb19cda0a733a64d6b71d271fb6bdaf9e6d
--- a/main.cpp Thu Jul 30 13:49:18 2015 +0000
+++ b/main.cpp Tue Jan 10 18:10:17 2017 -0600
@@ -14,7 +14,7 @@
* Ian Craggs - initial API and implementation and/or initial documentation
* Ian Craggs - make sure QoS2 processing works, and add device headers
*******************************************************************************/
-
+
/**
This is a sample program to illustrate the use of the MQTT Client library
on the mbed platform. The Client class requires two classes which mediate
@@ -22,33 +22,31 @@
classes provide the required public programming interfaces, it does not matter
what facilities they use underneath. In this program, they use the mbed
system libraries.
-
+
*/
-
+
// change this to 0 to output messages to serial instead of LCD
#define USE_LCD 1
#if USE_LCD
#include "C12832.h"
-#if defined(TARGET_UBLOX_C027)
-#warning "Compiling for mbed C027"
-#include "C027.h"
-#elif defined(TARGET_LPC1768)
-#warning "Compiling for mbed LPC1768"
-#include "LPC1768.h"
-#elif defined(TARGET_K64F)
-#warning "Compiling for mbed K64F"
-#include "K64F.h"
-#endif
+// the actual pins are defined in mbed_app.json and can be overridden per target
+C12832 lcd(LCD_MOSI, LCD_SCK, LCD_MISO, LCD_A0, LCD_NCS);
-#define printf lcd.cls();lcd.printf
+#define logMessage lcd.cls();lcd.printf
+
+#else
+
+#define logMessage printf
#endif
#define MQTTCLIENT_QOS2 1
-#include "MQTTEthernet.h"
+#include "easy-connect.h"
+#include "MQTTNetwork.h"
+#include "MQTTmbed.h"
#include "MQTTClient.h"
int arrivedcount = 0;
@@ -57,45 +55,51 @@
void messageArrived(MQTT::MessageData& md)
{
MQTT::Message &message = md.message;
- printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
- printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
+ 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;
}
int main(int argc, char* argv[])
-{
- MQTTEthernet ipstack = MQTTEthernet();
- float version = 0.5;
+{
+ float version = 0.6;
char* topic = "mbed-sample";
-
- printf("HelloMQTT: version is %f\n", version);
-
- MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
-
- char* hostname = "m2m.eclipse.org";
+
+ logMessage("HelloMQTT: version is %.2f\r\n", version);
+
+ NetworkInterface* network = easy_connect(true);
+ if (!network) {
+ return -1;
+ }
+
+ MQTTNetwork mqttNetwork(network);
+
+ MQTT::Client<MQTTNetwork, Countdown> client = MQTT::Client<MQTTNetwork, Countdown>(mqttNetwork);
+
+ const char* hostname = "m2m.eclipse.org";
int port = 1883;
- printf("Connecting to %s:%d\n", hostname, port);
- int rc = ipstack.connect(hostname, port);
+ logMessage("Connecting to %s:%d\r\n", hostname, port);
+ int rc = mqttNetwork.connect(hostname, port);
if (rc != 0)
- printf("rc from TCP connect is %d\n", rc);
-
- MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
+ 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 = "testuser";
data.password.cstring = "testpassword";
if ((rc = client.connect(data)) != 0)
- printf("rc from MQTT connect is %d\n", rc);
-
+ logMessage("rc from MQTT connect is %d\r\n", rc);
+
if ((rc = client.subscribe(topic, MQTT::QOS2, messageArrived)) != 0)
- printf("rc from MQTT subscribe is %d\n", rc);
+ logMessage("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 %f\n", version);
+ sprintf(buf, "Hello World! QoS 0 message from app version %f\r\n", version);
message.qos = MQTT::QOS0;
message.retained = false;
message.dup = false;
@@ -104,32 +108,32 @@
rc = client.publish(topic, message);
while (arrivedcount < 1)
client.yield(100);
-
+
// QoS 1
- sprintf(buf, "Hello World! QoS 1 message from app version %f\n", version);
+ sprintf(buf, "Hello World! QoS 1 message from app version %f\r\n", version);
message.qos = MQTT::QOS1;
message.payloadlen = strlen(buf)+1;
rc = client.publish(topic, message);
while (arrivedcount < 2)
client.yield(100);
-
+
// QoS 2
- sprintf(buf, "Hello World! QoS 2 message from app version %f\n", version);
+ sprintf(buf, "Hello World! QoS 2 message from app version %f\r\n", version);
message.qos = MQTT::QOS2;
message.payloadlen = strlen(buf)+1;
rc = client.publish(topic, message);
while (arrivedcount < 3)
client.yield(100);
-
+
if ((rc = client.unsubscribe(topic)) != 0)
- printf("rc from unsubscribe was %d\n", rc);
-
+ logMessage("rc from unsubscribe was %d\r\n", rc);
+
if ((rc = client.disconnect()) != 0)
- printf("rc from disconnect was %d\n", rc);
-
- ipstack.disconnect();
-
- printf("Version %.2f: finish %d msgs\n", version, arrivedcount);
-
+ logMessage("rc from disconnect was %d\r\n", rc);
+
+ mqttNetwork.disconnect();
+
+ logMessage("Version %.2f: finish %d msgs\r\n", version, arrivedcount);
+
return 0;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-os.lib Tue Jan 10 18:10:17 2017 -0600 @@ -0,0 +1,1 @@ +https://github.com/ARMmbed/mbed-os/#2885c1b41e63158cb6faf5f107cd821ae06ef26c
--- a/mbed-rtos.lib Thu Jul 30 13:49:18 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/mbed_official/code/mbed-rtos/#34e80e862021
--- a/mbed.bld Thu Jul 30 13:49:18 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/6213f644d804 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_app.json Tue Jan 10 18:10:17 2017 -0600
@@ -0,0 +1,69 @@
+{
+ "config": {
+ "network-interface":{
+ "help": "options are ETHERNET,WIFI_ESP8266,MESH_LOWPAN_ND,MESH_THREAD",
+ "value": "ETHERNET"
+ },
+ "mesh_radio_type": {
+ "help": "options are ATMEL, MCR20",
+ "value": "ATMEL"
+ },
+ "esp8266-tx": {
+ "help": "Pin used as TX (connects to ESP8266 RX)",
+ "value": "D1"
+ },
+ "esp8266-rx": {
+ "help": "Pin used as RX (connects to ESP8266 TX)",
+ "value": "D0"
+ },
+ "esp8266-ssid": {
+ "value": "\"SSID\""
+ },
+ "esp8266-password": {
+ "value": "\"Password\""
+ },
+ "esp8266-debug": {
+ "value": true
+ },
+ "lcd-mosi": {
+ "value": "D11",
+ "macro_name": "LCD_MOSI"
+ },
+ "lcd-sck": {
+ "value": "D13",
+ "macro_name": "LCD_SCK"
+ },
+ "lcd-miso": {
+ "value": "D12",
+ "macro_name": "LCD_MISO"
+ },
+ "lcd-a0": {
+ "value": "D7",
+ "macro_name": "LCD_A0"
+ },
+ "lcd-ncs": {
+ "value": "D10",
+ "macro_name": "LCD_NCS"
+ }
+ },
+ "target_overrides": {
+ "*": {
+ "target.features_add": ["NANOSTACK", "LOWPAN_ROUTER", "COMMON_PAL"],
+ "mbed-mesh-api.6lowpan-nd-channel-page": 0,
+ "mbed-mesh-api.6lowpan-nd-channel": 12,
+ "mbed-trace.enable": 0
+ },
+ "HEXIWEAR": {
+ "esp8266-tx": "PTD3",
+ "esp8266-rx": "PTD2"
+ },
+ "NUCLEO_F401RE": {
+ "esp8266-tx": "D8",
+ "esp8266-rx": "D2"
+ },
+ "NUCLEO_F411RE": {
+ "esp8266-tx": "D8",
+ "esp8266-rx": "D2"
+ }
+ }
+}
