Pages: [1] 2   Go Down
Author Topic: [RESOLVIDO] ARDUINO UNO + IComsat v1.0 shield SIM900 GSM  (Read 8110 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Antes de mais nada quero agradecer a todos que irão contribuir!

Recentemente comprei os seguintes placas:

1. Arduino UNO
2. Shield SIM900 GSM/GPRS IComsat, Itead Studio (http://iteadstudio.com/store/images/produce/Shield/IComSat/icomsat%20V1.1_DS.pdf)

Configurei meu Shield GSM para que o Arduino possa utilizar qualquer uma das 08 portas que tenho no shield, bastou retirar os jumpers.



Minha idéia inicial e fazer um código que simplesmente permita que eu envie comando pelo SerialMonior e (tipo uma comando AT) e eu veja a resposta.

Além das portas, preciso configurar mais alguma coisa nesse Shield?
Consigo ligar o somente shield com um cabo Prolific USB-to-serial (em niveis TTL)? Se sim, posso alimentar o shield com o próprio cabo? Como devo ligar as saidas do cabos com o shield?

Anexo está a configuração dos jumpers para RX e TX.

Obrigado.





* pinos_rx_e_tx.png (30.29 KB, 849x155 - viewed 98 times.)
« Last Edit: November 04, 2012, 04:06:04 pm by g7henrique » Logged

'round the world...
Online Online
Faraday Member
**
Karma: 42
Posts: 3257
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Configurei meu Shield GSM para que o Arduino possa utilizar qualquer uma das 08 portas que tenho no shield, bastou retirar os jumpers.

Os jumpers estão lá para escolheres as portas que pretendes utilizar... sem jumpers, não existe um contacto eléctrico entre ambas as placas, logo não funciona.


Minha idéia inicial e fazer um código que simplesmente permita que eu envie comando pelo SerialMonior e (tipo uma comando AT) e eu veja a resposta.
E para que precisas dum shield GSM? Podes fazer isso só com o Arduino. smiley-neutral

Além das portas, preciso configurar mais alguma coisa nesse Shield?
Consigo ligar o somente shield com um cabo Prolific USB-to-serial (em niveis TTL)? Se sim, posso alimentar o shield com o próprio cabo? Como devo ligar as saidas do cabos com o shield?

A documentação que colocaste aqui não é muito boa para sabermos se é preciso mais alguma coisa. De onde tiraste isto, não tinham exemplos que pudesses usar?

Que cabo é esse? Podes usar o Arduino (se tiver o chip em formato DIP), simplesmente tirando o chip do socket e configurando os jumpers como tem no manual para usares o Arduino como um meio de ligação ao PC.

Suponho que o mesmo seja feito com o tal Prolific, uma vez que ambos usam o mesmo chip para "falar" em USB.



Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Obrigado Edison,

Eu conectei o meu cabo e funcionou, também configurei as portas TX e RX com jumpers respectivamente nos terminais 0 e 1.
O Arduino UNO será usado no Shield GSM quando o código estiver pronto e minha intenção em conectar o cabo e para enviar comando mais rapidamente, sem a necessidade de inserir um código no microcontrolador do arduino todo vez que eu quiser enviar um comando, eu realmente não tenho familiaridade com o Arduino ainda.

Hoje utilizando comandos AT do módulo SIM900 eu consegui fazer ligações a partir do módulo.
Infelizmente tentei por diversas vezes enviar SMS, mas não tive sucesso. Os comandos AT que usei foram:

1. AT
resp. do modem: OK

2. AT+CMGF=1
resp. do modem: OK
obs.: comando usado para configurar os SMS para TEXT MODE

3. AT+CMGS="9708xxxx"
>TESTE <Ctrl+Z>
resp. do modem: o modem não responde e qualquer outro comando que eu envio após este não tem responda (travado?).


Tem algum erro de syntax ou é preciso alguma configuração de operadora (no caso uso VIVO)para o envio de SMS?
Alguma configuração do SIM card pode ocasionar está falha?

Já testei o cabo e verifiquei que está tudo certo.

Aguardo alguma ajuda.
Obrigado.

Logged

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1579
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
3. AT+CMGS="9708xxxx"
>TESTE <Ctrl+Z>
resp. do modem: o modem não responde e qualquer outro comando que eu envio após este não tem responda (travado?).

Da minha experiencia com modem da simens que usa o mesmo AT command que esse Icomsat sugeria te primeiramente tentares enviar a sms usando um cliente de hiperterminal( eu uso o putty mas qualquer outro serve).
Desta forma e mais facil fazeres o debug e evitas a programaçao para ja no arduino.
Entao abres o putty com o baud rate correcto e fazes o seguinte:

Escreves at e enter
Deve te ser devolvido um ok
Depois escreves AT+CMGF=1 e enter (isto coloca o modem em modo texto)
Deves receber outro ok
Depois escreves AT+CMGS=96xxxxxxx e das ENTER (sem as aspas)
Logo de seguida ira te aparecer no ecra o simbolo > Escreves o teu sms logo aqui e no fim das no teclado CTRL+Z (primidas ao mesmo tempo) e desta forma terminas o texto
Deves receber tambem um ok no fim e a mensagem devera ser enviada
Esta e a forma de enviar no siemens mc 35i que apos uma breve analise me parece ter os mesmos AT commands como ja referi
Quando conseguires no hiperterminal enviar a sms entao depois e so pulares para a programaçao no arduino tentando repetir esses comandos via Serial.Write(para CTRL+Z) e para enviares texto Serial.Print
Espero ter ajudado
Bons estudos

« Last Edit: October 19, 2012, 04:26:11 am by HugoPT » Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


'round the world...
Online Online
Faraday Member
**
Karma: 42
Posts: 3257
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Era isso que eu ia perguntar... como é que envias o Ctrl+Z. Olhando aos exemplos da biblioteca, isso consegue-se enviando o valor 0x1a.

De resto, tenta o comando para ver se tens rede, poderá ser uma situação dessas. :S
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1579
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
como é que envias o Ctrl+Z. Olhando aos exemplos da biblioteca, isso consegue-se enviando o valor 0x1a.
Eu usava Serial.write(0x1a);
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
3. AT+CMGS="9708xxxx"
>TESTE <Ctrl+Z>
resp. do modem: o modem não responde e qualquer outro comando que eu envio após este não tem responda (travado?).

Da minha experiencia com modem da simens que usa o mesmo AT command que esse Icomsat sugeria te primeiramente tentares enviar a sms usando um cliente de hiperterminal( eu uso o putty mas qualquer outro serve).
Desta forma e mais facil fazeres o debug e evitas a programaçao para ja no arduino.
Entao abres o putty com o baud rate correcto e fazes o seguinte:

Escreves at e enter
Deve te ser devolvido um ok
Depois escreves AT+CMGF=1 e enter (isto coloca o modem em modo texto)
Deves receber outro ok
Depois escreves AT+CMGS=96xxxxxxx e das ENTER (sem as aspas)
Logo de seguida ira te aparecer no ecra o simbolo > Escreves o teu sms logo aqui e no fim das no teclado CTRL+Z (primidas ao mesmo tempo) e desta forma terminas o texto
Deves receber tambem um ok no fim e a mensagem devera ser enviada
Esta e a forma de enviar no siemens mc 35i que apos uma breve analise me parece ter os mesmos AT commands como ja referi
Quando conseguires no hiperterminal enviar a sms entao depois e so pulares para a programaçao no arduino tentando repetir esses comandos via Serial.Write(para CTRL+Z) e para enviares texto Serial.Print
Espero ter ajudado
Bons estudos



Pessoal, obrigado pelas respostas;
Com ajude de você notei que o RogerCom, que é o terminal que estou usando, não envia o comando CTRL+Z por texto.
Foi possível enviar a mensagem configurando o terminal para enviar comandos do teclado e com isto bastou pressionar as teclas CTRL+Z, conforme o coleag HugoPT sugeriu.

Agora vou avançar com o código e de início preciso saber se o meu ARDUINO permite configurar duas portas RX e outras duas TX, sem sim como fica o código para isso?
Logged

'round the world...
Online Online
Faraday Member
**
Karma: 42
Posts: 3257
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

No site da itead, de onde tiraste esse manual tem uma biblioteca para usares o shield através dos pinos que quiseres. É a newSoftSerial. Pesquisa no google. smiley
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No site da itead, de onde tiraste esse manual tem uma biblioteca para usares o shield através dos pinos que quiseres. É a newSoftSerial. Pesquisa no google. smiley

Obrigado, irei pesquisar.
Mas na verdade eu não tenho problemas com a RX e TX do módulo GSM SIM900, a minha dúvida é a respeito do ARDUINO UNO.
Preciso usar duas portas RX e duas TX no ARDUINO UNO, acretido que seja possível usar 4 portas digitais para fazer isso, sendo que 2 das 8 portas digitais já estão configuras como RX e TX nativas (ao que parece).

Como disse eu não tenho nenhuma familiaridade com o ARDUINO e sua programação, farei mais pesquisas e alguns códigos testes.
Ao final, quando atingir meu objetivo vou postar meu projeto completo e este será um RASTREADOR GPS POR SMS, e o funcionamento do dispositivo se dá enviando um SMS para ele com um código de segurança (como gps) e quando este SMS chegar ao Rastreador ele verifica se o código de segurança está correto, se sim ele deve copiar o número do celular que fez a solicitação para uma variavel, em seguida são extraidos copiados os dados da TX do GPS de posição, data e hora para outra variável e um SMS com está informação é enviada para o numero que solicitou.

Parece fácil mas meu caminho até o final disso não será simples. Terei que estudar bastante.
Logged

'round the world...
Online Online
Faraday Member
**
Karma: 42
Posts: 3257
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

A newsoftserial faz o que pretendes.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A newsoftserial faz o que pretendes.

Consegui usar esta biblioteca, no entanto notei que a SoftSerial já é suficiente para declarar duas portas RX e outras duas TX.

O meu problema mudou, eu estou parado num pedaço do meu código que se resume comparar o texto de um SMS, se este tiver um código o número dele é copiado.

O SMS chega porta na seguinte porta:
SoftwareSerial gsm_com(2,3);

E a informação é lida é a seguinte:
-----------------------------------------------------------------------------------
AT+CMGR=1

+CMGR: "REC UNREAD","8273xxx","","12/10/19,22:08:18-12"
SENHA

OK
-----------------------------------------------------------------------------------

Aqui começa meu problema, se esse SMS tiver a palavra SENHA é sinal que o sms é validado;

Se validado quero copiar o número para a seguinte variável

char phone_number[]=

Ao final a minha variável terá o seguinte valor
char phone_number[]="8273xxx"

Caso o sms não tenha a senha este não se validado, sendo assim volto a esperar o um novo SMS.

Alguma idéia?

Obrigado a todos.
Logged

'round the world...
Online Online
Faraday Member
**
Karma: 42
Posts: 3257
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

A newsoftserial, tanto quanto sei, é melhor.

Mais para o fim da manhã vejo a outra dúvida.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A newsoftserial, tanto quanto sei, é melhor.

Mais para o fim da manhã vejo a outra dúvida.

Sem problemas, podemos usar qualquer uma delas.

Irei aguardar a ajuda.

Obrigado amigo.
Logged

'round the world...
Online Online
Faraday Member
**
Karma: 42
Posts: 3257
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

A newsoftserial faz o que pretendes.

Consegui usar esta biblioteca, no entanto notei que a SoftSerial já é suficiente para declarar duas portas RX e outras duas TX.

O meu problema mudou, eu estou parado num pedaço do meu código que se resume comparar o texto de um SMS, se este tiver um código o número dele é copiado.

O SMS chega porta na seguinte porta:
SoftwareSerial gsm_com(2,3);

E a informação é lida é a seguinte:
-----------------------------------------------------------------------------------
AT+CMGR=1

+CMGR: "REC UNREAD","8273xxx","","12/10/19,22:08:18-12"
SENHA

OK
-----------------------------------------------------------------------------------

Aqui começa meu problema, se esse SMS tiver a palavra SENHA é sinal que o sms é validado;

Se validado quero copiar o número para a seguinte variável

char phone_number[]=

Ao final a minha variável terá o seguinte valor
char phone_number[]="8273xxx"

Caso o sms não tenha a senha este não se validado, sendo assim volto a esperar o um novo SMS.

Tens de fazer string parsing.
A SENHA, não vem dentro de aspas?
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A newsoftserial faz o que pretendes.

Consegui usar esta biblioteca, no entanto notei que a SoftSerial já é suficiente para declarar duas portas RX e outras duas TX.

O meu problema mudou, eu estou parado num pedaço do meu código que se resume comparar o texto de um SMS, se este tiver um código o número dele é copiado.

O SMS chega porta na seguinte porta:
SoftwareSerial gsm_com(2,3);

E a informação é lida é a seguinte:
-----------------------------------------------------------------------------------
AT+CMGR=1

+CMGR: "REC UNREAD","8273xxx","","12/10/19,22:08:18-12"
SENHA

OK
-----------------------------------------------------------------------------------

Aqui começa meu problema, se esse SMS tiver a palavra SENHA é sinal que o sms é validado;

Se validado quero copiar o número para a seguinte variável

char phone_number[]=

Ao final a minha variável terá o seguinte valor
char phone_number[]="8273xxx"

Caso o sms não tenha a senha este não se validado, sendo assim volto a esperar o um novo SMS.

Tens de fazer string parsing.
A SENHA, não vem dentro de aspas?


Então, a SENHA não está entre aspas pois esta vem do SMS recebido que é lido na porta gsm_com, acho que o ideal seria colocar a informação do SMS em algum buffer mas eu não sei fazer isso e também não sei se este é o melhor caminho.

Também poderiamos declarar uma constante com a senha e verificar se na informação contém a senha.

Aguardo sua opnião.

Obrigado.
Logged

Pages: [1] 2   Go Up
Jump to: