Sim900 Shield

Página 1 de 2 1, 2  Seguinte

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Sim900 Shield

Mensagem  Admin em Dom 26 Fev - 6:48

#####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:
//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)
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 37
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  Admin em Qua 14 Mar - 12:42

Video da galerinha já arrasando ai com o shield

avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 37
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Sim900d

Mensagem  renanfreitas em Qui 29 Mar - 8:21

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.


renanfreitas

Mensagens : 8
Data de inscrição : 22/03/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  Admin em Qui 29 Mar - 9:14

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

Código:
 
void setup()
{
 
  pinMode(powerkey, OUTPUT);
  pinMode(statuspin, INPUT);
 
  mySerial.begin(19200);              // the GPRS baud rate 
  Serial.begin(19200);                // the GPRS baud rate 
}
 
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 37
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  macckk em Qua 4 Abr - 22:14

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.

macckk

Mensagens : 7
Data de inscrição : 04/04/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  Admin em Qui 5 Abr - 6:20

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

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);
 
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 37
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  macckk em Qui 5 Abr - 8:12

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

macckk

Mensagens : 7
Data de inscrição : 04/04/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  Admin em Qui 5 Abr - 8:18

Id=201 é só um exemplo, o 123 é a variavel
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 37
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  macckk em Qui 5 Abr - 8:25

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

macckk

Mensagens : 7
Data de inscrição : 04/04/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Arduino MEGA

Mensagem  cristianormoraes em Qui 5 Abr - 16:04

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 Sad

cristianormoraes

Mensagens : 1
Data de inscrição : 05/04/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  macckk em Qui 5 Abr - 17:05

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

macckk

Mensagens : 7
Data de inscrição : 04/04/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  Admin em Sab 7 Abr - 8:04

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);
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 37
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  macckk em Sab 7 Abr - 12:56

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

macckk

Mensagens : 7
Data de inscrição : 04/04/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  Admin em Sab 7 Abr - 18:24

o comando é AT+CIPSEND espere o "ok" da pagina antes de finalizar o comando com ctrl+z
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 37
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  macckk em Dom 8 Abr - 0:55

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

macckk

Mensagens : 7
Data de inscrição : 04/04/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  Admin em Dom 8 Abr - 8:32

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
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 37
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  macckk em Seg 9 Abr - 0:08

Tiago, fiz inúmeros testes.... se eu não enviar o ctrl+z (mySerial.print(0x1A,BYTE)Wink 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

macckk

Mensagens : 7
Data de inscrição : 04/04/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  gilsoe em Sex 27 Abr - 9:32

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

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  Admin em Sex 27 Abr - 10:06

Atenção é necessário usar a interface 1.0 do arduino

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);
}
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 37
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  gilsoe em Sex 27 Abr - 11:42

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.



gilsoe

Mensagens : 2
Data de inscrição : 27/04/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  Admin em Dom 29 Abr - 16:05

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

http://projetoarduino.forum-livre.com/t6-sim900-shield-arduino-mega#58

Foi testado e funcionou
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 37
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Como recebo mensagem?

Mensagem  evertondt em Dom 3 Jun - 16:59

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

evertondt

Mensagens : 12
Data de inscrição : 13/05/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  Admin em Seg 4 Jun - 5:13

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
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 37
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Remetente da ligação e DTMF

Mensagem  gcysne em Ter 26 Jun - 20:52

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.. Sad

gcysne

Mensagens : 3
Data de inscrição : 26/06/2012

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  Admin em Ter 26 Jun - 21:13

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
avatar
Admin
Admin

Mensagens : 560
Data de inscrição : 07/04/2009
Idade : 37
Localização : Franca

Ver perfil do usuário http://projetoarduino.forum-livre.com

Voltar ao Topo Ir em baixo

Re: Sim900 Shield

Mensagem  Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Página 1 de 2 1, 2  Seguinte

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum