Go Down

Topic: GRAVAR EM BANCO DE DADOS MENSAGENS ENVIADAS PARA CHIP SIM - SHIELD EFCom SIM900  (Read 732 times) previous topic - next topic

Hikari2017

Prezados,

Este projeto consiste em receber mensagens e armazená-las em um banco de dados localizado no servidor  gratuito www.000webhost.com. Ele foi baseado no Tutorial da Arduino e Cia:como acessar a internet com o Arduino GSM Shield SIM900. Segue o link abaixo:

http://www.arduinoecia.com.br/2015/11/acessar-internet-arduino-gsm-shield-sim-900.html

É um artigo bastante didático. Porém devido o mesmo ser de 2015, foi necessário fazer algumas pequenas adaptações, principalmente no código das páginas em PHP.

O problema é que o Arduino (estou usando o arduino Mega 2560) não está conseguindo enviar a mensagem para ser gravada no banco de dados. Seguem abaixo as mensagens do monitor serial do arduino e os códigos usados no arduino e páginas PHP.

Gostaria dos colegas para identificar onde está a falha.    

Desde já agradeço a atenção de todos.

Sds,



Mensagens do monitor serial do arduino:



Liga GSM...OK!
Testando GSM Shield SIM900
ATT: OK
RIC:
OK

DB:ELSE
DB:NO RESP
DB:NO RESP
ATT: OK
RIC: AT

OK

DB:CORRECT BR
ATT: OK
RIC: AT

OK

ATT: OK
RIC: AT&F

OK

ATT: OK
RIC: ATE0

OK

ATT: OK
RIC:
OK

ATT: OK
RIC:
OK

ATT: OK
RIC:
OK

ATT: OK
RIC:
OK

ATT: +CPMS:
RIC:
+CPMS: 1,50,1,50,1,50

OK

ATT: OK
RIC:
OK

ATT: SHUT OK
RIC:
SHUT OK


status=READY
This method is deprecated! Please use GetSMS in the SMS class.
ATT: +CMGL
RIC:
+CMGL: 10,"REC UNREAD","27360","","15/09/17,12:38:06-12"
Bradesco: Alanex , com o seu Cartao Bradesco Visa Platinum voce tem cobertura exclusiva com o Seguro de Locacao de Veiculos em qualqu

OK
ATT: OK
RIC:
OK

ATT: ERROR
RIC:
ERROR

DB:STARTING NEW CONNECTION
ATT: SHUT OK
RIC:
SHUT OK

DB:SHUTTED OK
ATT: OK
RIC:
OK

DB:APN OK
ATT: OK
RIC:
OK

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
Failed to send data to the server
0

Código do arduino:

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

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("temadre.000webhostapp.com", 80, "/add.php", temp_string,msg, 55);
 
  if (numdata)
 {
  Serial.println("Data sent to server succesfully!");   
 }
else
{
  Serial.println("Failed to send data to the server");
 }

  delay(5000);
}

Código das páginas PHP:

index.PHP

<HTML>
<HEAD>
 <TITLE>New Document</TITLE>
</HEAD>
<BODY>

 <?php

  include("connect.php");

 $link=Connection();

 $result=mysqli_query($link,"SELECT * FROM `SMS_Recebidos` ORDER BY `TimeStamp` DESC");
 ?>

<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>&nbsp;Data e Hora&nbsp;</b></td>
   <td align='center' width='375px'><b>&nbsp;Mensagem&nbsp;</b></td>
  </tr>

     <?php
   if($result!==FALSE){
      while($row = mysqli_fetch_array($result)) {
        printf("<tr><td align='center'> &nbsp;%s </td><td> &nbsp;%s&nbsp; </td></tr>",$row["TimeStamp"], $row["SMS_Texto"]);
       }
       mysqli_free_result($result);
       mysqli_close($link);
    }
      ?>

   </table>
</body>
</html>


add.php

<HTML>
<HEAD>
 <TITLE>New Document</TITLE>
