Oi, preciso muito de uma ajudinha (:

Tenho que fazer o arduino com o shield GSM/GPRS SIM900 conversar com um servidor PHP. Imagine assim: se eu acender um led direto no arduino, no meu servidor PHP tem que aparecer LED LIGADO, e se eu apertar o botão "Ligar Led" no meu servidor, o arduino tem que acender o Led da mesma forma, entendeu? 
Só que tudo isso tem que ser feito por meio de internet, não posso usar a conexão USB, já que a intenção é que o arduino+GSM esteja longe do computador onde está o PHP. 

Alguma sugestão? Por favor, por favor, por favor *----*

Obrigada desde já!

Exibições: 9702

Responder esta

Respostas a este tópico

Olá, antes de mais nada, vc poderia responder as seguintes dúvidas?

1) qual seu grau de conhecimento sobre o shield com sim900 (nenhum, básico, médio, avançado)? Explique também o que vc já sabe fazer com o SIM900 (ligar, receber ligação, mandar sms, receber sms, conectar na internet, etc)

2) sobre o PHP, qual seu nível de domínio(nenhum, básico, médio, avançado)? 

3) esse servidor PHP está em windows ou linux?

4) esse servidor com PHP está em seu computador ou está em hospedagem contratada?

5) em que estágio desse teu projeto vc está? Já tem os equipamentos e servidor PHP devidamente configurado?

6) qual o grau de urgência? Vc tem tempo pra aprender a dominar cada etapa desse teu projeto, ou é urgente e vc prefere algo mastigado e/ou quase pronto pra usar? 

1) básico. Sei fazer todos esses listados (sms, ligação, conectar na internet).

2) PHP básico. 

3) Windows, mas podemos mudar pra Linux a qualquer momento, sem problema.

4) Está no meu computador.

5) Tenho todos os equipamentos e o servidor configurado. Só preciso receber uma resposta do PHP para concluir. 

6) SUPER HIPER MEGA urgente, preciso disso funcionando até dia 30 :S mas, na medida do possível (ou futuramente) eu gostaria de entender cada etapa mesmo, para projetos futuros :3

e agradeço MUITO a sua resposta *-*

Olá, é importante vc enxergar que desse jeito que vc está planejando, não direi que é impossível, mas o caminho será árduo, pois exigira um grau de conhecimento sobre PHP médio/avançado.

Explico porque:

1) o teu shield SIM900 te proporcionará conexão com a internet sim, mas só isso. Digamos que ele funciona no modo navegador, funcionará como cliente para se conectar por exemplo a uma página na internet.

2) não vou dizer que é impossível, mas ficaria muito "tabajara" do seu creisson (lembra do casseta e planeta?) vc "servir" as informações do estado dos leds através de conexão como a internet no modo cliente

3) fora isso, como é que tua página html (ou PHP) hospedada no teu servidor em casa irá transmitir o comando dado pelo usuário até o teu arduino situado em outro local? Vai chegar como no teu arduino? Pela conexão internet do sim900 não dá, afinal de contas, ele é cliente e não servidor

Então, me permita sugerir uma maneira mais fácil e correta:

1) no ambiente que o arduino está, vc precisará de um ethernet shield. Será através dele que vc disponibilizará as informações do estado do led, pois vc irá configurá-lo como servidor.

2) nesse mesmo ambiente que o arduino está, vc precisará de uma conexão com internet, mas essa internet precisará permitir que vc abra portas para conexões externas (remotas). O ethernet shield usará dessa conexão com a internet para funcionar como server

3) dessa forma, ficarão criadas as condições para que o arduino possa ser comandado remotamente através da internet, bem como disponibilizar as informações sobre status do led a quem solicitar

4) no ambiente remoto (sua casa), onde está o servidor windows com php, vc programa o script php para servir uma página com os comandos dos leds. Deverá também programar o script para se comunicar com o ethernet shield e solicitar informações sobre o status dos leds.

5) onde entraria o shield sim900? sei lá, não sei. Se quiser inventar uma utilidade pra ele nesse projeto, há algumas possibilidades, mas eu ainda não consegui enxergar alguma maneira de usar a internet dele pra servir dados. Mas vc poderia por exemplo, programar esse shield sim900 para enviar sms para algum destinatário contendo as informações dos leds assim que ele recebesse alguma ordem vinda da internet ou via torpedo. Dá também pra programar pra quando receber um sms com uma codigo secreto, ele executar alguma tarefa, enfim, há inúmeras possibilidades, tua imaginação é quem manda.

Quanto ao prazo de 30 dias, será fácil encontrar alguém disposto a te sugerir tutoriais ou sites pra vc tentar aprender sozinha e vencer cada etapa. Não sei da sua disponibilidade pra dedicar a esse projeto, mas é bem provável que 30 dias seja insuficiente para vc aprender sobre cada etapa e fazer isso funcionar como pretende.

