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

Io ho acquistato un arduino uno con ethershield ed ho anche preso due sensori TE che mi misurano l'ampere che passano da delle linee. analogici. ma avrei bisogno di fare recapitare le letture all'interno di un serverweb su internet tramite mysql. ogni 5 minuti. è possibile ? o devo creare un programma in c che mi dialoga con mysql tramite telnet ?

Bhe, devi come minimo creare la parte su arduino che invia i dati al pc, e la parte sul pc che scrive sul tuo sql. F

sketch_apr04a.cpp:7:24: error: unistd.h: No such file or directory sketch_apr04a.cpp:13:27: error: sys/types.h: No such file or directory sketch_apr04a.cpp:15:28: error: sys/socket.h: No such file or directory sketch_apr04a.cpp:17:28: error: netinet/in.h: No such file or directory sketch_apr04a.cpp:19:27: error: arpa/inet.h: No such file or directory sketch_apr04a.cpp: In function 'int main(int, char**)': sketch_apr04a:36: error: aggregate 'sockaddr_in my_addr' has incomplete type and cannot be defined sketch_apr04a:40: error: aggregate 'sockaddr_in their_addr' has incomplete type and cannot be defined sketch_apr04a:48: error: 'AF_INET' was not declared in this scope sketch_apr04a:48: error: 'SOCK_DGRAM' was not declared in this scope sketch_apr04a:48: error: 'socket' was not declared in this scope sketch_apr04a:52: error: 'perror' was not declared in this scope sketch_apr04a:66: error: 'AF_INET' was not declared in this scope sketch_apr04a:70: error: 'htons' was not declared in this scope sketch_apr04a:74: error: 'INADDR_ANY' was not declared in this scope sketch_apr04a:82: error: invalid application of 'sizeof' to incomplete type 'sockaddr' sketch_apr04a:82: error: 'bind' was not declared in this scope sketch_apr04a:86: error: 'perror' was not declared in this scope sketch_apr04a:98: error: invalid application of 'sizeof' to incomplete type 'sockaddr' sketch_apr04a:102: error: 'recvfrom' was not declared in this scope sketch_apr04a:106: error: 'perror' was not declared in this scope sketch_apr04a:126: error: 'inet_ntoa' was not declared in this scope sketch_apr04a:136: error: 'close' was not declared in this scope

ogni volta che tento di compilare un qualsiasi applicativo client/server mi dice cosi perchè gli mancano le librerie.. posso usare queste specifiche lib con arduino ?

Ma che codice stai utilizzando? Non è che probabilmente con quello vanno caricate delle librerie?

ma che librerie stai usando? com'è che hai il main() nel tuo progetto?

In function 'int main(int, char**)':

se hai l'ethernet shield devi usare le apposite librerie arduino, non puoi usare librerie esterne, perchè probabilmente sono molto legate al sitema operativo

Ciao, come mai vuoi ricompilare il client MySQL su Arduino? Potrebbe "mangiarti" tutta la memoria solo lui :drooling_face: Non era più comodo usare dei comandi HTTP per inserire i dati nel tuo ServerWeb? Con una paginetta PHP, leggi i dati e li inserisci nel DB senza incasinarti troppo. La cosa importante è non dare un Form d'inserimento dai pubblico, così solo arduino può inserirti i dati ;) Qui trovi come gestire i comandi HTTP ;)

http://www.arduino.cc/playground/Code/WebServer

MySQL non ci stara MAI su un'arduino! serve più spazio, chiamate di sistema, più risorse, etc etc... al massimo dall'arduino ti connetti a un server SQL

Per riuscire a inserire i dati in mysql devi passare tramite un web server.

Con Arduino usi il client e fai una get client.print("http://mioserver.it/mettiindb?port0="); client.print(digital.read(0)); e poi ti scrivi la pagina sul web server per inserire i dati nel db.

Temo sia impossibile compilare le librerie del client mysql con Arduino.

Se proprio non vuoi usare un web server, puoi scriverti un server tcp/ip che prenda una stringa come port1=1 e inserisca nel db lo stato della porta tramite le librerie di mysql.

Ciao.

Alberto

Ciao alberto mi hai dato una grandissima idea però io ho ideato questo premetto che da Firefox quando invio la stringa :
http://192.168.1.185/arduino/connet.php?data=12/12/2001&val1=09&val2=07
la stringa me la inserisce mentre invece cosi(per ora per prova è una stringa statica)

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

int sensorPin = A0;    // select the input pin for the potentiometer
int ledPin = 13;      // select the pin for the LED
int sensorValue = 0;  // variable to store the value coming from the sensor

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

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

// Initialize the Ethernet client library
// with the IP address and port of the server 
// that you want to connect to (port 80 is default for HTTP):

Client client(server, 80);

void setup() {
  pinMode(ledPin, OUTPUT); 
  // start the Ethernet connection:
  Ethernet.begin(mac, ip);
  // start the serial library:
  Serial.begin(9600);
  // give the Ethernet shield a second to initialize:
    sensorValue = analogRead(sensorPin);    
  // turn the ledPin on
  digitalWrite(ledPin, HIGH);  
  // stop the program for <sensorValue> milliseconds:
  delay(sensorValue);          
  // turn the ledPin off:        
  digitalWrite(ledPin, LOW);   
  // stop the program for for <sensorValue> milliseconds:
  delay(sensorValue);                
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect()) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /arduino/connet.php?data=date&val1=09&val2=07" );
    client.println();
  } 
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{
  // if there are incoming bytes available 
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    for(;;)
      ;
  }
}

