2011-08-25

Usando a placa SIM900

Placa de Desenvolvimento SIM900.


Aqui um pequeno levantamento que fiz, para um trabalho da faculdade:

Comandos AT:
OBS: Utilize o comando AT+CLAC, para listar todos os comandos AT
Manual de comandos AT do SIM900: SIM900_ATC_V1_00.pdf
Comando
O que faz?
Observações
Disca para um número
Chamada de voz
Tem que ter um ponto e virgula no final.
ATH0
Encerra ligação
Desliga a chamada de voz
ATH3
Encerra GPRS
ATLx
Volume x é um número de 0 a 9
AT+CLIP=1
Ativa o identificador de chamadas do SIM900
AT+CRC=1
Ativa o identificador de tipo de chamada
Voz, dados, ...
AT&W
Grava configurações
Nãograva APN e outras configurações de rede.
Comandos relacionados ao GPRS
AT+CIPMUX=1
Ativa multiplas conexões por GPRS
Segue o padrão TCP/IP e permite usar várias portas TCP, sem isso não podemos usar muito bem protocolos HTTP e FTP
AT+CSTT=”apn”,”user”,”pass”
Configura APN
Sem isso o GPRS não funciona!
Exemplo operadora Oi:
AT+CSTT=”gprs.oi.com.br”,”oi”,”oi”
AT+CIICR
Conecta à rede GPRS
Precisa conectar para requisições TCP/UDP
AT+CIFSR
Exibe o endereço IP, atribuído à placa
Bom para sabermos se estamos conectados ou não.
AT+CIPSTATUS
Estado das conexões TCP/IP
AT+CDNSCFG=”8.8.8.8”,”8.8.4.4”
Configura DNS
8.8.8.8 e 8.8.4.4 são DNSs válidos da Google!
Após configurar os DNSs, o IP pode ser usado o nome do servidor nos comandos com o AT+CIPSTART
AT+CIPSTART=x,”TCP”,”IP”,”PORTA”
Conecta a um servidor
(1) x é o número da conexão se estiver usando CIPMUX=1 caso esteja com CIPMUX=0 não é necessário este parâmetro.
AT+CIPCLOSE=x
Fecha a conexão x
(1)
AT+CDNSGIP=”fazzi.eng.br
Resolve o IP de um hostname válido
AT+CIPSEND=x
Envia um comando de protocolo para a conexão x
(1)
AT+CIPSHUT
Desconecta tudo
Envio de SMS
AT+CMGF=1
Inicia modo SMS
AT+CMGS=”+55xxx”
Número de celular de destino
xxx é o número do celular, deve-se incluir o DDD, DDI e operadora são opcionais.
> msg CTRL+Z
msg é o texto da mensagem a ser enviada.
Usando o terminal deve-se usar um CTRL+Z para terminar e enviar a msg,
Usa-se ASCII 26 (hexa 0x1A)
Sequência acesso à FTP
AT+CIPMUX=1
Multiplexado
AT+CSTT="gprs.oi.com.br","oi","oi"
APN
AT+CIICR
Conexão
AT+CIFSR
Exibe IP da conexão
AT+CIPSTART=0,"TCP","70.84.174.162",21
Conecta ao servidor FTP à conexão 0
AT+CIPSEND=0
Envia comandos à conexão 0
Sempre deve-se aguardar a conexão “OK”
>user anunakin CTRL+J CTRL+Z
user login
CTRL+J é o ASCII 10
AT+CIPSEND=0
>pass ssseeennnhhhaa CTRL+J CTRL+Z
pass senha
AT+CIPSEND=0
cwd www CTRL+J CTRL+Z
muda de diretório
Exemplo via terminal Linux minicom: comando no shell do Linux:                
 minicom -D /dev/ttyUSB2 -b 19200
RDY
+CFUN: 1
+CPIN: READY
+CREG: 0
+CREG: 2
+CREG: 1,"3016","4E71"
Call Ready                        Neste ponto a placa SIM900 já está ligada e conectada à rede GSM
AT+CIPMUX=1
OK
AT+CSTT="gprs.oi.com.br","oi","oi"                                                                    
OK                                                                                                    
AT+CIICR                                                                                              
OK                                                                                                                                                                    
AT+CIFSR                                                                                              
187.124.14.63                       Placa conectada via GPRS                                                                 
AT+CIPSTART=0,"TCP","70.84.174.162",21                                                                
OK                                                                                                
0, CONNECT OK                                                                                        
+RECEIVE,0,74:                                                                                        
220-FTP server ready.                                                                                
220 This is a private system - No anonymous login
AT+CIPSEND=0                                                                                          
> user anunakin                                                                                      
                                                                                                     
