Helium
/
helium_basic
A basic setup and connect sample for the Helium Atom
main.cpp@13:90f88e66f0aa, 2017-09-05 (annotated)
- Committer:
- Marc Nijdam
- Date:
- Tue Sep 05 13:57:14 2017 -0700
- Revision:
- 13:90f88e66f0aa
- Parent:
- 10:e666766643d2
Update helium library and sample
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Marc Nijdam |
0:9c0bcd840b37 | 1 | /* |
Marc Nijdam |
0:9c0bcd840b37 | 2 | * Copyright 2017, Helium Systems, Inc. |
Marc Nijdam |
3:8e6494dda270 | 3 | * All Rights Reserved. See LICENSE.txt for license information |
Marc Nijdam |
0:9c0bcd840b37 | 4 | */ |
Marc Nijdam |
0:9c0bcd840b37 | 5 | |
Marc Nijdam |
13:90f88e66f0aa | 6 | |
Marc Nijdam |
0:9c0bcd840b37 | 7 | #include "mbed.h" |
Marc Nijdam |
6:65411183b48a | 8 | #define __STDC_FORMAT_MACROS |
Marc Nijdam |
1:a843f3d9d31c | 9 | #include <inttypes.h> |
Marc Nijdam |
0:9c0bcd840b37 | 10 | |
Marc Nijdam |
13:90f88e66f0aa | 11 | #include "Helium.h" |
Marc Nijdam |
13:90f88e66f0aa | 12 | #include "HeliumUtil.h" |
Marc Nijdam |
0:9c0bcd840b37 | 13 | |
Marc Nijdam |
13:90f88e66f0aa | 14 | #define CHANNEL_NAME "Helium MQTT" |
Marc Nijdam |
13:90f88e66f0aa | 15 | #define CONFIG_INTERVAL_KEY "config.interval_ms" |
Marc Nijdam |
13:90f88e66f0aa | 16 | #define DEFAULT_INTERVAL 500 |
Marc Nijdam |
0:9c0bcd840b37 | 17 | |
Marc Nijdam |
1:a843f3d9d31c | 18 | #if defined(TARGET_K64F) |
Marc Nijdam |
3:8e6494dda270 | 19 | Helium helium(D9, D7); // TX:D9, RX:D7 |
Marc Nijdam |
2:bfe503bcf0b8 | 20 | #elif defined(TARGET_WIZwiki_W7500) |
Marc Nijdam |
2:bfe503bcf0b8 | 21 | Helium helium(D1, D0); |
Marc Nijdam |
1:a843f3d9d31c | 22 | #else |
Marc Nijdam |
1:a843f3d9d31c | 23 | #error Please define helium with serial tx/rx |
Marc Nijdam |
1:a843f3d9d31c | 24 | #endif |
Marc Nijdam |
1:a843f3d9d31c | 25 | |
Marc Nijdam |
1:a843f3d9d31c | 26 | Channel channel(&helium); |
Marc Nijdam |
13:90f88e66f0aa | 27 | Config config(&channel); |
Marc Nijdam |
13:90f88e66f0aa | 28 | int32_t send_interval; |
Marc Nijdam |
13:90f88e66f0aa | 29 | |
Marc Nijdam |
13:90f88e66f0aa | 30 | void |
Marc Nijdam |
13:90f88e66f0aa | 31 | update_config(bool stale) |
Marc Nijdam |
13:90f88e66f0aa | 32 | { |
Marc Nijdam |
13:90f88e66f0aa | 33 | if (stale) |
Marc Nijdam |
13:90f88e66f0aa | 34 | { |
Marc Nijdam |
13:90f88e66f0aa | 35 | DBG_PRINTF("Fetching Config - "); |
Marc Nijdam |
13:90f88e66f0aa | 36 | int status = config.get(CONFIG_INTERVAL_KEY, &send_interval, DEFAULT_INTERVAL); |
Marc Nijdam |
13:90f88e66f0aa | 37 | report_status(status); |
Marc Nijdam |
13:90f88e66f0aa | 38 | } |
Marc Nijdam |
13:90f88e66f0aa | 39 | } |
Marc Nijdam |
1:a843f3d9d31c | 40 | |
Marc Nijdam |
0:9c0bcd840b37 | 41 | int main() |
Marc Nijdam |
0:9c0bcd840b37 | 42 | { |
Marc Nijdam |
13:90f88e66f0aa | 43 | DBG_PRINTF("Starting\n"); |
Marc Nijdam |
0:9c0bcd840b37 | 44 | |
Marc Nijdam |
9:15075df34b31 | 45 | // Let the Atom start up |
Marc Nijdam |
9:15075df34b31 | 46 | wait(0.1); |
Marc Nijdam |
9:15075df34b31 | 47 | |
Marc Nijdam |
13:90f88e66f0aa | 48 | // Get and print the mac address |
Marc Nijdam |
13:90f88e66f0aa | 49 | DBG_PRINTF("Info - "); |
Marc Nijdam |
1:a843f3d9d31c | 50 | struct helium_info info; |
Marc Nijdam |
1:a843f3d9d31c | 51 | int status = helium.info(&info); |
Marc Nijdam |
1:a843f3d9d31c | 52 | if (helium_status_OK == status) { |
Marc Nijdam |
13:90f88e66f0aa | 53 | DBG_PRINTF("%" PRIx64 " - ", info.mac); |
Marc Nijdam |
1:a843f3d9d31c | 54 | } |
Marc Nijdam |
1:a843f3d9d31c | 55 | report_status(status); |
Marc Nijdam |
1:a843f3d9d31c | 56 | |
Marc Nijdam |
13:90f88e66f0aa | 57 | // Tell the Atom to connect to the network. The used HeliumUtil |
Marc Nijdam |
13:90f88e66f0aa | 58 | // will keep trying to connect forever. |
Marc Nijdam |
13:90f88e66f0aa | 59 | helium_connect(&helium); |
Marc Nijdam |
13:90f88e66f0aa | 60 | |
Marc Nijdam |
13:90f88e66f0aa | 61 | // Create a channel just to get it done.. The HeliumUtil |
Marc Nijdam |
13:90f88e66f0aa | 62 | // implementation of this will both connect and retry channel |
Marc Nijdam |
13:90f88e66f0aa | 63 | // creation. |
Marc Nijdam |
13:90f88e66f0aa | 64 | channel_create(&channel, CHANNEL_NAME); |
Marc Nijdam |
13:90f88e66f0aa | 65 | |
Marc Nijdam |
13:90f88e66f0aa | 66 | // Fetch configuration data from channel. |
Marc Nijdam |
13:90f88e66f0aa | 67 | update_config(true); |
Marc Nijdam |
1:a843f3d9d31c | 68 | |
Marc Nijdam |
13:90f88e66f0aa | 69 | while(true) { |
Marc Nijdam |
13:90f88e66f0aa | 70 | // Send some data. This uses the HeliumUtil utility that both |
Marc Nijdam |
13:90f88e66f0aa | 71 | // re-connects to the channel, re-connects and/or re-sends |
Marc Nijdam |
13:90f88e66f0aa | 72 | // under failure conditions. |
Marc Nijdam |
13:90f88e66f0aa | 73 | const char *data = "Hello Helium"; |
Marc Nijdam |
13:90f88e66f0aa | 74 | channel_send(&channel, CHANNEL_NAME, data, strlen(data)); |
Marc Nijdam |
0:9c0bcd840b37 | 75 | |
Marc Nijdam |
13:90f88e66f0aa | 76 | // Update configuration if the network tells us it's stale. |
Marc Nijdam |
13:90f88e66f0aa | 77 | update_config(config.is_stale()); |
Marc Nijdam |
13:90f88e66f0aa | 78 | |
Marc Nijdam |
13:90f88e66f0aa | 79 | // Wait for the configured interval |
Marc Nijdam |
13:90f88e66f0aa | 80 | wait_ms(send_interval); |
Marc Nijdam |
13:90f88e66f0aa | 81 | } |
Marc Nijdam |
0:9c0bcd840b37 | 82 | } |