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