Sim 800L e data base

Buon pomeriggio,

sto cercando di realizzare la classica stazione meteo attraverso l’utilizzo di un Arduino UNO, un SIM800L, una scheda SIM della Things Mobile e sensori vari mediante la modalità GET.

L’obbiettivo è quello di popolare la classica tabella creata in un MySQL attraverso un myfile.php caricato su un mio sito web. Utilizzando quindi un link del tipo: http://mywebsite.epizy.com/myfile.php?d1=2.3&d2=3.0

Postando questo link all’interno della barra del browser riesco ad inserire correttamente una nuova riga all’interno della tabella creata.

Non riesco purtroppo ad effettuare però la stessa cosa con il mio Sistema Arduino. Pur avendo la SIM800L correttamente agganciata alla rete.

Di seguito la parte software che sto utilizzando.

Il codice ARDUINO:

#include <SoftwareSerial.h>
SoftwareSerial gprsSerial(7, 3);

void setup()
{
  gprsSerial.begin(19200);
  Serial.begin(19200);
 
 Serial.println("Config SIM900...");
  delay(2000);
  Serial.println("Done!...");
  gprsSerial.flush();
  Serial.flush();

  // attach or detach from GPRS service
  gprsSerial.println("AT+CGATT?");
  delay(100);
  toSerial();


  // bearer settings
  gprsSerial.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");
  delay(2000);
  toSerial();

  // bearer settings
  gprsSerial.println("AT+SAPBR=3,1,\"APN\",\"TM\"");
  delay(2000);
  toSerial();

  // bearer settings
  gprsSerial.println("AT+SAPBR=1,1");
  delay(2000);
  toSerial();
}


