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.

Como acessar a internet com o Arduino GSM Shield SIM900

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:

  1. Escolha do servidor Web
  2. Criação do Banco de Dados MySql
  3. Configuração do Banco de Dados
  4. Criação dos arquivos PHP
  5. 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

Nesta etapa vamos criar o banco de dados que vai guardar o texto das nossas mensagens. No painel de controle do servidor Web, procure pela opção MySQL:
Painel de controle - MySQL
Ao clicar nessa opção, será aberta a janela Manage MySQL Databases. Preencha os campos MySQL database name (nome do banco de dados MySQL), MySQL user name (nome de usuário, que vai ser utilizado para acesso ao banco) e Password for MySQL user (senha do banco de dados), confirmando a senha no campo Enter Password again. Siga o modelo abaixo:
Criação do Banco de Dados
Clicando em Create database, eu tenho:
 
  • 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
Anote essas informações pois elas serão úteis depois. Com o banco de dados criado, vamos agora à parte de configuração dos campos.

Configuração do Banco de Dados

No painel de controle do servidor Web, selecione a opção phpMyAdmin:
Painel de Controle - phpMyAdmin
Use essa opção para configurar os campos do banco, incluir/excluir registros, executar comandos SQL, criar e alterar tabelas, etc. 
Na tela seguinte, será mostrado o banco de dados que você criou no passo anterior. Selecione Enter phpMyAdmin, no lado direito:
 
Acesso phpMyAdmin
Agora, o primeiro passo é criar uma tabela no banco de dados. Vamos criar uma tabela chamada SMS_Recebidos, com apenas 2 campos (fields). Clique em Go para que a tabela seja criada:
Criação tabela
Na próxima tela, vamos definir o formato dos campos que vamos usar. Vou criar um campo chamado timeStamp, que vai registrar o horário em que o SMS foi recebido, e um campo SMS_Texto, que irá armazenar o texto do SMS. Utiliza as configurações mostradas abaixo:
Definição de Campos
Clique em SAVE para que os campos sejam criados na tabela:
Tabela Criada

Criação dos arquivos PHP

Vamos agora criar os arquivos em PHP que vão acessar e atualizar esse banco de dados. São eles:

 

  • 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
Crie um arquivo texto com o nome connect.php. Dentro dele, coloque o seguinte código:
<?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;
 }
?>
Nesse arquivo temos todos aqueles parâmetros que usamos na criação do banco de dados: $user (linhas 4, nome do usuário), $pass (linha 5, senha de acesso ao banco) e $db (linha 6, nome do banco de dados).
Essas informações são usadas pelo próximo arquivo, o add.php para se conectar ao banco de dados.
<?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");
?>
O add.php recebe a informação passada pelo GSM Shield via POST (linha 6, MSG_Texto1), contendo o texto da mensagem, e em seguida insere um novo registro na tabela (linha 8), gravando o timeStamp (data e hora), e o texto ($MSG_Texto).

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>
Terminada a configuração, copie esses três arquivos  (connect.php, add.php e index.php) para o servidor Web, utilizando, no caso do 000webhost, qualquer um dos gerenciadores de arquivo (File Managers):

 

000webhost Gerenciador de Arquivos

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

No programa abaixo, vamos utilizar a biblioteca GSM_GPRS_GPS_Shield (download), a mesma que já utilizamos no post anterior.
Dentro do loop, executamos a rotina que aguarda a chegada de um novo SMS. Assim que a mensagem for recebida, é executada a rotina envia_GSM, que vai se conectar à internet utilizando a rede de telefonia celular (conexão GPRS), e vai enviar para o servidor (linha 67) as informações da mensagem de texto.

 

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”)

O processo é um pouco demorado, pois por padrão a biblioteca executa uma série de rotinas de teste e conexão. Você pode acompanhar todo esse processo através do Serial Monitor.
//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);
}
Após o envio das informações, entre no browser e acesse o endereço do seu web server. Você terá uma tela como essa, com as informações geradas pelo index.php:
Página Web - PHP
Isso encerra este “pequeno” tutorial. Faça as adaptações necessárias ao seu projeto, enviando dados de sensores, estado das portas do Arduino, informações de localização, etc. 
5/5 - (2 votes)