0, SEND OK                                                                                            
                                                                                                     
+RECEIVE,0,41:                                                                                        
331 User anunakin OK. Password required                                                              
AT+CIPSEND=0n                                                                                        
> pass xxxxSenhaDoFTPxxxx                                                                                                      
0, SEND OK                                                                                            
                                                                                                     
+RECEIVE,0,93:                                                                                        
230-User anunakin has group access to:  anunakin                                            
230 OK. Current restricted directory is /                                                            
AT+CIPSEND=0                                                                                        
> cwd www                                                                            
0, SEND OK                                                                                            
                                                                                                     
+RECEIVE,0,35:                                                                                        
250 OK. Current directory is /www
Transferência de dados por FTP
Copiaremos o arquivo TESTE.TXT presente na pasta www
Este arquivo contém o seguinte texto:
“TESTE DE ARQUIVO NO SERVIDOR!”
AT+CIPSEND=0
>pwd CTRL+J CTRL+Z
lista o diretório atual
AT+CIPSEND=0
>pasv CTRL+J CTRL+Z
O comando PASV, diz ao servidor que usaremos o modo passivo, o servidor responde com a seguinte sequência:
227 Entering Passive Mode (70,84,174,162,79,144)
Os primeiros 4 números são o IP do servidor e os dois últimos a porta aonde conectaremos para esperar os arquivos, e listagens (comando LIST)
79 é o hexa 4F
144 é o hexa 90
4F90 é a porta que em decimal é 20368
Essa dos hexas é o pulo do gato sem isso nada de copiar um arquivo...
AT+CIPSTART=1,"TCP","70.84.174.162",20368
Abrimos outra conexão ao servidor na porta 20368, essa é a conexão 1
AT+CIPSEND=0
Todos os comandos continuam na conexão 0
>retr TESTE.TXT CTRL+J CTRL+Z
Solicitamos o arquivo TESTE.TXT
Após isso o arquivos será enviado pela conexão 1, e ao termino esta conexão será fechada pelo servidor.
LOG no minicom:
AT+CIPSEND=0                                                                                          
> pwd                                                                                                
                                                                                                     
0, SEND OK                                                                                            
                                                                                                     
+RECEIVE,0,37:                                                                                        
257 "/www" is your current location                                                                  
AT+CIPSEND=0                                                                                          
> pasv                                                                                                
                                                                                                     
0, SEND OK                                                                                            
                                                                                                     
+RECEIVE,0,50:
227 Entering Passive Mode (70,84,174,162,79,144)                                                      
                                                                                               
AT+CIPSTART=1,"TCP","70.84.174.162",20368                                                            
OK                                                                                                    
                                                                                                     
1, CONNECT OK                                                                                        
AT+CIPSEND=0                                                                                          
> retr TESTE.TXT                                                                                              
                                                                                                     
0, SEND OK                                                                                            
                                                                                                     
+RECEIVE,0,30:                                                                                        
150 Accepted data connection                                                                          
                                                                                                     
+RECEIVE,1,33:                                                                                        
TESTE DE ARQUIVO NO SERVIDOR!
                                     
+RECEIVE,0,94:                                                                                        
226-File successfully transferred                                                                    
226 0.008 seconds (measured here), 3.89 Kbytes per second                                            
                                                                                                     
1, CLOSED

Espero que ajude a galera!

31 comentários:

Anônimo disse...

Parabéns pelos post e suas pesquisas.

Abraços na alma.

CABELO

f3d3r4l disse...

muito bom seu trabalho. Tenho uma duvida referente ao envio dos comandos. somente jogar os comando no rx da placa e ja aceita?
rodrigomartinson@gmail.com

Marcus Fazzi disse...

Isso mesmo direto pelo RX/TX usando RS232 pelo terminal ou via microcontrolador

Kaed disse...

Também estou brincando com este módulo mas estou com dificuldade para apos identificar a retirada do SIMCard forçar que o módulo reconecte.

