Simple Mbed Cloud client application using features of K64F including Wi-Fi and SD Card
Fork of mbed-cloud-connect-example-ethernet by
Configuration
- Put ESP-WROOM-02 shield
- Put Mbed Application Shield
- Edit the text in the main.cpp
#define WIFI_SSID "SSID" #define WIFI_PSWD "PASSWORD"
- Download and replace your developer certificate from Mbed Cloud portal from the menu [Mbed Cloud] - [Certificate]
Revision 19:999d13f83602, committed 2018-07-03
- Comitter:
- MACRUM
- Date:
- Tue Jul 03 04:32:09 2018 +0000
- Parent:
- 18:139960a75894
- Commit message:
- Add sensor access code
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LM75B.lib Tue Jul 03 04:32:09 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/chris/code/LM75B/#6a70c9303bbe
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MMA7660.lib Tue Jul 03 04:32:09 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/Sissors/code/MMA7660/#36a163511e34
--- a/main.cpp Tue Jul 03 02:54:58 2018 +0000
+++ b/main.cpp Tue Jul 03 04:32:09 2018 +0000
@@ -21,6 +21,8 @@
#include "SDBlockDevice.h"
#include "FATFileSystem.h"
#include "ESP8266Interface.h"
+#include "MMA7660.h"
+#include "LM75B.h"
#define WIFI_SSID "SSID"
#define WIFI_PSWD "PASSWORD"
@@ -31,23 +33,31 @@
Thread thread1;
// Storage implementation definition, currently using SDBlockDevice (SPI flash, DataFlash, and internal flash are also available)
-/* K64 & K66 */
+/* K64 & K66 */
InterruptIn sw2(SW2);
DigitalOut led2(LED2);
-/* K64 & K66 */
+
SDBlockDevice sd(PTE3, PTE1, PTE2, PTE4);
FATFileSystem fs("sd", &sd);
ESP8266Interface net(D1, D0);
+LM75B lm75b(I2C_SDA, I2C_SCL); // temperature
+MMA7660 mma7660(I2C_SDA, I2C_SCL); // accel
+const int NUM_AXIS = 3;
// Declaring pointers for access to Mbed Cloud Client resources outside of main()
MbedCloudClientResource *button_res;
MbedCloudClientResource *pattern_res;
+MbedCloudClientResource *temp_res;
+MbedCloudClientResource *temp_unit_res;
+MbedCloudClientResource *accel_res[NUM_AXIS];
+MbedCloudClientResource *acc_unit_res;
static bool button_pressed = false;
static int button_count = 0;
-
-void button_press() {
+
+void button_press()
+{
button_pressed = true;
++button_count;
button_res->set_value(button_count);
@@ -58,7 +68,8 @@
* @param resource The resource that triggered the callback
* @param newValue Updated value for the resource
*/
-void pattern_updated(MbedCloudClientResource *resource, m2m::String newValue) {
+void pattern_updated(MbedCloudClientResource *resource, m2m::String newValue)
+{
printf("PUT received, new value: %s\n", newValue.c_str());
}
@@ -69,7 +80,8 @@
* Note that the buffer is deallocated after leaving this function, so copy it if you need it longer.
* @param size Size of the body
*/
-void blink_callback(MbedCloudClientResource *resource, const uint8_t *buffer, uint16_t size) {
+void blink_callback(MbedCloudClientResource *resource, const uint8_t *buffer, uint16_t size)
+{
printf("POST received. Going to blink LED pattern: %s\n", pattern_res->get_value().c_str());
static DigitalOut augmentedLed(LED1); // LED that is used for blinking the pattern
@@ -97,19 +109,51 @@
* @param resource The resource that triggered the callback
* @param status The delivery status of the notification
*/
-void button_callback(MbedCloudClientResource *resource, const NoticationDeliveryStatus status) {
+void button_callback(MbedCloudClientResource *resource, const NoticationDeliveryStatus status)
+{
printf("Button notification, status %s (%d)\n", MbedCloudClientResource::delivery_status_to_string(status), status);
}
+void temp_callback(MbedCloudClientResource *resource, const NoticationDeliveryStatus status)
+{
+ printf("Temperature notification, status %s (%d)\n", MbedCloudClientResource::delivery_status_to_string(status), status);
+}
+
+void accel_callback(MbedCloudClientResource *resource, const NoticationDeliveryStatus status)
+{
+ printf("Accelerometer notification, status %s (%d)\n", MbedCloudClientResource::delivery_status_to_string(status), status);
+}
+
+void measure_sensors()
+{
+ float temperature, acc[3];
+ const unsigned int buf_size = 20;
+ char buf[buf_size];
+
+ mma7660.readData(acc);
+ for(int i=0; i < NUM_AXIS; i++) {
+ snprintf(buf, buf_size, "%f", acc[i]);
+ accel_res[i]->set_value(buf);
+ }
+ printf("acc: %f,%f,%f\n", acc[0], acc[1], acc[2]);
+
+ temperature = lm75b.read();
+ snprintf(buf, buf_size, "%f", temperature);
+ temp_res->set_value(buf);
+ printf("temp: %s\n", buf);
+}
+
/**
* Registration callback handler
* @param endpoint Information about the registered endpoint such as the name (so you can find it back in portal)
*/
-void registered(const ConnectorClientEndpointInfo *endpoint) {
+void registered(const ConnectorClientEndpointInfo *endpoint)
+{
printf("Connected to Mbed Cloud. Endpoint Name: %s\n", endpoint->internal_endpoint_name.c_str());
}
-int main(void) {
+int main(void)
+{
printf("Starting Simple Mbed Cloud Client example\n");
printf("Connecting to the network using Wi-Fi...\n");
@@ -146,7 +190,30 @@
MbedCloudClientResource *blink_res = client.create_resource("3201/0/5850", "blink_action");
blink_res->methods(M2MMethod::POST);
blink_res->attach_post_callback(blink_callback);
+
+ temp_res = client.create_resource("3303/0/5700", "temperature");
+ temp_res->set_value("0");
+ temp_res->methods(M2MMethod::GET);
+ temp_res->attach_notification_callback(temp_callback);
+ temp_res->observable(true);
+ temp_unit_res = client.create_resource("3303/0/5701", "unit");
+ temp_unit_res->set_value("Cel");
+
+ accel_res[0] = client.create_resource("3313/0/5702", "accel_x");
+ accel_res[1] = client.create_resource("3313/0/5703", "accel_y");
+ accel_res[2] = client.create_resource("3313/0/5704", "accel_z");
+
+ for (int i=0; i < NUM_AXIS; i++) {
+ accel_res[i]->set_value(0);
+ accel_res[i]->methods(M2MMethod::GET);
+ accel_res[i]->attach_notification_callback(accel_callback);
+ accel_res[i]->observable(true);
+ }
+
+ acc_unit_res = client.create_resource("3313/0/5701", "unit");
+ acc_unit_res->set_value("G");
+
printf("Initialized Mbed Cloud Client. Registering...\n");
// Callback that fires when registering is complete
@@ -155,25 +222,29 @@
// Register with Mbed Cloud
client.register_and_connect();
- // Setup the button
- sw2.mode(PullUp);
-
+ // Setup the button
+ sw2.mode(PullUp);
+
// The button fall handler is placed in the event queue so it will run in
- // thread context instead of ISR context, which allows safely updating the cloud resource
- sw2.fall(eventQueue.event(&button_press));
- button_count = 0;
+ // thread context instead of ISR context, which allows safely updating the cloud resource
+ sw2.fall(eventQueue.event(&button_press));
+ button_count = 0;
+
+ // Placeholder for callback to update local resource when GET comes.
+ // The timer fires on an interrupt context, but debounces it to the eventqueue, so it's safe to do network operations
+ Ticker timer;
+ timer.attach(eventQueue.event(&measure_sensors), 5.0);
// Start the event queue in a separate thread so the main thread continues
thread1.start(callback(&eventQueue, &EventQueue::dispatch_forever));
- while(1)
- {
+ while(1) {
wait_ms(100);
if (button_pressed) {
button_pressed = false;
- printf("button clicked %d times\r\n", button_count);
+ printf("button clicked %d times\r\n", button_count);
}
-
+
}
}
--- a/mbed_cloud_dev_credentials.c Tue Jul 03 02:54:58 2018 +0000
+++ b/mbed_cloud_dev_credentials.c Tue Jul 03 04:32:09 2018 +0000
@@ -15,39 +15,39 @@
*/
#ifndef __MBED_CLOUD_DEV_CREDENTIALS_H__
#define __MBED_CLOUD_DEV_CREDENTIALS_H__
-
+
#if MBED_CONF_APP_DEVELOPER_MODE == 1
#error "Replace mbed_cloud_dev_credentials.c with your own developer cert."
#endif
-
+
#include <inttypes.h>
-
+
const char MBED_CLOUD_DEV_BOOTSTRAP_ENDPOINT_NAME[] = "";
const char MBED_CLOUD_DEV_ACCOUNT_ID[] = "";
const char MBED_CLOUD_DEV_BOOTSTRAP_SERVER_URI[] = "";
-
+
const uint8_t MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_CERTIFICATE[] =
{ 0x0 };
-
+
const uint8_t MBED_CLOUD_DEV_BOOTSTRAP_SERVER_ROOT_CA_CERTIFICATE[] =
{ 0x0 };
-
+
const uint8_t MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_PRIVATE_KEY[] =
{ 0x0 };
-
+
const char MBED_CLOUD_DEV_MANUFACTURER[] = "dev_manufacturer";
-
+
const char MBED_CLOUD_DEV_MODEL_NUMBER[] = "dev_model_num";
-
+
const char MBED_CLOUD_DEV_SERIAL_NUMBER[] = "0";
-
+
const char MBED_CLOUD_DEV_DEVICE_TYPE[] = "dev_device_type";
-
+
const char MBED_CLOUD_DEV_HARDWARE_VERSION[] = "dev_hardware_version";
-
+
const uint32_t MBED_CLOUD_DEV_MEMORY_TOTAL_KB = 0;
const uint32_t MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_CERTIFICATE_SIZE = sizeof(MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_CERTIFICATE);
const uint32_t MBED_CLOUD_DEV_BOOTSTRAP_SERVER_ROOT_CA_CERTIFICATE_SIZE = sizeof(MBED_CLOUD_DEV_BOOTSTRAP_SERVER_ROOT_CA_CERTIFICATE);
const uint32_t MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_PRIVATE_KEY_SIZE = sizeof(MBED_CLOUD_DEV_BOOTSTRAP_DEVICE_PRIVATE_KEY);
-
+
#endif //__MBED_CLOUD_DEV_CREDENTIALS_H__
Toyomasa Watarai
