mirror of
https://github.com/arduino/Arduino.git
synced 2024-12-04 15:24:12 +01:00
afc368b01f
Fixes #2343
205 lines
4.6 KiB
C++
205 lines
4.6 KiB
C++
/*
|
|
|
|
This sketch test the GSM shield's ability to connect to a
|
|
GPERS network. It asks for APN information through the
|
|
serial monitor and tries to connect to arduino.cc.
|
|
|
|
Circuit:
|
|
* GSM shield attached
|
|
* SIM card with data plan
|
|
|
|
Created 18 Jun 2012
|
|
by David del Peral
|
|
|
|
This example code is part of the public domain
|
|
|
|
http://arduino.cc/en/Tutorial/GSMToolsTestGPRS
|
|
|
|
*/
|
|
|
|
// libraries
|
|
#include <GSM.h>
|
|
|
|
// PIN Number
|
|
#define PINNUMBER ""
|
|
|
|
// initialize the library instance
|
|
GSM gsmAccess; // GSM access: include a 'true' parameter for debug enabled
|
|
GPRS gprsAccess; // GPRS access
|
|
GSMClient client; // Client service for TCP connection
|
|
|
|
// messages for serial monitor response
|
|
String oktext = "OK";
|
|
String errortext = "ERROR";
|
|
|
|
// URL and path (for example: arduino.cc)
|
|
char url[] = "arduino.cc";
|
|
char urlproxy[] = "http://arduino.cc";
|
|
char path[] = "/";
|
|
|
|
// variable for save response obtained
|
|
String response = "";
|
|
|
|
// use a proxy
|
|
boolean use_proxy = false;
|
|
|
|
void setup()
|
|
{
|
|
// initialize serial communications and wait for port to open:
|
|
Serial.begin(9600);
|
|
while (!Serial) {
|
|
; // wait for serial port to connect. Needed for Leonardo only
|
|
}
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
use_proxy = false;
|
|
|
|
// start GSM shield
|
|
// if your SIM has PIN, pass it as a parameter of begin() in quotes
|
|
Serial.print("Connecting GSM network...");
|
|
if (gsmAccess.begin(PINNUMBER) != GSM_READY)
|
|
{
|
|
Serial.println(errortext);
|
|
while (true);
|
|
}
|
|
Serial.println(oktext);
|
|
|
|
// read APN introduced by user
|
|
char apn[50];
|
|
Serial.print("Enter your APN: ");
|
|
readSerial(apn);
|
|
Serial.println(apn);
|
|
|
|
// Read APN login introduced by user
|
|
char login[50];
|
|
Serial.print("Now, enter your login: ");
|
|
readSerial(login);
|
|
Serial.println(login);
|
|
|
|
// read APN password introduced by user
|
|
char password[20];
|
|
Serial.print("Finally, enter your password: ");
|
|
readSerial(password);
|
|
|
|
// attach GPRS
|
|
Serial.println("Attaching to GPRS with your APN...");
|
|
if (gprsAccess.attachGPRS(apn, login, password) != GPRS_READY)
|
|
{
|
|
Serial.println(errortext);
|
|
}
|
|
else {
|
|
|
|
Serial.println(oktext);
|
|
|
|
// read proxy introduced by user
|
|
char proxy[100];
|
|
Serial.print("If your carrier uses a proxy, enter it, if not press enter: ");
|
|
readSerial(proxy);
|
|
Serial.println(proxy);
|
|
|
|
// if user introduced a proxy, asks him for proxy port
|
|
int pport;
|
|
if (proxy[0] != '\0') {
|
|
// read proxy port introduced by user
|
|
char proxyport[10];
|
|
Serial.print("Enter the proxy port: ");
|
|
readSerial(proxyport);
|
|
// cast proxy port introduced to integer
|
|
pport = (int) proxyport;
|
|
use_proxy = true;
|
|
Serial.println(proxyport);
|
|
}
|
|
|
|
// connection with arduino.cc and realize HTTP request
|
|
Serial.print("Connecting and sending GET request to arduino.cc...");
|
|
int res_connect;
|
|
|
|
// if use a proxy, connect with it
|
|
if (use_proxy)
|
|
res_connect = client.connect(proxy, pport);
|
|
else
|
|
res_connect = client.connect(url, 80);
|
|
|
|
if (res_connect)
|
|
{
|
|
// make a HTTP 1.0 GET request (client sends the request)
|
|
client.print("GET ");
|
|
|
|
// if use a proxy, the path is arduino.cc URL
|
|
if (use_proxy)
|
|
client.print(urlproxy);
|
|
else
|
|
client.print(path);
|
|
|
|
client.println(" HTTP/1.0");
|
|
client.println();
|
|
Serial.println(oktext);
|
|
}
|
|
else
|
|
{
|
|
// if you didn't get a connection to the server
|
|
Serial.println(errortext);
|
|
}
|
|
Serial.print("Receiving response...");
|
|
|
|
boolean test = true;
|
|
while (test)
|
|
{
|
|
// if there are incoming bytes available
|
|
// from the server, read and check them
|
|
if (client.available())
|
|
{
|
|
char c = client.read();
|
|
response += c;
|
|
|
|
// cast response obtained from string to char array
|
|
char responsechar[response.length() + 1];
|
|
response.toCharArray(responsechar, response.length() + 1);
|
|
|
|
// if response includes a "200 OK" substring
|
|
if (strstr(responsechar, "200 OK") != NULL) {
|
|
Serial.println(oktext);
|
|
Serial.println("TEST COMPLETE!");
|
|
test = false;
|
|
}
|
|
}
|
|
|
|
// if the server's disconnected, stop the client:
|
|
if (!client.connected())
|
|
{
|
|
Serial.println();
|
|
Serial.println("disconnecting.");
|
|
client.stop();
|
|
test = false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
Read input serial
|
|
*/
|
|
int readSerial(char result[])
|
|
{
|
|
int i = 0;
|
|
while (1)
|
|
{
|
|
while (Serial.available() > 0)
|
|
{
|
|
char inChar = Serial.read();
|
|
if (inChar == '\n')
|
|
{
|
|
result[i] = '\0';
|
|
return 0;
|
|
}
|
|
if (inChar != '\r')
|
|
{
|
|
result[i] = inChar;
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
}
|