Jim Carver
/
mbed-cloud-workshop-connect-HTS221
bug fix
Revision 1:521604503e81, committed 2018-10-19
- Comitter:
- JimCarver
- Date:
- Fri Oct 19 02:01:38 2018 +0000
- Parent:
- 0:6b753f761943
- Commit message:
- bug fix
Changed in this revision
diff -r 6b753f761943 -r 521604503e81 HTS221.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HTS221.lib Fri Oct 19 02:01:38 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/teams/ST/code/HTS221/#312ee2694a77
diff -r 6b753f761943 -r 521604503e81 main.cpp --- a/main.cpp Fri Oct 12 21:22:49 2018 +0000 +++ b/main.cpp Fri Oct 19 02:01:38 2018 +0000 @@ -37,7 +37,9 @@ +#include "HTS221/HTS221Sensor.h" + // An event queue is a very useful structure to debounce information between contexts (e.g. ISR and normal threads) // This is great because things such as network operations are illegal in ISR, so updating a resource in a button's fall() function is not allowed EventQueue eventQueue; @@ -56,14 +58,40 @@ // Declaring pointers for access to Mbed Cloud Client resources outside of main() MbedCloudClientResource *button_res; MbedCloudClientResource *pattern_res; +MbedCloudClientResource *temperature_res; +MbedCloudClientResource *humidity_res; +static int v = 0; // This function gets triggered by the timer. It's easy to replace it by an InterruptIn and fall() mode on a real button void fake_button_press() { - int v = button_res->get_value_int() + 1; + + button_res->set_value(v++); + if(v > 1000) v = 0; + //printf("Simulated button clicked %d times\n", v); + +} + +// Manage the HST221 in an independent thread +Thread HTS221Thread; - button_res->set_value(v); - - printf("Simulated button clicked %d times\n", v); +void HTS221Handler(void) +{ + uint8_t id; + float value1, value2; + static DevI2C devI2c(PB_11,PB_10); // This defines the processor port pins attached to the I2C bus + static HTS221Sensor hum_temp(&devI2c); + hum_temp.init(NULL); + hum_temp.read_id(&id); // Read the device ID + printf("\r\n\n\nHTS221 humidity & temperature = 0x%X\r\n", id); + hum_temp.enable(); + while(1) { + wait(5); // Update every 5 seconds + // Update temperature and humidity resources + hum_temp.get_temperature(&value1); + hum_temp.get_humidity(&value2); + temperature_res->set_value(value1); + humidity_res->set_value(value2); + } } /** @@ -82,6 +110,9 @@ * 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) { printf("POST received. Going to blink LED pattern: %s\n", pattern_res->get_value().c_str()); @@ -111,7 +142,15 @@ * @param status The delivery status of the notification */ void button_callback(MbedCloudClientResource *resource, const NoticationDeliveryStatus status) { - printf("Button notification, status %s (%d)\n", MbedCloudClientResource::delivery_status_to_string(status), status); + printf("Button %s (%d)\n", MbedCloudClientResource::delivery_status_to_string(status), status); +} + +void temperature_callback(MbedCloudClientResource *resource, const NoticationDeliveryStatus status) { + printf("Temperature %s (%d)\n", MbedCloudClientResource::delivery_status_to_string(status), status); +} + +void humidity_callback(MbedCloudClientResource *resource, const NoticationDeliveryStatus status) { + printf("Humidity %s (%d)\n", MbedCloudClientResource::delivery_status_to_string(status), status); } /** @@ -123,6 +162,7 @@ } int main(void) { + printf("Starting Simple Mbed Cloud Client example\n"); printf("Checking SDCard is Formatted\r\n"); @@ -144,7 +184,12 @@ // if (err < 0) { // error("error: %s (%d)\n", strerror(-err), err); // } + + // + // Initalize temperature and humidity sensor + // + printf("Connecting to the network using Wifi...\n"); // Connect to the internet (DHCP is expected to be on) @@ -180,7 +225,19 @@ MbedCloudClientResource *blink_res = client.create_resource("3201/0/5850", "blink_action"); blink_res->methods(M2MMethod::POST); blink_res->attach_post_callback(blink_callback); - + + temperature_res = client.create_resource("3303/0/5700", "temperature"); + temperature_res->set_value(0); + temperature_res->methods(M2MMethod::GET); + temperature_res->observable(true); + temperature_res->attach_notification_callback(temperature_callback); + + humidity_res = client.create_resource("3304/0/5700", "humidity"); + humidity_res->set_value(0); + humidity_res->methods(M2MMethod::GET); + humidity_res->observable(true); + humidity_res->attach_notification_callback(humidity_callback); + printf("Initialized Mbed Cloud Client. Registering...\n"); // Callback that fires when registering is complete @@ -193,7 +250,8 @@ // 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(&fake_button_press), 5.0); - + HTS221Thread.start(HTS221Handler); + // You can easily run the eventQueue in a separate thread if required eventQueue.dispatch_forever(); }
diff -r 6b753f761943 -r 521604503e81 qspi-blockdevice/.git/index Binary file qspi-blockdevice/.git/index has changed
diff -r 6b753f761943 -r 521604503e81 simple-mbed-cloud-client/.git/index Binary file simple-mbed-cloud-client/.git/index has changed
diff -r 6b753f761943 -r 521604503e81 simple-mbed-cloud-client/mbed-cloud-client/.git/index Binary file simple-mbed-cloud-client/mbed-cloud-client/.git/index has changed
diff -r 6b753f761943 -r 521604503e81 wifi-ism43362/.git/index Binary file wifi-ism43362/.git/index has changed