Marcus Fazzi disse...

@Kaed estás querendo tirar o SIM e depois reconectar com o módulo ligado? Até onde Eu saiba não se deve fazer isso.

Kaed disse...

Pq não? Vc encontrou algum lugar na documentação q informe q não pode?
No mais este módulo e muito bom!

Marcus Fazzi disse...

Qualquer sistema de telefonia GSM/3G não se deve remover o chip SIM com o aparelho ligado, motivo pelo o qual todos os aparelhos celular têm o chip SIM atrás da bateria.

Unknown disse...

Boa noite!
Onde é possível comprar esse kit de desenvolvimento do SIM900 ?
Obrigado!

Marcus Fazzi disse...

Há vários sites:
http://www.seeedstudio.com
http://www.iteadstudio.com
http://www.sparkfun.com

Tenho uma aqui da itead: vendo por R$200.00 for o frete.

Marcelo Ourique disse...

Cara boa noite. To apanhando para fazer um GET e um POST numa pagina WEB a partir do SIM900. POdes me ajudar? Como faço!? Muito obrigado.

Marcus Fazzi disse...

Marcelo,
O processo é bem simples, entretanto tens de atualizar a firmware do SIM900,
Dai vais ter comandos específicos para HTTP, assim que tiver um tempo posto aqui como fazer...
Por enquanto dá uma olhada aqui:
http://www.seeedstudio.com/wiki/GPRS_Shield

Kaed disse...

Bom na verdade não são todos que o sim fica atras iPhone e alguns outros poucos o sim fica acessivel e pode ser retirado com o celular ligado.
Outra questão, estou tentando servir uma html no sim900 mas estou com problemas.
Coloco o sim900 em estado de SERVER LISTENING e acesso de um browser e posso receber o GET do http. Mas algumas vezes não esta chegando o GET. Vc já fez algo parecido?

Marcus Fazzi disse...

Tentou atualizar a firmware do SIM900?

Marcelo Ourique disse...

Nao precisei atualizar o Firmaware. o meu já faz concções HTTP.
A partir desses consegui enviar dados com method GET. Assimque funfar direitinho posto aqui o código. Ainda estou apanhando pra enviar dados pelo metodo POST!! Achas que consegues me ajudar? Abração

Marcus Fazzi disse...

A tua placa SIM900 já veio com os comandos AT especificos para HTTP? como AT+HTTPINIT, AT+HTTPPARA eAT+HTTPACTION ?

Marcelo Ourique disse...

SIm. PAra conectar deve-se configurar o acess point atraves de comandos AT+SAPBR; Após configurado, utilizamos o AT+HTTPINIT para iniciar uma aplicação HTTP, após passa-se os parametros atravas do AT+HTTPPARA, neste comando montamos a URL que queremos submeter. Para submeter a URL utilizamosmo AT+HTTPACTION=0, e caso ocorra tudo normal, o SIM900 responde 1,1,200. Consegui fazer assim, somente via metodo GET, seguindo o api notes dofabricante(SICOM) porem não entendi ainda como faço para enviar os dados via POST. Abraços.

Unknown disse...
Este comentário foi removido pelo autor.
Unknown disse...

Amigo o que é esse HTTPParamValue?
Utilizado no HTTPPARA.

Se puder me dar uma breve descrição de como se utiliza o HTTPPARA agradeceria muito.

Desde já agradeço.

Marcelo Ourique disse...

Tche, no HttpPara, voce passa o pametro para o GET, no meu caso foi a URL que descreve o GET,Ex.:

printf(AT+HTTPPARA="http://www.xxx.com.br/teste?indice1=3&indice2=te");

Passa o paramentro;


printf(AT+HTTPACTION=0);

Submete a pagina!!!

Abrass

Unknown disse...

Pessoa, estou realizando uns teste com uma placa destas com SIM900, porem a minha acabou de parar de responder ao pressionar o Perkey. Alguém sabe o que pode ser? Ou foi pra banha mesmo??

Marcus Fazzi disse...

Opa, o que andastes a fazer com sua placa? quais comandos estavas usando?

Unknown disse...

