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.
main.cpp@10:5974a7b2cf38, 2016-03-29 (annotated)
- Committer:
- kholland
- Date:
- Tue Mar 29 20:03:13 2016 +0000
- Revision:
- 10:5974a7b2cf38
- Parent:
- 9:555eb4259fc6
Support for HE910, LE910, GE910, DE910, ELS31 (CAT1); Added support for new sensors
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kholland | 4:e7a79d3542e1 | 1 | /* main.cpp */ |
kholland | 10:5974a7b2cf38 | 2 | /* v3.0 |
kholland | 10:5974a7b2cf38 | 3 | * Copyright (C) 2016 nimbelink.com, MIT License |
kholland | 4:e7a79d3542e1 | 4 | * |
kholland | 4:e7a79d3542e1 | 5 | * Permission is hereby granted, free of charge, to any person obtaining a copy of this software |
kholland | 4:e7a79d3542e1 | 6 | * and associated documentation files (the "Software"), to deal in the Software without restriction, |
kholland | 4:e7a79d3542e1 | 7 | * including without limitation the rights to use, copy, modify, merge, publish, distribute, |
kholland | 4:e7a79d3542e1 | 8 | * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is |
kholland | 4:e7a79d3542e1 | 9 | * furnished to do so, subject to the following conditions: |
kholland | 4:e7a79d3542e1 | 10 | * |
kholland | 4:e7a79d3542e1 | 11 | * The above copyright notice and this permission notice shall be included in all copies or |
kholland | 4:e7a79d3542e1 | 12 | * substantial portions of the Software. |
kholland | 4:e7a79d3542e1 | 13 | * |
kholland | 4:e7a79d3542e1 | 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING |
kholland | 4:e7a79d3542e1 | 15 | * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
kholland | 4:e7a79d3542e1 | 16 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
kholland | 4:e7a79d3542e1 | 17 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
kholland | 4:e7a79d3542e1 | 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
kholland | 4:e7a79d3542e1 | 19 | */ |
kholland | 0:3095958bc639 | 20 | |
kholland | 10:5974a7b2cf38 | 21 | /* |
kholland | 10:5974a7b2cf38 | 22 | * DESCRIPTION |
kholland | 10:5974a7b2cf38 | 23 | * This code updated sensor data on the Nimbelink ST Development Kit (NL-AB-ST-NCL) and sends |
kholland | 10:5974a7b2cf38 | 24 | * the information to www.dweet.io using the Thingname "DeviceID". That information can be |
kholland | 10:5974a7b2cf38 | 25 | * viewed using a Freeboard at www.freeboard.io (account required). Depending on your |
kholland | 10:5974a7b2cf38 | 26 | * ST Development Kit version, clone the following freeboard: |
kholland | 10:5974a7b2cf38 | 27 | * Rev A (Legacy): https://freeboard.io/board/jqlneI |
kholland | 10:5974a7b2cf38 | 28 | * Rev B (Current): https://freeboard.io/board/LhnbrX |
kholland | 10:5974a7b2cf38 | 29 | * |
kholland | 10:5974a7b2cf38 | 30 | * Please consult the wiki for more information |
kholland | 10:5974a7b2cf38 | 31 | */ |
kholland | 10:5974a7b2cf38 | 32 | |
kholland | 10:5974a7b2cf38 | 33 | /* |
kholland | 10:5974a7b2cf38 | 34 | * INSTRUCTIONS FOR USING THIS CODE |
kholland | 10:5974a7b2cf38 | 35 | * 1. Under the "DEFINE THE SKYWIRE MODEM" section of the code, uncomment the modem that you |
kholland | 10:5974a7b2cf38 | 36 | * are using to enable to proper setup and features of your Skywire modem. |
kholland | 10:5974a7b2cf38 | 37 | * |
kholland | 10:5974a7b2cf38 | 38 | * NOTE: Make sure the other Skywire modems listed are commented out. |
kholland | 10:5974a7b2cf38 | 39 | * |
kholland | 10:5974a7b2cf38 | 40 | * 2. Change the "DeviceID" to a unique identifier for your Nucleo board. One recommendation |
kholland | 10:5974a7b2cf38 | 41 | * would be to use the MEID/IMEI of your Skywire Modem. |
kholland | 10:5974a7b2cf38 | 42 | * |
kholland | 10:5974a7b2cf38 | 43 | * 3. If applicable, change the APN for your Skywire Modem. |
kholland | 10:5974a7b2cf38 | 44 | */ |
kholland | 10:5974a7b2cf38 | 45 | |
kholland | 0:3095958bc639 | 46 | #include "mbed.h" |
kholland | 0:3095958bc639 | 47 | #include "LPS331.h" |
kholland | 0:3095958bc639 | 48 | #include "LIS3DH.h" |
kholland | 0:3095958bc639 | 49 | #include "LM75B.h" |
kylerodgers | 7:00d66e743603 | 50 | #include "hts221.h" |
kholland | 10:5974a7b2cf38 | 51 | #include <string> |
kholland | 0:3095958bc639 | 52 | |
kholland | 10:5974a7b2cf38 | 53 | /* |
kholland | 10:5974a7b2cf38 | 54 | * DEFINE THE SKYWIRE MODEM |
kholland | 10:5974a7b2cf38 | 55 | * Uncomment only the modem that you are using. |
kholland | 10:5974a7b2cf38 | 56 | * Make sure only one modem is uncommented! |
kholland | 10:5974a7b2cf38 | 57 | */ |
kholland | 10:5974a7b2cf38 | 58 | //#define NL_SW_1xRTT_V // Verizon 2G Modem - CE910-DUAL |
kholland | 10:5974a7b2cf38 | 59 | //#define NL_SW_1xRTT_S // Sprint 2G Modem - CE910-DUAL |
kholland | 10:5974a7b2cf38 | 60 | //#define NL_SW_1xRTT_A // Aeris 2G Modem - CE910-DUAL |
kholland | 10:5974a7b2cf38 | 61 | //#define NL_SW_GPRS // AT&T/T-Mobile 2G Modem |
kholland | 10:5974a7b2cf38 | 62 | //#define NL_SW_EVDO_V // Verizon 3G Modem |
kholland | 10:5974a7b2cf38 | 63 | //#define NL_SW_EVDO_A // Aeris 3G Modem |
kholland | 10:5974a7b2cf38 | 64 | //#define NL_SW_HSPAP // AT&T/T-Mobile 3G Modem |
kholland | 10:5974a7b2cf38 | 65 | //#define NL_SW_HSPAPG // AT&T/T-Mobile 3G Modem w/ GPS |
kholland | 10:5974a7b2cf38 | 66 | //#define NL_SW_HSPAPE // GSM 3G Modem, EU |
kholland | 10:5974a7b2cf38 | 67 | //#define NL_SW_LTE_TSVG // Verizon 4G LTE Modem |
kholland | 10:5974a7b2cf38 | 68 | //#define NL_SW_LTE_TNAG // AT&T/T-Mobile 4G LTE Modem |
kholland | 10:5974a7b2cf38 | 69 | //#define NL_SW_LTE_TEUG // GSM 4G LTE Modem, EU |
kholland | 10:5974a7b2cf38 | 70 | //#define NL_SW_LTE_GELS3 // VZW LTE Cat 1 Modem |
kholland | 10:5974a7b2cf38 | 71 | |
kholland | 10:5974a7b2cf38 | 72 | /* --CHANGE THIS FOR YOUR SETUP-- */ |
kholland | 10:5974a7b2cf38 | 73 | #define DeviceID "yourDeviceIDhere" //Freeboard DweetIO unique ID |
kholland | 0:3095958bc639 | 74 | |
kholland | 10:5974a7b2cf38 | 75 | /* --CHANGE THIS FOR YORU SETUP (IF APPLICABLE)-- */ |
kholland | 10:5974a7b2cf38 | 76 | #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 |
kholland | 10:5974a7b2cf38 | 77 | std::string APN = "yourAPNhere"; |
kholland | 10:5974a7b2cf38 | 78 | #endif |
kholland | 0:3095958bc639 | 79 | |
kholland | 10:5974a7b2cf38 | 80 | DigitalOut myled(LED1); // Main LED |
kholland | 10:5974a7b2cf38 | 81 | DigitalOut skywire_en(PA_6); // Skywire Enable |
kholland | 10:5974a7b2cf38 | 82 | DigitalOut skywire_rts(PA_7); // Skywire Send |
kholland | 10:5974a7b2cf38 | 83 | DigitalOut green_LED(PA_1); // Green LED |
kholland | 10:5974a7b2cf38 | 84 | DigitalOut red_LED(PA_4); // Red LED |
kholland | 10:5974a7b2cf38 | 85 | DigitalOut blue_LED(PB_0); // Blue LED |
kholland | 0:3095958bc639 | 86 | |
kholland | 10:5974a7b2cf38 | 87 | AnalogIn photo_trans(PA_0); // Photo Transistor |
kholland | 10:5974a7b2cf38 | 88 | AnalogIn pot(PC_0); // Potentiometer |
kholland | 10:5974a7b2cf38 | 89 | DigitalIn button1(PB_3); // Button 1 |
kholland | 10:5974a7b2cf38 | 90 | DigitalIn button2(PC_1); // Button 2 |
kholland | 10:5974a7b2cf38 | 91 | |
kholland | 10:5974a7b2cf38 | 92 | Serial skywire(PA_9,PA_10); // Serial comms to Skywire |
kholland | 10:5974a7b2cf38 | 93 | Serial debug_pc(USBTX, USBRX); // USB connection to PC |
kholland | 10:5974a7b2cf38 | 94 | |
kholland | 10:5974a7b2cf38 | 95 | I2C i2c(PB_9,PB_8); // Setup I2C bus for sensors |
kholland | 10:5974a7b2cf38 | 96 | bool sw1; // Boolean to check if button 1 is pressed |
kholland | 10:5974a7b2cf38 | 97 | bool sw2; // Boolean to check if button 2 is pressed |
kholland | 10:5974a7b2cf38 | 98 | |
kholland | 10:5974a7b2cf38 | 99 | LPS331 pressure(i2c); // Pressure Sensor |
kholland | 10:5974a7b2cf38 | 100 | LM75B LM75_temp(PB_9,PB_8); // Temp Sensor |
kholland | 10:5974a7b2cf38 | 101 | // Accelerometer |
kholland | 0:3095958bc639 | 102 | LIS3DH accel(i2c, LIS3DH_V_CHIP_ADDR, LIS3DH_DR_NR_LP_100HZ, LIS3DH_FS_2G); |
kholland | 10:5974a7b2cf38 | 103 | HTS221 humidity(PB_9, PB_8); // Humidity Sensor |
kholland | 0:3095958bc639 | 104 | |
kholland | 10:5974a7b2cf38 | 105 | // char array for reading from Skywire |
kholland | 3:4b2176f6474c | 106 | char str[255]; |
kholland | 3:4b2176f6474c | 107 | |
kholland | 10:5974a7b2cf38 | 108 | // Variables for GPS |
kholland | 0:3095958bc639 | 109 | float latitude; |
kholland | 0:3095958bc639 | 110 | float longitude; |
kholland | 0:3095958bc639 | 111 | int number; |
kholland | 0:3095958bc639 | 112 | |
kholland | 10:5974a7b2cf38 | 113 | // Variables for UART comms |
kholland | 3:4b2176f6474c | 114 | volatile int rx_in=0; |
kholland | 3:4b2176f6474c | 115 | volatile int rx_out=0; |
kholland | 10:5974a7b2cf38 | 116 | const int buffer_size = 600; |
kholland | 3:4b2176f6474c | 117 | char rx_buffer[buffer_size+1]; |
kholland | 3:4b2176f6474c | 118 | char rx_line[buffer_size]; |
kholland | 3:4b2176f6474c | 119 | |
kholland | 10:5974a7b2cf38 | 120 | // Interrupt for the Skywire |
kholland | 10:5974a7b2cf38 | 121 | void Skywire_Rx_interrupt() |
kholland | 10:5974a7b2cf38 | 122 | { |
kholland | 3:4b2176f6474c | 123 | // Loop just in case more than one character is in UART's receive FIFO buffer |
kholland | 3:4b2176f6474c | 124 | // Stop if buffer full |
kholland | 3:4b2176f6474c | 125 | while ((skywire.readable()) && (((rx_in + 1) % buffer_size) != rx_out)) { |
kholland | 3:4b2176f6474c | 126 | rx_buffer[rx_in] = skywire.getc(); |
kholland | 3:4b2176f6474c | 127 | rx_in = (rx_in + 1) % buffer_size; |
kholland | 3:4b2176f6474c | 128 | } |
kholland | 3:4b2176f6474c | 129 | return; |
kholland | 3:4b2176f6474c | 130 | } |
kholland | 3:4b2176f6474c | 131 | |
kholland | 10:5974a7b2cf38 | 132 | // Function to blink LEDs for debugging |
kholland | 10:5974a7b2cf38 | 133 | // NOTE: Currently not used |
kholland | 10:5974a7b2cf38 | 134 | void blink_leds(int num) |
kholland | 10:5974a7b2cf38 | 135 | { |
kholland | 10:5974a7b2cf38 | 136 | for (int i = 0; i < num; i++) { |
kholland | 10:5974a7b2cf38 | 137 | blue_LED = 0; |
kholland | 10:5974a7b2cf38 | 138 | wait(0.5); |
kholland | 10:5974a7b2cf38 | 139 | blue_LED = 1; |
kholland | 10:5974a7b2cf38 | 140 | wait(0.5); |
kholland | 10:5974a7b2cf38 | 141 | } |
kholland | 10:5974a7b2cf38 | 142 | } |
kholland | 10:5974a7b2cf38 | 143 | |
kholland | 10:5974a7b2cf38 | 144 | // Read line from the UART |
kholland | 10:5974a7b2cf38 | 145 | void read_line() |
kholland | 10:5974a7b2cf38 | 146 | { |
kholland | 3:4b2176f6474c | 147 | int i; |
kholland | 3:4b2176f6474c | 148 | i = 0; |
kholland | 3:4b2176f6474c | 149 | // Start Critical Section - don't interrupt while changing global buffer variables |
kholland | 3:4b2176f6474c | 150 | __disable_irq(); |
kholland | 3:4b2176f6474c | 151 | // Loop reading rx buffer characters until end of line character |
kholland | 3:4b2176f6474c | 152 | while ((i==0) || (rx_line[i-1] != '\n')) { |
kholland | 3:4b2176f6474c | 153 | // Wait if buffer empty |
kholland | 3:4b2176f6474c | 154 | if (rx_in == rx_out) { |
kholland | 3:4b2176f6474c | 155 | // End Critical Section - need to allow rx interrupt to get new characters for buffer |
kholland | 3:4b2176f6474c | 156 | __enable_irq(); |
kholland | 3:4b2176f6474c | 157 | while (rx_in == rx_out) { |
kholland | 3:4b2176f6474c | 158 | } |
kholland | 3:4b2176f6474c | 159 | // Start Critical Section - don't interrupt while changing global buffer variables |
kholland | 3:4b2176f6474c | 160 | __disable_irq(); |
kholland | 3:4b2176f6474c | 161 | } |
kholland | 3:4b2176f6474c | 162 | rx_line[i] = rx_buffer[rx_out]; |
kholland | 3:4b2176f6474c | 163 | i++; |
kholland | 3:4b2176f6474c | 164 | rx_out = (rx_out + 1) % buffer_size; |
kholland | 3:4b2176f6474c | 165 | } |
kholland | 3:4b2176f6474c | 166 | // End Critical Section |
kholland | 3:4b2176f6474c | 167 | __enable_irq(); |
kholland | 3:4b2176f6474c | 168 | rx_line[i-1] = 0; |
kholland | 3:4b2176f6474c | 169 | return; |
kholland | 3:4b2176f6474c | 170 | } |
kholland | 10:5974a7b2cf38 | 171 | |
kholland | 10:5974a7b2cf38 | 172 | // Wait for specific response |
kholland | 10:5974a7b2cf38 | 173 | int WaitForResponse(char* response, int num) |
kholland | 10:5974a7b2cf38 | 174 | { |
kholland | 3:4b2176f6474c | 175 | do { |
kholland | 3:4b2176f6474c | 176 | read_line(); |
kholland | 3:4b2176f6474c | 177 | debug_pc.printf("Waiting for: %s, Recieved: %s\r\n", response, rx_line); |
kholland | 3:4b2176f6474c | 178 | } while (strncmp(rx_line, response, num)); |
kholland | 3:4b2176f6474c | 179 | return 0; |
kholland | 3:4b2176f6474c | 180 | } |
kholland | 10:5974a7b2cf38 | 181 | |
kholland | 10:5974a7b2cf38 | 182 | int main() |
kholland | 0:3095958bc639 | 183 | { |
kholland | 0:3095958bc639 | 184 | float axis[3]; |
kholland | 0:3095958bc639 | 185 | float press; |
kholland | 0:3095958bc639 | 186 | float temp; |
kylerodgers | 7:00d66e743603 | 187 | float humi; |
kylerodgers | 7:00d66e743603 | 188 | float dummy_temp; |
kholland | 0:3095958bc639 | 189 | |
kholland | 10:5974a7b2cf38 | 190 | // Setup serial comms with Skywire and PC |
kholland | 0:3095958bc639 | 191 | debug_pc.baud(115200); |
kholland | 0:3095958bc639 | 192 | skywire.baud(115200); |
kholland | 10:5974a7b2cf38 | 193 | debug_pc.printf("SystemCoreClock = %d Hz\r\n", SystemCoreClock); |
kholland | 3:4b2176f6474c | 194 | skywire.attach(&Skywire_Rx_interrupt, Serial::RxIrq); |
kholland | 10:5974a7b2cf38 | 195 | |
kholland | 10:5974a7b2cf38 | 196 | // Turn on blue LED |
kholland | 10:5974a7b2cf38 | 197 | green_LED = 0; |
kholland | 10:5974a7b2cf38 | 198 | red_LED = 0; |
kholland | 10:5974a7b2cf38 | 199 | blue_LED = 1; |
kholland | 10:5974a7b2cf38 | 200 | |
kholland | 0:3095958bc639 | 201 | skywire_rts=0; |
kholland | 0:3095958bc639 | 202 | myled=0; |
kholland | 3:4b2176f6474c | 203 | debug_pc.printf("Starting Demo...\r\n"); |
kholland | 3:4b2176f6474c | 204 | debug_pc.printf("Waiting for Skywire to Boot...\r\n"); |
kholland | 10:5974a7b2cf38 | 205 | |
kholland | 0:3095958bc639 | 206 | //Enable Skywire |
kholland | 0:3095958bc639 | 207 | skywire_en=0; |
kholland | 0:3095958bc639 | 208 | wait(2); |
kholland | 0:3095958bc639 | 209 | skywire_en=1; |
kholland | 0:3095958bc639 | 210 | wait(2); |
kholland | 0:3095958bc639 | 211 | skywire_en=0; |
kholland | 3:4b2176f6474c | 212 | |
kholland | 3:4b2176f6474c | 213 | myled=1; |
kholland | 3:4b2176f6474c | 214 | |
kholland | 10:5974a7b2cf38 | 215 | // Wait for modem to initialize |
kholland | 10:5974a7b2cf38 | 216 | // Wait time is different for each modem |
kholland | 10:5974a7b2cf38 | 217 | #if defined NL_SW_LTE_GELS3 |
kholland | 10:5974a7b2cf38 | 218 | wait(60); |
kholland | 10:5974a7b2cf38 | 219 | #elif defined NL_SW_LTE_TSVG || defined NL_SW_LTE_TNAG || defined NL_SW_LTE_TEUG |
kholland | 10:5974a7b2cf38 | 220 | wait(15); |
kholland | 10:5974a7b2cf38 | 221 | #else |
kholland | 10:5974a7b2cf38 | 222 | wait(5); |
kholland | 10:5974a7b2cf38 | 223 | #endif |
kholland | 10:5974a7b2cf38 | 224 | |
kholland | 10:5974a7b2cf38 | 225 | // Start temp reading |
kholland | 3:4b2176f6474c | 226 | LM75_temp.open(); |
kholland | 10:5974a7b2cf38 | 227 | |
kholland | 3:4b2176f6474c | 228 | //Turn off echo |
kholland | 10:5974a7b2cf38 | 229 | // Helps with checking responses from Skywire |
kholland | 10:5974a7b2cf38 | 230 | debug_pc.printf("Turning off echo...\r\n"); |
kholland | 3:4b2176f6474c | 231 | skywire.printf("ATE0\r\n"); |
kholland | 3:4b2176f6474c | 232 | WaitForResponse("OK", 2); |
kholland | 10:5974a7b2cf38 | 233 | |
kholland | 10:5974a7b2cf38 | 234 | // Turn on DNS Response Caching |
kholland | 10:5974a7b2cf38 | 235 | // Used on the Telit-based Skywires |
kholland | 10:5974a7b2cf38 | 236 | #if !defined NL_SW_LTE_GELS3 |
kholland | 10:5974a7b2cf38 | 237 | debug_pc.printf("Turning on DNS Cacheing to improve speed..."); |
kholland | 10:5974a7b2cf38 | 238 | skywire.printf("AT#CACHEDNS=1\r\n"); |
kholland | 10:5974a7b2cf38 | 239 | WaitForResponse("OK", 2); |
kholland | 10:5974a7b2cf38 | 240 | #endif |
kholland | 10:5974a7b2cf38 | 241 | |
kholland | 3:4b2176f6474c | 242 | debug_pc.printf("Connecting to Network...\r\n"); |
kholland | 0:3095958bc639 | 243 | // get IP address |
kholland | 10:5974a7b2cf38 | 244 | #if defined NL_SW_LTE_GELS3 |
kholland | 10:5974a7b2cf38 | 245 | // The last parameter in AT+SQNSCFG sets the timeout if transmit buffer is not full |
kholland | 10:5974a7b2cf38 | 246 | // Time is in hundreds of ms: so, a value of 5 = 500ms |
kholland | 10:5974a7b2cf38 | 247 | debug_pc.printf("Configuring context part 1...\r\n"); |
kholland | 10:5974a7b2cf38 | 248 | skywire.printf("AT+SQNSCFG=3,3,300,90,600,5\r\n"); |
kholland | 10:5974a7b2cf38 | 249 | WaitForResponse("OK", 2); |
kholland | 10:5974a7b2cf38 | 250 | wait(1); |
kholland | 10:5974a7b2cf38 | 251 | debug_pc.printf("Configuring context part 2...\r\n"); |
kholland | 10:5974a7b2cf38 | 252 | skywire.printf("AT+CGDCONT=3,\"IP\",\"vzwinternet\"\r\n"); |
kholland | 10:5974a7b2cf38 | 253 | WaitForResponse("OK", 2); |
kholland | 10:5974a7b2cf38 | 254 | wait(1); |
kholland | 10:5974a7b2cf38 | 255 | debug_pc.printf("Activating context...\r\n"); |
kholland | 10:5974a7b2cf38 | 256 | skywire.printf("AT+CGACT=1,3\r\n"); |
kholland | 10:5974a7b2cf38 | 257 | #elif defined NL_SW_LTE_TSVG |
kholland | 10:5974a7b2cf38 | 258 | // The last parameter in AT#SCFG sets the timeout if transmit buffer is not full |
kholland | 10:5974a7b2cf38 | 259 | // Time is in hundreds of ms: so, a value of 5 = 500 ms |
kholland | 10:5974a7b2cf38 | 260 | skywire.printf("AT#SCFG=3,3,300,90,600,5\r\n"); |
kholland | 10:5974a7b2cf38 | 261 | WaitForResponse("OK", 2); |
kholland | 10:5974a7b2cf38 | 262 | wait(1); |
kholland | 10:5974a7b2cf38 | 263 | skywire.printf("AT+CGDCONT=3,\"IP\",\"%s\"\r\n", APN); |
kholland | 10:5974a7b2cf38 | 264 | WaitForResponse("OK", 2); |
kholland | 10:5974a7b2cf38 | 265 | wait(1); |
kholland | 10:5974a7b2cf38 | 266 | skywire.printf("AT#SGACT=3,1\r\n"); |
kholland | 10:5974a7b2cf38 | 267 | WaitForResponse("#SGACT", 6); |
kholland | 10:5974a7b2cf38 | 268 | #else |
kholland | 10:5974a7b2cf38 | 269 | // The last parameter in AT#SCFG sets the timeout if transmit buffer is not full |
kholland | 10:5974a7b2cf38 | 270 | // Time is in hundreds of ms: so, a value of 5 = 500 ms |
kholland | 10:5974a7b2cf38 | 271 | skywire.printf("AT#SCFG=1,1,300,90,600,5\r\n"); |
kholland | 10:5974a7b2cf38 | 272 | WaitForResponse("OK", 2); |
kholland | 10:5974a7b2cf38 | 273 | skywire.printf("AT#SGACT=1,1\r\n"); |
kholland | 10:5974a7b2cf38 | 274 | WaitForResponse("#SGACT", 6); |
kholland | 10:5974a7b2cf38 | 275 | #endif |
kholland | 3:4b2176f6474c | 276 | WaitForResponse("OK", 2); |
kylerodgers | 7:00d66e743603 | 277 | |
kholland | 10:5974a7b2cf38 | 278 | // Get triangulation data |
kholland | 10:5974a7b2cf38 | 279 | // NOTE: This only works on the below modems! |
kholland | 10:5974a7b2cf38 | 280 | #if defined NL_SW_1xRTT_V || defined NL_SW_1xRTT_S || defined NL_SW_1xRTT_A || defined NL_SW_GPRS || defined NL_SW_EVDO_V || defined NL_SW_EVDO_A || defined NL_SW_HSPAP || defined NL_SW_HSPAPG || defined NL_SW_HSPAPE |
kholland | 10:5974a7b2cf38 | 281 | //get location approximation from cell tower information |
kholland | 10:5974a7b2cf38 | 282 | skywire.printf("AT#AGPSSND\r\n"); |
kholland | 10:5974a7b2cf38 | 283 | WaitForResponse("#AGPSRING:", 10); |
kholland | 10:5974a7b2cf38 | 284 | sscanf(rx_line, "%s %d,%f,%f,", str, &number, &latitude, &longitude); |
kholland | 10:5974a7b2cf38 | 285 | debug_pc.printf("Location: Latt:%f, Long:%f\r\n", latitude, longitude); |
kholland | 10:5974a7b2cf38 | 286 | #endif |
kholland | 10:5974a7b2cf38 | 287 | |
kholland | 10:5974a7b2cf38 | 288 | red_LED = 0; |
kholland | 10:5974a7b2cf38 | 289 | blue_LED = 0; |
kholland | 10:5974a7b2cf38 | 290 | green_LED = 1; |
kholland | 3:4b2176f6474c | 291 | |
kholland | 0:3095958bc639 | 292 | while(1) { |
kholland | 10:5974a7b2cf38 | 293 | // Green on to indicate code position |
kholland | 10:5974a7b2cf38 | 294 | // Start of loop. Either entered loop for the first time or just sent to dweet.io |
kholland | 10:5974a7b2cf38 | 295 | red_LED = 0; |
kholland | 10:5974a7b2cf38 | 296 | blue_LED = 0; |
kholland | 10:5974a7b2cf38 | 297 | green_LED = 1; |
kholland | 10:5974a7b2cf38 | 298 | // connect to dweet.io |
kholland | 10:5974a7b2cf38 | 299 | #if defined NL_SW_LTE_GELS3 |
kholland | 10:5974a7b2cf38 | 300 | skywire.printf("AT+SQNSD=3,0,80,\"dweet.io\"\r\n"); |
kholland | 10:5974a7b2cf38 | 301 | #elif defined NL_SW_LTE_TSVG |
kholland | 10:5974a7b2cf38 | 302 | skywire.printf("AT#SD=3,0,80,\"dweet.io\"\r\n"); |
kholland | 10:5974a7b2cf38 | 303 | #else |
kholland | 10:5974a7b2cf38 | 304 | skywire.printf("AT#SD=1,0,80,\"dweet.io\"\r\n"); |
kholland | 10:5974a7b2cf38 | 305 | #endif |
kholland | 10:5974a7b2cf38 | 306 | WaitForResponse("CONNECT", 7); |
kholland | 10:5974a7b2cf38 | 307 | |
kholland | 10:5974a7b2cf38 | 308 | |
kholland | 10:5974a7b2cf38 | 309 | // Update the sensors |
kholland | 0:3095958bc639 | 310 | temp = (float)LM75_temp; |
kholland | 10:5974a7b2cf38 | 311 | //temp = (temp * 9)/5 + 32; // convert C to F |
kholland | 3:4b2176f6474c | 312 | debug_pc.printf("Temp = %.3f\r\n", temp); |
kholland | 0:3095958bc639 | 313 | press=(float)pressure.value() / 4096; |
kholland | 3:4b2176f6474c | 314 | debug_pc.printf("Pressure = %.3f\r\n", press); |
kylerodgers | 7:00d66e743603 | 315 | humidity.ReadTempHumi(&dummy_temp, &humi); |
kylerodgers | 7:00d66e743603 | 316 | debug_pc.printf("Humidity = %.3f\r\n", humi); |
kholland | 0:3095958bc639 | 317 | accel.read_data(axis); |
kholland | 3:4b2176f6474c | 318 | debug_pc.printf("Accel = %.3f, %.3f, %.3f\r\n", axis[0], axis[1], axis[2]); |
kholland | 10:5974a7b2cf38 | 319 | |
kholland | 10:5974a7b2cf38 | 320 | wait(1); |
kholland | 10:5974a7b2cf38 | 321 | |
kholland | 10:5974a7b2cf38 | 322 | // Check buttons for presses |
kholland | 10:5974a7b2cf38 | 323 | if (button1 == 0) |
kholland | 10:5974a7b2cf38 | 324 | sw1 = 0; |
kholland | 10:5974a7b2cf38 | 325 | else |
kholland | 10:5974a7b2cf38 | 326 | sw1 = 1; |
kholland | 10:5974a7b2cf38 | 327 | if (button2 == 0) |
kholland | 10:5974a7b2cf38 | 328 | sw2 = 0; |
kholland | 10:5974a7b2cf38 | 329 | else |
kholland | 10:5974a7b2cf38 | 330 | sw2 = 1; |
kholland | 3:4b2176f6474c | 331 | |
kholland | 10:5974a7b2cf38 | 332 | // Green on to indicate code position: |
kholland | 10:5974a7b2cf38 | 333 | // Sensors updated, have not sent to dweet.io |
kholland | 10:5974a7b2cf38 | 334 | red_LED = 1; |
kholland | 10:5974a7b2cf38 | 335 | green_LED = 0; |
kholland | 10:5974a7b2cf38 | 336 | blue_LED = 0; |
kholland | 10:5974a7b2cf38 | 337 | |
kholland | 10:5974a7b2cf38 | 338 | debug_pc.printf("Sending information...\r\n"); |
kholland | 10:5974a7b2cf38 | 339 | // Report the sensor data to dweet.io |
kholland | 10:5974a7b2cf38 | 340 | skywire.printf("POST /dweet/for/%s?temp=%.3f&p=%.3f&X=%.3f&Y=%.3f&Z=%.3f&La=%f&Lo=%f&sw1=%d&sw2=%d&pot=%.3f&photo=%.3f&humidity=%.3f HTTP/1.0\r\n\r\n", DeviceID, temp, press, axis[0], axis[1], axis[2], latitude, longitude, sw1, sw2, (pot * 3), (photo_trans * 100), humi); |
kholland | 10:5974a7b2cf38 | 341 | |
kholland | 10:5974a7b2cf38 | 342 | // Blue on to indicate code position |
kholland | 10:5974a7b2cf38 | 343 | // Data sent to dweet |
kholland | 10:5974a7b2cf38 | 344 | red_LED = 0; |
kholland | 10:5974a7b2cf38 | 345 | green_LED = 0; |
kholland | 10:5974a7b2cf38 | 346 | blue_LED = 1; |
kholland | 10:5974a7b2cf38 | 347 | |
kholland | 10:5974a7b2cf38 | 348 | // Wait for response from dweet.io |
kholland | 10:5974a7b2cf38 | 349 | #if defined NL_SW_LTE_GELS3 |
kholland | 10:5974a7b2cf38 | 350 | WaitForResponse("OK", 2); |
kholland | 10:5974a7b2cf38 | 351 | wait(1); |
kholland | 10:5974a7b2cf38 | 352 | #else |
kholland | 10:5974a7b2cf38 | 353 | WaitForResponse("NO CARRIER", 10); |
kholland | 10:5974a7b2cf38 | 354 | #endif |
kholland | 3:4b2176f6474c | 355 | } |
kholland | 10:5974a7b2cf38 | 356 | } |