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
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
- Go to https://freeboard.io/ and create a user account
- Once you are logged into your Freeboard account, go to https://freeboard.io/board/PJI272 and clone the dashboard by clicking the CLONE link in the lower right corner
- Old Revision of dashboard is here https://freeboard.io/board/jqlneI
- The new dashboard will show up on you account list under My Freeboards, you can then edit the name to whatever you like
- Under the Datasources tab on the dashboard, click the skywire link
- 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.
- 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.
Diff: main.cpp
- 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);