Introdução:
O GPRS Shield - EFCom é muito compacto e confiável como modulo sem fio. Esse modulo GPRS Shield é compatível com todas placas Arduino. EFCom é baseado no SIM900 GPRS Module, que entrega GSM/GPRS 850/900/1800/1900MHz, com voz, MS, dados e Fax, em uma placa muito pequena e que consome pouca corrente. SIM900 é compatível com GSM/GPRS é toda feita em SMT e tem um poderoso chip processador integrado AMR926EJ-S,Essa placa pode ser comprada do dealextreme, por um preço muito bom, que é difícil de achar em outras lojas, a qualidade da placa é muito boa e durável. Tudo funciona assim que sai do pacote sem muitas configurações, a embalagem protege os pinos e a antena, todas placas são testadas.
O bom de comprar no DX, é porque as placas vem com a fonte de 2A, que é de extrema importância, pois quando estão fazendo chamas, recebendo SMS a corrente tem picos muito alto, e para o funcionamento perfeito o ideal é ter uma fonte de 9V e 1A, 9V pois quando esta no pico de funcionamento tem um dropout de 3V, assim não causa problemas no funcionamento do Arduino, que precisa de 5V.
O Shield é configurado e controlado via comandos AT. A placa é boa pois conta com bloco de jumpers que permitem selecionar em qual canal USART vai se comunicar com microcontrolador(D0-D3, para serial via hardware e software).
Outra coisa muito boa é a presença de um super capacitor para RTC, o real time clock pode funcionar por 1 dia sendo alimentado pelo super capacitor.
EFcom pode ser ligada usando o botão físico de S_PWR, assim como o pino digital D6 para ligar/desligar e o pino D5 para reset.
O que esta integrado:
- Totalmente compatível com Arduino / Freaduino e Mega.
- Porta serial livre de conexão, você pode selecionar a porta serial do hardware (D0/D1) controle ou Software porta serial (D2/D3) controlá-lo.
- Fornecimento de energia Super capacitor para o RTC.
- Quad-Band 850/900/1800/1900 MHz
- GPRS multi-slot classe 10/8
- GPRS Classe de estação móvel B
- Controle através de comandos AT (GSM 07.07, 07.05 e EFCOM mais Comandos AT)
- SIM Toolkit aplicação
- Tensão: 3.1 4.8V ...
- Baixo consumo de energia: 1,5 mA (modo sleep)
- Temperatura de operação: -40 ° C a +85 ° C
- Dimensão: 68.33x53.09mm (mesma dimensão do Arduino placa principal)
Antes de ligar:
- Usar carregador 9V para o fornecimento de energia para o seu Arduino e EFCom, o carregador de 9V vem com shield comprado no dealextreme EFCom Shild.
- Verifique se o seu cartão SIM está desbloqueado.
- A configuração padrão de fábrica para o GPRS UART é 19200 bps 8-N-1. (Pode ser alterado usando comandos AT).
Analisando a placa:
Zoom nos fones de ouvido e microfone(tem que usar headset), e o super capacitor para RTC:
Mostrando os pinos de USART que podem ser modificados:
SIM900, um dos mais poderosos no mercado:
Antena que acompanha compra no DX:
Bandeja de cartão SIM:
Status do led:
LED | State | Function |
---|---|---|
Status | Off | Power Off |
On | Power On | |
Netlight | Off | SIM900 não esta funcionando |
64ms On/800ms Off | SIM900 não tem rede | |
64ms On/3000ms Off | SIM900 tem rede | |
64ms On/300ms Off | GPRS cmunicando |
Codigos e Exemplos:
Conversando entre Computador > Arduino > SIM900 e voltando dados SI900 > Arduino > Computador:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2,3);
void setup()
{
mySerial.begin(19200);
Serial.begin(19200);
}
void loop()
{
if(Serial.available())
{
mySerial.print((unsigned char)Serial.read());
}
else if(mySerial.available())
{
Serial.print((unsigned char)mySerial.read());
}
}
Com esse código você pode mandar todos comandos AT para seu SIM900, e receber a resposta, agora basta olhar a lista de todos comandos, e enviar um SMS, por exemplo:
void setup()
{
Serial.begin(19200);
Serial.print("\r");
delay(1000);
Serial.print("AT+CMGF=1\r");
delay(1000);
Serial.print("AT+CMGS=\"+NUMERO DE CELULAR\"\r");
delay(1000);
Serial.print("SIM900 and Arduino say Hi!\r");
delay(1000);
Serial.print(26,BYTE);
}
void loop()
{
}
No próximo post, vou colocar códigos comentados, explicando tudo!!
parabens amigo.. foi o melhor post que vi até agora sobre esse shield.. que inclusive é igual ao meu (comprado no dx hehe).. também comprei um lcd e o arduino uno.. perfeito.. parabens
ResponderExcluirObrigado Vanderlei!
ExcluirFico muito feliz que tenha achado útil.
CARA vê se você pode me ajuda quero acionar cargas elétricas via sms, comprei o kit de desenvolvimento eZ430-RF2500 é uma ferramenta baseada no emulador USB para o microcontrolador MSP430, falta o modem GPRS e acho que o ideal seria GPRS SHIELD SIM900 você pode me ajudar a saber se realmente vai funciona ???
ResponderExcluirObrigado!
Olá Tulio. Essa sua ferramente tem suporte a USART(comunicação serial RS-232)? ou então pode emular uma?
ExcluirSe seu modulo consegue comunicar via serial, ele funciona com o modem GPRS.
abs
Vinicius meu caso é o seguinte, comprei esse EZ430-RF2500 da texas por 200 reais, preciso fazer um projeto onde aciono cargas residenciais (uma lampada no caso) via sms, e no caso eu ia precisar compra o modem que é mais 150 reais, estou pensando em mudar e comprar o Arduíno que para ser mais simples, o que você me indica ? pode me dar uma força com este projeto ? abraços!
ResponderExcluirTulio, eu nunca tive contato com esse modulo de desenvolvimento da Texas, teoricamente se o modulo tem pinos dedicados a comunicação USART(serial) da pra fazer.
ExcluirEsses módulos GPRS usam comandos AT, o que facilita usar em diversas plataformas.
No Arduino eu sei que da pra fazer, porque já desenvolvi aplicações em cima disso. E claro posso te ajudar sim a colocar isso pra funcionar no Arduino.
abs!
VINICIUS OBRIGADO!
ExcluirNo caso se eu mudar para o Arduíno eu também vou precisar de um modem para se comunicar certo? no caso eu vi este modem G24 da Motorola.
Ou você tem outra sugestão ?
Tulio, esse modem da Motorola me parece ser um produto já bem definido e sem muita opção de modificação. Não parece ser o ideal para protótipo e desenvolvimento.
ExcluirEu te recomendaria usar um modulo GPRS, um shield, pode ser qualquer um genérico, exemplos:
http://www.webtronico.com/gsm-gprs-shield-sim900-arduino.html
http://dx.com/p/gsm-gprs-sim900-module-icomsat-expansion-board-w-antenna-cable-for-arduino-blue-black-220631
http://dx.com/p/arduino-compatible-gsm-gprs-shield-wireless-extension-board-module-w-antenna-adapter-144865
http://produto.mercadolivre.com.br/MLB-496540603-modulo-gprs-gsm-shield-efcom-celular-para-arduino-_JM
Entendi Vinicius, no caso estou meio por fora desse shield efcom mais no caso quando eu enviar um sms ele tem que estar conectado a internet ?
ExcluirPara o projeto via sms com este shield vou precisar do shield GSM, arduino MEGA e algo mais ?
O serviço de SMS é independente da internet, não tem necessidade de estar conectado para enviar/receber SMS.
ExcluirPara o projeto é necessário um Arduino, pode ser o UNO mesmo, e o Shield GSM. Geralmente esse shield acompanha uma fonte de 9V 1A, que é o ideal, pois quando o modulo esta transmitindo ele consome muita corrente, e quando está idle o consumo é baixíssimo.
Abs!
Vinicius estou comprando o Arduíno e o Shild GSM, estou ansioso para começar a mexer no Arduíno e montar o projeto rs Agradeço muito pelo seu auxilio obrigado.
ExcluirBacana!
ExcluirEstou montando um post aqui sobre o que vc quer fazer, talvez te ajude ;)
Fala Vinicius,
ExcluirCara esse post vai me ajuda e vai ajudar a tirar duvida de muita gente,
Vai ser muito interessante pois é muito difícil achar algo na net sobre isso.Abraços
Fala Vinicius beleza ?
ResponderExcluirCara comprei os componente para o projeto,
Shild GSM / GPRS SIM 900 e o Arduino R3..
Comprei também uma protobord novinha de 830 pontos..
o chip que vai no modulo GSM/GPRS posso usar qual quer um ?
Uma duvida que fiquei foi na programação, será que vai ser difícil de entender e projetar ?
abraços
Oi!
ResponderExcluirPode usar qualquer CHIP, tem que estar ativado e sem PIN, postei um codigo pesado, vou enviar um mais facil aqu pra vc para testar os comandos AT
//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
SoftwareSerial mySerial(2, 3);
void setup()
{
mySerial.begin(19200); // the GPRS baud rate
Serial.begin(19200); // the GPRS baud rate
}
void loop()
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
boa tarde vinicius, estou com problemas com a programação, precisava enviar uma mensagem ao modulo, interpreta-lá e executar a função correspondente, voce tem um programa de exemplo para este caso ?
ResponderExcluirOlá Jefferson,
Excluiresse tópico é basicamente o que você deseja:
http://microembarcado.blogspot.com.br/2013/08/arduino-gprs-sim900-projeto-aplicado.html
Esse final de semana vou complementar com a parte de executar uma ação, dependendo do SMS recebido.
Vinicius bom dia,
ResponderExcluirQual é o programa que você esta usando para rodar essas programações ?
Qual o significado do /n ou "" no seu outro post ?http://microembarcado.blogspot.com.br/2013/08/arduino-gprs-sim900-projeto-aplicado.html
Valeu Abraços!!
Bom dia Tulio, estou usando o próprio IDE do Arduino: http://arduino.cc/en/Main/Software
Excluir'\n' é o carácter que significa nova linha
ouse ja se imprimir em C++:
cout << "oi\ntulio\nbeleza";
a saída vai ser:
oi
tulio
beleza
O "" atribui um valor vazio para string, limpa ela, apagando dado anterior.
flw!
Este comentário foi removido pelo autor.
ResponderExcluirOlá Vinícius Rodrigues.
ResponderExcluirMuito bom seu blog. Parabéns!
Envio SMS através de um shield GSM EFCom V1.2 e gostaria de implementar uma validação do envio. Ou seja se enviar corretamente faz uma ação e se der erro faz outra. Será que vc pode me ajudar?
Uso esse código como base para testes:
#include
SoftwareSerial mySerial(2, 3); // RX, TX do Arduíno
#define BUF_LEN 84
char comm_buf[256];
void setup()
{
mySerial.begin(19200); // the GPRS baud rate
Serial.begin(19200); // the GPRS baud rate
delay(2000);
mySerial.println("AT+CMGF=1");
delay(2000);
Serial.println("----------------------------- ENVIA SMS ----------------------------");
mySerial.println("AT+CMGS=\"+5527xxxxxx\"\r"); //nº do celular
delay(1000);
mySerial.println("TESTE linha 1"); // mensagem a ser enviada
mySerial.println("linha 2"); // mensagem a ser enviada
mySerial.println("linha 3"); // mensagem a ser enviada
delay(1000);
mySerial.write(byte(26));
Serial.println(comm_buf);
memset(comm_buf,'\0',BUF_LEN);
mySerial.flush();
delay(5000);
Serial.println("---------------------------- F I M ----------------------------");
}
void loop()
{
}
Obrigado!
Fala rocborges!
ExcluirNa realidade é bem simples saber se o envio falhou ou não.
Se você olhar na pagina 105 item 4.4.5, existe uma parte que mostra as resposta(+CMGS:) possíveis para o comando de enviar SMS, e s~~ao apenas duas:
+CMGS: OK (ENVIO DE SMS OK)
+CMS ERROR: (ENVIO FALHOU)
O próprio modem te da a resposta se OK ou NOK. O que voce tem que fazer é logo apos enviar o comando de SMS, fazer a leitura da resposta do modem e tratar os dados.
Espero ter ajudado!
Olá
ResponderExcluirVinícius Rodrigues, Primeiramente gostaria de lhe parabenizar pelo blog.
Estou tentando desenvolver um projeto que ao enviar uma sms para um shield gsm sim900 efcon v1.2 ele a execute; por exemplo: ligar lampada, porem estou começando agora com arduinos e não tenho tanto conhecimento com programações, estou utilizando este exemplo da internet.
(http://labdegaragem.com/profiles/blogs/tutorial-como-fazer-acionamentos-com-o-celular-shield-via-sms)
Pois não estou conseguindo modifica-lo para o meu shield, vc teria alguma sugestão? Obrigado.
Olá Joanderson, obrigado fico feliz que tenha gostado do blog.
ExcluirSobre seu problema, eu fiz alguns posts passo a passo como comunicar com SIM900, esta bem explicativo e facil de seguir, de uma olhada:
http://microembarcado.blogspot.com.br/2013/09/arduino-gprs-sim900-introducao-i.html
e
http://microembarcado.blogspot.com.br/2013/09/arduino-gprs-sim900-mandando-sms.html
abs!
Vinicius.. eu rodei o primeiro código que voce postou ali.. tive um retorno de varios zeros no serial monitor.. tenho a impressao que isso seja algo bom hehe.. foram em torno de 10 zeros..
ResponderExcluirai quando coloquei pra rodar o codigo de baixo, nao consegui enviar o sms hehe
void setup()
{
Serial.begin(19200);
Serial.print("\r");
delay(1000);
Serial.print("AT+CMGF=1\r");
delay(1000);
Serial.print("AT+CMGS=\"14997xxxxxxx5\"\r");
delay(1000);
Serial.print("SIM900 and Arduino say Hi!\r");
delay(1000);
Serial.print(26);
}
void loop()
{
}
alguma luz pra me dar? hehe
Oi Vanderlei, verifique baud rate do seu Serial Monitor e baud rate em que sua placa GSM trabalha. Esse erro acontece por estar com velocidade diferente, gerando espúrios.
ExcluirAtt,
Vinicius.. coloquei baud 19200 no serial monitor e foi definido no código o serial.begin e o myserial.begin por 19200.
ResponderExcluirapós isso, rodei o código, após dar o upload cliquei para ligar a placa e tive o retorno 2552552552552552552552550
o numero 0 aparece 1 segundo após todos os 255.. os 255 aparecem de uma só vez.. acredito que os 255 seja a condição print do IF e o numero 0 é o print da condição ELSE.
Talvez, isso vai depender do que seu programa esta fazendo, sobre as taxas esse GSM descrito acima funciona com 19200 por padrão, o arduino voce pode colocar a velocidade que bem entender, basta modificar tb no serial monitor.
ExcluirVerifique os jumpers da placa que selecionam qual porta vai ser TX/RX e verifique tb no programa do arduino se esta compatível SoftwareSerial mySerial(2,3); os pinos da placa devem estar assim:
http://2.bp.blogspot.com/-QFbFkbIRHg8/UjJ4oRiSbdI/AAAAAAAAErA/ncFjqlFePh0/s320/foto+(2).JPG
Esse post é mais ocmpleto:
http://microembarcado.blogspot.com.br/2013/09/arduino-gprs-sim900-introducao-i.html
pior que eu ja fiz e desfiz de tudo que é jeito aqui hehe.. relacionado a todos seus posts.. quando coloco para ver se esta disponivel aparece os yyyyyyy, mas não consigo transmitir o sms..
Excluirhehe.. ta dificill hehe
os pinos TX/RX estao conforme a print.. testo o chip no celular e da certo.. nao ta com o pin bloqueado.. =/
fala parceiro,
ResponderExcluirse esta aparecendo yyyyyyy é um bom sinal. Tente enviar outros comandos para modem, exemplo, AT+CSQ, ou somente AT e veja as respsotas
Vinicius.. conversei com um professor meu e ele disse que a velocidade da comunicação também pode influenciar.. por ser comunicação serial ele me disse para tentar baixar esta velocidade para o baud 9600 ou até menor..
Excluirisso realmente pode fazer a diferença?
definindo
Serial.begin(9600);
mySerial.begin(9600);
e usando o 9600 no monitor?
No Serial Monitor do Arduino não faz diferença nenhuma, pode ser qualquer velocidade, por usar CDC e ter um chip dedicado pra isso(16U).
ExcluirO que realmente importa é a velocidade do seu modem GSM, eu já peguei vários modens de varias marcas diferentes, e o baud rate padrão do SIM900 variava, a minha sugestão é a seguinte, teste o mySerial com 2400, 4800, 9600, 19200, 38400.
Para mudar baud rate do seu modem existe o seguinte comando:
AT+IPR=BAUD_RATE
Logo depois envia comando "Enter" ou "0x0D"
Porem ele so funciona se você já estiver estabelecido uma conexão(já conseguir enviar comandos e ser interpretado)