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.

Committer:
Jan Jongboom
Date:
Fri Dec 02 15:46:04 2016 +0800
Revision:
35:4b11d20d60e9
Child:
38:fbbab77b54fb
Move main.cpp into source directory

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jan Jongboom 35:4b11d20d60e9 1 #include "mbed.h"
Jan Jongboom 35:4b11d20d60e9 2 #include "security.h"
Jan Jongboom 35:4b11d20d60e9 3 #include "easy-connect.h"
Jan Jongboom 35:4b11d20d60e9 4 #include "simple-mbed-client.h"
Jan Jongboom 35:4b11d20d60e9 5
Jan Jongboom 35:4b11d20d60e9 6 EventQueue eventQueue(32 * EVENTS_EVENT_SIZE); // Event queue!
Jan Jongboom 35:4b11d20d60e9 7
Jan Jongboom 35:4b11d20d60e9 8 SimpleMbedClient client;
Jan Jongboom 35:4b11d20d60e9 9
Jan Jongboom 35:4b11d20d60e9 10 // Declare peripherals
Jan Jongboom 35:4b11d20d60e9 11 DigitalOut connectivityLed(LED2); // Blinks while connecting, turns solid when connected
Jan Jongboom 35:4b11d20d60e9 12 DigitalOut augmentedLed(LED1, BUILTIN_LED_OFF); // LED that can be controlled through Connector
Jan Jongboom 35:4b11d20d60e9 13 InterruptIn btn(MBED_CONF_APP_BUTTON); // Button that sends it's count to Connector
Jan Jongboom 35:4b11d20d60e9 14
Jan Jongboom 35:4b11d20d60e9 15 Ticker connectivityTicker;
Jan Jongboom 35:4b11d20d60e9 16
Jan Jongboom 35:4b11d20d60e9 17 // Callback function when the pattern resource is updated
Jan Jongboom 35:4b11d20d60e9 18 void patternUpdated(string v) {
Jan Jongboom 35:4b11d20d60e9 19 printf("New pattern: %s\n", v.c_str());
Jan Jongboom 35:4b11d20d60e9 20 }
Jan Jongboom 35:4b11d20d60e9 21
Jan Jongboom 35:4b11d20d60e9 22 // Define resources here. They act as normal variables, but are exposed to the internet...
Jan Jongboom 35:4b11d20d60e9 23 SimpleResourceInt btn_count = client.define_resource("button/0/clicks", 0, M2MBase::GET_ALLOWED);
Jan Jongboom 35:4b11d20d60e9 24 SimpleResourceString pattern = client.define_resource("led/0/pattern", "500:500:500:500:500:500:500", &patternUpdated);
Jan Jongboom 35:4b11d20d60e9 25
Jan Jongboom 35:4b11d20d60e9 26 void fall() {
Jan Jongboom 35:4b11d20d60e9 27 btn_count = btn_count + 1;
Jan Jongboom 35:4b11d20d60e9 28 printf("Button count is now %d\r\n", static_cast<int>(btn_count));
Jan Jongboom 35:4b11d20d60e9 29 }
Jan Jongboom 35:4b11d20d60e9 30
Jan Jongboom 35:4b11d20d60e9 31 void toggleConnectivityLed() {
Jan Jongboom 35:4b11d20d60e9 32 connectivityLed = !connectivityLed;
Jan Jongboom 35:4b11d20d60e9 33 }
Jan Jongboom 35:4b11d20d60e9 34
Jan Jongboom 35:4b11d20d60e9 35 void registered() {
Jan Jongboom 35:4b11d20d60e9 36 printf("Registered\r\n");
Jan Jongboom 35:4b11d20d60e9 37
Jan Jongboom 35:4b11d20d60e9 38 connectivityTicker.detach();
Jan Jongboom 35:4b11d20d60e9 39 connectivityLed = BUILTIN_LED_ON;
Jan Jongboom 35:4b11d20d60e9 40 }
Jan Jongboom 35:4b11d20d60e9 41
Jan Jongboom 35:4b11d20d60e9 42 void play(void* args) {
Jan Jongboom 35:4b11d20d60e9 43 connectivityLed = BUILTIN_LED_OFF;
Jan Jongboom 35:4b11d20d60e9 44
Jan Jongboom 35:4b11d20d60e9 45 // Parse the pattern string, and toggle the LED in that pattern
Jan Jongboom 35:4b11d20d60e9 46 stringstream ss(pattern);
Jan Jongboom 35:4b11d20d60e9 47 string item;
Jan Jongboom 35:4b11d20d60e9 48 while(getline(ss, item, ':')) {
Jan Jongboom 35:4b11d20d60e9 49 wait_ms(atoi((const char*)item.c_str()));
Jan Jongboom 35:4b11d20d60e9 50 augmentedLed = !augmentedLed;
Jan Jongboom 35:4b11d20d60e9 51 }
Jan Jongboom 35:4b11d20d60e9 52
Jan Jongboom 35:4b11d20d60e9 53 augmentedLed = BUILTIN_LED_OFF;
Jan Jongboom 35:4b11d20d60e9 54 connectivityLed = BUILTIN_LED_ON;
Jan Jongboom 35:4b11d20d60e9 55 }
Jan Jongboom 35:4b11d20d60e9 56
Jan Jongboom 35:4b11d20d60e9 57 int main() {
Jan Jongboom 35:4b11d20d60e9 58 // Run a separate Thread to process events in
Jan Jongboom 35:4b11d20d60e9 59 rtos::Thread et;
Jan Jongboom 35:4b11d20d60e9 60 et.start(callback(&eventQueue, &EventQueue::dispatch_forever));
Jan Jongboom 35:4b11d20d60e9 61
Jan Jongboom 35:4b11d20d60e9 62 // Handle interrupts on the eventQueue - so we don't do things in interrupt context
Jan Jongboom 35:4b11d20d60e9 63 btn.fall(eventQueue.event(&fall));
Jan Jongboom 35:4b11d20d60e9 64
Jan Jongboom 35:4b11d20d60e9 65 // Toggle the built-in LED every second (until we're connected, see `registered` function)
Jan Jongboom 35:4b11d20d60e9 66 connectivityTicker.attach(eventQueue.event(toggleConnectivityLed), 1.0f);
Jan Jongboom 35:4b11d20d60e9 67
Jan Jongboom 35:4b11d20d60e9 68 // Keep alive ticker (every 25 seconds)
Jan Jongboom 35:4b11d20d60e9 69 eventQueue.call_every(25000, callback(&client, &SimpleMbedClient::keep_alive));
Jan Jongboom 35:4b11d20d60e9 70
Jan Jongboom 35:4b11d20d60e9 71 // Functions can be executed through mbed Device Connector via POST calls
Jan Jongboom 35:4b11d20d60e9 72 client.define_function("led/0/play", &play);
Jan Jongboom 35:4b11d20d60e9 73
Jan Jongboom 35:4b11d20d60e9 74 // Connect to the internet (see mbed_app.json for the connectivity method)
Jan Jongboom 35:4b11d20d60e9 75 NetworkInterface* network = easy_connect(true);
Jan Jongboom 35:4b11d20d60e9 76 if (!network) {
Jan Jongboom 35:4b11d20d60e9 77 return 1;
Jan Jongboom 35:4b11d20d60e9 78 }
Jan Jongboom 35:4b11d20d60e9 79
Jan Jongboom 35:4b11d20d60e9 80 // Connect to mbed Device Connector
Jan Jongboom 35:4b11d20d60e9 81 struct MbedClientOptions opts = client.get_default_options();
Jan Jongboom 35:4b11d20d60e9 82 opts.ServerAddress = MBED_SERVER_ADDRESS;
Jan Jongboom 35:4b11d20d60e9 83
Jan Jongboom 35:4b11d20d60e9 84 bool setup = client.setup(opts, network);
Jan Jongboom 35:4b11d20d60e9 85 if (!setup) {
Jan Jongboom 35:4b11d20d60e9 86 printf("Client setup failed\n");
Jan Jongboom 35:4b11d20d60e9 87 return 1;
Jan Jongboom 35:4b11d20d60e9 88 }
Jan Jongboom 35:4b11d20d60e9 89
Jan Jongboom 35:4b11d20d60e9 90 client.on_registered(&registered);
Jan Jongboom 35:4b11d20d60e9 91
Jan Jongboom 35:4b11d20d60e9 92 while (1) {}
Jan Jongboom 35:4b11d20d60e9 93 }