</HEAD>
<BODY>
<?php

 include("connect.php");

 $link=Connection();


 $MSG_Texto=$_POST["MSG_Texto1"];
 
 $query = "INSERT INTO SMS_Recebidos (`TimeStamp`, `SMS_Texto`)
  VALUES (current_timestamp,$MSG_Texto)";

 if (mysqli_query($connection,$query)) {
  echo "New record created successfully";
  } else {
     echo "Error:" . $query . "<br>" . mysqli_error($connection);
  }
   
 mysqli_close($connection);

 header("Location: index.php");

?>

</body>
</html>

connect.php

<HTML>
<HEAD>
 <TITLE>New Document</TITLE>
</HEAD>
<BODY>
   <?php
 function Connection(){
  $server="localhost";
  $user="id1250889_alanex";
  $pass="pEdroj85";
  $db="id1250889_temadre";

  $connection = mysqli_connect($server, $user, $pass, $db);


  /* check connection */
 
    if (mysqli_connect_errno()) {
    die("Connect failed: " . mysqli_connect_error());

   }

     return $connection;

 }



 ?>
</BODY>
</HTML>












Hikari2017

Prezados,

Este projeto consiste em receber mensagens SMS em cartão SIM instalado no Shield e armazená-las em um banco de dados localizado no servidor  gratuito www.000webhost.com. Ele foi baseado no Tutorial da Arduino e Cia:como acessar a internet com o Arduino GSM Shield SIM900. Segue o link abaixo:

http://www.arduinoecia.com.br/2015/11/acessar-internet-arduino-gsm-shield-sim-900.html

É um artigo bastante didático. Porém devido o mesmo ser de 2015, foi necessário fazer algumas pequenas adaptações, principalmente no código das páginas em PHP.

O problema é que o Arduino (estou usando o arduino Mega 2560) não está conseguindo enviar a mensagem para ser gravada no banco de dados. Seguem abaixo as mensagens do monitor serial do arduino e os códigos usados no arduino e páginas PHP.

Gostaria dos colegas para identificar onde está a falha.     

Desde já agradeço a atenção de todos.

Sds,



Mensagens do monitor serial do arduino:



Liga GSM...OK!
Testando GSM Shield SIM900
ATT: OK
RIC:
OK

DB:ELSE
DB:NO RESP
DB:NO RESP
ATT: OK
RIC: AT

OK

DB:CORRECT BR
ATT: OK
RIC: AT

OK

ATT: OK
RIC: AT&F

OK

ATT: OK
RIC: ATE0

OK

ATT: OK
RIC:
OK

ATT: OK
RIC:
OK

ATT: OK
RIC:
OK

ATT: OK
RIC:
OK

ATT: +CPMS:
RIC:
+CPMS: 1,50,1,50,1,50

OK

ATT: OK
RIC:
OK

ATT: SHUT OK
RIC:
SHUT OK


status=READY
This method is deprecated! Please use GetSMS in the SMS class.
ATT: +CMGL
RIC:
+CMGL: 10,"REC UNREAD","27360","","15/09/17,12:38:06-12"
Mensagem de teste

OK
ATT: OK
RIC:
OK

ATT: ERROR
RIC:
ERROR

DB:STARTING NEW CONNECTION
ATT: SHUT OK
RIC:
SHUT OK

DB:SHUTTED OK
ATT: OK
RIC:
OK

DB:APN OK
ATT: OK
RIC:
OK

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
Failed to send data to the server
0

Código do arduino:

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

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("temadre.000webhostapp.com", 80, "/add.php", temp_string,msg, 55);
 
  if (numdata)
 {
  Serial.println("Data sent to server succesfully!");   
 }
else
{
  Serial.println("Failed to send data to the server");
 }

  delay(5000);
}

Código das páginas PHP:

index.PHP

<HTML>
<HEAD>
 <TITLE>New Document</TITLE>
</HEAD>
<BODY>

 <?php

  include("connect.php");

 $link=Connection();

 $result=mysqli_query($link,"SELECT * FROM `SMS_Recebidos` ORDER BY `TimeStamp` DESC");
 ?>

<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>&nbsp;Data e Hora&nbsp;</b></td>
   <td align='center' width='375px'><b>&nbsp;Mensagem&nbsp;</b></td>
  </tr>

     <?php
   if($result!==FALSE){
      while($row = mysqli_fetch_array($result)) {
        printf("<tr><td align='center'> &nbsp;%s </td><td> &nbsp;%s&nbsp; </td></tr>",$row["TimeStamp"], $row["SMS_Texto"]);
       }
       mysqli_free_result($result);
       mysqli_close($link);
    }
      ?>

   </table>
