Connessione database mysql utilizzando xampp e arduino Uno

Buongiorno a tutti,
vi scrivo perchè stò facendo dei test sul metodo di trasmissione dati da arduino ad un database mysql in modo da passare una stringa che contenga i valori di alcuni sensori collegati.
Per ora sto provando a far passare un valore pari a 3:

 #include <SPI.h>
#include <Ethernet.h>
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
//indirizzo server web (locale)
IPAddress server(192, 168, 1, 4);// ho inserito l' ip del pc su cui ho installato xampp (server apache 127.0.0.1 porta 80)
 
//indirizzo ip dell'Arduino
IPAddress ip(192, 168, 1, 177);
 
EthernetClient client;
 
String strURL = "";
 
void setup()
{
Serial.begin(9600);
 
if (Ethernet.begin(mac) == 0)
{
Serial.println("Configurazione DHCP fallita!");
Ethernet.begin(mac, ip);
}
 
delay(1000);
 
}
 
void loop()
{
UpdateTemp();
 
while(client.available())
{
char c = client.read();
Serial.print(c);
}
 
if (!client.connected())
{
Serial.println();
Serial.println("Disconnesso.");
client.stop();
}
 
//esegui la richiesta ogni 10 secondi
delay(10000);
}
 
void UpdateTemp()
{
Serial.println("Connessione...");
 
if (client.connect(server, 80))
{
Serial.println("Connesso");
 
//creo l'url utilizzando una stringa
strURL = "GET /arduino/index.php?valore=3 HTTP/1.1";
 
//invio la richiesta al server
client.println(strURL);
client.println("Host: arduino");
client.println("Connection: close");
client.println();
//chiudo la connessione
client.stop();
}
else
{
Serial.println("Errore Connessione");
}

ho creato un file php per richiamare la stringa

strURL = "GET /arduino/index.php?valore=3 HTTP/1.1";

caricando il file sulla cartella C:\xampp\htdocs\arduino

<?php

if(isset($_GET['valore']))
{

$valore = $_GET['valore'];

$link = mysql_connect('localhost', 'root', '');
 

if (!$link) {die('Impossibile connettersi: ' . mysql_error());}
 

mysql_select_db("arduino") or die( "Impossibile selezionare il database.");
 

$sql = "INSERT INTO `arduino`.`tbl_temperature`
(
`ID` ,
`Tempo_Server` ,
`Tempo_Locale` ,
`Valore` ,
`Localita`
)
VALUES
(
NULL , CURRENT_TIMESTAMP , NULL , '" . $valore . "', NULL
);";
 

$retval = mysql_query( $sql, $link );
 

if(! $retval ){die('Impossibile eseguire la query: ' . mysql_error());}
 

mysql_close($link);
}
?>

il database come si vede dall' immagine allegata non contiene nessuna informazione.

Potrebbe essere un problema di Ip??
oppure ci sono proprio errori nel codice?
confido in una vostra super consulenza come sempre :slight_smile: :slight_smile:
Saluti

Prova nella INSERT a NON mettere ID e null per quel campo. E' ad autoincremento quindi NON devi dare un valore tu.
Inoltre è un campo chiave, con null probabilmente il comando fallisce

Modificato così:

<?php

if(isset($_GET['valore']))
{

$valore = $_GET['valore'];

$link = mysql_connect('localhost', 'root', '');
 

if (!$link) {die('Impossibile connettersi: ' . mysql_error());}
 

mysql_select_db("arduino") or die( "Impossibile selezionare il database.");
 

$sql = "INSERT INTO `arduino`.`tbl_temperature`
(

`Tempo_Server` ,
`Tempo_Locale` ,
`Valore` ,
`Localita`
)
VALUES
(
 CURRENT_TIMESTAMP , NULL , '" . $valore . "', NULL
);";
 

$retval = mysql_query( $sql, $link );
 

if(! $retval ){die('Impossibile eseguire la query: ' . mysql_error());}
 

mysql_close($link);
}
?>

ma niente.. database vuoto. il seriale di arduino comunica che avviene la connessione..

Per la parte php non sò, ma il comando insert lo hai provato ?
Dalla foto del db mi pare hai dei campi che non possono essere null. La località ad esempio passi NULL ma nella definizione della tabella la colonna NULL con No (mi pare su MySql) vuol dire che non può essere null.

Per la parte php non sò, ma il comando insert lo hai provato ?

non capisco dove dovrei provarlo..

ho semplificato il tutto ancora di più.. passo solo l'informazione valore.

Da MySql, i comandi sql si possono eseguire nel manager di mysql

E puoi anche provare ad aprire la pagina da un browser qualunque. Devi testare un pezzo alla volta ed assicurarti che funzioni, altrimenti non ne esci più.

Ora sto facendo un insert come da esempi postati in precedenza.

se scrivo la funzione :

INSERT INTO `tbl_temperature`(`Valore`) VALUES ('3')

nel pannello sql di phpmyadmin il valore viene correttamente inserito. vedi allegato.

se invece creo un file index.php con il seguente codice

<?php 
// Connects to your Database 

mysql_connect("localhost", "root", "") or die(mysql_error()); 
mysql_select_db("tbl_temperature") or die(mysql_error()); 
mysql_query("INSERT INTO `tbl_temperature`(`Valore`) VALUES ('3')"); 
Print "Your table has been populated"; 
?>

Visualizzo il seguente errore :
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:\xampp\htdocs\arduino\index1.php:4 Stack trace: #0 {main} thrown in C:\xampp\htdocs\arduino\index1.php on line 4

cosa sto a sbaglià :o :o

che versione di php hai?
invece delle funzioni mysql_ecc hai provato mysqli_ecc?

la versione php è la 7.2.1

ho installato xampp versione v.3.2.2

più tardi provo con le funzioni mysqli e vediamo se cambia qualcosa..
Sembra quasi che l'accesso "dall'esterno" al database sia bloccato..

bisiareddu:
Sembra quasi che l'accesso "dall'esterno" al database sia bloccato..

SI, se ben ricordo, con Xamp, bisogna andare a modificare qualche cosa per permettere l'accesso oltre che da "localhost" ... prova a fare qualche ricerca nelle loro FAQ o con Google ...

Guglielmo

bisiareddu:
Visualizzo il seguente errore :
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in C:\xampp\htdocs\arduino\index1.php:4 Stack trace: #0 {main} thrown in C:\xampp\htdocs\arduino\index1.php on line 4

Non sono un esperto di php, ma la frase "undefined function" a me fa venire in mente che il php non riconosce i comandi mysql_xxx() Mi pare un problema di installazione della libreria mysql x il php. solo un parere.

nid69ita:
Non sono un esperto di php, ma la frase "undefined function" a me fa venire in mente che il php non riconosce i comandi mysql_xxx() Mi pare un problema di installazione della libreria mysql x il php. solo un parere.

Concordo.

Qui danno una possibile spiegazione

Buongiorno a tutti..
volevo comunicarvi che ho risolto chiamando le funzioni mysqli_ecc anzi che mysql_ecc
Il problema era quello..

Grazie a tutti

Grazie a te per aver condiviso la soluzione