Ciao ragazzi ma Con mysql e arduino ci avete mai lavorato?

mha saturerò anche tutto ma + di un immissione non la fa, che sia nell’enunciato loop() o meno non funziona ne fa una sola
ho provato in tutti i modi a scambiare il codice in setup e viceversa ma niente, invia solo una lettura e poi bona…!!

#include <SPI.h>
#include <Ethernet.h>

char buffer[1000];
int sensorPin = A0;  
int sensorPin2 = A1;
int ledPin = 13;      
int sensorValue = 0;   
int sensorValue2 = 0;

 
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

byte ip[] = { 192,168,1,177 };
byte server[] = { 192,168,1,185 };  

 
Client client(server, 80);

void setup() {
   
  pinMode(ledPin, OUTPUT);
   
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  digitalWrite(ledPin, HIGH);
  delay(sensorValue);
  digitalWrite(ledPin, LOW);
  delay(sensorValue);
  delay(1000);
  Serial.println("connecting...");
  if (client.connect()) {
  Serial.println("connected");

  
  }
  else {
     
    Serial.println("connection failed");
  }
}

 void loop() { 
       
        sensorValue  =  analogRead(sensorPin);
        sensorValue2 = analogRead(sensorPin2);

        sprintf(buffer, "GET /arduino/connet.php?val1=%d&val2=%d HTTP/1.0",sensorValue ,sensorValue2);
        client.println(buffer);
        client.println(); 
       
        
 }

Credi che sono ancora molto lontano? non capisco se ne fa una xchè non fa le altre poi a regola se gli imposto il delay(5000) ogni 5 secondi invia dati no?

bhè, c'è un piccolo problema nel loop(): non controlli se la connessione è ancora ttiva prima di inviare i dati, e nel caso in cui non lo fosse non la riattivi. poichè stai dicendo che vuoi usare il protocollo HTTP/1.0, che prevede: connessione richiesta get o post risposta del server disconnessione

quindi dopo la prima get il server ti disconnette e tutte le altre richieste vanno a finire nel nulla cosmico.

a regola se gli imposto il delay(5000) ogni 5 secondi invia dati no?

esatto :)

comunque è buona regola che prima di inviare una seconda richiesta, prima controlli che la prima abbia terminato, sta a te poi decidere per quanto tempo lasciare per terminare la richiesta e che fare se succede una condizione del genere... ma per ora inizia a far funzionare questo :)

Allora in pratica per quanto riguarda la verifica della connessione :

if(!client.connect()) {

ethernet.begin(mac, ip); serial.begin; }

qui in pratica gli dico che se lka connessione "non è attiva". che si deve ricollegare giusto? devo inviare la richiesta GET e chiudere la connessione giusto? dopo lui fa il loop apre e chiude e gli imposto il delay giusto?

si, ma non serve ridare la serial.begin, per la seriale non cade la connessione :-)

void loop()

{

if(!client.connected()) { /// se il valore è false si collega no?

Ethernet.begin(mac, ip);

sensorValue = analogRead(sensorPin); sensorValue2 = analogRead(sensorPin2);

sprintf(buffer, "GET /arduino/connet.php?nome=Prova&codice=89783&val1=%d&val2=%d HTTP/1.0",sensorValue, sensorValue2); client.println(buffer);

}

if (client.connected()) { // se il valore è true lo disconnette in questo caso il cilclo dovrebbe essere compiuto no?

client.println("disconnecting"); client.stop();

}

}

cosi puo andare? perchè non mi funziona lostesso eppure dovrebbe essere ok

Via santo boolean pensavo che non funzionava con ==false e true invece funziona ora funziona con il tcpdump sul server vedo che i pacchetti arrivano ma non inserisce nulla mmmhmhmh ora mi chiedo ma il buffer sarà sufficente a [1000] ? perchè dopo un tot di buffer arduino si pianta e non risponde piu hai ping

Dove è l’errore qui? non è ok?

#include <Ethernet.h>
#include <SPI.h>

int sensorPin = A0; // select the input pin for the potentiometer
int sensorPin2 = A1; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the sensor
int sensorValue2 = 0;
char buffer[1800];

byte mac = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip = { 192, 168, 1, 177 };
byte server = { 192, 168, 1, 185 };
// 212.48.8.140

Client client(server, 80);

void setup()
{

Serial.begin(9600);


delay(1000);
}

void loop()

{

// sprintf(buffer, “GET /arduino/connet.php?nome=PROVA&val1=%d&val2=%d HTTP/1.0”,sensorValue ,sensorValue2);

if (client.connected()==false) {

Ethernet.begin(mac, ip);
client.connect();
client.println(“connected”);
sensorValue = analogRead(sensorPin);
sensorValue2 = analogRead(sensorPin2);
sprintf(buffer, “GET /arduino/connet.php?nome=PROVA&codice=98738&val1=%d&val2=%d HTTP/1.0”,sensorValue ,sensorValue2);
client.println(buffer);
client.println();
sensorValue = 0;
sensorValue =0;

}

if (client.connected()==true) {
client.stop();

}
delay(5000);

}

molto semplice.

stabilisci una connessione e invii il comado, fin quì tutto ok.
subito dopo termini la comunicazione.
MA come dicevo qualche post fa:

[…] matenere attiva la connessione fino a risposta del server (altrimenti la get potrebbe non essere elaborata, poichè tanto il client si è disconnesso si risparmiano risorse…)[…]

quindi il tuo problema è che chiudi la comunicazione troppo presto. Dovresti chiuderla quando ricevi ALMENO un carattere di risposta da parte del server;
poi credo dipenda anche da DOVE hai posizionato il codice PHP: se prima stampi un pezzo di pagina e poi lanci lo script PHP, PROBABILMENTE se interrompi la comunicazione prima di arrivare con la comunicazione al codice PHP non verrà eseguito.

Però sappiamo che al termine della pagina HTML, il server invia due volte il segnale “a capo”, composto da 2 caratteri: \r\n. Quindi l’ideale sarebbe mantenere attiva la comunicazione con il server fichè non ricevi la stringa ‘\r\n\r\n’ (due volte capo), e dato che utilizzi HTTP/1.0 a quel punto dovrebbe pure essere il server a disconnetterti(ma NON darlo per scontato)

Una soluzione sarebbe leggere i millis() prima di fare la richiesta (mettiamo il caso salvi i milllis in una variabile di nome tempoRichiesta), fare la richiesta, attendere la risposta, ti calcoli il tempo che hai impiegato per fare la richiesta e attendere la risposta tempoTotale=(millis()-tempoRichiesta), controllare che questo tempo non sia maggiore di 5 secondi; se inferiore mettere un delay(5000-tempoTotale), così da avere una lettura ogni 5 secondi, se maggiorre fai partire subito un’altra richiesta.

si ho capito, ma quando gli dico sotto client.println(buffer); delay(11000);

non aspetta che chiuda da solo la connessione ? per poi ripartire? xchè non funziona lostesso

ho risposto nell'altra discussione