Go Down

Topic: Ciao ragazzi ma Con mysql e arduino ci avete mai lavorato? (Read 2 times) previous topic - next topic

mastergov

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 ?

Federico

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
Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

mastergov

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 ?

Guglio

Ma che codice stai utilizzando? Non è che probabilmente con quello vanno caricate delle librerie?
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

lesto

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
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Stilgar

Ciao,
come mai vuoi ricompilare il client MySQL su Arduino? Potrebbe "mangiarti" tutta la memoria solo lui  :smiley-fat:
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

lesto

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
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

bigjohnson

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

mastergov

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)

Code: [Select]

#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?

lesto

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 :-)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

mastergov

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?


lesto

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..
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

pelletta

Quote

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?

lesto

una ogni 5 secondi è più che ok, poi dipende anche dalle righe della tabella etc..
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

mastergov

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
Code: [Select]
#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();

     
  }

}

Go Up