Demonstration of sending an SMS using the Arch GPRS V2

Dependencies:   mbed

Committer:
jtr89
Date:
Sun Oct 25 02:11:56 2015 +0000
Revision:
0:c58b0bf4e8ee
Initial commit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jtr89 0:c58b0bf4e8ee 1 /*
jtr89 0:c58b0bf4e8ee 2 * Project: Seeed Arch GPRS V2 Send SMS Hello World
jtr89 0:c58b0bf4e8ee 3 * Author: Joseph Radford
jtr89 0:c58b0bf4e8ee 4 * Date: 25/10/2015
jtr89 0:c58b0bf4e8ee 5 * Target: Arch GPRS V2
jtr89 0:c58b0bf4e8ee 6 * Peripherals: SIM Card
jtr89 0:c58b0bf4e8ee 7 */
jtr89 0:c58b0bf4e8ee 8
jtr89 0:c58b0bf4e8ee 9 #include "mbed.h"
jtr89 0:c58b0bf4e8ee 10
jtr89 0:c58b0bf4e8ee 11 // declare pins for comms with the SIM900
jtr89 0:c58b0bf4e8ee 12 #define TX_GSM P1_27
jtr89 0:c58b0bf4e8ee 13 #define RX_GSM P1_26
jtr89 0:c58b0bf4e8ee 14
jtr89 0:c58b0bf4e8ee 15 // PINPWR to low on Q10 drives 3V3 to Q7, which drives Q5 to ground, which powers VBAT_900, with either VCC_BUCK or VCC_BAT
jtr89 0:c58b0bf4e8ee 16 #define PINPWR P1_2
jtr89 0:c58b0bf4e8ee 17
jtr89 0:c58b0bf4e8ee 18 // PINONOFF controls PWRKEY on the SIM900, see manual for more info
jtr89 0:c58b0bf4e8ee 19 #define PINONOFF P1_7
jtr89 0:c58b0bf4e8ee 20
jtr89 0:c58b0bf4e8ee 21 // declare LEDs
jtr89 0:c58b0bf4e8ee 22 DigitalOut myled1(LED2); //left most LED if board is held as shown in Pinout diagram above
jtr89 0:c58b0bf4e8ee 23 DigitalOut myled2(LED3); //2nd from left
jtr89 0:c58b0bf4e8ee 24 DigitalOut myled3(LED4); //3rd from left
jtr89 0:c58b0bf4e8ee 25 DigitalOut myled4(LED1); //4th from left (right most)
jtr89 0:c58b0bf4e8ee 26
jtr89 0:c58b0bf4e8ee 27 // create pins for controlling power to SIM900
jtr89 0:c58b0bf4e8ee 28 DigitalOut m_sim900_pwr(PINPWR);
jtr89 0:c58b0bf4e8ee 29 DigitalOut m_sim900_on (PINONOFF);
jtr89 0:c58b0bf4e8ee 30
jtr89 0:c58b0bf4e8ee 31 // create object for UART comms to SIM900
jtr89 0:c58b0bf4e8ee 32 Serial m_sim900_serial (TX_GSM, RX_GSM);
jtr89 0:c58b0bf4e8ee 33
jtr89 0:c58b0bf4e8ee 34
jtr89 0:c58b0bf4e8ee 35 // flash each LED one at a time, and then leave all off
jtr89 0:c58b0bf4e8ee 36 void flashSequence()
jtr89 0:c58b0bf4e8ee 37 {
jtr89 0:c58b0bf4e8ee 38 myled1 = 1; myled2 = 0; myled3 = 0; myled4 = 0;
jtr89 0:c58b0bf4e8ee 39 wait(0.5);
jtr89 0:c58b0bf4e8ee 40 myled1 = 0; myled2 = 1;
jtr89 0:c58b0bf4e8ee 41 wait(0.5);
jtr89 0:c58b0bf4e8ee 42 myled2 = 0; myled3 = 1;
jtr89 0:c58b0bf4e8ee 43 wait(0.5);
jtr89 0:c58b0bf4e8ee 44 myled3 = 0; myled4 = 1;
jtr89 0:c58b0bf4e8ee 45 wait(0.5);
jtr89 0:c58b0bf4e8ee 46 myled4 = 0;
jtr89 0:c58b0bf4e8ee 47 }
jtr89 0:c58b0bf4e8ee 48
jtr89 0:c58b0bf4e8ee 49 int main()
jtr89 0:c58b0bf4e8ee 50 {
jtr89 0:c58b0bf4e8ee 51 /* start up sequence, so we know we reached main */
jtr89 0:c58b0bf4e8ee 52 flashSequence();
jtr89 0:c58b0bf4e8ee 53
jtr89 0:c58b0bf4e8ee 54 // set up baud rate. Borrowed from http://tronixstuff.com/2014/01/08/tutorial-arduino-and-sim900-gsm-modules/
jtr89 0:c58b0bf4e8ee 55 m_sim900_serial.baud(19200);
jtr89 0:c58b0bf4e8ee 56
jtr89 0:c58b0bf4e8ee 57
jtr89 0:c58b0bf4e8ee 58 /* POWER ON SIM900 */
jtr89 0:c58b0bf4e8ee 59
jtr89 0:c58b0bf4e8ee 60 // power on sequence borrowed from http://gronlier.fr/blog/2014/11/seeeduino-arch-gprs-v2/
jtr89 0:c58b0bf4e8ee 61 // order of events specified by the SIM900 manual
jtr89 0:c58b0bf4e8ee 62 m_sim900_pwr.write(1); // turn power supply off
jtr89 0:c58b0bf4e8ee 63 m_sim900_on.write(1);
jtr89 0:c58b0bf4e8ee 64 wait(0.5); // wait to settle
jtr89 0:c58b0bf4e8ee 65
jtr89 0:c58b0bf4e8ee 66 m_sim900_pwr.write(0); // turn power supply on
jtr89 0:c58b0bf4e8ee 67 m_sim900_on.write(0); // from the ref: "drive the PWRKEY to a low level for 1 second then release."
jtr89 0:c58b0bf4e8ee 68 wait(1); // wait for one second
jtr89 0:c58b0bf4e8ee 69
jtr89 0:c58b0bf4e8ee 70 m_sim900_on.write(1); // release power key
jtr89 0:c58b0bf4e8ee 71 wait(20 /*0.5*/); // wait to settle
jtr89 0:c58b0bf4e8ee 72
jtr89 0:c58b0bf4e8ee 73
jtr89 0:c58b0bf4e8ee 74
jtr89 0:c58b0bf4e8ee 75 /* SEND A MESSAGE */
jtr89 0:c58b0bf4e8ee 76
jtr89 0:c58b0bf4e8ee 77 // the following sequence and messages are borrowed from http://tronixstuff.com/2014/01/08/tutorial-arduino-and-sim900-gsm-modules/
jtr89 0:c58b0bf4e8ee 78 // Set SMS mode
jtr89 0:c58b0bf4e8ee 79 m_sim900_serial.printf("AT+CMGF=1\r\n"); // AT command to send SMS message
jtr89 0:c58b0bf4e8ee 80 myled1 = 1;
jtr89 0:c58b0bf4e8ee 81 wait(0.1);
jtr89 0:c58b0bf4e8ee 82
jtr89 0:c58b0bf4e8ee 83 // Send phone number
jtr89 0:c58b0bf4e8ee 84 m_sim900_serial.printf("AT + CMGS = \"+61123456789\"\r\n"); // recipient's mobile number, in international format
jtr89 0:c58b0bf4e8ee 85 myled2 = 1;
jtr89 0:c58b0bf4e8ee 86 wait(0.1);
jtr89 0:c58b0bf4e8ee 87
jtr89 0:c58b0bf4e8ee 88 // Send text
jtr89 0:c58b0bf4e8ee 89 m_sim900_serial.printf("Hello, world. This is a text message from an Arch GPRS V2.\r\n"); // message to send
jtr89 0:c58b0bf4e8ee 90 myled3 = 1;
jtr89 0:c58b0bf4e8ee 91 wait(0.1);
jtr89 0:c58b0bf4e8ee 92
jtr89 0:c58b0bf4e8ee 93 // End message
jtr89 0:c58b0bf4e8ee 94 m_sim900_serial.putc((char)26); // End AT command with a ^Z, ASCII code 26
jtr89 0:c58b0bf4e8ee 95 m_sim900_serial.printf("\r\n");
jtr89 0:c58b0bf4e8ee 96 myled4 = 1;
jtr89 0:c58b0bf4e8ee 97 wait(0.1);
jtr89 0:c58b0bf4e8ee 98
jtr89 0:c58b0bf4e8ee 99 // do nothing for a bit
jtr89 0:c58b0bf4e8ee 100 wait(5);
jtr89 0:c58b0bf4e8ee 101
jtr89 0:c58b0bf4e8ee 102 // flash to signifty we are done
jtr89 0:c58b0bf4e8ee 103 flashSequence();
jtr89 0:c58b0bf4e8ee 104
jtr89 0:c58b0bf4e8ee 105 // hang forever
jtr89 0:c58b0bf4e8ee 106 while(1);
jtr89 0:c58b0bf4e8ee 107 }
jtr89 0:c58b0bf4e8ee 108
jtr89 0:c58b0bf4e8ee 109