non mi inserisce niente dove è l’errore?

togli il codice nel loop e lascialo vuoto.
GET /arduino/connet.php?data=date&val1=09&val2=07 dovrebbe essere
GET /arduino/connet.php?data=date&val1=09&val2=07 HTTP/1.0

comunque per i test delle richieste GET usa telnet :slight_smile:

Grazie funziona però mi fa una immissione sola non mi ripete il ciclo strano…
e se lo lascio nel loop ne fa 2 e poi stop…

poi avrei un altra domanda ma se voglio usare nella query get tipo val2=“ValueSensor1” e fargli leggere il valore degli ingressi?

a fine loop() hai un ciclo infinito che blocca l'esecuzione del loop(): // do nothing forevermore: for(;;) ;

il codice è scritto per fare una richesta dal setup, e usare il loop() per mntenere attiva la connessione fino a risposta del server (altrimenti la get potrebbe non essere elaborata, poichè tanto il client si è disconnesso si risparmiano risorse....)

per la seconda domanda leggi il tuo valore e poi crei la stringa get..

a fine loop() hai un ciclo infinito che blocca l'esecuzione del loop(): // do nothing forevermore: for(;smiley-wink ;

Bella notizia Lesto. Giusto per curiosità quante volte si può fare una query ad un database senza sovraccaricare il server di richieste? Ci può stare una query ogni 5 secondi o il server si arrabbia?

una ogni 5 secondi è più che ok, poi dipende anche dalle righe della tabella etc..

ho tolto la stringa ma fa sempre l’inserimento singolo e poi si pianta li… lo sprintf funziona è tutto ok
l’unica cosa è che non mi loopa la seguenza

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


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

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

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

// Initialize the Ethernet client library
// with the IP address and port of the server 
// that you want to connect to (port 80 is default for HTTP):

Client client(server, 80);

void setup() {
  pinMode(ledPin, OUTPUT); 
  // start the Ethernet connection:
  Ethernet.begin(mac, ip);
  // start the serial library:
  Serial.begin(9600);
  // give the Ethernet shield a second to initialize:
    sensorValue = analogRead(sensorPin);    
  // turn the ledPin on
  digitalWrite(ledPin, HIGH)  
  // stop the program for <sensorValue> milliseconds:
  delay(sensorValue);          
  // turn the ledPin off:        
  digitalWrite(ledPin, LOW);   
  // stop the program for for <sensorValue> milliseconds:
  delay(sensorValue);                
  delay(1000);
  Serial.println("connecting...");


  // if you get a connection, report back via serial:
  if (client.connect()) 
    Serial.println("connected");

 // Recupero le letture dagli ingressi analogici

 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();
  } 
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}
 

void loop()
{
   
  // if there are incoming bytes available 
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

   // if the server's disconnected, stop the client:
   if (!client.connected()) {
    Serial.println();
   Serial.println("disconnecting.");
   client.stop();

     
  }
 
}

ciao mastergov, forse non ho capito bene quello che vuoi fare, ma quel che tu metti nel setup viene eseguito non appena accendi Arduino (o dopo un reset). Se vuoi che qualcosa venga eseguito ciclicamente lo devi mettere nel loop.

mha a me non funziona un H !

deve ogni 5 secondi inviare la lettura al sito e poi lui inserisce i dati nel mysql ma non me lo fa sempre che lo metta nel loop o no…

#include <SPI.h>
#include <Ethernet.h>
char buffer[1000];
int sensorPin = A0; // select the input pin for the potentiometer
int sensorPin2 = A1;
int ledPin = 13;      // select the pin for the LED
int sensorValue = 0;  // variable to store the value coming from the sensor
int sensorValue2 = 0;

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

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

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):

Client client(server, 80);

void setup() {
  pinMode(ledPin, OUTPUT);
  // start the Ethernet connection:
  Ethernet.begin(mac, ip);
  // start the serial library:
  Serial.begin(9600);
  // give the Ethernet shield a second to initialize:
    sensorValue = analogRead(sensorPin);
  // turn the ledPin on
  digitalWrite(ledPin, HIGH);
  // stop the program for <sensorValue> milliseconds:
  delay(sensorValue);
  // turn the ledPin off:
  digitalWrite(ledPin, LOW);
  // stop the program for for <sensorValue> milliseconds:
  delay(sensorValue);
  delay(1000);
  Serial.println("connecting...");


  // if you get a connection, report back via serial:
  if (client.connect()) {
    Serial.println("connected");

  
  }
  else {
    // kf you didn't get a connection to the server:
    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);



    // Make a HTTP request:
    client.println(buffer);
    client.println();


  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();


  }
}

per forza, nel loop ricevi solo i dati, la richiesta invece la invii nel setup().. devi modificare un poco il codice, e occhio a non far partire una richiesta ogni loop()

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();

}

questo va bene in loop no?

si, ma occhio che così fai una get ogni loop e probabilmente vai a saturare la banda o le risorse del server... e comunque per inviare dati ad alta velocità mooolto meglio usare il TCP senza passare per l'http