Sim900 Shield
+9
janiocavalcanti
santiago54321
gcysne
evertondt
gilsoe
cristianormoraes
macckk
renanfreitas
Admin
13 participantes
Página 1 de 2
Página 1 de 2 • 1, 2
Sim900 Shield
#####Antes de fazer qualquer tipo de pergunta leia todo o tópico e assista todos os videos######
#####Os códigos abaixo precisam ser portados para a versão 1.0 da IDE do arduino para melhor compatibilidade use a versão 022#####
Breve video explicativo:
A livraria Newsoftserial Não funciona no mega pois é desnecessário pois o este possui 4 hardserial entã para o mesmo funcionar com o shield é só jumpear os fios para as outras portas seriais do arduino mega e substituir no codigo "mySerial" por Serial1
Livraria SoftSerial
Manual de comandos AT
Especicações do Sim900
Based on SIMCom's SIM900 Module
Quad-Band 850 / 900/ 1800 / 1900 MHz - would work on GSM networks in all countries across the world.
GPRS multi-slot class 10/8
GPRS mobile station class B
Compliant to GSM phase 2/2+
Class 4 (2 W @ 850 / 900 MHz)
Class 1 (1 W @ 1800 / 1900MHz)
Control via AT commands - Standard Commands: GSM 07.07 & 07.05 | Enhanced Commands: SIMCOM AT Commands.
Short Message Service - so that you can send small amounts of data over the network (ASCII or raw hexadecimal).
Embedded TCP/UDP stack - allows you to upload data to a web server.
Speaker and Headphone jacks - so that you can send DTMF signals or play recording like an answering machine.
SIM Card holder and GSM Antenna - present onboard.
12 GPIOs, 2 PWMs and an ADC (all 2.8 volt logic) - to augment your Arduino.
Low power consumption - 1.5mA(sleep mode)
Industrial Temperature Range - -40°C to +85 °C
Software que replica comandos AT do hyperterminal:
Código que ensina como comunicar com a rede GPRS e mandar dados assim como SMS
#####Os códigos abaixo precisam ser portados para a versão 1.0 da IDE do arduino para melhor compatibilidade use a versão 022#####
Breve video explicativo:
A livraria Newsoftserial Não funciona no mega pois é desnecessário pois o este possui 4 hardserial entã para o mesmo funcionar com o shield é só jumpear os fios para as outras portas seriais do arduino mega e substituir no codigo "mySerial" por Serial1
Livraria SoftSerial
Manual de comandos AT
Especicações do Sim900
Based on SIMCom's SIM900 Module
Quad-Band 850 / 900/ 1800 / 1900 MHz - would work on GSM networks in all countries across the world.
GPRS multi-slot class 10/8
GPRS mobile station class B
Compliant to GSM phase 2/2+
Class 4 (2 W @ 850 / 900 MHz)
Class 1 (1 W @ 1800 / 1900MHz)
Control via AT commands - Standard Commands: GSM 07.07 & 07.05 | Enhanced Commands: SIMCOM AT Commands.
Short Message Service - so that you can send small amounts of data over the network (ASCII or raw hexadecimal).
Embedded TCP/UDP stack - allows you to upload data to a web server.
Speaker and Headphone jacks - so that you can send DTMF signals or play recording like an answering machine.
SIM Card holder and GSM Antenna - present onboard.
12 GPIOs, 2 PWMs and an ADC (all 2.8 volt logic) - to augment your Arduino.
Low power consumption - 1.5mA(sleep mode)
Industrial Temperature Range - -40°C to +85 °C
Software que replica comandos AT do hyperterminal:
- Código:
//Serial Relay - Arduino will patch a
//serial link between the computer and the GPRS Shield
//at 19200 bps 8-N-1
//Computer is connected to Hardware UART
//GPRS Shield is connected to the Software UART
#include <NewSoftSerial.h>
int powerkey = 5;
int statuspin = 6;
int pinState = 0;
NewSoftSerial mySerial(2, 3); //8 TX, 7 RX
void setup()
{
pinMode(powerkey, OUTPUT);
pinMode(statuspin, INPUT);
mySerial.begin(9600); // Verifique o baud rate do seu modulo para usar o valor correto aqui
Serial.begin(9600); // Verifique o baud rate do seu modulo para usar o valor correto aqui
}
void loop()
{
pinState = digitalRead(statuspin);
if(pinState==LOW){
digitalWrite(powerkey, HIGH); // set the LED on
delay(2000);
digitalWrite(powerkey, LOW);
}
if(Serial.available())
{
mySerial.print((unsigned char)Serial.read());
}
else if(mySerial.available())
{
Serial.print((unsigned char)mySerial.read());
}
mySerial.println("AT");
delay(500);
}
Código que ensina como comunicar com a rede GPRS e mandar dados assim como SMS
- Código:
#include <NewSoftSerial.h>
NewSoftSerial mySerial(2, 3);
#define BUF_LEN 64
int powerkey = 5;
int statuspin = 6;
int pinState = 0;
void setup() {
pinMode(powerkey, OUTPUT);
pinMode(statuspin, INPUT);
mySerial.begin(19200); // the GPRS baud rate
Serial.begin(19200); // the GPRS baud rate
}
byte num_of_bytes;
byte retorno;
char comm_buf[BUF_LEN];
byte n;
void loop()
{
pinState = digitalRead(statuspin);
if(pinState==LOW)
{
digitalWrite(powerkey, HIGH); // set the LED on
delay(2000);
digitalWrite(powerkey, LOW);
}
mySerial.println("AT+CIFSR");//executa comando
delay(3000); //espera resultado na serial
leserial(); //processa dados e armazena no buffer
retorno = IsStringReceived("OK"); // verifica se o retorno é o esperado
Serial.println(comm_buf); //mostra retorno real
limpa_buffer(); //limpa buffer
mySerial.println("AT+CSQ");//executa comando
delay(3000); //espera resultado na serial
leserial(); //processa dados e armazena no buffer
retorno = IsStringReceived("OK"); // verifica se o retorno é o esperado
Serial.println(comm_buf); //mostra retorno real
limpa_buffer();
mySerial.println("at+cstt=\"ctbc.br\",\"ctbc\",\"1212\"");//executa comando
delay(2000); //espera
leserial(); //processa dados e armazena no buffer
Serial.println(comm_buf); //mostra retorno real
limpa_buffer();
mySerial.println("at+ciicr");//executa comando
delay(5000); //espera resultado na serial
leserial(); //processa dados e armazena no buffer
Serial.println(comm_buf); //mostra retorno real
limpa_buffer();
mySerial.println("at+cifsr");//executa comando
delay(2000); //espera resultado na serial
leserial(); //processa dados e armazena no buffer
Serial.println(comm_buf); //mostra retorno real
limpa_buffer();
mySerial.println("at+cdnscfg?");//executa comando
delay(2000); //espera resultado na serial
leserial(); //processa dados e armazena no buffer
Serial.println(comm_buf); //mostra retorno real
limpa_buffer();
mySerial.println("AT+CMGF=1\r"); // Because we want to send the SMS in text mode
delay(1000);
mySerial.println("AT+CMGS=\"92401849\"\r"); // Setting for the SMS Message center number,
delay(1000);
leserial();
Serial.println(comm_buf); //mostra retorno real
limpa_buffer();
mySerial.println("SIM900 and Arduino say Hi!"); // Start accepting the text for the message
// to be sent to the number specified.
// Replace this number with the target mobile number.
delay(1000);
mySerial.println(0x1A,BYTE); //Acho que foi aqui seu erro
leserial();
Serial.println(comm_buf); //mostra retorno real
limpa_buffer();
}
/**********************************************************
Metodo para leitura da softserial
buffer maximo de (num_of_bytes) caracteres
**********************************************************/
void leserial()
{
num_of_bytes = mySerial.available(); //Pega quantidade de bytes ques estao na serial
while (mySerial.available() > 0) //Espera de até Available ser true
{
for(n=0; n<num_of_bytes; n++)
{
comm_buf[n] = mySerial.read(); //armazena buffer e a cada mySerial.read carry on buffer interno
}
}
mySerial.flush(); //limpa buffer de entrada da serial
}
/**********************************************************
Metodo para limpeza do buffer
**********************************************************/
void limpa_buffer()
{
memset(comm_buf,'\0',BUF_LEN);
}
/**********************************************************
Method checks received bytes
compare_string - pointer to the string which should be find
return: 0 - string was NOT received
1 - string was received
**********************************************************/
byte IsStringReceived(char const *compare_string)
{
http://Serial.println("testando...");
char *ch;
byte ret_val = 0;
if(1) {
ch = strstr((char *)comm_buf, compare_string);
if (ch != NULL)
{
Serial.println("existe Valor");
ret_val = 1;
}
else
{
}
}
return (ret_val);
}
Última edição por Admin em Sex 15 Jun - 6:59, editado 3 vez(es)
Sim900d
Esse exemplo de codigo que vc colocou no site para dar os comandos utilizando os "AT" no meu aqui não aparece nada... inclusive alterei os Baud para diversas velocidades.... Porque não aparece nada no serial monitor?
Estou utilizando o arduino duemilanove, GPS da Skaylab e o Shield GPRS Sim900d.
Estou utilizando o arduino duemilanove, GPS da Skaylab e o Shield GPRS Sim900d.
renanfreitas- Mensagens : 8
Data de inscrição : 22/03/2012
Re: Sim900 Shield
Do lado do baud rate tem um outra combo-box que vc precisa colocar "carriege return"
Está em 19200 o baudrate ? o baudrate tem que ser carregado no software corretamente
Está em 19200 o baudrate ? o baudrate tem que ser carregado no software corretamente
- Código:
void setup()
{
pinMode(powerkey, OUTPUT);
pinMode(statuspin, INPUT);
mySerial.begin(19200); // the GPRS baud rate
Serial.begin(19200); // the GPRS baud rate
}
Re: Sim900 Shield
Tiago, veja se você pode me ajudar:
preciso conectar em um site, exeplo: www[.]servidor[.]com[].br, onde terá uma página em php para receber um valor,
quero enviar um dado, to tipo: 123456
e receber um retorno do site, assim: 0 ou 1
tem como você me ajudar nesse código para o arduino ?
abraços.
preciso conectar em um site, exeplo: www[.]servidor[.]com[].br, onde terá uma página em php para receber um valor,
quero enviar um dado, to tipo: 123456
e receber um retorno do site, assim: 0 ou 1
tem como você me ajudar nesse código para o arduino ?
abraços.
macckk- Mensagens : 7
Data de inscrição : 04/04/2012
Re: Sim900 Shield
Bem ao forum macckk
É necessario inicialmente vc construir a pagina esta deve aceitar o seguinte comando
"/inserir.php?id=201<=(variavel latitude)&lg=(variavel longitude)&s=(variavel velocidade)" por si só essa linha digitada em qualquer navegador já iria inserir os dados em um possivel banco de dados
Dentro do microcontrolador seria assim
É necessario inicialmente vc construir a pagina esta deve aceitar o seguinte comando
"/inserir.php?id=201<=(variavel latitude)&lg=(variavel longitude)&s=(variavel velocidade)" por si só essa linha digitada em qualquer navegador já iria inserir os dados em um possivel banco de dados
Dentro do microcontrolador seria assim
- Código:
mySerial.println("at+cstt=\"ctbc.br\",\"ctbc\",\"1212\"");//executa comando
delay(2000); //espera
mySerial.println("at+ciicr");//executa comando
delay(5000); //espera resultado na serial
mySerial.println("at+cifsr");//executa comando
delay(2000); //espera resultado na serial
mySerial.println("at+cdnscfg?");//executa comando
delay(2000); //espera resultado na serial
mySerial.println("at+cipstart=\"tcp\",\"servidor.com.br\",\"80\"");//executa comando
delay(2000); //espera resultado na serial
mySerial.println("AT+CIPSEND");//executa comando
delay(2000); //espera resultado na serial
mySerial.print("GET http://www.servidor.com.br/inserir.php?id=201<=20.5355&lg=47.4255&s=100");//executa comando
delay(3000); //espera resultado na serial
delay(1000);
mySerial.println();
delay(1000);
mySerial.println(0x1A,BYTE);
Re: Sim900 Shield
Tiago, valeu pela força.
vou testar...
uma dúvida: na pagina PHP eu sempre faço assim: /teste.php?valor=123
onde esse 123 vem do microcontrolador.
no seu exemplo vc usou um id=201... isso não é necessário né ?
muito obrigado.
Marcelo
vou testar...
uma dúvida: na pagina PHP eu sempre faço assim: /teste.php?valor=123
onde esse 123 vem do microcontrolador.
no seu exemplo vc usou um id=201... isso não é necessário né ?
muito obrigado.
Marcelo
macckk- Mensagens : 7
Data de inscrição : 04/04/2012
Re: Sim900 Shield
Tiago, e como eu consigo o retorno da página ?
tipo: enviou um dado 123 e a pagina retorna 1 ou 0.
abraços
Marcelo
tipo: enviou um dado 123 e a pagina retorna 1 ou 0.
abraços
Marcelo
macckk- Mensagens : 7
Data de inscrição : 04/04/2012
Arduino MEGA
Tiago tudo bem? não teria como você postar um codigo exemplo para o Arduino MEGA, enviando uma simples SMS, até hj não consegui fazer o meu shield funcionar
cristianormoraes- Mensagens : 1
Data de inscrição : 05/04/2012
Re: Sim900 Shield
Tiago, tudo funcionando... deu certo enviar informações para uma página web em php... show!
mas ainda estou "apanhando" para receber um valor vindo da página web.
do tipo: se fez a inserção no banco corretamente, retorna 1
esse "1" eu não consigo receber pelo shield gprs...
vc saberia como me ajudar ?
valeu... abraços
Marcelo
mas ainda estou "apanhando" para receber um valor vindo da página web.
do tipo: se fez a inserção no banco corretamente, retorna 1
esse "1" eu não consigo receber pelo shield gprs...
vc saberia como me ajudar ?
valeu... abraços
Marcelo
macckk- Mensagens : 7
Data de inscrição : 04/04/2012
Re: Sim900 Shield
Amigo no meu codigo PHP ele retorna um ok se der tudo certo
- Código:
$sql = mysql_query($sql)
or die ("Houve erro na gravação dos dados.");
//mysql_close($conexao);
$query = "select * from block where id = '".$_GET['id']."'";
$result = mysql_query($query) or die("A query falhou: " . mysql_error());
while ($arr = mysql_fetch_array($result))
{
$id_var=$arr[0];
$status=$arr[1];
}
echo $status; <--------- Aqui é onde o OK é gerado
mysql_close($conexao);
Re: Sim900 Shield
Tiago, o código PHP eu sei, é isso mesmo... o que eu fiz está igual ao seu.
O que eu não sei, é qual comando AT eu preciso deixar no shield, para receber esse $status de OK... ou 1..
só falta esse detalhe agora...
valeu pela força... Marcelo
O que eu não sei, é qual comando AT eu preciso deixar no shield, para receber esse $status de OK... ou 1..
só falta esse detalhe agora...
valeu pela força... Marcelo
macckk- Mensagens : 7
Data de inscrição : 04/04/2012
Re: Sim900 Shield
o comando é AT+CIPSEND espere o "ok" da pagina antes de finalizar o comando com ctrl+z
Re: Sim900 Shield
Obrigado Tiago.. deu quase certo...
só que depois de um at+cipsend, retorna o valor o valor que eu quero, junto com outras informações... mas isso eu vejo depois,
mas está fechando a conexão: CLOSE
vc saberia porque ?
seria necessário ficar aberto, até o próximo at+cipsend... e assim por diante...
abraços.
Marcelo
só que depois de um at+cipsend, retorna o valor o valor que eu quero, junto com outras informações... mas isso eu vejo depois,
mas está fechando a conexão: CLOSE
vc saberia porque ?
seria necessário ficar aberto, até o próximo at+cipsend... e assim por diante...
abraços.
Marcelo
macckk- Mensagens : 7
Data de inscrição : 04/04/2012
Re: Sim900 Shield
Amigo quando vc dá o AT+CIPSEND é como se fosse um canal de comunicação entre a pagina e o modulo se vc faz o crtl+z e depois at+cipclose ele fecha a conexão
Re: Sim900 Shield
Tiago, fiz inúmeros testes.... se eu não enviar o ctrl+z (mySerial.print(0x1A,BYTE) o comando não é executado. Se ele for enviado, dá certo, mas fecha a conexão! Realmente não sei mais o que fazer.
Não dá para ficar abrindo e fechando a conexão, com os vários comandos para abrir... isso demora tempo....
Existe algum outro comando (ctrl + alguma coisa), que envia o GET mas não fecha a conexão ? se ainda tiver essa luz, me passe ! rsrs
e muito obrigado pela atenção !!!
marcelo
Não dá para ficar abrindo e fechando a conexão, com os vários comandos para abrir... isso demora tempo....
Existe algum outro comando (ctrl + alguma coisa), que envia o GET mas não fecha a conexão ? se ainda tiver essa luz, me passe ! rsrs
e muito obrigado pela atenção !!!
marcelo
macckk- Mensagens : 7
Data de inscrição : 04/04/2012
Re: Sim900 Shield
Bom dia Tiago, estou com problema(conforme contato telefonico) identico do Cristiano. Tenho mega 2560 com sim900d(comprado pelo Mauricio). Uso arduino-022. Consigo discar para o telefone. Fiz ligacao dos pinos 2,3 para 4,5. Mas nao consigo receber resposta pelo terminal serial . Tem alguma informacao para nos ajudar ?
gilsoe- Mensagens : 2
Data de inscrição : 27/04/2012
Re: Sim900 Shield
Atenção é necessário usar a interface 1.0 do arduino
Não testei ainda mas deve funcionar, postem os resultados
Não testei ainda mas deve funcionar, postem os resultados
- Código:
#include <SoftwareSerial.h>
//Serial Relay - Arduino will patch a
//serial link between the computer and the GPRS Shield
//at 19200 bps 8-N-1
//Computer is connected to Hardware UART
//GPRS Shield is connected to the Software UART
SoftwareSerial mySerial(2, 3); //RX, TX
//ligar pino 1 (placa GSM) no pino 3 ARDUINO
int powerkey = 5;
int statuspin = 6;
int pinState = 0;
void setup()
{
pinMode(powerkey, OUTPUT);
pinMode(statuspin, INPUT);
mySerial.begin(9600); // the GPRS baud rate
Serial.begin(9600); // the GPRS baud rate
}
void loop()
{
pinState = digitalRead(statuspin);
if(pinState==LOW){
digitalWrite(powerkey, HIGH); // set the LED on
delay(2000);
digitalWrite(powerkey, LOW);
}
if(Serial.available())
{
mySerial.write(Serial.read());
}
else if(mySerial.available())
{
Serial.write(mySerial.read());
}
http://mySerial.println("AT");
//delay(100);
http://mySerial.println("AT+IPR=9600");
//delay(100);
http://mySerial.println("AT&W0");
//delay(100);
}
Re: Sim900 Shield
Boa tarde Tiago, soh para confirmar: Tu fala da pino 1 do Gsm eh pino digital ? (tem pino 1 analogica).
Se for o pino 1 digital nao funcionou, O SIM 900D nao liga e nao conecta na rede GSM. Mas se coloca-lo na pino 5 ele liga e conecta na rede GSM mas nao responde pelo terminal serial.
Se for o pino 1 digital nao funcionou, O SIM 900D nao liga e nao conecta na rede GSM. Mas se coloca-lo na pino 5 ele liga e conecta na rede GSM mas nao responde pelo terminal serial.
gilsoe- Mensagens : 2
Data de inscrição : 27/04/2012
Re: Sim900 Shield
Amigo esquece aquele comentario infeliz do pino que nem o moises que fez a modificação sabe oq significa, testei aqui e o codigo não funciona com o MEGA então fiz esse pequeno tutorial pra galera que quer ligar o mega no sim900
https://projetoarduino.forumeiros.com/t6-sim900-shield-arduino-mega#58
Foi testado e funcionou
https://projetoarduino.forumeiros.com/t6-sim900-shield-arduino-mega#58
Foi testado e funcionou
Como recebo mensagem?
Como recebo mensagem de sms?
Alguem poderia contribuir com um exemplo?
Existe a possibilidade de receber mensagens apenas de um numero cadastrado por exemplo?
Obrigado
Alguem poderia contribuir com um exemplo?
Existe a possibilidade de receber mensagens apenas de um numero cadastrado por exemplo?
Obrigado
evertondt- Mensagens : 12
Data de inscrição : 13/05/2012
Re: Sim900 Shield
AT+CMGF=1
AT+CMGR=1 (onde 1 é o slot da menssagem ao qual ela se encontra armazenada pode ser 2 3 4 5 ...)
AT+CMGL="ALL" ( Mosta todas as menssagens)
De resto é só programar para o arduino ler essa menssagem com os exemplos descritos no tutoriais e dicas
AT+CMGR=1 (onde 1 é o slot da menssagem ao qual ela se encontra armazenada pode ser 2 3 4 5 ...)
AT+CMGL="ALL" ( Mosta todas as menssagens)
De resto é só programar para o arduino ler essa menssagem com os exemplos descritos no tutoriais e dicas
Remetente da ligação e DTMF
Boa noite. Tenho 2 dúvidas:
- Como obter o número do remetente de uma chamada de voz? Por padrão, só vejo "RING" no Rx. Existe alguma configuração que faz o módulo notificar algo como "RING "+553187456321" por exemplo?
- Como obter a decodificação do DTMF (quando o outro lado da linha tecla algum número e na saída de áudio são gerados alguns tons). Segundo este blog - (não tenho permissao do forum pra postar o link) - existe uma atualização de firmware disponível para o SIM900D que possui a decodificação DTMF implementada. Eu não sei se o SIM900D que veio no meu shield já está com essa atualização. Se não for o caso, como posso atualizá-lo? Imagino que seguir o tutorial do blog utilizando os jumpers do shield como hard serial seja um começo, mas tenho receio de danificar meu SIM900D..
gcysne- Mensagens : 3
Data de inscrição : 26/06/2012
Re: Sim900 Shield
Bom nunca usei este mas acredito que seja oq vc precisa
AT+CLIP=1 Ativa o identificador de chamadas do SIM900
Olha o sim900 com o firmware original não decodifica DTMF (pelo menos que eu saiba), mas seria possível colocar na interface de áudio dele o chip mt8870
Procurando achei esse link aqui que ensina a fazer o upgrade
http://teeblog.blog.com/archives/888/
Firmware:1137B08SIM900M64_ST_DTMF_JD_MMS
http://www.mt-system.ru/sites/default/files/sim900_ddet_application_note_v1.00.pdf parece que funciona sim
AT+CLIP=1 Ativa o identificador de chamadas do SIM900
Olha o sim900 com o firmware original não decodifica DTMF (pelo menos que eu saiba), mas seria possível colocar na interface de áudio dele o chip mt8870
Procurando achei esse link aqui que ensina a fazer o upgrade
http://teeblog.blog.com/archives/888/
Firmware:1137B08SIM900M64_ST_DTMF_JD_MMS
http://www.mt-system.ru/sites/default/files/sim900_ddet_application_note_v1.00.pdf parece que funciona sim
Página 1 de 2 • 1, 2
Tópicos semelhantes
» Sim900 Shield + Arduino MEGA
» Teste simples para o sim900
» Placa de Automação residencial e Alarme
» Receber uma mensagem e acionar um dispositivo com o celular ( sim900/908 )
» Monitoramento de reservatório com envio de dados p/ internet e alertas por SMS - SIM900, HC-SR04
» Teste simples para o sim900
» Placa de Automação residencial e Alarme
» Receber uma mensagem e acionar um dispositivo com o celular ( sim900/908 )
» Monitoramento de reservatório com envio de dados p/ internet e alertas por SMS - SIM900, HC-SR04
Página 1 de 2
Permissões neste sub-fórum
Não podes responder a tópicos
|
|