Salve, stamattina mi è arrivata la mia gsm shield ho inserito un codice di prova ed il modulo ha funzionato senza problemi ! ad un certo punto ho disconnesso il modulo per un aggiornamento l’ho ricollegato ma adesso non funziona niente più bene ! per farvi un’esempio pratico adesso la shield asm legge gli sms soltanto eseguendo il reset del dispositivo togliendolo dall’alimentazione o cliccando sul pulsante “reset” secondo voi cosa può essere successo ?? la cosa assurda è che con lo stesso codice prima funzionava bene e adesso mi legge soltanto gli sms quando la resetto mi legge il primo sms e poi come se non funzionasse più!! vi posto il link della mia asm shield poggiata su una board arduino uno
/*
SMS heather remote control
This sketch, designed for the GSM shield, allows you to remotely control any
device connected to your Arduino. By sending an SMS, through certain keywords,
it's possible, as in this case, to turn on or off a simple heater.
The GSM module, mounted on an Arduino board, processes the message and executes an action.
Then, it sends a notification message containing the state of the device.
If the message doesn't contain any valid keyword, the Arduino doesn't execute any
operation and the message is deleted from the sim card.
The sketch also manages keywords with uppercase or lowercase.
Circuit:
* GSM shield and an Arduino board
* SIM card that can send/receive SMS
* a relay connected to digital pin 12
based on the ReceiveSMS example by Javier Zorzano / TD
modified by Federico Vanzati & Alberto Cicchi (03/2013)
*/
// include the GSM library
#include <GSM.h>
const int heaterControlPin = 12;
// initialize the library instances
GSM gsmAccess;
GSM_SMS sms;
// Array to hold the number a SMS is retreived from
char senderNumber[20];
// String to hold the incoming message
String message = "";
// String that will contain the parsed values from the message
String commandID, deviceID;
void setup()
{
// set the pin connected to the relay that control the heater as output
pinMode(heaterControlPin, OUTPUT);
// initialize serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
// connection state
boolean notConnected = true;
// Start GSM connection
while(notConnected)
{
if(gsmAccess.begin()==GSM_READY)
notConnected = false;
else
{
Serial.println("Not connected");
delay(1000);
}
}
Serial.println("GSM initialized");
}
void loop()
{
char c;
// If there are any SMS available
if (sms.available())
{
Serial.println("Message received from:");
// Get remote number
sms.remoteNumber(senderNumber, 20);
Serial.println(senderNumber);
// An example of message disposal
// Any messages starting with # should be discarded
// usually anonymous messages starts with #
if(sms.peek()=='#')
{
Serial.println("Discarded SMS");
sms.flush();
}
// Read message bytes and print them
while(c = sms.read())
message += c;
// cancella message ricevuto
sms.flush();
Serial.println("MESSAGE DELETED");
}
// if there is a new message start to parse the command and the device to control
if(message != "") {
// put the incoming characters that compose the message to lower case
message.toLowerCase();
int i=0;
// deviceID and commandID are separated by a space
// find it and store the position in two strings
while(message.charAt(i) != ' ') i++;
commandID = message.substring(0,i);
deviceID = message.substring(i+1, message.length());
// check the device to control
if(deviceID == "stufetta")
{
//check the command to execute
if(commandID == "accendi") {
sendFeedbackSMS(senderNumber, deviceID, "ON"); // send the feedback to the sender
digitalWrite(heaterControlPin, HIGH);
}
if(commandID == "spegni") {
sendFeedbackSMS(senderNumber, deviceID, "OFF"); // send the feedback to the sender
digitalWrite(heaterControlPin, LOW);
}
}
// clear the message that has just been processed
message = "";
}
delay(1000);
}
// this function, given a phone number and two strings representing the device and
// its state send a feedback text message to the phone number
void sendFeedbackSMS(char remoteNum[], String devString, String devState) {
String txtMsg = devString + " " + devState;
Serial.println(txtMsg);
Serial.println(remoteNum);
sms.beginSMS(remoteNum);
sms.print(txtMsg);
sms.endSMS();
}
Avevo settato i pin analogici su digitale in output per recuperare i pin per il modulo rfid (quello di cui ti parlai ieri) poi ho rimesso tutto com'era ma niente !
dandi98:
Avevo settato i pin analogici su digitale in output per recuperare i pin per il modulo rfid (quello di cui ti parlai ieri) poi ho rimesso tutto com'era ma niente !
E a cosa doveva servire impostare gli analogici come pin di I/O ? Quel modulo usa il bus SPI e i pin del SPI sono fissi NON puoi deciderli tu ... 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) ... quindi che volevi fare ? ? ? :o
... la prima cosa da farsi è, rimontare il modulo GSM così come era e caricare dall'IDE l'esempio "Receive SMS" che trovi sotto gli esempi della libreria GSM.
Se con quello va ... è un problema del tuo programma.
in quello sketch che hai messo all'inizio, usano il Pin 12 per comandare un rele'.
Il Pin 12 e' anche il MISO del bus SPI, quello usato dal modulo RFID, o cambi Pin o stacchi il modulo
Ma infatti io l'ho riportato a zero reinserendo di nuovo il programma accendi stufetta e scollegando in modulo rfid ma niente da fare mi funziona solo al promo avvio appena dopo quello non funziona più non rocevendo nessun sms
Nulla anche con i relay scollegati e cn l'esempio della libreria gsm Receive SMS da sempre lo stesso problema, cioè riceve il comando soltanto cliccando sul pulsante di reset e per elaborare un nuovo comando dovrei resettarlo nuovamente ! quindi a livello hardware si direbbe funzionante, come se una volt partito non esegue più il loop dopo il primo comando !
Ho notato un altra cosa... di solito quando carichi un nuovo codice i relay dovrebbero spegnersi per qualche attimo (perché la board non si riavvia) invece da quando mi da questo problema la board sembra no riavviarsi quando carico un nuovo codice !!
Lo shield lasciata sempre sui suoi pin
questo è il modello del relay: Modulo Relè 5V Carichi fino 250V 10A - Relay Module Arduino PIC ARM Atmel
Ho usato fino a stamattina 8 di questi relay contemporaneamente alimentandoli dalla bred board con 5v e gnd e ovviamente poi eseguivo il collegamento del relay (IN) ad un qualsiasi pin digitale disponibile che non siamo i pin 2 3 e 7 poi visto che mi servivano più pin per collegale il modulo rfid (che adesso non è più collegato) ho dichiarato i pin analogici come digitali, ho passato 4 relay sui rispettivi pin analogici convertiti in digitali e da quel momento non mi ha funzionato più niente "ma credo per coincidenza" visto che non ho fato altro che spostare i pin da una parte all'altra "ovviamente i pin erano già stati convertiti alla funzione di output digitale
Come credo di averti già detto in passato ... se non metti il link, come vuoi che troviamo di cosa stai parlando ?
Se la board è come quando ti è arrivata e tutto è scollegato e non c'è altro connesso ...
... mi viene in mente solo un qualche guasto ... da capire se ad Arduino UNO o allo shield GSM.
Fai cortesemente anche uno schema dei collegamenti che hai fatto prima di riscontrare il difetto ...
... va bene anche un disegno a penna su un foglio di carta, purché sia esattamente rispondente hai collegamenti.
Ho provato la gsm shield su un altra board uno ed il problema persiste mi legge il primo mex e poi come se si bloccasse ! ma il primo home lo legge solo all'inizializzazione (quindi per far leggere un mex che mando devo prima inviare il messaggio che non verrà letto poi reietto la asm shield e all'avvio della asm shield arriverà il messaggio mandato prima
ecco un disegno meglio di questo non son riuscito a fare
Guglielmo ho trovato il problema e non è l'hardware ! era la sim card che aveva finito la memoria e andava in blocco durante la lettura dell'sms !! adesso però il problema è come fare a non far memorizzare i messaggi sulla sim ?
Va beh ...
... hai guardato i metodi della libreria GSM ? ha visto il metodo flush() ? Prova a vedere se fa al caso tuo, altrimenti hai solo una soluzione ... studiarti i comandi AT del Quectel M10 e mandare direttamente i comandi invece di passare per la libreria.
Ad esempio, il comando "AT+CMGD" fa esattamente quello che chiedi : Delete SMS Message
Usare direttamente i comandi AT ti da la massima flessibilità e la libertà di fare quello che TU vuoi (... e non quello che vuole l'autore della libreria GSM), ma .. ti avverto, tocca dedicare una bella quantità di tempo a STUDIARLI e CAPIRLI ... quindi .. vedi tu ... :