Tutorial: como acessar a internet com o Arduino GSM Shield SIM900
No post anterior sobre o Arduino GSM Shield SIM900, nós vimos como utilizar a placa para fazer ligações, enviar SMS e acionar portas do Arduino por SMS.
Neste segundo post, vamos ver outra função muito interessante desse Arduino GSM Shield SIM900, que é o acesso à internet, utilizando-o para enviar informações do Arduino para um servidor web, armazenando essas informações em um banco de dados MySQL.
As etapas desse tutorial envolvem muito mais a configuração de PHP e banco de dados MySQL do que a parte do Arduino, e recomendo que você siga os passos na sequência abaixo:
- Escolha do servidor Web
- Criação do Banco de Dados MySql
- Configuração do Banco de Dados
- Criação dos arquivos PHP
- Envio de informações pelo Arduino
A idéia é que o GSM Shield SIM900, ao receber uma mensagem de texto (SMS), envie essa mensagem para o servidor Web, que vai guardar o texto da mensagem em um banco de dados, juntamente com a data e a hora em que a mensagem foi recebida pelo servidor.
Nos testes, foi utilizado um Arduino Mega 2560, mas você pode utilizar também um Arduino Uno. O único problema é que, pelo fato das bibliotecas ocuparem muito espaço em memória, o Arduino Uno pode reiniciar depois de enviar a primeira mensagem para o servidor e aguardar o próximo SMS.
De qualquer forma, você pode “limpar” a biblioteca posteriormente, para que o programa ocupe menos espaço na memória.
Ao final, teremos uma página web que vai exibir as informações das mensagens SMS recebidas pelo GSM Shield. Vamos lá ?
Escolha do servidor Web
Quando falo da escolha do servidor web não falo da máquina em si ou da performance. Você pode criar um web server até com um Raspberry, como vimos no post Apache Web Server com Raspberry Pi A+.
O que vamos precisar do servidor é o suporte à PHP e também ao banco de dados MySQL. Hoje em dia praticamente todos os planos de hospedagem oferecem esse tipo de recurso.
Procurei uma opção gratuita para montar esse post, e achei o 000webhost.com. Você cria sua conta e em poucos minutos tem à sua disposição um servidor com 1,5 GB de espaço, suporte à PHP, MySQL, FTP, email e algumas outras funções. Ele tem algumas propagandas, como não poderia deixar de ser, mas funcionou perfeitamente para os testes deste post.
O endereço que eu criei nesse servidor foi o arduinoecia.webatu.com, e você já pode acessar para ver como vai ficar a página web ao final deste tutorial. As telas de configuração que eu vou mostrar se referem à esse servidor, mas são praticamente as mesmas em outros planos de hospedagem.
Depois que você criar a sua conta, vai receber um email com todas as informações de acesso ao painel de controle da sua página.
Criação do Banco de Dados MySql
- Um banco de dados de nome a1599688_bd
- Um nome de usuário de acesso ao banco: a1599688_arduino
- A senha de acesso ao banco de dados criado
Configuração do Banco de Dados
Criação dos arquivos PHP
- connect.php – Arquivo com as configurações do banco de dados (usuário e senha)
- add.php – Esse arquivo recebe via POST as informações do GSM Shield pela internet, acessa o banco e grava os dados que foram recebidos
- index.php – Esse arquivo é responsável por montar a página web e exibir as informações do banco de dados para o usuário
<?php function Connection(){ $server="mysql12.000webhost.com"; $user="a1599688_arduino"; $pass="suasenhaaqui"; $db="a1599688_bd"; $connection = mysql_connect($server, $user, $pass); if (!$connection) { die('MySQL ERROR: ' . mysql_error()); } mysql_select_db($db) or die( 'MySQL ERROR: '. mysql_error() ); return $connection; } ?>
<?php include("connect.php"); $link=Connection(); $MSG_Texto=$_POST["MSG_Texto1"]; $query = "INSERT INTO `a1599688_bd`.`SMS_Recebidos` (`timeStamp`,`SMS_Texto`) VALUES (current_timestamp,'".$MSG_Texto."')"; mysql_query($query,$link); mysql_close($link); header("Location: index.php"); ?>
Por último temos o index.php, que se conecta ao banco de dados utilizando também as informações do connect.php (linhas 1 à 8), e que contém o código HTML que vai mostrar as informações no browser.
<?php include("connect.php"); $link=Connection(); $result=mysql_query("SELECT * FROM `SMS_Recebidos` ORDER BY `timeStamp` DESC",$link); ?> <html> <head> <title>Arduino e Cia - GSM Shield</title> </head> <body> <a href='http://www.arduinoecia.com.br/' style='display: block'> <img alt='Arduino e Cia' height='69px; ' id='Header1_headerimg' src='http://3.bp.blogspot.com/-l1ikBwIytf4/VScJr56C-zI/AAAAAAAADsY/tlWKliR7-lw/s1600/Arduino%2Be%2BCia-Bco.png' style='display: block' width='540px; '/> </a> <h1>GSM Shield SIM900 - Registro de SMS</h1> <table border="1" cellspacing="0" cellpadding="0"> <tr> <td align='center' width='160px'><b> Data e Hora </b></td> <td align='center' width='375px'><b> Mensagem </b></td> </tr> <?php if($result!==FALSE){ while($row = mysql_fetch_array($result)) { printf("<tr><td align='center'> %s </td><td> %s </td></tr>", $row["timeStamp"], $row["SMS_Texto"]); } mysql_free_result($result); mysql_close(); } ?> </table> </body> </html>
Coloque os arquivos PHP na pasta /public_html. Você também pode enviar os arquivos via FTP, se preferir.
Acessando a internet com o Arduino GSM Shield
Nessa conexão à internet, feita pela linha 61 do programa, configure o APN, usuário e senha de acordo com o seu chip de celular:
Sintaxe: inet.attachGPRS(“<APN>”, “<USUARIO>, “<SENHA>”)
TIM: inet.attachGPRS(“timbrasil.br”, “tim”, “tim”)
Vivo: inet.attachGPRS(“zap.vivo.com.br”, “vivo”, “vivo”)
Claro: inet.attachGPRS(“claro.com.br”, “claro”, “claro”)
Oi: inet.attachGPRS(“gprs.oi.com.br”, “oi”, “oi”)
//Programa: Arduino GSM Shield SIM900 - Acesso internet //Autor: Arduino e Cia //#include "SIM900.h" #include <SoftwareSerial.h> #include "inetGSM.h" InetGSM inet; boolean started = false; char smsbuffer[160]; char n[20]; byte valor; void setup() { Serial.begin(9600); powerUpOrDown(); Serial.println(F("Testando GSM Shield SIM900")); if (gsm.begin(2400)) { Serial.println(F("nstatus=READY")); started = true; } else Serial.println(F("nstatus=IDLE")); } void loop() { if (started) { //Aguarda novo SMS e envia para o servidor web if (gsm.readSMS(smsbuffer, 160, n, 20)) { String str(smsbuffer); envia_GSM(smsbuffer); delay(10000); } delay(1000); } } void powerUpOrDown() { //Liga o GSM Shield Serial.print(F("Liga GSM...")); pinMode(6, OUTPUT); digitalWrite(6, LOW); delay(1000); digitalWrite(6, HIGH); delay(1000); Serial.println(F("OK!")); digitalWrite(6, LOW); delay(500); } void envia_GSM(String texto) { char temp_string[55]; char msg[10]; int numdata; if (inet.attachGPRS("timbrasil.br", "tim", "tim")) Serial.println(F("status=Conectado...")); else Serial.println(F("status=Nao conectado !!")); delay(100); String valor = "MSG_Texto1=" + texto; valor.toCharArray(temp_string, 55); numdata = inet.httpPOST("arduinoecia.webatu.com", 80, "/add.php", temp_string, msg, 50); delay(5000); }
Belo tuto, estava esperando por isso faz tempo. Valeu!
Trabalhar com banco de dados é complicado! obrigado por ajudar com este post!
Pois é. deu trabalho. 🙂
Abraço!
Excelente post, vou tentar já
valeu. Abraço!
boa parceiro
como e qual item da página serve para copiar os três arquivos (connect.php, add.php e index.php) para o servidor Web acima?
Bom dia,
Utilize o file manager no painel de controle, e coloque os arquivos dentro da pasta public_html.
Abraço!
correto, porém na porta serial do sim900 aparece a mensagem This method is deprecated! Please use GetSMS in the SMS class. E está com fonte 1 A 9volts conectado
Oi Rafael,
Essa é apenas uma mensagem de aviso. O programa funciona normalmente mesmo com essa mensagem.
Abraço!
Como faço para ele rodar sem reiniciar no Uno ?
Oi Paulo,
Você vai precisar "enxugar" o programa para liberar espaço em memória. Não tentei isso ainda, mas você pode mexer na biblioteca para tirar algumas funções que não utiliza, por exemplo.
Abraço!
Vou tentar dar uma enxugada. No site quando recebo o horario está vindo com 3 horas a menos, onde posso arrumar isso ?
Oi Paulo,
Eu também tive esse problema, mas não tive tempo de resolver. Parece que é alguma coisa (configuração) no servidor, timezone, essas coisas.
Se tiver novidades, te aviso.
Abraço!
Amigo esse exemplo é fantástico, tem como colocar um exemplo de um RTC que mostra temperatura ou PIR presença ou não e assim informa ao servidor o momento (rtc ou pir)?
Boa tarde Rafael,
Boa sugestão. Vou providenciar. 🙂
Abraço!
Estava funcionando com o UNO, apesar de resetando, passei para o mega e ele não acha o Shield tem alguma dica?
Boa tarde Paulo,
A ligação no Mega é um pouco diferente. Neste post eu explico como ligar o GSM Shield no Arduino Mega:
http://www.arduinoecia.com.br/2015/09/arduino-gsm-shield-sim900-efcom.html
Abraço!
Obrigado pela dica, funcionou na primeira. Só um detalhe no uno ele se conecta no GPRS e depois que transmite para a pagina da WEB ele reinicia. No caso do Mega ele não esta conseguindo se conectar no GPRS, será que tem de modificar algum arquivo da biblioteca ? Abraços.
Olá, existe uma forma de que, o Arduíno envie dados de sensores para uma pagina de forma que possa ser acessado dados anteriores, tipo um histórico de semanas ???
Bom dia Tuca,
Tem como fazer sim. Na verdade, essa parte você vai fazer toda com o HTML/PHP, porque os dados já estarão gravados no Banco de Dados, então é só filtrar o que vc precisa.
Abraço!
Tem alguma sugestão que possa me ajudar na utilização do Mega, ele não consegue se logar na rede GPRS para enviar os dados para a página da internet, será que tem de fazer alguma modificação na biblioteca ?
Bom dia Paulo,
Não fiz esse teste com o mega, mas a princípio não tem alteração na biblioteca. Vou tentar fazer um teste com essa placa e depois te falo o resultado.
Abraço!
Boa Tarde,
é possivel variar um potênciometro de 0 a 5v no arduino e receber na internet o valor de 0 a 100 %
Claudeci
Oi Claudeci,
É possível sim, acho até mais simples do que enviar o SMS. 🙂
Abraço!
É possivel escrever valores analógicos no site através do Arduino ? se sim qual o tempo de atualização da variável ?
Obrigado!
Olá, não sei se estou pensando errado mas desta forma ele envia SMS (torpedo), conforme informa no artigo. Esse SMS seria apenas a mensagem recebida pelo shield? O envio é feito apenas por dados ou também SMS? Ele faz um httpPost, isso é entendido com envio de dados apenas. Estou correto?
Bom dia,
Você está se referindo à este post, certo ? O GSM shield se conecta na rede de internet do celular da mesma forma que você faz com o seu smartphone, e a partir daí ele envia os dados para o servidor via internet.
Abraço!
Conseguiu fazer os testes com o Mega ?
Oi Paulo,
Não tive tempo ainda. Você teve algum progresso ?
Abraço!
Fiz algumas tentativas mas sem exito. se conseguir algo te aviso.
blz Paulo. Valeu!
bom noite! Alguém poderia me explicar como utilizar o inet.httpPOST();
E mais uma coisa, tenho que enviar varias informações para o servidor, informações que estão no arduino. Gostaria de saber o seguinte, se para enviar essas informações teria que fazer um post para cada informação que nem embaixo:
String valor = "MSG_Texto1=" + texto;
valor.toCharArray(temp_string, 55);
numdata = inet.httpPOST("arduinoecia.webatu.com", 80, "/add.php", temp_string, msg, 50);
String valor = "MSG_Texto2=" + texto;
valor.toCharArray(temp_string, 55);
numdata = inet.httpPOST("arduinoecia.webatu.com", 80, "/add.php", temp_string, msg, 50);
String valor = "MSG_Texto3=" + texto;
valor.toCharArray(temp_string, 55);
numdata = inet.httpPOST("arduinoecia.webatu.com", 80, "/add.php", temp_string, msg, 50);
http://forum.arduino.cc/index.php?topic=488280.0
Este cara tava tirando outra dúvida, mas dê uma olhada no código dele, ele faz uma concatenação dos dados e envia tudo de uma só vez e lá no add.php ele procede com a divisão por variável.
Olá! O shield que está usando pode ser conectado direto no arduino pq já tem regulador de tensão. Eu tenho o que é conectado a uma fonte distinta ao arduino para fornecer a ele 4V. Minha dúvida é, posso ligar o reset dele normalmente em um pino digital do arduino para dar um reset como fez (colocando High and Low em determinado pino)? Estou com medo de arriscar e queimar o módulo, por eles trabalharem em tensões diferentes…
Estou precisando alterar um projeto e estou a procura de um freela, atualmente meu projeto a leitura e gravação dos cartoes rfid se faz em modo localhost, preciso alterar para comunicação via gprs , terei um servidor na web com todos os cartoes cadastrados e o credito de cada cartão e o usuario estará em local remoto utilizando esses cartoes, como não tenho acesso wifi e ethernet em todos os locais eu preciso usar o sim900 e as consultas e envio de dados serão via método post , pode me ajudar nisso ou indicar alguém com experiencia para que eu possa contratar ?
Olá
Por favor, eu posso substituir o envio de SMS para o servidor enviando os valores dos sensores relacionados com o Arduino para um servidor usando sim900A
mesmo princípio excepto que envia os dados de sensores relacionados com uma entrada analógica do Arduino a cada dez minutos,
e obrigado
Olá, como enviar valores de um sensor conectado a uma entrada analógica do Arduino através de um servidor sim900A módulo GSM, armazenada em um banco de dados e, em seguida, mostrados com a sua data de expedição.
assim que eu quero mudar a mensagem neste exemplo
Agradecemos antecipadamente
Olá
Por favor, eu posso substituir o envio de SMS para o servidor enviando os valores dos sensores relacionados com o Arduino para um servidor usando sim900A
mesmo princípio excepto que envia os dados de sensores relacionados com uma entrada analógica do Arduino a cada dez minutos,
e obrigado
Olá, por favor, posso substituir o envio de mensagens para o servidor através do envio de valores de um sensor relacionada tem uma entrada analógica, o que é a mudança no código?
e obrigado
Boa tarde,
Pode sim. No momento eu não tenho nenhum código específico para esse tipo de dados, mas é fácil de adaptar no programa.
Abraço!
Olá,
muito obrigado pela sua resposta, eu sou um novato neste campo, por favor, é que você pode me ajudar a desenvolver este código
obrigado
Boa noite,
Posso sim, entre em contato utilizando o formulário de contato no lado direito da página. Conversamos por email.
Abraço!
Ola Ktraiem … vc conseguiu fazer o codigo para sua finalidade? Pode me repassar? [email protected]
Olá, no site para criação do banco de dados, quando clico em Enter phpmyadmin , pede senha, e senha que acabei de cadastrar no site não funciona. Como faço? O que está rolando? Help me, não consiguo continuar seguindo o tutorial 🙁
Oi Eduardo,
O site demora um pouco pra atualizar a senha, mas funciona sim.
Abraço!
É muito superficial esse tutorial. Estou tendo problemas em todos os passos que tento seguir. É impossível criar algo assim. Tem momentos que o acesso ao phpMyAdmin não funciona, fica dando acesso negado mesmo com a senha correta e que nunca foi alterada, e depois sem motivo algum volta a funcionar (já testei em PCs diferentes). Em nenhum momento o script php conseguiu se conectar ao banco de dados. Tentei de tudo. Passei o fim de semana tentando e só perdi tempo, e olha que nem cheguei ainda na programação do arduino. Já estou até vendo a dor de cabeça com bibliotecas 🙁 🙁 🙁
Nas informações sobre minha conta no members.000webhost.com , aparece o IP Address 31.170.160.73
O que seria esse IP? Da minha conta? Tente acessar você mesmo. Ele abre um site de envio de remessa de dinheiro para Cuba. Estou achando que pode ser golpe, e que daqui a pouco estarão roubando informações minhas.
Oi Eduardo,
Sinto muito que esteja com problemas, mas fiz o tutorial baseado exatamente nos passos mostrados acima. aliás fiz mais de uma vez para ter certeza de que funciona.
Talvez o pessoal do Webhost tenha mudado alguma coisa no site, mas o que posso deixar de sugestão é utilizar algum outro servidor que aceite PHP e tenha banco de dados MySQL, o que felizmente é bem fácil de encontrar.
Abraço!
Blz, consegui criar e fazer upload dos arquivos php. Agora, quando tento acessar o site que criei recebo a mensagem abaixo:
Warning: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on 'mysql.000webhost.com' (4) in /home/a3452881/public_html/connect.php on line 8
No arquivo connect e add, fiz corretamente as alterações para server, user e password.
Estou com esse mesmo problema. Você encontrou a solução?
Consegui evoluir mais um pouco, agora o problema é essa mensagem abaixo que vejo no monitor serial:
This method is deprecated! Please use GetSMS in the SMS class.
A mensagem não chega no banco de dados!
excellente explicacao , mas estou tentando registrar me ao site, aceita o registro mas nao me permite accessar, sera que esta com problemas, je fiz o reset da password mas kdo tento entrar nao aceita alguma sugestao
Olá Amigos!
Mantendo a mesma ideia de enviar dados para o servidor, preciso que o programa envie dados de localização GPS ao invés das mensagens recebidas.
Alguém, por favor, pode me ajudar como fazer o Arduino coletar esses dados através de um shield GPS (não entendi se esse shield também fornece esse dado) e depois utilizar o envio de sms para enviar estes dados para o servidor?
Obrigado!
Boa Tarde
Gostaria de alguma informação sobre o sim800L.
Acredito que esse modelo seja alguma versão inferior a essa sim900 que esta sendo utilizada nesse port
Existe pouca coisa sobre a sim800L nos tutoriais.
Eu consigo usar essa mesma biblioteca para fazer essa conexão a internet utilizando esse modelos sim800L?
Muito Obrigado
Acho que esse "sim" não funciona na América Latina, vi alguma publicação sobre isso na internet.
Ola, eu segui todo o tutorial e funcionou perfeitamente aqui, logicamente depois de alguns ajustes e depois de apanhar bastante pra criar as funções em PHP rsrs. No fim deu certo, consegui gravar as informações do arduino no MySQL perfeitamente.
Queria agradecer, me ajudou muito!
Opa! Agradeço muito a sua visita. E obrigado pelo retorno. 🙂
Abraço!
Boa noite, quais modificações você fez? Estou apanhando muito no PHP…. Poderia postar aqui as alterações?
Grato, meu e-mail [email protected]
Olá amigo, poderia me enviar seu código. [email protected]
This method is deprecated! Please use GetSMS in the SMS class.
o que fazer?? alguem pode ajudar?
Boa tarde José,
Você pode ignorar essa mensagem. Ela não influi no funcionamento dos programas ou envio de mensagens.
Abraço!
o meu nuca conecta no "inet.attachGPRS".. =/
alguma dica? estou usando a tim
Bom dia, fiz o passo a passo, porém, não consegui funcionar no Arduino Mega 2560 + Shield. Já alterei os Pinos RX, TX para 50, 51, porém, não conecta, apesar de no monitor, aparecer que está conectado.
Bom dia,
como fazer então para conectar o W5100 mandando os dados para o servidor no 000webhost?
Consegui mandar os dados por get para um servidor local pois tinha o ip deste servidor. Porém quando tento mandar para o 000webhost, nada acontece no banco web. Se digito a url no navegador chamando o arquivo php que inclui, o banco é alterado, no entanto o arduino mandando para o servidor nada acontece
Alguém conseguiu fazer funcionar com um chip da VIVO ? Estou com tudo funcionando recebe e envia SMS perfeito, mas O inet.attachGPRS("zap.vivo.com.br", "vivo", "vivo") não conecta.
boa tarde, a respeito do file manager no painel de controle, na versão nova do 000webhost onde fica esta opção?
olá! comprei a placa sim900 e mega tentei ligar Janpiando como no ttutorial mais não envia nada e nem da comando algum
placa Arduino Mega 2560 R3 Atmega2560 Ch340g Ch340 – 0101
e sim900
Shield Gsm Gprs Sim900 + Antena Para Arduino
acendo a luz vende e nada.
Oi Manoel,
Você fez as alterações no arquivo da biblioteca (arquivo GSM.cpp) ?
Abraço!
Olá, boa noite,
Parabéns pelo tutorial, consegui reproduzir e funcionou perfeitamente.
Usei o seguinte hardaware
placa Arduino Mega 2560 R3 Atmega2560 – SIM900
Abraços
OLá marcos
No meu está apresentando problema na execução da função init.httpPost, por isso tenho algumas dúvidas:
1-Você fez usando chip SIM de dados comum das operadoras, ou usando chip SIM M2M?
2-Você fez atualizações no script em PHP?
3-A função init.httpPost funcionou corretamente?
Gostaria de contactá-lo para tirar algumas dúvidas para tentar identificar o que está errado, é possível?
Sds,
Boa tarde, como faço para ao invés de enviar SMS, enviar dados de uma porta analógica para um banco de dados?
qual a função utilizada para enviar os dados para o banco de dados? preciso enviar informações de sensores
Prezados,
Na função init.httppost o shield responde assim:
DB:CONNECTION OK
ATT: ERROR
RIC:
177.109.177.20
DB:ASSIGNED AN IP
status=Conectado…
ATT: OK
RIC:
OK
DB:RECVD CMD
ATT: CONNECT OK
RIC:
OK
ATT: OK
RIC:
CONNECT OK
DB:OK TCP
ATT: >
RIC:
>
DB:>
ATT: SEND OK
RIC:
SEND FAIL
Alguém poderia me ajudar a identificar o que está ocorrendo? Será que o cartão SIM comum não está funcionando mais para transmitir dados por gsm/gprs, teria que ser o SIM M2M?
Sds
Bom dia, estou com esse mesmo erro.
Você conseguiu resposta?
Obrigada.
Mesmo problema aqui. Alguem conseguiu resposta?
Consegui resolver da seguinte maneira
void envia_GSM(int tensao){
Serial.println("AT+CGATT?");
gsm.SimpleWriteln("AT+CGATT?");
delay(1000);
int i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+SAPBR=3,1,"CONTYPE","GPRS"");
gsm.SimpleWriteln("AT+SAPBR=3,1,"CONTYPE","GPRS"");
delay(1000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+SAPBR=3,1,"APN","tim.br"");
gsm.SimpleWriteln("AT+SAPBR=3,1,"APN","tim.br"");
delay(1000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+SAPBR=3,1,"USER","tim"");
gsm.SimpleWriteln("AT+SAPBR=3,1,"USER","tim"");
delay(1000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+SAPBR=3,1,"PWD","tim"");
gsm.SimpleWriteln("AT+SAPBR=3,1,"PWD","tim"");
delay(1000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+SAPBR=1,1");
gsm.SimpleWriteln("AT+SAPBR=1,1");
delay(3000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+SAPBR=2,1");
gsm.SimpleWriteln("AT+SAPBR=2,1");
delay(3000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+HTTPINIT");
gsm.SimpleWriteln("AT+HTTPINIT");
delay(2000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+HTTPPARA="CID",1");
gsm.SimpleWriteln("AT+HTTPPARA="CID",1");
delay(1000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+HTTPPARA="REDIR",1");
gsm.SimpleWriteln("AT+HTTPPARA="REDIR",1");
delay(1000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
char message_url[200];
sprintf(message_url,"AT+HTTPPARA="URL","viniciuszparizotto.000webhostapp.com/add.php?MSG_Texto1=%d"",tensao);
Serial.println(message_url);
gsm.SimpleWriteln(message_url);
delay(3000);
i=0;
while(i<50) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+HTTPACTION=0");
gsm.SimpleWriteln("AT+HTTPACTION=0");
delay(3000);
i=0;
while(i<100) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+HTTPTERM");
gsm.SimpleWriteln("AT+HTTPTERM");
delay(3000);
i=0;
while(i<100) {
gsm.SimpleRead();
i++;
}
}
estou tendo esse erro:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /storage/h11/050/1643050/public_html/connect.php:8 Stack trace: #0 /storage/h11/050/1643050/public_html/index.php(5): Connection() #1 {main} thrown in /storage/h11/050/1643050/public_html/connect.php on line 8
Boa noite, sei que o post esta bastante desatualizado ja que algumas funçoes mysql não funcionam mais e na maioria foram substituidas pelas mysqli, estou tendo bastante dificuldade em apresentar os dados que estão no DB na pagina, alguem poderia me auxiliar?
Att..,
Pesquise sobre PHP PDO, que é o método utilizado atualmente para conexão.
Boa tarde, poderia me tirar uma duvida?
No caso eu não entendi muito essa linha de codigo
(arduinoecia.webatu.com", 80, "/add.php", temp_string, msg, 50)
oq arduino faz nessa linha, seria acessar uma pagina HTTP?
gostaria de saber, se é possível eu usar algo do tipo, apenas digitando essa mesma linha por exemplo no navegador,e mandasse uma informação qualquer para ser gravada no banco de dados. Como ficaria essa URL?
Não sei se fui claro com oq quis dizer
Obrigado desde já
Oi Felipe,
Exato, essa linha vai até o servidor e, digamos, "executa" o que está dentro do arquivo add.php. Você consegue sim fazer a mesma coisa passando uma URL para o servidor, por exemplo:
http://seuservidor.com.br/meu_arquivo.php?dado1=20&dado2=30&dado3=500
No caso, você precisa fazer a programação do PHP para que ele interprete o dado que está sendo enviado.
Espero ter ajudado. Abraço!
Adilson
Olá. Muita coisa mudou no 000webhost.com
Parece que atualmente o script connect.php não funciona mais, mesmo após ajustar $user=, $pass= e $db=. Veja o erro apresentado quando da conexão do php com o banco, linha 8 do connect.php:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /storage/ssd5/529/2178529/public_html/connect.php:8 Stack trace: #0 /storage/ssd5/529/2178529/public_html/index.php(5): Connection() #1 {main} thrown in /storage/ssd5/529/2178529/public_html/connect.php on line 8
Acredito que o erro só possa estar no valor de $server=…
De onde saiu mysql12.000webhost.com de $server="mysql12.000webhost.com"? Como saber qual é o valor de $server=… ?
Olá!
Substitua as funções "mysql" por "mysqli". Elas tem sintaxe diferente, mas são bem fáceis de se encontrar em vários fórums.
boa noite!
Saberia me dizer se consigo utilizar o esp8266+moduloGSM sim900 no lugar do arduino para este exemplo?
Alguem saberia dizer por que o sim900 não esta conectando ao GPRS?
Os leds indicativos de sinais indicam que possuie sinal Celular piscando a 3000ms
ao tentar a conexão HttpPost o serial responde desta maneira…
status=Conectado…
ATT: OK
RIC:
OK
DB:RECVD CMD
ATT: CONNECT OK
RIC:
OK
ATT: OK
RIC:
STATE: IP STATUS
CONNECT FAIL
DB:NOT CONN
ATT: OK
RIC:
OK
DB:RECVD CMD
ATT: CONNECT OK
RIC:
OK
ATT: OK
RIC:
STATE: IP STATUS
CONNECT FAIL
DB:NOT CONN
ATT: OK
RIC:
OK
DB:RECVD CMD
ATT: CONNECT OK
RIC:
OK
ATT: OK
RIC:
STATE: IP STATUS
CONNECT FAIL
DB:NOT CONN
Resolvido…
void envia_GSM(int tensao){
Serial.println("AT+CGATT?");
gsm.SimpleWriteln("AT+CGATT?");
delay(1000);
int i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+SAPBR=3,1,"CONTYPE","GPRS"");
gsm.SimpleWriteln("AT+SAPBR=3,1,"CONTYPE","GPRS"");
delay(1000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+SAPBR=3,1,"APN","tim.br"");
gsm.SimpleWriteln("AT+SAPBR=3,1,"APN","tim.br"");
delay(1000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+SAPBR=3,1,"USER","tim"");
gsm.SimpleWriteln("AT+SAPBR=3,1,"USER","tim"");
delay(1000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+SAPBR=3,1,"PWD","tim"");
gsm.SimpleWriteln("AT+SAPBR=3,1,"PWD","tim"");
delay(1000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+SAPBR=1,1");
gsm.SimpleWriteln("AT+SAPBR=1,1");
delay(3000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+SAPBR=2,1");
gsm.SimpleWriteln("AT+SAPBR=2,1");
delay(3000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+HTTPINIT");
gsm.SimpleWriteln("AT+HTTPINIT");
delay(2000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+HTTPPARA="CID",1");
gsm.SimpleWriteln("AT+HTTPPARA="CID",1");
delay(1000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+HTTPPARA="REDIR",1");
gsm.SimpleWriteln("AT+HTTPPARA="REDIR",1");
delay(1000);
i=0;
while(i<20) {
gsm.SimpleRead();
i++;
}
char message_url[200];
sprintf(message_url,"AT+HTTPPARA="URL","viniciuszparizotto.000webhostapp.com/add.php?MSG_Texto1=%d"",tensao);
Serial.println(message_url);
gsm.SimpleWriteln(message_url);
delay(3000);
i=0;
while(i<50) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+HTTPACTION=0");
gsm.SimpleWriteln("AT+HTTPACTION=0");
delay(3000);
i=0;
while(i<100) {
gsm.SimpleRead();
i++;
}
Serial.println("AT+HTTPTERM");
gsm.SimpleWriteln("AT+HTTPTERM");
delay(3000);
i=0;
while(i<100) {
gsm.SimpleRead();
i++;
}
}
Olá Vinícius.
Pelo que percebi você acabou resolvendo o problema usando uma configuração mais manual pelos camandos AT e utiilizaou o get ao invés do POST, correto?
Você chegou a testar alguma outra solução que envolvesse o POST?
Olá, agradeço desde já a iniciativa de fazer esse tutorial.
Gostaria de entender o seguinte, no meu caso n quero armazenar nada no banco de dados, só preciso receber as informações e trata-las no site.
Sendo assim, eu só utilizaria o add.php, da seguinte forma:
E aí trataria o conteúdo da variável MSG_Texto, Correto?
Mas por quê o MSG_Texto recebe "MSG_Texto1"? dessa forma não estaria armazenando somente a string: "MSG_Texto1?" na variável MSG_Texto? ou isso é só pra identificar a mensagem pelo prefixo "MSG_Texto1=" enviado la no codigo do arduíno?
Grato pela atenção.
o trabalho ta pronto
Por favor,estou com um projeto urgente e preciso fazer as seguintes perguntas.
Projeto: quero usar um chip internacional o 'my sim travel',mas ele só tem a apn que é 'send.ee' e fala para deixar o usuario e senha em branco.
A sintaxe do programa arduino pede a APN,usuario e senha. mas como o chip só tem a APN posso deixar só com a APN?
vai dar erro?
como posso fazer com o programa?
e como posso enviar comandos do site para o arduino?
Desde já agradeço a atenção. Obrigado
Por favor,estou com um projeto urgente e preciso fazer as seguintes perguntas.
Projeto: quero usar um chip internacional o 'my sim travel',mas ele só tem a apn que é 'send.ee' e fala para deixar o usuario e senha em branco.
A sintaxe do programa arduino pede a APN,usuario e senha. mas como o chip só tem a APN posso deixar só com a APN?
vai dar erro?
como posso fazer com o programa?
e como posso enviar comandos do site para o arduino?
Desde já agradeço a atenção. Obrigado
pode ser usado com chip internacional?
pode se usar só com APN,como faço?
oi. Alguém sabe me dizer como eu uso esse shield para enviar arquivos de um cartão sd para um servidor mysql?
fiz tudo porem e esta pagina da web? não cria nada? onde arrumo
Oi!
Ela está funcionando. Ela precisa do servidor. Você tem o servidor?
Como eu faria pra enviar dados pra um servidor FTP?
Tive vários problemas na parte de criar o banco de dados e conseguir ajeitar a programação do arquivo connect.php, finalmente consegui tudo certinho, então fui para o arduino, ele passa por tudo mas quando chega na hora de se conectar com a apn ele não consegue. O código de conexão está do mesmo jeito:
if (inet.attachGPRS("timbrasil.br", "tim", "tim"))
Serial.println("status=Conectado…");
else Serial.println("status=Nao conectado !!");
Porém na serial sempre é retornado um não conectado, fui pesquisar se algo tinha mudado na apn da tim, mesma coisa, apn: timbrasil.br, usuário: tim e senha: tim
Saktobi, como você conseguiu resolver estes problemas do "connect.php"?
Quanto à conexão usando uma linha da tim, eu comprei um chip só pra isso e tive o mesmo problema. No fim, o processo de ativação do meu chip não havia sido completado.
Se ainda estiver com o problema, sempre confira se há créditos disponíveis e se o chip ainda está ativo, caso tenha ficado muito tempo parado.
Tenho uma dúvida em relação a linha do httppost, tive muitos problemas já para consertar as programações em php e conseguir botar o site no ar junto com o banco de dados, até agora tudo certo, fui para o arduino, problemas para conectar, consegui, o meu shield é um sim900 tinysine, ele tem várias peculiaridades:
1 – o rx e o tx não são jumpeados na própria placa são ligados nos pinos 18 e 19 do arduino
2 – Por algum motivo ele só funciona com o arduino na versão 1.0.6
3 – Tem que trocar na biblioteca no gsm.h de arduino uno para mega (já que uso o mega)
enfim resolvendo esses problemas, o arduino conseguiu reconhecer o shield, tive problemas ao me conectar, descobri que o melhor rate ela o gsm.begin(4800), mas quando chega no final, mostra "SEND FAIL"
Então me pergunto, será que é problema na linha de conexão, eu tenho que mandar o dado diretamente pro meu site mesmo?
Tenho o mesmo problema do Send Fail, conseguiu algum progresso?
Olá, seguindo seu tutorial para meu projeto, tudo ok, até que qnd mando rodar, a serial me mostra o seguinte erro após a conexão:
"status=Conectado…
DB:ALREADY HAVE AN IP
DB:NOT CONN
DB:NOT CONN
DB:NOT CONN"
Alguém sabe o que pode ser? Está faltando o IP do servidor do Banco de Dados?
Obrigado.
Oi Felipe,
Não, nesse caso não tem a ver com o banco de dados. É alguma falha de conexão. Veja que ele está dizendo que o módulo já conseguiu "pegar" um IP.
Abraço!
Adilson
Consigo fazer isso com o modulo GSM SIM800L ?
Oi Gabriel,
Não testei com o Sim800L ainda, mas tenho quase certeza que sim.
Abraço!
Adilson
Boa tarde equipe.
Estou tentando realizar a conexão do controlador ao servidor mas ocorre um erro na hora de postar os dados no servidor.
"DB:OK TCP
ATT: >
RIC:
>
DB:>
ATT: SEND OK
RIC:
SEND FAIL"
POSTs internos do site funcionam, mas com o controlador ainda não. Alguém teve esse problema e conseguiu solucionar?
Boa noite equipe,
Gostaria de saber se eu tenho como enviar ao servidor um arquivo .txt ao invés de mandar um arquivo .PHP. E teria alguma modificação no inet.http??
Obrigado
Oi Gabriel,
Com o shield GSM eu nunca tentei, mas você pode tentar fazer isso por FTP mesmo, com Arduino.
Abraço!
Adilson
Ola, boa noite.
No arquivo de texto connect.php, alem dos dados de nome do banco de dado, usuario e senha, tambem é necessarios colocar o nome do servidor.
Da onde vc tirou o seu?
Apesar de eu estar criando meu banco de dados pelo cPanel, as configurações são parecidas.
Obrigado.
Boa noite,
Na hora que eu criei o BD no mySql ele já me deu essa informação.
Abraço!
Adilson
Consegui fazer funcionar, porém, as mensagens que mando chegam em branco. O que pode estar errado?
Ola. bom dia.
Eu n'ao consegui entender essa linha.
numdata = inet.httpPOST("arduinoecia.webatu.com", 80, "/add.php", temp_string, msg, 50);
Da onde veio arduinoecia.webatu.com?
Voce criou uma pagina nova no webhost com esse endereco?
Voce precisou confirar ela pelo webhost ou voce determina que essa e a pagina do DataBase apenas pelo "/add.php"?
Estou preso nisso. por favor.
Obrigado
Boa tarde,
Isso, criei no webhost. Configurei lá e subi as páginas .php como no procedimento.
Abraço!
Adilson
Bom dia! o arquivo index.php não roda mais, acusa um erro do sql, nem simuladores de pagina nem servidores estao abrindo o link.
ao remover as linhas de erro funciona OK
teria como dar uma olhada ?
Oi Felipe,
Obrigado por avisar, vou dar uma revisada nesse post.
Abraço!
Adilson
Eu consigo fazer esse mesmo sistema com o modulo gsm da linha 800? Ou tem de ser obrigatoriamente esse 900A??
Oi Igor,
Vou ficar te devendo essa por enquanto. Não testei ainda com o SIM800.
Abraço!
Adilson
boa noite nao consigo configurar os arquivos php da erro o que pode ser
Boa noite pessoal. Estou em um projeto onde preciso fazer o contrário. Ao invés de enviar dados a um Web Server, preciso consultar um Web Server (site). Já possuo o site – http://www.tcccesar.esy.es. Estou utilizando: numdata=inet.httpGET("www.tcccesar.esy.es", 80, "/", msg, 200); porem não retorna o conteúdo. Já tentei com outros sites, onde o erro persistiu. O retorno é sempre o abaixo:
status=Conectado!!!
………….Consultando Web Server……………….
ATT: OK
RIC:
OK
DB:RECVD CMD
ATT: CONNECT OK
RIC:
OK
DB:NOT CONN
ATT: OK
RIC:
ERROR
ALREADY CONNECT
DB:NOT CONN
ATT: OK
RIC:
ERROR
ALREADY CONNECT
DB:NOT CONN
Utilizo as bibliotecas: , , , e . Sketch na versão 1.8.8, Arduino UNO + Shield SIM900.
Alguém teria alguma sugestão de como resolver?? Algum código como exemplo?? Estou precisando urgentemente de uma ajuda…
Obrigado pessoal!
Muito bom, me tirou muitas duvidas, mas gostaria de perguntar, se eu usar esse Shild SIM900 mais módulo GPS GY-NEO6MV2, consigo em tempo real pegar informações como Localização, Velocidade e sentido que segue e enviar via internet com o uso do GPRS para um Servidor? dai eu trataria as informações e exibiria em um App por exemplo.
Mas a duvidas mora no Tempo real, ele consegue me fornecer as informações praticamente em tempo real? Exemplo se os equipamentos estiverem em um veiculo eu consigo acompanhar ele se locomover? desde já muito obrigado e parabéns pelo conteúdo disponibilizado.
Oi Matheus,
Nunca testei nessa configuração, mas você consegue sim acompanhar de forma muito rápida, vai depender do seu programa também.
Abraço!
Adilson
não estou conseguindo acessar o site que criei, aparece a seguinte mensagem
“Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /storage/ssd2/944/10520944/public_html/connect.php:8 Stack trace: #0 /storage/ssd2/944/10520944/public_html/index.php(5): Connection() #1 {main} thrown in /storage/ssd2/944/10520944/public_html/connect.php on line 8”
Segui todos os passos, o que será que ta dando errado?
Oi André,
Parece ser algo ou com o nome do banco de dados, ou com os dados de acesso (usuário e senha)
Abraço!
Adilson
Estou com o mesmo problema, conseguiu resolver ?
Boa noite, poderia faze este mesmo tutorial com o sim808
Oi Pedro,
Ótima sugestão, vou providenciar. 🙂
Abraço!
Adilson
Ficaria muito agradecido!!
Existe a possibilidade deu conectar o SIM900 na internet e transforma-lo em um roteador WiFipara distribuir sinais de wifi para alguns modulos de NodeMCUs proximos a ele, sem obrigatoriamente estarem no mesmo circuito (malha)?
Meu amigo, tem um dado que não aparece no seu tutorial, que é o servidor do banco de dados $server=”mysql12.000webhost.com”; este é padrão pra todos ? O meu dá um erro brabo e não entra na pagina
Oi Douglas,
Pois é. Vou rever este tutorial pois o 000webhost está com alguns problemas.
Abraço!
Adilson