Estou  achando que vc precisará realmente de algo já mastigadinho, pronto pra usar após alguns pequenos ajustes. Agora é aguardar pra ver se tem alguém disposto te entregar um projeto pronto.

Obrigada pela sugestão, mas não vejo como utilizar um ethernet, visto que servidor php e arduino não estarão no mesmo local nem próximos... e o arduino+shield não pode ficar dependente de uma rede wi-fi, por isso a escolha do gsm, para que eles funcionem com 2G... 

na própria IDE do arduino tem um exemplo de como fazer do gsm um servidor... mas não sei se funcionaria no meu projeto, já que o IP do 2G é dinâmico...
Mesmo assim, te agradeço ;)

Sim, já captei que o servidor php e o arduino estarão em locais diferentes. Eu só não sei se seria possível disponibilizar internet também pra esse local onde o arduino está, e foi considerando existir essa possibilidade que eu te escrevi o post anterior.

Eu nunca tinha visto esse exemplo que vc citou sobre gsm webserver. Repensando então, é bem capaz que funcione do jeito que vc planejou sim.

Se internet 2g, com todas suas limitações de velocidade e disponibilidade te atende, vá em frente. Mas se a velocidade 2g for problema e/ou a possibilidade de serviço não ficar disponível também for problema, considere contratar uma internet também pro local do arduino e nesse caso, use ethernet shield (conexões cabeadas ok)

Sobre a questão do ip ser dinâmico, existe um método que uso: programe o sim900 shield pra acessar no teu servidor um script php de tempos em tempos. Esse script PHP vc programa para detectar de qual IP veio a conexão, ou seja, é o IP shield sim900

Se o IP do teu servidor também for dinâmico, aí vc terá mais recursos disponíveis para usar serviços como no-ip.com, dyndns, comexe, etc...

Entendi... ai nesse caso eu teria servidor conversando com servidor? Não entendi direito essa parte... primeiro eu teria de fazer meu gsm pedir conexão com o PHP e então o controlaria, é isso? Ou o PHP seria cliente? Ou isso é 100% indiferente nesse caso? Você poderia, por favor, me falar como é esse script? Acredite, mocinho, você está salvando duas vidas e um diploma *---*

vamos pensar no seguinte cenário:

barracão é onde está o arduino + shield sim900

casa é onde está o servidor windows com php

Na verdade, primeiro vc precisa decidir onde vc irá hospedar a página que contém os controles controles liga/desliga dos leds. Vai ficar hospedado no arduino (barracão) ou vai ficar hospedado no servidor  (sua casa)?

parece mais lógico e mais simples vc hospedar no arduino, mas se decidir fazer desse jeito precisa considerar a possibilidade de alguém não autorizado conseguir acessar essa página de controle. Vc terá que pensar em algum mecanismo de segurança para impedir tais acessos não autorizados.

Já se vc hospedar essa página de controle de acionamentos de led na sua casa, no servidor com PHP, será mais fácil vc implementar o mecanismo de segurança contra acessos indevidos, pois vc terá à disposição recursos úteis como controle via htaccess, autenticações usando scripts de login, sessions, banco de dados (mysql por exemplo), etc. Aí, o webserver hospedado no arduino não serve página nenhum, mas somente interpreta os comandos oriundos do servidor com PHP

Em ambas as situações, a pergunta que vc poderia fazer é: como é que o PHP saberia o IP do arduino, uma vez que esse IP é dinâmico? Mas funcionaria assim: primeiro o gsm se conecta na internet através da operadora de celular. Assim que receber o IP, ele acessa o servidor com PHP, acessando especificamente um script chamado por exemplo DedoDuroIPShield.php 

Vc programa esse script pra reconhecer o IP do sujeito que acessou esse script. No caso, o  sujeito será o arduino. Se não souber como faz isso, basta procurar no google algo como "php descobrir IP cliente". Isso é simples

Pronto, agora teu servidor com PHP sabe qual o IP do arduino 

Já se o IP do teu servidor com PHP também for dinâmico, aí vc terá que usar serviços como no-ip.com, dyndns, comexe, etc... Dessa forma, o SIM900 ao  invés de acessar o servidor com php via IP, acessaria via servidorAnaGrossi.no-ip.org, por exemplo.

Entendi, entendi :3

No caso, prefiro usar um servidor PHP, pois aí posso fazer um banco para armazenar registros de log e um acesso com usuário e senha para segurança, por exemplo... acho que o restante seria semelhante a um Ethernet, né? Já fiz um cadastro no no-ip, exatamente com esse propósito. Gostei da sua sugestão e vou tentar implementar. Você me ajudou muito muito muito!! 

Se não der certo, posso te procurar de novo? HAHA

Obrigada mesmo!!

Dá uma lida nesse tópico, pois acho que vc irá aproveitar alguns conceitos que foram abordados lá:

