Example program demonstrating use of HTTP or HTTPS protocol over a cellular connection with httpbin.org using the MTSAS library. (Demonstrates GET,POST,basic-auth)

Dependencies:   mbed mtsas

Committer:
Vanger
Date:
Thu Aug 07 21:29:51 2014 +0000
Revision:
3:85181c1324f2
Parent:
2:e20a75d47720
Child:
4:09d5f99b94b1
Added for loops to make each step more robust. Added output for "get" request.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Vanger 0:0be90fca1622 1 #include "mbed.h"
Vanger 0:0be90fca1622 2 #include "mtsas.h"
Vanger 0:0be90fca1622 3
Vanger 0:0be90fca1622 4 int main(){
Vanger 0:0be90fca1622 5 //Modify to match your apn if you are using an HSPA radio with a SIM card
Vanger 2:e20a75d47720 6 const char APN[] = "";
Vanger 2:e20a75d47720 7
Vanger 3:85181c1324f2 8 //Sets the log level to INFO, higher log levels produce more log output.
Vanger 3:85181c1324f2 9 //Possible levels: NONE, FATAL, ERROR, WARNING, INFO, DEBUG, TRACE
Vanger 2:e20a75d47720 10 MTSLog::setLogLevel(MTSLog::INFO_LEVEL);
Vanger 0:0be90fca1622 11
Vanger 2:e20a75d47720 12 //Receive buffer
Vanger 2:e20a75d47720 13 char rbuf[4000];
Vanger 0:0be90fca1622 14
Vanger 2:e20a75d47720 15 //url strings for HTTP requests, httpbin.org is a public website for fielding test HTTP requests
Vanger 2:e20a75d47720 16 string url, base_url = "http://httpbin.org:80", url_get = "/get";
Vanger 0:0be90fca1622 17
Vanger 0:0be90fca1622 18 /** STMicro Nucelo F401RE
Vanger 0:0be90fca1622 19 * The supported jumper configurations of the MTSAS do not line up with
Vanger 0:0be90fca1622 20 * the pin mapping of the Nucleo F401RE. Therefore, the MTSAS serial TX
Vanger 0:0be90fca1622 21 * pin (JP8 Pin 2) must be manually jumped to Serial1 RX (Shield pin D2)
Vanger 0:0be90fca1622 22 * and the MTSAS serial RX pin (JP9 Pin 2) pin must be manually jumped to
Vanger 0:0be90fca1622 23 * Serial1 TX (Shield pin D8).
Vanger 0:0be90fca1622 24 * Uncomment the following line to use the STMicro Nuceleo F401RE
Vanger 0:0be90fca1622 25 */
Vanger 0:0be90fca1622 26 MTSSerialFlowControl* io = new MTSSerialFlowControl(D8, D2, D3, D6);
Vanger 0:0be90fca1622 27
Vanger 0:0be90fca1622 28 /** Freescale KL46Z
Vanger 0:0be90fca1622 29 * To configure the pins for the Freescale KL46Z board, use configuration B
Vanger 3:85181c1324f2 30 * Uncomment the following line to use the Freescale KL46Z board
Vanger 0:0be90fca1622 31 */
Vanger 0:0be90fca1622 32 //MTSSerialFlowControl* io = new MTSSerialFlowControl(D2, D9, D3, D6);
Vanger 0:0be90fca1622 33
Vanger 3:85181c1324f2 34 /** Freescale K64F
Vanger 0:0be90fca1622 35 * To configure the pins for the Freescale KL46Z board, use configuration A
Vanger 3:85181c1324f2 36 * Uncomment the following line to use the Freescale KL46F board
Vanger 0:0be90fca1622 37 */
Vanger 0:0be90fca1622 38 //MTSSerialFlowControl* io = new MTSSerialFlowControl(D1, D0, D3, D6);
Vanger 0:0be90fca1622 39
Vanger 0:0be90fca1622 40 //Sets the baudrate for communicating with the radio
Vanger 0:0be90fca1622 41 io->baud(115200);
Vanger 0:0be90fca1622 42
Vanger 2:e20a75d47720 43 //Initialize radio configurations
Vanger 0:0be90fca1622 44 Cellular* radio = CellularFactory::create(io);
Vanger 2:e20a75d47720 45 if( ! radio) {
Vanger 2:e20a75d47720 46 logFatal("Radio initialization failed");
Vanger 3:85181c1324f2 47 return 1;
Vanger 2:e20a75d47720 48 }
Vanger 2:e20a75d47720 49 radio->configureSignals(D4,D7,RESET);
Vanger 2:e20a75d47720 50 Transport::setTransport(radio);
Vanger 2:e20a75d47720 51
Vanger 2:e20a75d47720 52 //Set up HTTP interface
Vanger 2:e20a75d47720 53 HTTPClient* http = new HTTPClient();
Vanger 3:85181c1324f2 54 HTTPText* receive = new HTTPText(rbuf, 4000);
Vanger 2:e20a75d47720 55
Vanger 3:85181c1324f2 56 //Set radio APN
Vanger 3:85181c1324f2 57 for (int i = 0; i < 10; i++) {
Vanger 3:85181c1324f2 58 if (i >= 10) {
Vanger 3:85181c1324f2 59 logError("Failed to set APN to %s", APN);
Vanger 3:85181c1324f2 60 }
Vanger 3:85181c1324f2 61 if (radio->setApn(APN) == MTS_SUCCESS) {
Vanger 3:85181c1324f2 62 logInfo("Successfully set APN to %s", APN);
Vanger 3:85181c1324f2 63 break;
Vanger 3:85181c1324f2 64 } else {
Vanger 3:85181c1324f2 65 wait(1);
Vanger 3:85181c1324f2 66 }
Vanger 3:85181c1324f2 67 }
Vanger 0:0be90fca1622 68
Vanger 0:0be90fca1622 69 //Establish PPP link
Vanger 3:85181c1324f2 70 for (int i = 0; i < 10; i++) {
Vanger 3:85181c1324f2 71 if (i >= 10) {
Vanger 3:85181c1324f2 72 logError("Failed to establish PPP link");
Vanger 3:85181c1324f2 73 }
Vanger 3:85181c1324f2 74 if (radio->connect() == true) {
Vanger 3:85181c1324f2 75 logInfo("Successfully established PPP link");
Vanger 3:85181c1324f2 76 break;
Vanger 3:85181c1324f2 77 } else {
Vanger 3:85181c1324f2 78 wait(1);
Vanger 3:85181c1324f2 79 }
Vanger 3:85181c1324f2 80 }
Vanger 0:0be90fca1622 81
Vanger 2:e20a75d47720 82 //Format HTTP Get request
Vanger 2:e20a75d47720 83 url = base_url + url_get;
Vanger 0:0be90fca1622 84
Vanger 2:e20a75d47720 85 //Send HTTP GET request
Vanger 2:e20a75d47720 86 for (int i = 0; i < 10; i++) {
Vanger 2:e20a75d47720 87 if(http->get(url.c_str(), receive, 5000) == HTTP_OK) {
Vanger 2:e20a75d47720 88 http->get(url.c_str(), receive, 5000);
Vanger 3:85181c1324f2 89 logInfo("HTTP get succeeded\n%s", rbuf);
Vanger 2:e20a75d47720 90 break;
Vanger 2:e20a75d47720 91 }
Vanger 2:e20a75d47720 92 if (i >= 10) {
Vanger 2:e20a75d47720 93 logError("HTTP GET failed");
Vanger 2:e20a75d47720 94 }
Vanger 2:e20a75d47720 95 wait(1);
Vanger 2:e20a75d47720 96 }
Vanger 0:0be90fca1622 97
Vanger 0:0be90fca1622 98 //Disconnect PPP link
Vanger 0:0be90fca1622 99 radio->disconnect();
Vanger 0:0be90fca1622 100
Vanger 2:e20a75d47720 101 logInfo("End of example code\n");
Vanger 0:0be90fca1622 102 return 0;
Vanger 0:0be90fca1622 103 }