Example program for simple-mbed-client, connecting a device to mbed Device Connector.

Dependencies:   simple-mbed-client

Fork of simple-mbed-client-example by Jan Jongboom

This is an example on how to connect to mbed Device Connector using simple-mbed-client. It can connect over Ethernet, WiFi (using an ESP8266 module or an ODIN board), Thread and 6LoWPAN.

After cloning this repository update `mbed_app.json` to reflect your connectivity method. For docs on configuring connectivity, see easy-connect.

End to end example

For an end-to-end example of using Simple mbed Client to connect devices to mbed Device Connector see Building an internet connected lighting system.

Entropy (or lack thereof)

On all platforms except the K64F and K22F the library is compiled without TLS entropy sources. This means that your code is inherently unsafe and should not be deployed to any production systems. To enable entropy, remove the MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES and MBEDTLS_TEST_NULL_ENTROPY macros from mbed_app.json.

Files at this revision

API Documentation at this revision

Comitter:
Jan Jongboom
Date:
Fri Dec 02 15:46:04 2016 +0800
Parent:
34:1e8d914a2876
Child:
36:52249470d973
Commit message:
Move main.cpp into source directory

Changed in this revision

main.cpp Show diff for this revision Revisions of this file
source/main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Fri Dec 02 15:44:32 2016 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-#include "mbed.h"
-#include "security.h"
-#include "easy-connect.h"
-#include "simple-mbed-client.h"
-
-EventQueue eventQueue(32 * EVENTS_EVENT_SIZE);  // Event queue!
-
-SimpleMbedClient client;
-
-// Declare peripherals
-DigitalOut connectivityLed(LED2); // Blinks while connecting, turns solid when connected
-DigitalOut augmentedLed(LED1, BUILTIN_LED_OFF);  // LED that can be controlled through Connector
-InterruptIn btn(MBED_CONF_APP_BUTTON); // Button that sends it's count to Connector
-
-Ticker connectivityTicker;
-
-// Callback function when the pattern resource is updated
-void patternUpdated(string v) {
-    printf("New pattern: %s\n", v.c_str());
-}
-
-// Define resources here. They act as normal variables, but are exposed to the internet...
-SimpleResourceInt btn_count = client.define_resource("button/0/clicks", 0, M2MBase::GET_ALLOWED);
-SimpleResourceString pattern = client.define_resource("led/0/pattern", "500:500:500:500:500:500:500", &patternUpdated);
-
-void fall() {
-    btn_count = btn_count + 1;
-    printf("Button count is now %d\r\n", static_cast<int>(btn_count));
-}
-
-void toggleConnectivityLed() {
-    connectivityLed = !connectivityLed;
-}
-
-void registered() {
-    printf("Registered\r\n");
-
-    connectivityTicker.detach();
-    connectivityLed = BUILTIN_LED_ON;
-}
-
-void play(void* args) {
-    connectivityLed = BUILTIN_LED_OFF;
-
-    // Parse the pattern string, and toggle the LED in that pattern
-    stringstream ss(pattern);
-    string item;
-    while(getline(ss, item, ':')) {
-        wait_ms(atoi((const char*)item.c_str()));
-        augmentedLed = !augmentedLed;
-    }
-
-    augmentedLed = BUILTIN_LED_OFF;
-    connectivityLed = BUILTIN_LED_ON;
-}
-
-int main() {
-    // Run a separate Thread to process events in
-    rtos::Thread et;
-    et.start(callback(&eventQueue, &EventQueue::dispatch_forever));
-
-    // Handle interrupts on the eventQueue - so we don't do things in interrupt context
-    btn.fall(eventQueue.event(&fall));
-
-    // Toggle the built-in LED every second (until we're connected, see `registered` function)
-    connectivityTicker.attach(eventQueue.event(toggleConnectivityLed), 1.0f);
-
-    // Keep alive ticker (every 25 seconds)
-    eventQueue.call_every(25000, callback(&client, &SimpleMbedClient::keep_alive));
-
-    // Functions can be executed through mbed Device Connector via POST calls
-    client.define_function("led/0/play", &play);
-
-    // Connect to the internet (see mbed_app.json for the connectivity method)
-    NetworkInterface* network = easy_connect(true);
-    if (!network) {
-        return 1;
-    }
-
-    // Connect to mbed Device Connector
-    struct MbedClientOptions opts = client.get_default_options();
-    opts.ServerAddress = MBED_SERVER_ADDRESS;
-
-    bool setup = client.setup(opts, network);
-    if (!setup) {
-        printf("Client setup failed\n");
-        return 1;
-    }
-
-    client.on_registered(&registered);
-
-    while (1) {}
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/main.cpp	Fri Dec 02 15:46:04 2016 +0800
@@ -0,0 +1,93 @@
+#include "mbed.h"
+#include "security.h"
+#include "easy-connect.h"
+#include "simple-mbed-client.h"
+
+EventQueue eventQueue(32 * EVENTS_EVENT_SIZE);  // Event queue!
+
+SimpleMbedClient client;
+
+// Declare peripherals
+DigitalOut connectivityLed(LED2); // Blinks while connecting, turns solid when connected
+DigitalOut augmentedLed(LED1, BUILTIN_LED_OFF);  // LED that can be controlled through Connector
+InterruptIn btn(MBED_CONF_APP_BUTTON); // Button that sends it's count to Connector
+
+Ticker connectivityTicker;
+
+// Callback function when the pattern resource is updated
+void patternUpdated(string v) {
+    printf("New pattern: %s\n", v.c_str());
+}
+
+// Define resources here. They act as normal variables, but are exposed to the internet...
+SimpleResourceInt btn_count = client.define_resource("button/0/clicks", 0, M2MBase::GET_ALLOWED);
+SimpleResourceString pattern = client.define_resource("led/0/pattern", "500:500:500:500:500:500:500", &patternUpdated);
+
+void fall() {
+    btn_count = btn_count + 1;
+    printf("Button count is now %d\r\n", static_cast<int>(btn_count));
+}
+
+void toggleConnectivityLed() {
+    connectivityLed = !connectivityLed;
+}
+
+void registered() {
+    printf("Registered\r\n");
+
+    connectivityTicker.detach();
+    connectivityLed = BUILTIN_LED_ON;
+}
+
+void play(void* args) {
+    connectivityLed = BUILTIN_LED_OFF;
+
+    // Parse the pattern string, and toggle the LED in that pattern
+    stringstream ss(pattern);
+    string item;
+    while(getline(ss, item, ':')) {
+        wait_ms(atoi((const char*)item.c_str()));
+        augmentedLed = !augmentedLed;
+    }
+
+    augmentedLed = BUILTIN_LED_OFF;
+    connectivityLed = BUILTIN_LED_ON;
+}
+
+int main() {
+    // Run a separate Thread to process events in
+    rtos::Thread et;
+    et.start(callback(&eventQueue, &EventQueue::dispatch_forever));
+
+    // Handle interrupts on the eventQueue - so we don't do things in interrupt context
+    btn.fall(eventQueue.event(&fall));
+
+    // Toggle the built-in LED every second (until we're connected, see `registered` function)
+    connectivityTicker.attach(eventQueue.event(toggleConnectivityLed), 1.0f);
+
+    // Keep alive ticker (every 25 seconds)
+    eventQueue.call_every(25000, callback(&client, &SimpleMbedClient::keep_alive));
+
+    // Functions can be executed through mbed Device Connector via POST calls
+    client.define_function("led/0/play", &play);
+
+    // Connect to the internet (see mbed_app.json for the connectivity method)
+    NetworkInterface* network = easy_connect(true);
+    if (!network) {
+        return 1;
+    }
+
+    // Connect to mbed Device Connector
+    struct MbedClientOptions opts = client.get_default_options();
+    opts.ServerAddress = MBED_SERVER_ADDRESS;
+
+    bool setup = client.setup(opts, network);
+    if (!setup) {
+        printf("Client setup failed\n");
+        return 1;
+    }
+
+    client.on_registered(&registered);
+
+    while (1) {}
+}