http://labdegaragem.com/forum/topics/comandando-o-arduino-via-php-e...

O colega tinha dúvidas sobre como fazer o arduino receber comandos oriundos do PHP. No caso dele, ele estava usando ethernet shield, e no seu caso é gsm shield. Mas na essência, verá que é igual ao teu caso, pois se trata de webserver hospedado no arduino

Olá estou fazendo exatamente isto também, já obtive sucesso em envio de dados e leitura de dados via HTTP, pelo método GET, inclusive enviei dados do SIM900 para servidor e Joguei dados no banco de dados MYSQL, estou utilizando pro meu TCC de Eng Elétrica, muitos estudos e foruns, todos datasheets do sim900 são importantes, e os aplications notes ajuda muito, os foruns de fora e em ingles tem mais coisas, tenho que me virar com o tradutor rsrs... para mim é complicado mas ta dando certo, uma ferramenta que está ajudando no desenvolvimento é M2M module tester é JAVA e online o carregamento, http://m2msupport.net/m2msupport/module-tester/

Crie o servidor, dominio, se necessário torne ip estatico com o NOIP, crie a pagina PHP , e o banco de dados caso necessário, ponha on-line o servidor envie os dados pelo navegador pra ver se funciona, para enviar dados utilize o metodo GET, o codigo vai ser enviado via Http depois do  www.site.com.br/arduino/pagina.php 

exemplo

www.site.com.br/arduino/pagina.php?nome=fulano&status=1 <--- os dados enviar

para enviar do modulo siga essa sequencia de comando pela tim, abra o M2M module tester, na aba script cole isto:

AT+CGATT?
AT+SAPBR=3,1,"CONTYPE","GPRS"
AT+SAPBR=3,1,"APN","tim.br"
AT+SAPBR=3,1,"USER","tim"
AT+SAPBR=3,1,"PWD","tim"

AT+SAPBR=1,1
AT+SAPBR=2,1
AT+HTTPINIT
AT+HTTPPARA="CID",1 //escolhe a config de APN
AT+HTTPPARA="REDIR",1 //habilita redirecionamento até 30
AT+HTTPPARA="URL","www.site.com.br/arduino/pagina.php?nome=fulano&status=1"
AT+HTTPACTION=0 //executa o http pelo metodo GET
WAIT=10 //espera 10s no module tester
AT
AT
AT
AT+HTTPTERM

ainda não montei o codigo no arduino. 

estou desenvolvendo todo sistema primeiro.

pesquisa bastante nos aplications notes do sim900.

Fiz um resumão mesmo, estou aprendendo tambem, depois quando terminar o TCC vo fazer um tutorial completo, pois tive muitas dificuldades e pouco apoio tive que buscar muita coisa fragmentada. qualquer duvida posta ai se eu puder ajudar, ou até podemos nos ajudar ... 

  

ACRESCENTANDO:

Como o sim900 é cliente, voce pode criar uma rotina que se conecta de tempos em tempos ao servidor e via HTTP pode ler o arquivo.txt isso elimina os codigos html na leitura, e atraves do PHP pode escrever e ler em arquivos.txt, ai você realizara a atualização das informaçoes pro arduino. deixa o LED acesso ou apagado. vou utilizar esta metodologia.

código exemplo para ler dados no MODULE TESTER na aba script:

AT+CGATT?
AT+SAPBR=3,1,"CONTYPE","GPRS"
AT+SAPBR=3,1,"APN","tim.br"
AT+SAPBR=3,1,"USER","tim"
AT+SAPBR=3,1,"PWD","tim"

AT+SAPBR=1,1
AT+SAPBR=2,1
AT+HTTPINIT
AT+HTTPPARA="CID",1 //escolhe a config de APN
AT+HTTPPARA="REDIR",1 //habilita redirecionamento até 30
AT+HTTPPARA="URL","www.site.com.br/arduino/arquivo.txt"
AT+HTTPACTION=0 //executa o http pelo metodo GET
WAIT=10 //espera 10s no module tester
AT
AT+HTTPREAD // retornara com a leitura do texto escrito no arquivo.txt, ai é so tratar os dados no arduino.
AT

WAIT=10 // ESPERA 10S COMANDO ESCLUSIVO DO MODULE TESTER

AT+HTTPTERM

no NOIP não configura title da pagina, nem a MASK URL, deixa redirecionar a pagina pro ip e porta na URL, em um navegador quando digitar este site depois e der enter vai redirecionar e ficara visivel o IP e PORTA no lugar do dominio criado, se quiser pode deixar um dominio so pra usa com o SIM900, e outro com MASK URL, estou fazendo isso. o no ip possibilita ate 3 dominios gratuitos.

espero ter me lembrado de tudo rsrs

amigo, a discussão aqui está baseada em colocar o SIM900 como webserver. Essas suas contribuições referem-se a colocar o SIM900 como cliente, não?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço