Go Down

Topic: Scrittura Mysql (Read 4208 times) previous topic - next topic

juan_1987

Buongiorno ragazzi, io e il mio collega stiamo impazzendo, per far scrivere nel database i dati della temperatura  rilevati da arduino, con sopra la ethernet shield e la thinkerkit con il sensore temperatura attaccato, senza utilizzare php, dato che vogliamo scrivere sul database.

Cercando su google abbiamo trovato un esempio fatto da Charles Andrew Bell ma c'è una stringa di codice che sembra bloccare tutto (if (my_conn.mysql_connect(server_addr, 3306, user, password))), il codice è questo:

#include <SPI.h>
#include <Ethernet.h>
#include <sha1.h>
#include <avr/pgmspace.h>
#include <mysql.h>
#include <TinkerKit.h>

TKThermistor therm(I5); // creating the object 'therm' that belongs to the 'TKThermistor' class

TKLed led(9) ;                             // and giving the value to the desired output pin

float C, F;            // temperature readings are returned in float format


byte mac_addr[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x1F, 0x41 };
IPAddress ip_addr(192, 168, 0, 44);
IPAddress server_addr(192, 168, 0, 171);
char user[] = "root";
char password[] = "";

char buf[128];

Connector my_conn; 

void setup()
{
  // initialize serial communications at 9600 bps

 
 
  Ethernet.begin(mac_addr);
Serial.begin(9600);
delay(1000);
  Serial.println("Connecting...");
  if (my_conn.mysql_connect(server_addr, 3306, user, password))
    {delay(500);
  }
  else
    {Serial.println("Connection failed.");}
 
}


void loop()
{
 
  C = therm.getCelsius();        // Reading the temperature in Celsius degrees and store in the C variable
  F = therm.getFahrenheit();     // Reading the temperature in Fahrenheit degrees and store in the F variable

  // Print the collected data in a row on the Serial Monitor
  Serial.print("Analog reading: \t");   // Reading the analog value from the thermistor
  Serial.print(therm.getCelsius());
  Serial.print("\tC: \t");
  Serial.print(C);
 
 
   
     sprintf(buf, "INSERT INTO test.temp VALUES (NULL, %hi.%01hi, %i.%01i)",
                 C,
                  C,
                  C,
                   C);
                 
     my_conn.cmd_query(buf);
      Serial.print("Data read and recorded.");
 
 

}


Se avete delle idee per aiutarmi ne sarei molto felice  :D

pitusso

#1
Nov 16, 2012, 12:29 pm Last Edit: Nov 16, 2012, 12:32 pm by pitusso Reason: 1
Ciao

Quote
my_conn.mysql_connect(server_addr, 3306, user, password)


la funzione che utilizzi qui, dove l'hai dichiarata?

Non è che stai cercando di utilizzare una funzione php (cosa che ovviamente non può funzionare)?
http://php.net/manual/en/function.mysql-connect.php


