A basic setup and connect sample for the Helium Atom

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?

UserRevisionLine numberNew 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 }