A first code example to get you started with the QW (GPS) Shield for SIGFOX development. It provides a serial connection to the modem over usb and transmits a SIGFOX message upon a button press.
HelloWorld QW Development kit
Preloaded code example
The QW development kits ship with this code example. This example allows you to talk straight to the TD1208 modem when using a virtual com port (note: local echo is off). This code-example also sends a SIGFOX message whenever you press a button. The message contains the button number and the measured environment temperature. The first byte is always 0x01.
More information and other example code can be found on the component page by clicking the link below: https://developer.mbed.org/components/QW-SIGFOX-Development-Kit/
main.cpp
- Committer:
- quicksand
- Date:
- 2016-05-02
- Revision:
- 3:4da15d6e1429
- Parent:
- 2:a4a68a858624
- Child:
- 4:69df63eeb91e
File content as of revision 3:4da15d6e1429:
#include "mbed.h" #include "math.h" #include "LinearTempSensor.h" /* The 4 onboard LEDs */ DigitalOut LED_0 (PB_6); DigitalOut LED_1 (PA_7); DigitalOut LED_2 (PA_6); DigitalOut LED_3 (PA_5); /* The 2 user buttons */ InterruptIn SW1(PA_8); InterruptIn SW2(PB_10); /*Temperature sensor */ LinearTempSensor sensor(PA_0, 5); /* Function prototypes */ void sw1interrupt(); void sw2interrupt(); void beat(); void sertmout(); bool modem_command_check_ok(char * command); void modem_setup(); void txData(uint8_t btn); bool ser_timeout = false; Ticker heartbeat; /* Serial port over USB */ Serial pc(USBTX, USBRX); /* Serial connection to sigfox modem */ Serial modem(PA_9, PA_10); int main() { /* Setup TD120x */ wait(3); modem_setup(); /* Test temperature sensor */ float vOut = sensor.Sense(); pc.printf("\n\rMCP9700 reading: Vout: %.2f mV", vOut); /* Turn off all LED */ LED_0 = 1; LED_1 = 1; LED_2 = 1; LED_3 = 1; /* Blinking LED */ heartbeat.attach(&beat, 0.5); /* Setup button interrupts */ SW2.fall(&sw2interrupt); SW1.fall(&sw1interrupt); while(1) { if(pc.readable()) { modem.putc(pc.getc()); } if(modem.readable()) { pc.putc(modem.getc()); } } } void beat() { LED_0 = !LED_0; } /* Button 1 ISR */ void sw1interrupt() { pc.printf("\n\rButton 1 pressed\n\r"); LED_1 = 0; txData(1); } /* Button 2 ISR */ void sw2interrupt() { pc.printf("\n\rButton 2 pressed\n\r"); LED_2 = 0; txData(2); } /* TX data over Sigfox */ void txData (uint8_t btn) { float tAvg; char command[32]; sensor.Sense(); tAvg = sensor.GetAverageTemp(); char temperature[6] =""; sprintf(temperature, "%3.1f", tAvg); for(int i = 0; i < 5; i++) if(temperature[i]==0) temperature[i] = ' '; sprintf(command, "AT$SF=0142544e%x20%x%x%x%x%x43,2,0\n", btn+48, temperature[0],temperature[1],temperature[2],temperature[3],temperature[4]); pc.printf("Sending pressed button %d and temperature %s C over Sigfox.\n", btn, temperature); pc.printf("using modem command: %s", command); modem_command_check_ok(command); LED_1 = 1; LED_2 = 1; } void modem_setup() { /* Reset to factory defaults */ if(modem_command_check_ok("AT&F")) { pc.printf("Factory reset succesfull\r\n"); } else { pc.printf("Factory reset TD120x failed\r\n"); } /* Disable local echo */ modem.printf("ATE0\n"); if(modem_command_check_ok("ATE0")) { pc.printf("Local echo disabled\r\n"); } /* Write to mem */ if(modem_command_check_ok("AT&W")) { pc.printf("Settings saved!\r\n"); } } /* ISR for serial timeout */ void sertmout() { ser_timeout = true; } bool modem_command_check_ok(char * command) { /* first clear serial data buffers */ while(modem.readable()) modem.getc(); /* Timeout for response of the modem */ Timeout tmout; ser_timeout = false; /* Buffer for incoming data */ char responsebuffer[6]; /* Flag to set when we get 'OK' response */ bool ok = false; bool error = false; /* Print command to TD120x */ modem.printf(command); /* Newline to activate command */ modem.printf("\n"); /* Wait untill serial feedback, max 3 seconds before timeout */ tmout.attach(&sertmout, 3.0); while(!modem.readable()&& ser_timeout == false); while(!ok && !ser_timeout && !error) { if(modem.readable()) { for(int i = 0; i < 5; i++) { responsebuffer[i] = responsebuffer[i+1]; } responsebuffer[5] = modem.getc(); if(responsebuffer[0] == '\r' && responsebuffer[1] == '\n' && responsebuffer[2] == 'O' && responsebuffer[3] == 'K' && responsebuffer[4] == '\r' && responsebuffer[5] == '\n' ) { ok = true; } else if(responsebuffer[0] == '\r' && responsebuffer[1] == '\n' && responsebuffer[2] == 'E' && responsebuffer[3] == 'R' && responsebuffer[4] == 'R' && responsebuffer[5] == 'O' ) { error = true; } } } tmout.detach(); return ok; }