scusa ho riletto gli header (forse c'è una libreria mysql che non conosco ...).
Puoi postare un link della risorsa a cui fai riferimento?
Che errore hai?

juan_1987

non stiamo usando, stiamo cercando di scrivere solo su mysql senza php...non riusciamo a capire il problema...o se ci sono alternative...

bigjohnson

#3
Nov 16, 2012, 12:34 pm Last Edit: Nov 16, 2012, 01:39 pm by bigjohnson Reason: 1
Ciao,
per quello che so non è possibile inserire dati direttamente in mysql da arduino, il server mysql usa un protocollo criptato con ssl e non penso ci siano librerie client per arduino.
La cosa più semplice penso sia fare una paginetta in php(perl, java o altri linguaggi) su un webserver connesso al database, nella quale puoi fare una get con i valori da inserire, tipo
http://www.gdgfgfg.com/mysqlinsert?valore1=12&valore2=14
e vai avanti così.
Nella paginetta php ci metti il codice per inserire i valori nel database.
In arduino ci metti il codice per chiamare la paginetta con i parametri, che è una cosa veramente banale.

Edit:
Un alternativa può anche essere un frontend json per mysql, pare che ce ne siano ma non ne so molto.

Alberto

juan_1987

Vi rimando qui: tale Charles Bell sembra esserci riuscito tramite altre librerie

http://www.google.it/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCQQFjAA&url=http%3A%2F%2Fassets.en.oreilly.com%2F1%2Fevent%2F80%2FSensor%2520Network%2520Data%2520Collection%2520and%2520Storage%2520Presentation.ppt&ei=YCWmUM_wA-nd4QTn9YHICQ&usg=AFQjCNEUOshBJofE5FM_hjy9y6qPaLjSpQ&sig2=wfO1muRrcJzDnzevncts0Q

pitusso

Ciao

Quote
per quello che so non è possibile inserire dati direttamente in mysql da arduino, il server mysql usa un protocollo criptato con ssl e non penso ci siano librerie client per arduino.


ok, avevo capito bene  :P

Quote
La cosa più semplice penso sia fare una paginetta in php(perl, java o altri linguaggi) su un webserver connesso aldatabase, nella quale puoi fare una get con i valori da inserire, tipo
http://www.gdgfgfg.com/mysqlinsert?valore1=12&valore2=14


aggiungo che se cerchi, nel forum trovi più di un esempio sul tema (ricordo per esempio una discussione molto strutturata aperta da ratto93)

Madwriter

se ti serve in perl te la scrivo io, il perl è il mio pane quotidiano  :smiley-yell:
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

pitusso

Quote
se ti serve in perl te la scrivo io, il perl è il mio pane quotidiano


+1 per il perl, ma come soluzione è più "portabile" php: devo ancora trovare un hosting che supporti perl a un prezzo umano!  :P

Cmq dal link postato da juan_1987, si arriva qui:
https://launchpad.net/mysql-arduino

Ho un poco di tempo in treno e me lo guardo

Madwriter

vabbè te lo hosti in locale, con 50 euro ti fai un server-ino tanto è facilissimo da installare :D
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

bigjohnson

#9
Nov 16, 2012, 02:09 pm Last Edit: Feb 22, 2013, 04:08 pm by bigjohnson Reason: 1
Ho provato a compilare l'esempio della libreria, rimuovendo tutto il codice del sensore, e mi da questo errore:
Quote
In file included from dht22_sensor_node.ino:63:
/Users/utente/Documents/Arduino/libraries/Sha/sha1.h:26: error: conflicting return type specified for 'virtual void Sha1Class::write(uint8_t)'
/Users/utente/Applicazioni/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)'

Penso sia un problema della libreria sha.

Edit: ci sono un paio di patch per la libreria insieme al codice.

brunialti

#10
Nov 16, 2012, 06:12 pm Last Edit: Nov 16, 2012, 06:14 pm by brunialti Reason: 1
Grande, grande Bell!
Ce l'ha fatta veramente. Cercavo questa libreria da tempo.
Proverò a usarla con un serverino raspi.

Grazie juan per averlo segnalato!

Guglio

Ed un sano scriptino in php su un server da poco (anche free) o utilizzar githube?
ArduMAP: Mappa degli utenti che utilizzano Arduino.
http://www.guglio.net/ArduMAP

brunialti

#12
Nov 17, 2012, 08:08 am Last Edit: Nov 17, 2012, 08:11 am by brunialti Reason: 1
nahhhh... vuoi mettere scrittura diretta su db,?
E' come vendere casa senza passare per tecnocasa :-)
Mi sembra molto più semplice e robusto.
Nel powerpoint di Bell sono anche elencati gli altri metodi ed il codice per pachube.

p.s. githube==pachube?

PaoloP


Ed un sano scriptino in php su un server da poco (anche free) o utilizzar githube?


Githube non lo mai sentito e non l'ho trovato. Conosco GitHub.
Pachube adesso è diventato Cosm. https://cosm.com/

pitusso

[OT]
Ciao,
questo fine settimana abbiamo giocato con OpenEnergyMonitor:
http://openenergymonitor.org/emon/

E' davvero interessante, ha le stesse funzionalità di Cosm, ma permette molte più personalizzazioni e ne esiste una versione che puoi installare localmente (o su hosting) - rendendo di fatto la piattaforma "privata".
[OT]

Go Up