</body>
</html>


add.php

<HTML>
<HEAD>
 <TITLE>New Document</TITLE>
</HEAD>
<BODY>
<?php

 include("connect.php");

 $link=Connection();


 $MSG_Texto=$_POST["MSG_Texto1"];
 
 $query = "INSERT INTO SMS_Recebidos (`TimeStamp`, `SMS_Texto`)
  VALUES (current_timestamp,$MSG_Texto)";

 if (mysqli_query($connection,$query)) {
  echo "New record created successfully";
  } else {
     echo "Error:" . $query . "<br>" . mysqli_error($connection);
  }
   
 mysqli_close($connection);

 header("Location: index.php");

?>

</body>
</html>

connect.php

<HTML>
<HEAD>
 <TITLE>New Document</TITLE>
</HEAD>
<BODY>
   <?php
 function Connection(){
  $server="localhost";
  $user="id1250889_alanex";
  $pass="pEdroj85";
  $db="id1250889_temadre";

  $connection = mysqli_connect($server, $user, $pass, $db);


  /* check connection */
 
    if (mysqli_connect_errno()) {
    die("Connect failed: " . mysqli_connect_error());

   }

     return $connection;

 }



 ?>
</BODY>
</HTML>













ansb

Quando tem 2 coisas deste tipo (Arduino de um lado, PHP do outro, ou Java de um lado, PHP etc...) a dificuldade principal vem do fato que é complicado saber onde esta o problema.
Então precisa simplificar bastante um lado, a fim de testar outro lado.
Em PHP, vc tem um código complicado.
Minha ideia seria criar um código PHP bastante simples, deste tipo:

<?php
   $MSG_Texto=$_POST["MSG_Texto1"];
   $handle=fopen("test.txt","a+");    // Abrir documento para escrever
   fwrite($handle, $MSG_Texto);      // Escrever
   fclose($handle);                          // Fechar
?>

Nada mais.

Vc pode testar o codigo:
1) usa $_GET ao inves de $_POST
2) digita no seu navegador http://temadre.000webhostapp.com/add.php?MSG_Texto1=MeuTest
3) da uma olhada no servidor e vc deve ver o documento test.txt com a palavra "MeuTest"

Depois disso, vc sabe que o código PHP é coreto e vc pode corrigir o código Arduino.

Abraço
PL

Hikari2017

Prezado ansb,

Quando digitei o http://temadre.000webhostapp.com/add.php?MSG_Texto1=MeuTest acrescentou na tabela uma linha com data e hora porém em branco, ou seja, sem dado de mensagem.

Porém, Já consegui testar o código PHP com POST mesmo, criei uma outra página que chama a add.php e e envia o valor da variável MSG_Texto1


<html>
<head>
 <title>Como Pegar Dados do Formulario via POST com PHP</title>
</head>
<body>
 <h1>Enviando dados via POST</h1>
<form action="add.php" method="POST">
<input type="text" name="MSG_Texto1" value="Teste" />
<input type="submit" value="enviar" />
</form>
</body>
</html>

Funcionou, logo acredito que o problema está na função init.HTTPPOST,  na conexão GSM/GPRS ou na conexão com o banco de dados? Vamos por parte:

1-O banco de dados pode rejeitar uma conexão externa como essa? Se sim, o que devo fazer ou como posso testar uma conexão externa ao banco de dados?

2-Como posso testar se a conexão gsm/gprs está ok?


Desde já agradeço a ajuda de todos.

Sds,









viniparizotto

Estou com o mesmo problema, o que tudo indica é que o modulo não consegue fazer a conexão com o GPRS ( segundo as luzes indicativas NET, o sistema encontra a rede mas não tem conexão GPRS). Alguma novidade no desenvolvimento?

hfernandez

Boa noite,
Estou enfrentando o mesmo problema, consigo inserir dados diretamente pela url porém não consigo postar pelo Arduíno, nem via comandos AT nem http.POST, ALGUMA NOVIDADE?

Quote
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


Go Up