Domanda:
Come ricevere i dati dal database del mio server a una variabile nel mio Arduino?
Manihatty
2014-05-06 12:23:53 UTC
view on stackexchange narkive permalink

Sto imparando a lavorare con la comunicazione client - server. Sono in grado di comunicare con il mio server e in grado di memorizzare i valori nella tabella. Ma voglio ricevere uno dei dati specifici dal database.

Qui voglio ottenere il valore "abc" dalla colonna "Current" da memorizzare in una variabile nel mio Arduino.

Di seguito è riportato il codice che ho fatto fino ad ora. Sarei davvero felice se potessi risolvere il problema.

Ecco la struttura del mio database

  ---------------- ----------------------------------- | Dispositivo | Precedente | Avanti | Distanza | Corrente | -------------------------------------------------- - | katup123 | xyz | abc | 2.600 | abc | -------------------------------------------------- -  

Ecco il mio codice PHP:

locator.php

  <? php $ con = mysqli_connect ("your_domain.com "," peter "," abc123 "," locate "); // Controlla la connessioneif (mysqli_connect_errno ()) {echo" Impossibile connettersi a MySQL: ". mysqli_connect_error ();} $ risultato = mysqli_query ($ con, "SELECT Current FROM locate WHERE Device = 'katup123'"); while ($ row = mysqli_fetch_array ($ result)) {echo $ row ['Current']; echo "<br>"; }? > 

Ecco il mio codice Arduino:

  // Includere la libreria GSM # includere <GSM.h> # definire PINNUMBER "" // Dati APN #define GPRS_APN "GPRS_APN" // sostituisci il tuo GPRS APNgpsll # definisci GPRS_LOGIN "login" // sostituisci con il tuo login GPRS # definisci GPRS_PASSWORD "password" // sostituisci con la tua password GPRS // inizializza l'istanza della libreriaGSM gsmAccess; GSMClient client; GPRS gprs; // URL, percorso & port (ad esempio: arduino.cc) char server [] = "tuo_dominio.com"; char path [] = "/locater.php";int port = 80; // la porta 80 è quella predefinita per HTTPvoid ​​setup () {Serial.begin (9600); Serial.println ("Avvio del client web Arduino."); // stato della connessione booleano notConnected = true; // Avvia scudo GSM
// Se la tua SIM ha un PIN, passalo come parametro di begin () tra virgolette while (notConnected) {if ((gsmAccess.begin (PINNUMBER) == GSM_READY) & (gprs.attachGPRS (GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) = = GPRS_READY)) notConnected = false; else {Serial.println ("Non connesso"); ritardo (1000); }} Serial.println ("GSM inizializzato"); Serial.println ("connessione ...");} void loop () {char risultato [20]; Serial.print ("Connessione al database del server"); if (client.connect (server, port)) {client.print ("GET /locator.php?"); Serial.print ("GET /locator.php?"); client.println ("HTTP / 1.1"); Serial.println ("HTTP / 1.1"); client.println ("Host: www.tuo_dominio.com"); Serial.println ("Host: www.your_domain.com"); client.println ("User-Agent: Arduino"); Serial.println ("User-Agent: Arduino"); client.println ("Accetta: text / html"); Serial.println ("Accetta: text / html"); client.println ("Connessione: chiudi"); Serial.println ("Connection: close"); client.println (); Serial.println (); Serial.println ("\ nCOMPLETE! \ N"); client.stop (); } else {Serial.println ("connessione non riuscita"); Serial.println ("\ n FAILED! \ N"); } delay (5000);}  

Qui voglio memorizzare il valore "abc" nella mia variabile "risultato". Non so come farlo.

Per ottenere dati da un server web ad arduino, basta creare una pagina hph o html con il valore scritto sulla pagina. In questo modo puoi ottenere il valore dal server web richiedendo la pagina e quindi utilizzare il valore nel codice. Dato che hai già fatto l'invio, crea un'altra pagina che scrive il valore dal DB.
Due risposte:
Mazaryk
2017-04-21 04:29:37 UTC
view on stackexchange narkive permalink

Dopo aver inviato la richiesta GET, leggi la risposta per riempire la variabile char result [20] che hai dichiarato:

  int i = 0; .. .if (client.connect (server, porta)) {client.print ("GET /locator.php?"); ... Serial.println ("\ nCOMPLETE! \ N"); // Legge la risposta dal server i = 0; while (client.available ()) {risultato [i] = client.read (); Serial.print (risultato [i]); i ++; } client.stop (); // disconnect}  

Questo è un esempio, result conterrà il testo emesso da locator.php. Dovrai modificare questo codice da applicare al tuo caso. Il codice sopra non ha alcun controllo degli errori di alcun tipo. Inoltre, è necessario eseguire un controllo ed effettuare la chiamata Web solo una volta.

In locator.php dovresti sostituire echo "<br / >"; con echo "\ n"; . E per buona misura, assicurati che non ci siano spazi bianchi prima di <? e rimuovi il ? > finale.

chicks
2014-11-17 23:53:51 UTC
view on stackexchange narkive permalink

Se hai il tuo Arduino su tcp / ip, la tua risposta può essere trovata in Arduino Cookbook di O'Reilly: Ricetta 15-4. Come menzionato da Sourcery, devi creare una nuova pagina sul lato PHP che sputi solo i dati che stai cercando e quindi utilizzare un client web sul lato Arduino per scaricare quei dati.

Se non hai il tuo Arduino sulla rete, devi incollare i dati sulla linea seriale. Un modo sarebbe inserirlo nella tua fonte e ricompilare / ricostruire Arduino. Un martello più piccolo sarebbe quello di incorporare qualcosa nel tuo schizzo Arduino che possa occuparsi di ottenere i dati tramite USB seriale e avere uno spessore sul lato computer per estrarre i dati da PHP e inviarli ad Arduino. La comunicazione seriale con Arduino e Processing mostra qualcosa di simile dove sta eseguendo Processing sul computer che sta passando i dati ad Arduino.

il primo collegamento è solo per utenti autorizzati e il secondo è un 404.
Ho corretto il secondo URL.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...