Ciao a tutti,
ho acquistato questo GSM Shield della Open Electronics http://www.open-electronics.org/arduino-gsm-shield/
e Arduino Ethernet (non lo Shield, ma direttamente Arduino Ethernet).
Ho scaricato le librerie GSMGPRS Google Code Archive - Long-term storage for Google Code Project Hosting. (vers.3.06) ed effettuato dei test con alcuni sketch forniti.
Il tutto funziona egregiamente, ovvero riesco a effettuare chiamate, inviare SMS e ricevere chiamate dai cellulari.
Faccio presente che nello Shield GSM ho impostato lo switch su SW e i pin del file GSM.cpp sono:
#define _GSM_TXPIN_ 4
#define _GSM_RXPIN_ 5
Il mio obiettivo però è far convivere questo Shield mentre è in uso l'Ethernet, in quanto l'intenzione è, una volta ricevuta una chiamata da un certo numero, effettuare una GET http su un mio server. Per fare questo ho scaricato le librerie HTTPClient http://interactive-matter.eu/how-to/arduino-http-client-library/ le quali funzionano anch'esse egregiamente, se utilizzate da sole in uno sketch.
Il problema nasce quando utilizzo nello stesso sketch sia le librerie GSM che quelle Ethernet/HTTPClient e secondo me il conflitto è sui pin di TX e RX.
Mi chiedevo se ho fatto un errore comprando Arduino Ethernet invece di Arduino + Ethernet Shield. Ma secondo me non cambiava nulla.
Tanto per farvi capire, questo è il codice del mio sketch:
#include <SPI.h>
#include <Ethernet.h>
#include <HTTPClient.h>
#include "SIM900.h"
#include "call.h"
#include <SoftwareSerial.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0xEE, 0x12 }; //Arduino Ethernet Shield MAC
IPAddress ip(172,16,11,180); //static ip arduino device
IPAddress dns(172,16,9,11);
IPAddress gateway(172,16,11,1);
IPAddress subnet(255,255,255,0);
char* serverName = "www.google.it"; //server name
byte serverIp[] = { 173,194,35,56 }; //server ip
CallGSM call; //Initialize the GSM module
char number_incoming[20];
EthernetClient client; //Initialize the Ethernet client library (port 80 is default)
HTTPClient httpClient = HTTPClient(serverName,serverIp);
void setup() {
Serial.begin(9600);
Serial.println("Starting test...");
if (gsm.begin(2400))
Serial.println("gsm status: READY");
else Serial.println(" gsm status: IDLE");
Ethernet.begin(mac,ip,dns,gateway,subnet);
delay(1000);
Serial.print("My IP: ");
Serial.println(Ethernet.localIP());
}
void loop()
{
if (Check_Call() == 1) {
verifyNumber();
}
delay(1000);
}
int Check_Call()
{
byte stat = call.CallStatusWithAuth(number_incoming,1,2);
if(stat==4) {
Serial.print("Incoming call from ");
Serial.println(number_incoming);
delay(1500);
call.HangUp();
return 1;
}
return 0;
}
void verifyNumber() {
char * requestString = "/stringa del mio server";
FILE* result = httpClient.getURI(requestString);
int returnCode = httpClient.getLastReturnCode();
if (result!=NULL) {
httpClient.closeStream(result); // this is very important -- be sure to close the STREAM
}
else {
Serial.println("failed to connect");
}
if (returnCode==200) {
Serial.println("return code: 200");
}
}
Veniamo al debug, cosa accade di preciso sul Serial Monitor? Una volta avviato, dopo circa 30 sec mi da il messaggio "gsm status: READY" il che mi fa pensare che tutto procede bene. Ma poi non viene assegnato un indirizzo IP, difatti appare: "My IP: " (vuoto).
Se provo ad effettuare una chiamata sulla sim dello shield gsm, mi dà libero, ma il Serial Monitor non dà segni.
Insomma in sintesi, lo shield funziona bene se non utilizzo l'Ethernet, e viceversa. Insieme, non lavorano! :~
Qualcuno può aiutarmi?