Bom dia, estava usando comandos normais pelo PIC e pelo terminal, comandos AT, comandos de Mensagem, e acesso a FTP, conforme seu exemplo. Estava tudo funcionando, enviando SMS, e acessei ontem um servidor de um colega meu. Desliguei tudo liguei novamente e nada, ligo ele separado da placa, pressiono o botão Perky e nada.

Unknown disse...

Olá quanto ao problema acima, eu já comprei outro módulo mesmo. Sem jeito.

Outra pergunto se puder ajudar. Estou ligando o módulo em um PIC, você por acaso utilizou algum conversor de nível para inteligar as duas seriais? pois o PIC é 5V. Estou simplismente ligando meu PIC em 4V, não sei se este pode ter sido o motivo do estrago.
Obrigado se puder ajudar.

Marcus Fazzi disse...

Se estiveres a usar uma placa como a da foto, ela funciona de 3.3V a 5V para nível lógico. Usei com Arduino, com cabo USB para Serial e com PIC32.

Leonardo Gazio disse...
Este comentário foi removido pelo autor.
Leonardo Gazio disse...

É possível integrar essa placa com o LPC1114 também?

Marcus Fazzi disse...

Leonardo Gazio, essa placar requer que o microcontrolador tenha comunicação serial, acredito que todos tenham, e caso negativo ainda pode-se implementar um "bit bang" ..

Unknown disse...

Amigo estou fazendo um projeto utilizando o AT89S52 e modulo SIM900, estou com uma certa dificuldade no envio dos comando AT,
toda vez que coloco ela no meu programa quando vou compilar para arquivo .hex da erro. me ajude por favor.

Marcus Fazzi disse...

Posta a parte do código aonde está dando erro.

Douglas disse...

Boa Noite
Desde ja agradeco pelo seu post, ajuda muito a galera.
Estou com um problema ate consigo fazer meu sim900 acessar uma pagina web, porem ele demora bastante e depois nao acessa mais, isso sem eu mudar nada.Pensei que poderia ser sinal mas aconteceu em um lugar em que o sinal estava muito bom e um lugar com sinal ruim. Acho que deve ter alguma configuracao que pode estar atrapalhando.Sabe se o chip SIM tem alguma memoria que com os acessos ela vai enchendo?
Segue abaixo meu codigo:

Serial.println("Ativando GPRS");
delay(5000);
SIM900.flush();
Serial.flush();

SIM900.println("AT+CSQ"); //medir nvel de sinal
delay(500);
mostraDadosSerial();

SIM900.println("AT+CREG?"); //SISTEMA ESTA OK?
delay(1000);
mostraDadosSerial();

SIM900.println("AT+CGATT?");
delay(500);
mostraDadosSerial();

SIM900.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
delay(10000);
mostraDadosSerial();

SIM900.println("AT+SAPBR=3,1,\"APN\",\"zap.vivo.com.br\""); //zap.vivo.com.br
delay(10000);
mostraDadosSerial();

SIM900.println("AT+SAPBR=1,1");
delay(4000);
mostraDadosSerial();

while(d<=3)
{
/////// comecava o loop//////////////

SIM900.println("AT+HTTPINIT"); // INICIA SERVICO HTTP
delay(7000);
mostraDadosSerial();

SIM900.println("AT+HTTPPARA=\"URL\",\"http://google.com"\"");
delay(7000);
mostraDadosSerial();

SIM900.println("AT+HTTPACTION=0"); //ATIVA METODO GET PARA RECEBER RESPOSTA DA PAGINA
delay(30000); // lendo
mostraDadosSerial();

SIM900.println("AT+HTTPREAD"); // REALIZA LEITURA
delay(30000); //lendo

SIM900.println("AT+CSQ"); //medir nvel de sinal
delay(500);
mostraDadosSerial();


SIM900.println("");
SIM900.println("AT+HTTPTERM"); // FINALIZA SERVICO HTTP
mostraDadosSerial();
delay(600);

desde ja agradeco pela ajuda.

Marcus Fazzi disse...

É arduino? Testa com uma página mais simples que a do google.

Os testes que fiz foram com uma placa Pinguino c/ PIC 32bits@80MHz ... e uma página em PHP que já gerava os dados no formato que seriam usados pelo µC ...

Verifica a velocidade entre o SIM900 e o Arduino tem uns comandos AT para aumentar isso, de 9600 ... fica ligado que tem de mudar nas duas pontas Arduino e SIM900.