Taking photo using GR-LYCHEE through Pelion Device Management.
This firmware project works for GR-LYCHEE and GR-PEACH.
Steps to build this firmware with Mbed CLI
Import project
$ mbed import http://os.mbed.com/users/coisme/code/Pelion-GR-LYCHEE-camera-firmware/
Setting
- Ethernet (GR-PEACH only)
- Change the file name
mbed_app.RZ_A1H_Ethernet.json
tombed_app.json
- Change the file name
- Wi-Fi
- Change the Wi-Fi setting in
mbed_app.json
, i.e.nsapi.default-wifi-ssid
andnsapi.default-wifi-password
- Change the Wi-Fi setting in
If you haven't set your Pelion API key, run the following command.
$ mbed config -G CLOUD_SDK_API_KEY <API_KEY>
Setting for Pelion Device Management
$ mbed dm init -d "example.com" --model-name "PELION_DEMO" -q --force
Compile
For GR-LYCHEE:
$ mbed compile -t GCC_ARM -m GR_LYCHEE
For GR-PEACH:
$ mbed compile -t GCC_ARM -m RZ_A1H
Write the created .bin
file to your GR-LYCHEE/PEACH.
That's it! :-)
LED Status Indicator
LEDs next to UB0 show the status of your GR-LYCHEE/PEACH.
LED# | GR-LYCHEE | GR-PEACH | Status | Description |
---|---|---|---|---|
LED1 | green | red | Normal | Turned on after the device is registered to Pelion Device Management successfully. |
LED2 | yellow | green | Error | Turned on when the network initialization failed. Check your Wi-Fi setting. |
LED3 | orange | blue | Error | Turned on when the Pelion Device Management Client initialization failed. Check your SD card. |
LED4 | red | red | Error | Turned on when the network is disconnected. Check your Wi-Fi network status. |
Clear device identity
If you want to clear the device's identity, connect to the device via serial terminal. Then input r
command. The device flushes the identity storage, then reboot.
Known Issues
client_error(6) -> Client in reconnection mode NetworkError
appears when connecting to network, but eventually connection will be established.- Warning message
"MBEDTLS_TEST_NULL_ENTROPY has been enabled. This configuration is not secure and is not suitable for production use"
appears when compiling the project for GR-PEACH. This can be ignored in development stage.
Revision 14:0480150782c8, committed 2019-04-10
- Comitter:
- Osamu Koizumi
- Date:
- Wed Apr 10 12:46:02 2019 +0900
- Parent:
- 13:bc31cb1602de
- Child:
- 15:09a192353257
- Commit message:
- Use LEDs as error indicator.
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r bc31cb1602de -r 0480150782c8 main.cpp --- a/main.cpp Wed Apr 10 11:20:54 2019 +0900 +++ b/main.cpp Wed Apr 10 12:46:02 2019 +0900 @@ -42,6 +42,9 @@ DisplayBase Display; JPEG_Converter Jcu; +const int LED_ON = 1; +const int LED_OFF = 0; + // 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; @@ -60,6 +63,9 @@ MbedCloudClientResource *camera_capture_res; bool take_photo(uint8_t *photo_data, uint32_t *photo_data_len) { + // When taking a photo, RED LED (LED4) lights. + DigitalOut led(LED_RED, LED_ON); + JPEG_Converter::bitmap_buff_info_t buff_info; JPEG_Converter::encode_options_t encode_opt; @@ -76,10 +82,13 @@ encode_opt.input_swapsetting = JPEG_Converter::WR_RD_WRSWA_32_16_8BIT; dcache_invalid(photo_data, *photo_data_len); - if (Jcu.encode(&buff_info, photo_data, (size_t *)photo_data_len, &encode_opt) != JPEG_Converter::JPEG_CONV_OK) { + JPEG_Converter::jpeg_conv_error_t err = Jcu.encode(&buff_info, photo_data, (size_t *)photo_data_len, &encode_opt); + led = LED_OFF; + + if(err != JPEG_Converter::JPEG_CONV_OK) + { return false; } - return true; } @@ -106,10 +115,23 @@ } } +/* + * Monitor the network connection. If the network is disconnected, the RED LED (LED4) on the board lights. + */ +void monitor() { + nsapi_connection_status status = net->get_connection_status(); + if(status != NSAPI_STATUS_GLOBAL_UP) { + DigitalOut led(LED_RED, LED_ON); + printf("Network is disconnected. Status = %d.\n", status); + } else { + DigitalOut led(LED_RED, LED_OFF); + } +} + void camera_capture_callback(MbedCloudClientResource *resource, const NoticationDeliveryStatus status) { printf("camera notification, status: %s (%d)\n", - MbedCloudClientResource::delivery_status_to_string(status), status); + MbedCloudClientResource::delivery_status_to_string(status), status); } /** @@ -143,6 +165,8 @@ // Set default photo M2MResource* m2m_res = camera_capture_res->get_m2m_resource(); m2m_res->set_value(DEFAULT_PHOTO, DEFAULT_PHOTO_LEN); + // Turn on the GREEN LED (LED1) when device is registered. + DigitalOut led(LED_GREEN, LED_ON); } @@ -155,6 +179,8 @@ if (status != NSAPI_ERROR_OK) { printf("Connecting to the network failed %d!\n", status); + // Turn on the YELLOW LED (LED2) when the network initialization failed. + DigitalOut led(LED_YELLOW, LED_ON); return -1; } @@ -165,6 +191,8 @@ int client_status = client.init(); if (client_status != 0) { printf("Pelion Client initialization failed (%d)\n", client_status); + // Turn on the ORANGE LED (LED3) when Pelion Client initialization failed. + DigitalOut led(LED_ORANGE, LED_ON); return -1; } @@ -218,6 +246,10 @@ // thread context instead of ISR context, which allows safely updating the cloud resource btn.fall(eventQueue.event(&button_press)); + // Monitor the network connection periodically. + Ticker ticker; + ticker.attach(eventQueue.event(&monitor), 5.0); // second param is period in seconds + // You can easily run the eventQueue in a separate thread if required eventQueue.dispatch_forever(); }