Demo using a Nimbelink Skywire cellular modem paired with ST Nucleo. This demo reads several sensors and reports them to a Freeboard dashboard using dweet.io from Buglabs

Dependencies:   LIS3DH LM75B LPS331 hts221 mbed

Fork of Skywire_Demo by NimbeLink

Getting Started Guide

  • Set the JP5 jumper to E5V on the Nucleo
  • Place the Skywire Shield onto the Nucleo as pictured
  • Place the Skywire modem onto the Shield as picture and attach the antenna U.FL coax cable as pictured
  • Plug the 12V wall supply into the Skywire Shield /media/uploads/kholland/st00000002-sm.jpg
  • The new dashboard will show up on you account list under My Freeboards, you can then edit the name to whatever you like /media/uploads/kholland/default_skywire2.jpg
  • Under the Datasources tab on the dashboard, click the skywire link /media/uploads/kholland/default_skywire5.jpg
  • Change the THING NAME field to a unique string, we recommended using the MEID or IMEI on the Skywire Modem, but it could be anything you want. /media/uploads/kholland/default_skywire4.jpg
  • Next, Import the Skywire_Demo program into the online compiler
  • Open main.cpp. Starting at Line 58, there is a list of Skywire Modems. Uncomment the Skywire Modem that you are using. Make sure only one Skywire Modem is uncommented:

main.cpp

/*
 * DEFINE THE SKYWIRE MODEM
 * Uncomment only the modem that you are using.
 * Make sure only one modem is uncommented!
 */
//#define NL_SW_1xRTT_V         // Verizon 2G Modem - CE910-DUAL
//#define NL_SW_1xRTT_S         // Sprint 2G Modem - CE910-DUAL
//#define NL_SW_1xRTT_A         // Aeris 2G Modem - CE910-DUAL
//#define NL_SW_GPRS            // AT&T/T-Mobile 2G Modem
//#define NL_SW_EVDO_V          // Verizon 3G Modem
//#define NL_SW_EVDO_A          // Aeris 3G Modem
//#define NL_SW_HSPAP           // AT&T/T-Mobile 3G Modem
//#define NL_SW_HSPAPG          // AT&T/T-Mobile 3G Modem w/ GPS
//#define NL_SW_HSPAPE          // GSM 3G Modem, EU
//#define NL_SW_LTE_TSVG        // Verizon 4G LTE Modem
//#define NL_SW_LTE_TNAG        // AT&T/T-Mobile 4G LTE Modem
//#define NL_SW_LTE_TEUG        // GSM 4G LTE Modem, EU
//#define NL_SW_LTE_GELS3       // VZW LTE Cat 1 Modem
  • Next, to Line 73 in main.cpp, and change the DeviceID to the THING NAME you entered into your Freeboard:

main.cpp

/* --CHANGE THIS FOR YOUR SETUP" -- */
#define DeviceID "DweetIODeviceName"  //Freeboard DweetIO unique ID
  • If applicable, go to Line 77 in main.cpp and change the APN to your specific APN:

main.cpp

/* --CHANGE THIS FOR YORU SETUP (IF APPLICABLE)-- */
#if defined NL_SW_HSPAP || defined NL_SW_HSPAPG || defined NL_SW_HSPAPE || defined NL_SW_LTE_TSVG || defined NL_SW_LTE_TNAG || defined NL_SW_LTE_TEUG || defined NL_SW_LTE_GELS3
    std::string APN = "yourAPNhere";
#endif
  • Compile and upload to the Nucleo, cycle power to the shield and the sensor data should start to upload to your new Freeboard.
Revision:
7:00d66e743603
Parent:
5:977fa2ac1589
Child:
8:060eaa992407
--- a/main.cpp	Tue Mar 03 18:32:03 2015 +0000
+++ b/main.cpp	Fri Jul 24 17:59:06 2015 +0000
@@ -1,4 +1,5 @@
 /* main.cpp */
+ * v1.1
 /* Copyright (C) 2015 nimbelink.com, MIT License
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
@@ -21,9 +22,10 @@
 #include "LPS331.h"
 #include "LIS3DH.h"
 #include "LM75B.h"
+#include "hts221.h"
 
 /* --CHANGE THIS FOR YOUR SETUP" -- */
-#define DeviceID "DweetIODeviceName"  //Freeboard DweetIO unique ID
+#define DeviceID "A1000032BD4DAF"  //Freeboard DweetIO unique ID
 
 DigitalOut myled(LED1);
 DigitalOut skywire_en(PA_6);
@@ -38,6 +40,7 @@
 LPS331 pressure(i2c);
 LM75B LM75_temp(PB_9,PB_8);
 LIS3DH accel(i2c, LIS3DH_V_CHIP_ADDR, LIS3DH_DR_NR_LP_100HZ, LIS3DH_FS_2G);
+HTS221 humidity(PB_9, PB_8);
 
 
 char str[255];
@@ -100,6 +103,8 @@
     float axis[3];
     float press;
     float temp;
+    float humi;
+    float dummy_temp;
 
 
     debug_pc.baud(115200);
@@ -136,6 +141,7 @@
     // connect to dweet.io
     skywire.printf("AT#HTTPCFG=1,\"dweet.io\",80,0\r\n");
     WaitForResponse("OK", 2);
+
     
     //get location approximation from cell tower information
     skywire.printf("AT#AGPSSND\r\n");
@@ -144,6 +150,7 @@
     //debug_pc.printf("Skywire says: %s\r\n", rx_line);
     sscanf(rx_line, "%s %d,%f,%f,", str, &number, &latitude, &longitude);
     debug_pc.printf("Location: Latt:%f, Long:%f\r\n", latitude, longitude);
+    
     wait(3);
     
     while(1) {
@@ -151,12 +158,14 @@
         debug_pc.printf("Temp = %.3f\r\n", temp);
         press=(float)pressure.value() / 4096;
         debug_pc.printf("Pressure = %.3f\r\n", press);
+        humidity.ReadTempHumi(&dummy_temp, &humi);
+        debug_pc.printf("Humidity = %.3f\r\n", humi);
         accel.read_data(axis);
         debug_pc.printf("Accel = %.3f, %.3f, %.3f\r\n", axis[0], axis[1], axis[2]);
-       // wait(10);
+        //wait(10);
         
         //Report Sensor Data to dweet.io
-        skywire.printf("AT#HTTPQRY=1,0,\"/dweet/for/%s?temperature=%.3f&pressure=%.3f&X=%.3f&Y=%.3f&Z=%.3f&Latitude=%f&Longitude=%f\"\r\n", DeviceID, temp, press, axis[0], axis[1], axis[2], latitude, longitude);
+        skywire.printf("AT#HTTPQRY=1,0,\"/dweet/for/%s?temp=%.3f&press=%.3f&humi=%.3f&X=%.3f&Y=%.3f&Z=%.3f&Latitude=%f&Longitude=%f\"\r\n", DeviceID, temp, press, humi, axis[0], axis[1], axis[2], latitude, longitude);
         WaitForResponse("#HTTPRING", 9);
         skywire.printf("AT#HTTPRCV=1\r\n");
         WaitForResponse("OK", 2);