mDot EVB to M2X demo.
Dependencies: DOGS102 ISL29011 MMA845x MPL3115A2 NCP5623B libmDot mbed-rtos mbed-src
Fork of MTDOT-EVBDemo by
Revision 4:71e411fbd9ff, committed 2015-07-16
- Comitter:
- jamescmaki
- Date:
- Thu Jul 16 21:00:37 2015 +0000
- Parent:
- 3:68e974f5f532
- Child:
- 5:72d4d95e1d42
- Commit message:
- Update to pass m2x device and key through to conduit. This is for demo only. In normal circumstances the Conduit would be configured with this information.
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Jul 15 14:20:33 2015 +0000
+++ b/main.cpp Thu Jul 16 21:00:37 2015 +0000
@@ -28,6 +28,8 @@
*
* 1.03 TAB 7/15/15 Added threads for push button switch debounce.
*
+ * 1.04 JCM 7/16/15 Updated application to use with ATT m2x
+ *
*/
#include "mbed.h"
@@ -43,6 +45,38 @@
#include <string>
#include <vector>
+
+
+/*
+ * Conduit AEP settings
+ *
+ * AEP settings can be found at: https://<ip-address>/lora_network.html
+ */
+static std::string config_network_name = "testtest";
+static std::string config_network_pass = "memememe";
+static uint8_t config_frequency_sub_band = 5;
+
+/*
+ * M2X settings
+ *
+ * M2X settings can be found at: https://m2x.att.com/devices
+ * Once a device is added you will see DEVICE ID and PRIMARY API KEY fields
+ * for the device.
+ */
+const char *m2x_device = "b621939e08743f9befaa46840dcb0388";
+const char *m2x_key = "ee32d3c67ca64408e20bd471dcdbd4ff";
+
+/*
+ * config_app_id and config_app_key are for public networks.
+ */
+/*
+static uint8_t app_id[8] = {0x00,0x01,0x02,0x03,0x0A,0x0B,0x0C,0x0D};
+std::vector<uint8_t> config_app_id;
+static uint8_t app_key[16] = {0x00,0x01,0x02,0x03,0x0A,0x0B,0x0C,0x0D};
+std::vector<uint8_t> config_app_key;
+*/
+
+
enum LED1_COLOR {
RED = 0,
GREEN = 1
@@ -96,24 +130,12 @@
SPI mDotspi(PA_7,PA_6,PA_5); // mDot external SPI mDot11, mDot4, and mDot18
-/* **** replace these values with the proper public or private network settings ****
- * config_network_nameand config_network_pass are for private networks.
- */
-static std::string config_network_name = "TAB-CubeNet";
-static std::string config_network_pass = "1nt3gral";
-static uint8_t config_frequency_sub_band = 5;
-/* config_app_id and config_app_key are for public networks.
-static uint8_t app_id[8] = {0x00,0x01,0x02,0x03,0x0A,0x0B,0x0C,0x0D};
-std::vector<uint8_t> config_app_id;
-static uint8_t app_key[16] = {0x00,0x01,0x02,0x03,0x0A,0x0B,0x0C,0x0D};
-std::vector<uint8_t> config_app_key;
-*/
uint8_t result, pckt_time=10;
char data;
unsigned char test;
-char txtstr[17];
+char txtstr[64];
int32_t num_whole, mdot_ret;
uint32_t pressure;
int16_t num_frac;
@@ -149,12 +171,11 @@
int main()
{
-
- std::vector<uint8_t> mdot_data;
+ std::vector<uint8_t> lora_pl;
std::vector<uint8_t> mdot_EUI;
uint16_t i = 0;
- debugUART.baud(921600);
+ debugUART.baud(115200);
// mDotUART.baud(9600); // mdot UART unused but available on external connector
Thread thread_1(pb1_debounce); // threads for de-bouncing pushbutton switches
@@ -399,6 +420,24 @@
pckt_time = 10;
i = 0;
+ lora_pl.clear();
+ lora_pl.push_back(19);
+ lora_pl.push_back(strlen(m2x_device));
+ lora_pl.insert(lora_pl.end(), m2x_device, m2x_device + strlen(m2x_device));
+ while ((mdot_ret = mdot_radio->send(lora_pl)) != mDot::MDOT_OK) {
+ log_error(mdot_radio, "Failed to register m2x_device", mdot_ret);
+ osDelay(2000);
+ }
+
+ lora_pl.clear();
+ lora_pl.push_back(20);
+ lora_pl.push_back(strlen(m2x_key));
+ lora_pl.insert(lora_pl.end(), m2x_key, m2x_key + strlen(m2x_key));
+ while ((mdot_ret = mdot_radio->send(lora_pl)) != mDot::MDOT_OK) {
+ log_error(mdot_radio, "Failed to register m2x_key", mdot_ret);
+ osDelay(2000);
+ }
+
do {
evbLCD->startUpdate();
evbLCD->clearBuffer();
@@ -474,7 +513,7 @@
sprintf(txtstr,"Alti=%ld.%03d m", num_whole, num_frac);
evbLCD->writeText(0,5,font_6x8,txtstr,strlen(txtstr));
num_whole = baro_data._temp / 16; // 8 bit signed significant integer
- num_frac = (baro_data._temp & 0x0F) * 625 / 100; // 4 bit fractional .0625 per bit
+ num_frac = (baro_data._temp & 0x0F) * 625 / 10; // 4 bit fractional .0625 per bit
sprintf(txtstr,"Temp=%ld.%03d C", num_whole, num_frac);
evbLCD->writeText(0,6,font_6x8,txtstr,strlen(txtstr));
@@ -484,36 +523,43 @@
lux_data = evbAmbLight->getData();
num_whole = lux_data * 24 / 100; // 16000 lux full scale .24 lux per bit
num_frac = lux_data * 24 % 100;
- sprintf(txtstr, "Light=%ld.%02d lux", num_whole, num_frac );
+ sprintf(txtstr, "Light=%ld.%02d lux", num_whole, num_frac);
evbLCD->writeText(0,7,font_6x8,txtstr,strlen(txtstr));
evbLCD->endUpdate();
printf("finished iteration %d\n\r",(++i));
if (i % pckt_time == 0) { // check packet counter will send packet every 2-5-10 data collection loops
- mdot_data.clear();
- mdot_data.push_back(0x0E); // key for Current Acceleration 3-Axis Value
- converts.f_s = accel_data._x *4; // shift data 2 bits while retaining sign
- mdot_data.push_back(converts.t_u[1]); // get 8 MSB of 14 bit value
- converts.f_s = accel_data._y * 4; // shift data 2 bits while retaining sign
- mdot_data.push_back(converts.t_u[1]); // get 8 MSB of 14 bit value
- converts.f_s = accel_data._z * 4; // shift data 2 bits while retaining sign
- mdot_data.push_back(converts.t_u[1]); // get 8 MSB of 14 bit value
- mdot_data.push_back(0x08); // key for Current Pressure Value
+ lora_pl.clear();
+ lora_pl.push_back(0x0E); // key for Current Acceleration 3-Axis Value
+ lora_pl.push_back(6);
+ converts.f_s = accel_data._x;
+ lora_pl.push_back(converts.t_u[1]);
+ lora_pl.push_back(converts.t_u[0]);
+ converts.f_s = accel_data._y;
+ lora_pl.push_back(converts.t_u[1]);
+ lora_pl.push_back(converts.t_u[0]);
+ converts.f_s = accel_data._z;
+ lora_pl.push_back(converts.t_u[1]);
+ lora_pl.push_back(converts.t_u[0]);
+ lora_pl.push_back(0x08); // key for Current Pressure Value
+ lora_pl.push_back(3);
convertl.f_u = pressure; // pressure data is 20 bits unsigned
- mdot_data.push_back(convertl.t_u[2]);
- mdot_data.push_back(convertl.t_u[1]);
- mdot_data.push_back(convertl.t_u[0]);
- mdot_data.push_back(0x05); // key for Current Ambient Light Value
+ lora_pl.push_back(convertl.t_u[2]);
+ lora_pl.push_back(convertl.t_u[1]);
+ lora_pl.push_back(convertl.t_u[0]);
+ lora_pl.push_back(0x05); // key for Current Ambient Light Value
+ lora_pl.push_back(2);
converts.f_u = lux_data; // data is 16 bits unsigned
- mdot_data.push_back(converts.t_u[1]);
- mdot_data.push_back(converts.t_u[0]);
- mdot_data.push_back(0x0B); // key for Current Temperature Value
+ lora_pl.push_back(converts.t_u[1]);
+ lora_pl.push_back(converts.t_u[0]);
+ lora_pl.push_back(0x0B); // key for Current Temperature Value
+ lora_pl.push_back(2);
converts.f_s = baro_data._temp; // temperature is signed 12 bit
- mdot_data.push_back(converts.t_u[1]);
- mdot_data.push_back(converts.t_u[0]);
+ lora_pl.push_back(converts.t_u[1]);
+ lora_pl.push_back(converts.t_u[0]);
- if ((mdot_ret = mdot_radio->send(mdot_data)) != mDot::MDOT_OK) {
+ if ((mdot_ret = mdot_radio->send(lora_pl)) != mDot::MDOT_OK) {
log_error(mdot_radio, "failed to send", mdot_ret);
} else {
printf("successfully sent data to gateway\r\n");
@@ -627,16 +673,16 @@
*/
void config_pkt_xmit (void const *args)
{
-
- std::vector<uint8_t> data;
+ std::vector<uint8_t> lora_pl;
while (true) {
Thread::signal_wait(0x10); // wait for pb2ISR to signal send
- data.clear();
- data.push_back(0x0F); // key for Configuration data (packet transmission timer)
- data.push_back(pckt_time);
+ lora_pl.clear();
+ lora_pl.push_back(0x0F); // key for Configuration data (packet transmission timer)
+ lora_pl.push_back(1);
+ lora_pl.push_back(pckt_time);
- if ((mdot_ret = mdot_radio->send(data)) != mDot::MDOT_OK) {
+ if ((mdot_ret = mdot_radio->send(lora_pl)) != mDot::MDOT_OK) {
log_error(mdot_radio, "failed to send config data", mdot_ret);
} else {
printf("sent config data to gateway\r\n");
James Maki
