J'ai récemment acheté un Arduino Uno Wifi afin d'écrire des données de capteur directement de mon Arduino dans une base de données MySQL existante. Je pensais que puisqu'il y a quelques bibliothèques existantes (comme this) qui font exactement la même chose avec l'aide d'un bouclier Ethernet ou wifi, cela ne devrait pas être un gros problème. Le problème que j'ai découvert juste après avoir acheté le Uno Wifi, c'est que tous ont besoin de bibliothèques de leur (comme Ethernet.h ou Wifi.h). J'aurais besoin d'un bouclier supplémentaire pour les utiliser, ce qui n'a pas beaucoup de sens à mon avis, puisque j'ai déjà acheté un Arduino prêt pour le wifi. Je sais qu'il y a des choses comme ThingSpeak qui sont supportées, mais je ne veux pas perdre la flexibilité de ma propre base de données et je n'ai pas besoin de tous les services analytiques supplémentaires que ThingSpeak m'offre. Donc, ma question un peu désespérée est - est-il possible d'écrire des données avec une instruction INSERT INTO simple à une base de données existante avec mon (tout nouveau) Arduino Uno WIFI?Puis-je utiliser mon Arduno Uno Wifi pour écrire dans une base de données SQL?
EDIT:
J'ai essayé certaines choses aujourd'hui, c'est ce que je suis venu avec à ce jour:
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <UnoWiFiDevEd.h>
IPAddress server_addr(88, 198, 61, 231); // IP of the MySQL *server* here
char user[] = "USERxxxxxx"; // MySQL user login username
char password[] = "xxxxxxxxx"; // MySQL user login password
// Sample query
char INSERT_SQL[] = "INSERT INTO `arduino_test`(`Humidity`, `Temperature`, `DateTime`) VALUES (60, 23, '2017-02-02 20:34:20')";
WiFiClient client;
MySQL_Connection conn((Client *)&client);
void setup() {
Serial.begin(9600);
while (!Serial); // wait for serial port to connect
Wifi.begin();
Serial.println("Connecting");
if (conn.connect(server_addr, 3306, user, password)) {
delay(5000);
Serial.println("Connection successful");
} else {
Serial.println("Connection failed!");
}
}
void loop() {
delay(2000);
Serial.println("Recording data.");
// Initiate the query class instance
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
// Execute the query
cur_mem->execute(INSERT_SQL);
// Note: since there are no results, we do not need to read any data
// Deleting the cursor also frees up memory used
delete cur_mem;
}
Il en résulte du programme de ne pas être en mesure d'établir une connexion au serveur et juste impression constante "Connexion" au moniteur série.
EDIT 2:
je me suis dit quelque chose, grâce à @cagdas de vérifier la première connexion. Voici mon croquis en ce moment:
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
#include <Wire.h>
#include <UnoWiFiDevEd.h>
IPAddress server_addr(88, 198, 61, 231); // IP of the MySQL *server* here
char user[] = "USERxxxxxx"; // MySQL user login username
char password[] = "xxxxxxx"; // MySQL user login password
// Sample query
char INSERT_SQL[] = "INSERT INTO `arduino_test`(`Humidity`, `Temperature`, `DateTime`) VALUES (60, 23, '2017-02-02 20:34:20')";
WifiData client;
MySQL_Connection conn((Client *)&client);
void setup() {
char* connector = "rest";
char* server = "download.arduino.org";
char* method = "GET";
String resource = "/latest.txt";
Serial.begin(9600);
Ciao.begin();
pinMode(2, INPUT);
delay(5000);
doRequest(connector, server, resource, method);
Wifi.begin();
Serial.println("Connecting");
if (conn.connect(server_addr, 3306, user, password)) {
Serial.println("Connection successful");
} else {
Serial.println("Connection failed!");
}
}
void loop() {
delay(2000);
Serial.println("Recording data.");
// Initiate the query class instance
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
// Execute the query
cur_mem->execute(INSERT_SQL);
// Note: since there are no results, we do not need to read any data
// Deleting the cursor also frees up memory used
delete cur_mem;
}
void doRequest(char* conn, char* server, String command, char* method) {
CiaoData data = Ciao.write(conn, server, command, method);
if (!data.isEmpty()) {
Ciao.println("State: " + String (data.get(1)));
Ciao.println("Response: " + String (data.get(2)));
Serial.println("State: " + String (data.get(1)));
Serial.println("Response: " + String (data.get(2)));
}
else {
Ciao.println ("Write Error");
Serial.println ("Write Error");
}
}
Si la connexion fonctionne ce doit imprimer « Etat: 200 » et « Réponse: 10709 ». Mais il en fait imprimé juste un 0. Si je retire ma boucle et juste écrire
void loop() {}
il fonctionne très bien (mais ne peut évidemment pas écrire quoi que ce soit dans la base de données). Mettre le code de la boucle dans cette instruction if "if (conn.connect (adresse_serveur, 3306, utilisateur, mot de passe))" ne renvoie pas non plus le résultat correct. Donc, à ce stade, je ne sais toujours pas pourquoi ce code ne fonctionne pas, mais je pense que cela pourrait donner un aperçu plus profond d'une solution possible. également l'Arduino IDE me dit quelque chose comme ça
The sketch is using 50% of the memory
Global variables use 88% of the memory
There is only little RAM left -> stability issues possible (sorry, it's in german)
ne la réponse est logique? – cagdas
@cagdas Avez-vous une idée d'où vient ce comportement étrange? Ou n'importe quelle idée que faire ensuite? –
Où sont vos identifiants de connexion Wi-Fi? – cagdas