Ciao ragazzi, sono matteo e sono nuovo nel forum. Mi trovo alle prese con un progetto che ha lo scopo di comandare 4 relè tramite l'arrivo di differenti messaggi su un modulo gsm sim800L. Il codice che sto utilizzando è questo:
//attenzione per collegare il modulo gsm tx su pin 19 e rx su pin 18
#include "SIM900.h"
#include "sms.h" // Libreria per la gestione degli SMS
SMSGSM sms;
int rel1 = 9;// Il Pin 9 è quello connesso al relè1
int rel2 = 8; // Il Pin 8 è quello connesso al relè 2
int rel3 = 7; // Il Pin 7 è quello connesso al relè 3
int rel4 = 6; // Il Pin 6 è quello connesso al relè 4
int numdata;
boolean started=false;
char smsbuffer[160];
char Mittente[20];
void setup()
{
delay(2000);
Serial.begin(9600);
// Serial.println("APERTURA TRAMITE RICEZIONE SMS");
pinMode(rel1, OUTPUT); // imposta il pin 9 come pin di OUTPUT.
digitalWrite(rel1, HIGH); // spegne inizialmente il relè, uso High perchè questi relè altrimenti appena accessa la scheda da subito un input e si chiude il contatto
pinMode(rel2, OUTPUT); // imposta il pin 8 come pin di OUTPUT.
digitalWrite(rel2, HIGH); // spegne inizialmente il relè, uso High perchè questi relè altrimenti appena accessa la scheda da subito un input e si chiude il contatto
pinMode(rel3, OUTPUT); // imposta il pin 7 come pin di OUTPUT.
digitalWrite(rel3, HIGH); // spegne inizialmente il relè, uso High perchè questi relè altrimenti appena accessa la scheda da subito un input e si chiude il contatto
pinMode(rel4, OUTPUT); // imposta il pin 6 come pin di OUTPUT.
digitalWrite(rel4, HIGH); // spegne inizialmente il relè, uso High perchè questi relè altrimenti appena accessa la scheda da subito un input e si chiude il contatto
// Inizializzo la connessione GSM impostando il baudrate
// Per l'utilizzo di HTTP è opportuno usare 4800 baud o meno
if ( gsm.begin(2400) )
{
Serial.println("STATUS Modulo GSM = PRONTO");
started=true;
}
else
Serial.println("STATUS Modulo GSM = INATTIVO");
};
void loop()
{
char inSerial[50];
char position;
if (started)
{
position = sms.IsSMSPresent(SMS_ALL); // Valore da 1..20
if (position)
{
// Leggo il messaggio SMS e stabilisco chi sia il mittente
sms.GetSMS(position, Mittente, smsbuffer, 160);
//cambiare o aggiungere i numeri autorizzati all'apertura
if ((strcmp(Mittente,"+39389112xxxx")==0)
|| (strcmp(Mittente,"+39320262xxxx")==0)
)
{
Serial.print("Comando Ricevuto [tel. "+String(Mittente)+String("]: ") + String(smsbuffer));
if (strcmp(smsbuffer,"Garage")==0)
{
digitalWrite(rel1, LOW); // Accende il LED impostando il voltaggio a HIGH
delay(700);
Serial.println(" => Apro il Garage");
digitalWrite(rel1, HIGH);
}
else if (strcmp(smsbuffer,"Condizionatore")==0)
{
digitalWrite(rel2, LOW); // Accende il LED impostando il voltaggio a HIGH
delay(700);
Serial.println(" => Accendo il Condizionatore");
digitalWrite(rel2, HIGH);
}
else if (strcmp(smsbuffer,"Riscaldamento")==0)
{
digitalWrite(rel3, LOW); // Accende il LED impostando il voltaggio a HIGH
delay(700);
Serial.println(" => Accendo il riscaldamento ");
digitalWrite(rel3, HIGH);}
else if (strcmp(smsbuffer,"Porta")==0)
{
digitalWrite(rel4, LOW); // Accende il LED impostando il voltaggio a HIGH
delay(700);
Serial.println(" => Apro la porta");
digitalWrite(rel4, HIGH);}
}
else
Serial.println(" => non riconosciuto!");
sms.DeleteSMS(position); // Elimina l'SMS appena analizzato
}
{
delay(1000);
}
} };
Utilizzando arduino mega ho commentato e decommentato nella libreria le righe per l'utilizzo corretto della scheda come da informazioni. Non richiamo la libreria software serial in quanto arduino mega ha le seriali vere e proprie. Ho utilizzato serial1 (tx 18 e rx 19) come suggerito in un topic molto simile al mio, e il codice si compila correttamente, ma nel monitor seriale quell che visualizzo è questo:
DB:NO RESP
DB:NO RESP
DB:NO RESP
Trying to force the baud-rate to 9600
1200
2400
4800
9600
19200
38400
57600
115200
ERROR: SIM900 doesn't answer. Check power and serial pins in GSM.cpp
STATUS moduloGSM=INATTIVO
Il modulo che utilizzo è questo : SIM800L
e nell'attesa di uno stabilizzatore lm2596 sto utilizzando una batteria da 4V e 2A, il modulo sembra agganciare correttamente alla rete perché lampeggia una volta ogni 3 secondi.