void loop()
{
   // initialize http service
   gprsSerial.println("AT+HTTPINIT");
   delay(2000);
   toSerial();
 
 

   // set http param value
   gprsSerial.println("AT+HTTPPARA=\"URL\",\"http://mywebsite.epizy.com/myfile.php?d1=2.3&d2=3.0"");
   delay(2000);
   toSerial();

   // set http action type 0 = GET, 1 = POST, 2 = HEAD
   gprsSerial.println("AT+HTTPACTION=0");
   delay(6000);
   toSerial();

   // read server response
   gprsSerial.println("AT+HTTPREAD");
   delay(1000);
   toSerial();

   gprsSerial.println("");
   gprsSerial.println("AT+HTTPTERM");
   toSerial();
   delay(300);

   gprsSerial.println("");
   delay(10000);
}

void toSerial()
{
  while(gprsSerial.available()!=0)
  {
    Serial.write(gprsSerial.read());
  }
}

Che genera sulla seriale:

Config SIM900...
Done!...
AT+CGATT?

+CGATT: 1

OK
AT+SAPBR=3,1,"CONTYPE","GPRS"

OK
AT+SAPBR=3,1,"APN","TM"

OK
AT+SAPBR=1,1

OK
AT+HTTPINIT

OK
AT+HTTPPARA="URL","http://sosardgio89.epizy.com/wd3.php?d1=23&dAT+HTTPACTION=0

OK

+HTTPACTION: 0,200,851
AT+HTTPREAD

+HTTPREAD: 851
<html><body><script type="text/ja
AT+HTTPTERM

OK

Il myfile.php caricato sul mysite è:

<?php
$conex = mysql_connect("sql7.freemysqlhosting.net","sql1234567","1234567");

if(!$conex){
    die("non ok server 
".mysql_error());
}
else{
echo ("DONE");
print ("DONE");}



$db = mysql_select_db("sql1234567", $conex);

if(!$db){
    die("non ok database 
".mysql_error());
}


//$Boton = $_POST["strBoton"];
//$Boton = $_GET["strBoton"];

$sql = "INSERT INTO Save_Data (Date,Time,Value_1,Value_2) VALUES (NOW(),NOW(),'".$_GET["d1"]."','".$_GET["d2"]."') ";   

$res = mysql_query($sql,$conex);

?>

Sono ormai giorni che provo ad effettuare tentativi di connessione senza avere alcun risultato.

Sapreste darmi delle dritte in merito al fine di capire come riuscire a risolvere questo problema?

Grazie

Attenzione ... il codice Arduino è pieno di BBcode per i colori ... NON devi copiarlo da WEB (o non so da dove) ed incollarlo, ma devi sempre passare per un editor di testo PURO e copiare solo la parte codice.

Ti prego di sistemarlo, grazie :slight_smile:

Guglielmo

P.S.: ... ed è buona norma rileggere sempre i propri post per vedere se accadono ... "porcherie" come questa :slight_smile:

Correzione effettuata.

Ciao, nessuno riesce a darmi un feedback? Un punto su cui lavorare...

Grazie

Stai facendo una cosa speciale, specifica. Non in molti penso lo hanno fatto. Con un hardware che non credo abbiano in tanti.
Non conosco bene l'argomento http da SIM800L ma qui:
https://m2msupport.net/m2msupport/athttppara-set-paramaters-for-http-connection/
hai provato a seguire questa guida?
e magari quel programmino AT command tester ?

Poi specifica meglio cosa non avviene.
Vedi sempre l'errore "non ok server" oppure ti sembra che non chiama mai la pagina php ??

PS. dici che su seriale stampa

AT+HTTPPARA="URL","http://sosardgio89.epizy.com/wd3.php?d1=23&dAT+HTTPACTION=0
ma se tu mandi
  gprsSerial.println("AT+HTTPPARA=\"URL\",\"http://mywebsite.epizy.com/myfile.php?d1=2.3&d2=3.0"");
quello che è ??

Ogni qual volta posto, attraverso il browser, non vedo alcun problema. Non appare il NON OK SERVER ma di fatti il DONE DONE a dimostrazione che l’inserimento è avvenuto.

Per quanto riguarda quello che mi da la seriale avevo modificato al fine di non pubblicare il mio indirizzo ma in generale:
AT+HTTPPARA=“URL”,"http://mysite.com/wd3.php?d1=23&dAT+HTTPACTION=0
Non riesco a capire perché effettivamente stampa solo una parte dell’indirizzo (c’è per caso un limite di caratteri?) per poi stampare subito l’altro comando:

AT+HTTPACTION=0

sossio89, ma sei sicuro che compila il codice che hai postato? Probabilmente l’hai corretto successivamente perché alla riga gprsSerial.println("AT+HTTPPARA=… manca un backslash alla fine della stringa.

Non capisco poi il perché di tutti quei delay() tra una istruzione e la successiva.
Sono veramente necessari? E se si, cosi lunghi?

Non ho mai usato il modulo SIM800L, ma analizzando il tuo sketch e soprattutto la risposta del modulo,
da quel che si vede nel tuo post sembrerebbe che l’indirizzo che gli passi venga troncato a http://sosardgio89.epizy.com/wd3.php?d1=23&d

La risposta che ottieni (anch’essa troncata nel print sulla seriale) è lunga 851 byte, il che significa che probabilmente è la pagina di indirizzo non trovato o qualcosa di simile perché il tuo script PHP dovrebbe produrre una risposta molto più piccola: il testo DONEDONE (come mai due volte poi e solo alla connessione con il DB e non all’inserimento effettivo dei dati?) + qualche altro byte per gli headers.

Come prima cosa io proverei ad eliminare tutti quei delay() e poi magari vediamo come si comporta.

Ciao,

ho provato ad eliminare tutti i delay nella sezione loop. Il programma non è stabile e a livello si seriale ottengo valori illeggibili.

Inoltre se provo ad inserire l'indirizzo : http://sosardgio89.epizy.com ottengo dalla seriale:

AT+HTTPPARA="URL","http://sosardgio89.epizy.com"

OK
AT+HTTPACTION=0

OK

+HTTPACTION: 0,200,832
AT+HTTPREAD

+HTTPREAD: 832

... mmm, non capisco, di solito NON si aspetta con un delay, ma si aspetta la risposta positiva o negativa al comando dato da parte del SIM800L. Se prendi il manuale del set di comandi AT, vedi che ogni comando prevede una risposta da parte del modulo ... quindi, si invia un comando e si chiama una funzione che verifica cosa il modulo risponde al comando ... e si verifica la risposta (quindi si aspetta di aver ricevuto tutta la risposta completa, la si confronta con le possibile risposte e si agisce di conseguenza).

Guglielmo