Bonjour à tous.
Je suis un petit peu à cours d’idées après avoir passé bien 5 nuits à réfléchir sur le sujet.
Je débute depuis autant de temps en arduino, et j’ai un projet de prototype dont le but est d’envoyer les données d’un capteur à ma base de données créée sur un serveur en ligne.
Première étape : Acquérir les données du capteur, c’est ok
Deuxième étape : se connecter au wifi, c’est ok
Troisième étape : se connecter à la base de données et envoyer les données là ou il faut… Ca bloque
Le programme que je vais vous transmettre est mon essai désespéré de lier l’envoie d’une requête https toute simple, avec une requête SQL visant à transmettre une valeur toute simple à la base de données.
L’exemple pour la requête HTTPS est : ESP8266WiFi → HTTPSRequest
L’exemple pour la requête SQL est : MySQL Connector Arduino → basic_insert_esp8266
Pour des raisons de simplicités, je n’ai pas mis le capteur dans mes exemples, je veux d’abord que tout fonctionne… Désolé si mon programme fait mal aux yeux à cause des incohérences
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <MySQL_Cursor.h>
#ifndef STASSID
#define STASSID "MON_SSID"
#define STAPSK "MON_MDP"
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
char user[] = "MON_USER"; // MySQL user login username
char password_db[] = "MON_PASSWORD"; // MySQL user login password
// Sample query
char INSERT_SQL[] = "INSERT INTO request_db.request_table (message) VALUES ('Hello, Arduino!')";
const char* host = "zortx.duckdns.org";
const int httpsPort = 443;
WiFiClient client; // Use this for WiFi instead of EthernetClient
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;
// Use web browser to view and copy
// SHA1 fingerprint of the certificate
const char fingerprint[] PROGMEM = "48 FE 81 E6 8D 49 5B 77 83 D7 5C E5 50 7A 4A 38 22 6D 02 02";
void setup() {
Serial.begin(115200);
Serial.println();
Serial.print("connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Use WiFiClientSecure class to create TLS connection
WiFiClientSecure client;
Serial.print("connecting to ");
Serial.println(host);
Serial.printf("Using fingerprint '%s'\n", fingerprint);
client.setFingerprint(fingerprint);
if (!client.connect(host, httpsPort)) {
Serial.println("connection failed");
return;
}
String url = "/phpmyadmin/index.php";
Serial.print("requesting URL: ");
Serial.println(url);
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"User-Agent: BuildFailureDetectorESP8266\r\n" +
"Connection: close\r\n\r\n");
Serial.println("request sent");
while (client.connected()) {
String line = client.readStringUntil('\n');
if (line == "\r") {
Serial.println("headers received");
break;
}
}
String line = client.readStringUntil('\n');
if (line.startsWith("{\"state\":\"success\"")) {
Serial.println("esp8266/Arduino CI successfull!");
} else {
Serial.println("esp8266/Arduino CI has failed");
}
Serial.print("Connecting to SQL... ");
if (conn.connect(user, password_db))
Serial.println("OK.");
else
Serial.println("FAILED.");
// create MySQL cursor object
cursor = new MySQL_Cursor(&conn);
Serial.println("reply was:");
Serial.println("==========");
Serial.println(line);
Serial.println("==========");
Serial.println("closing connection");
}
void loop() {
if (conn.connected())
cursor->execute(INSERT_SQL);
delay(5000);
}
PS : La base de données, la table, les accès pour cet utilisateur en question sont OK.
PS 2 : La clé SHA-1 est la bonne pour l’adresse du site
Merci de votre aide, je pense que j’en ai besoin sinon je vais déjà être dégoûté de la programmation arduino 5 jours après avoir commencé