Buon giorno a tutti,
Ho acquistato su internet un modulo sim 900 da Hong Kong che all'inizio funzionava benissimo.
Dopo aver effettuato l'aggiornamento di arduino alla versione 1.5.6 se non erro , ricarico il mio scketch funzionante. E noto subito che nonostante il caricamento sia riuscito correttamente, la scheda non va più.
Stasera posto foto scketch e Link della scheda.
sperando che qualcuno riesca a darmi una mano.
questi misteri dell'elettronica a volte ti fanno impazzire :o
un saluto a tutti
by Enzo.
Mi sembra logico come prima prova ricaricare lo sketch con la versione che avevi e che funzionava, se non altro puoi sapere se è colpa dell'hardware o del software.
Senza la certezza che la scheda funziona è inutile (come primo passo) che posti foto, codice e link vari ...
Forse usavi una versione di IDE vecchia?
Le versioni vecchie del IDE puoi ancora scaricarle dal sito. Prova anche ad installare quella vecchia.
Ciao Uwe
Buona sera a tutti,
intanto grazie per aver risposto.
Inizio a fare un po' di ordine postando la scheda che sto usando associata ad arduino uno:
http://wiki.epalsite.com/index.php?title=SIM900_Quad-Band_GPRS_shield_with_Micro_SD_card_slot
lo sketch che ho caricato è il seguente: ( che serve ad effettuare una telefonata)
/*Note:This code is used for Arduino 1.0 or later*/
#include <SoftwareSerial.h>
SoftwareSerial Sim900Serial(2, 3);
void setup()
{
Sim900Serial.begin(115200); // the GPRS baud rate
delay(2000);
Sim900Serial.println("AT+IPR=19200"); // Set the baud rate
delay(500);
Sim900Serial.begin(19200); // the GPRS baud rate
delay(1000);
}
void loop()
{
Sim900Serial.println("ATD+39329*******;");//'*'instead the phone number you want to dial
while(1);
}
La versione che usavo di arduino era la 1.0.5 quando ancora tutto funzionava.
Installando la versione 1.6.3 sono iniziati i problemi.
Ho provato a disinstallare la nuova versione e a ricaricare lo sketch con arduino 1.0.5 ma aimè non funziona piu'.
Pero' se utilizzo uno sketch per accendere un led tramite sms funziona, riporto il codice:
#include "SIM900.h"
#include <SoftwareSerial.h> // necessaria alla libreria gsm.h richiamata in sms.h
// #include "inetGSM.h" // necessaria per l'uso di HTTP
#include "sms.h" // Libreria per la gestione degli SMS
SMSGSM sms;
int led = 13; // Il Pin 13 è quello connesso al LED
int numdata;
boolean started=false;
char smsbuffer[160];
char Mittente[20];
void setup()
{
Serial.begin(9600);
Serial.println("ESEMPIO INVIO/RICEZIONE SMS");
pinMode(led, OUTPUT); // imposta il pin 13 come pin di OUTPUT.
digitalWrite(led, LOW); // spegne inizialmente il led
// 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");
};
// legge una stringa dal Serial Monitor
// Questa procedura serve solo nella fase di TEST ovvero
// quando provo a simulare i comandi SMS tramite il SERIAL MONITOR
boolean SerialRead(char s[])
{
int i=0;
if (Serial.available() > 0)
{
while (Serial.available() > 0)
{
s[i]=Serial.read();
delay(10);
i++;
}
}
s[i]='\0'; // Metto il terminatore di stringa
return (i!=0);
}
// legge una stringa dal Serial Monitor
// Questa è la versione proposta da Arduino Lab
// int readSerial(char result[])
// {
// int i = 0;
// while(1)
// {
// while (Serial.available() > 0)
// {
// char inChar = Serial.read();
// if (inChar == '\n') // Line Feed
// {
// result[i] = '\0';
// Serial.flush();
// return 0;
// }
// if(inChar!='\r') // Scarta i Carriage Return
// {
// result[i] = inChar;
// i++;
// }
// }
// }
// }
void loop()
{
char inSerial[50];
char position;
if (started)
{
// -- Righe commentate poichè utilizzate per nei test
// strcpy(Mittente,"3380000000");
// if (SerialRead(smsbuffer))
// ------------------------------------------------------
// Legge se ci sono messaggi disponibili sulla SIM Card
// e li visualizza sul Serial Monitor.
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);
Serial.print("Comando Ricevuto [tel. "+String(Mittente)+String("]: ") + String(smsbuffer));
if (strcmp(smsbuffer,"ON")==0)
{
digitalWrite(led, HIGH); // Accende il LED impostando il voltaggio a HIGH
Serial.println(" => Accendo il LED");
}
else if (strcmp(smsbuffer,"OFF")==0)
{
digitalWrite(led, LOW); // Spengo il LED impostando il voltaggio a LOW
Serial.println(" => Spengo il LED");
}
else if (strcmp(smsbuffer,"STATUS")==0)
{
if (digitalRead(led)==HIGH)
{
sms.SendSMS(Mittente, "STATUS: LED Acceso"); // restituisce true se invia l'SMS
Serial.println(" => il LED e' Acceso");
}
else
{
sms.SendSMS(Mittente, "STATUS: LED Spento"); // restituisce true se invia l'SMS
Serial.println(" => il LED e' Spento");
}
}
else
Serial.println(" => non riconosciuto!");
sms.DeleteSMS(position); // Elimina l'SMS appena analizzato
}
delay(1000);
}
};
A questo punto non riesco proprio a capire se è un problema hardware o software.
A me interessa più risolvere il problema che non inoltra la chiamata piuttosto che inviare l'sms.
Confido in tutti voi,
vi auguro una buona serata
saluti
Enzo
Usa la libreria versione 3.0.5 con Arduino IDE 1.0.
https://gsm-shield-arduino.googlecode.com/files/BETA_GSM_GPRS_GPS_IDE100_v305.zip
Ciao,
se guardi il primo sketch, non viene usata nessuna libreria gsm per effettuare una telefonata,
viene usata solo la libreria softwareSerial per definire che il pin Rx è =2 e Tx=3.
Ripeto prima funzionava .
Oppure si potrebbe provare un nuovo sketch usando la libreria gsm ma non so bene come formulare
il codice per effettuare una chiamata per esempio se viene premuto un pulsante!
Grazie a tutti.
Domanda: ti sei ricordato di accendere la scheda, prima di far partire Arduino?
Ciao,
ho provato a caricare lo sketch sia con la scheda accesa che con la scheda spenta ma nulla da fare.
Per me c'è qualcosa che non va nella libreria SoftwareSerial.
Perchè se uso la libreiria gsm per ricevere un sms ed eseguire un comando funziona.
Ho provato anche questo sketch :
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h"
SMSGSM sms;
void setup() {
Serial.begin(9600);
Serial.println("GSM Shield testing.");
if (gsm.begin(2400)){
Serial.println("\nstatus=READY");
}
else Serial.println("\nstatus=IDLE");
}
void loop() {
if (sms.SendSMS("3290000000", "Arduino SMS")) Serial.println("\nSMS sent OK");
delay(10000);
}
e sul monitor seriale mi stampa questo:
GSM Shield testing.
ERROR: SIM900 doesn't answer. Check power and serial pins in GSM.cpp
status=IDLE
Quella shield non si accende da sola, a meno di non attivare il pin 7 di Arduino, come spiegato nel suo manuale.
Una volta caricato lo sketch, devi premere il pulsante di POWER ON, quindi premere il pulsante Arduino Reset in modo da far ripartire lo sketch.
Ho già fatto anche quello. Il led lampeggia ogni tre secondi che indica che ha preso il segnale.
Di fatti se chiamo il numero sim che gira su arduino, ho la linea libera .
Ciao a tutti ,
confermo che se uso la libreria gsm per inviare un sms funziona.
Ma se uso la libreria SoftwareSerial per effettuare una chiamata non funziona.
Avete qualche suggerimento su quali prove effettuare?
Ringrazio tutti anticipatamente.
Saluti
Enzo
Controlla il Baud Rate
Fatto anche quello la seriale non risponde
Nuovo aggiornamento :
Ho contattato il venditore, e mi dice che la libreria gsm non è compatibile con questo modulo.
Adesso si che non so dove sbattere la testa :o
Ho contattato il venditore, e mi dice che la libreria gsm non è compatibile con questo modulo
ma non hai detto che riuscivi a farla andare sono con la libreria ?
Comunque quando ti ho detto di controllare il Baudrate intendevo quello a cui hai precedentemente impostato la scheda.
Di default la scheda e' impostata a ( mi pare ) 115200 baud, poi con un comando "AT+IPR=xxxxx" la imposti al valore prescelto e detto valore viene salvato nella memoria flash del chip.
Supponiamo che in un precedente sketch tu l'abbia impostata a 9600 baud
e' chiaro che se tu poi usi uno sketch del genere
Sim900Serial.begin(115200); // the GPRS baud rate
delay(2000);
Sim900Serial.println("AT+IPR=19200"); // Set the baud rate
delay(500);
Sim900Serial.begin(19200); // the GPRS baud rate
non verra' mai impostata a 19200 baud, visto che il comando "AT+IPR=19200" glielo hai inviato con un'impostazione di 115200 ( vedi prima riga dello sketch )
Stesso discorso su quest'altro sketch
void setup() {
Serial.begin(9600);
Serial.println("GSM Shield testing.");
if (gsm.begin(2400)){
Serial.println("\nstatus=READY");
Qui si presume che sia settato a 2400 baud.
Quindi riformulo la risposta, controlla a quanti baud e' stata impostata la scheda
Ma infatti non capisco perché il venditore mi ha detto ciò! L'unico sketch che mi funziona su questo modulo è quello dove io invio un sms per accedere un led . Che ho riportato all'inizio della discussione.
Stasera controllo meglio il Baud.
Grazie per il supporto
di default la GSM dovrebbe andare a 9600baud, quindi con uno sketch del genere dovresti vedere qualcosa
#include <SoftwareSerial.h>
SoftwareSerial Sim900Serial(2, 3);
void setup()
{
delay(2000);
Sim900Serial.begin(9600); // the GPRS baud rate
delay(1000);
}
void loop()
{
Sim900Serial.println("ATD***********;");//'*'instead the phone number you want to dial
while(1);
}
Sig Brunello,
ho provato il suo sketch impostando il baud a 9600 e sul monitor seriale non appare nulla.
:o