📟 Transformer votre Arduino en serveur Web avec un shield ethernet
Norbert Aquaponie
0:00 / 0:00
📟 Transformer votre Arduino en serveur Web avec un shield ethernet
42 135 просмотров · 8 л. назад
Norbert Aquaponie
31,1 тыс. подписчиков
42 135 просмотров · 8 л. назад
Cinquième épisode de notre série dédiée à l'Arduino. Nous allons cette fois transformer notre micro contrôleur en serveur Web avec un shield ethernet pour exposer les données mesurées par nos capteurs sur un réseau local et sur Internet. Pour brancher votre Arduino où vous voulez et consulter vos mesures, suivez le guide !
NB: Si votre box ne contient pas par défaut du CPL, vous devrez acheter 2 boitiers CPL
Me soutenir sur Tipeee: https://fr.tipeee.com/norbert-aquaponie
// Elements pour la sonde de température de l'eau
#include "OneWire.h"
#include "DallasTemperature.h"
#define WATER_TEMP_PIN A0
OneWire oneWire(WATER_TEMP_PIN);
DallasTemperature sensors(&oneWire);
// Elements pour la sonde de température et d'humidité de l'air
#include "DHT.h"
#define DHTPIN A1
#define DHTTYPE DHT22 // DHT11 sinon
DHT dht(DHTPIN, DHTTYPE);
// Elements pour la connection ethernet (serveur web)
#include "SPI.h"
#include "Ethernet.h"
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 143); // Adresse IP du serveur web de l'arduino sur le réseau local
EthernetServer local_server(80); // creation d'un serveur web sur le port standard 80
void setup()
{
Ethernet.begin(mac, ip); // Initialize l'arduino comme un élément du réseau local
local_server.begin(); // Se met à l'écoute des communications client (browser web)
}
void loop()
{
respond_local_server();
}
void respond_local_server()
{
EthernetClient local_client = local_server.available();
if (local_client)
{
boolean currentLineIsBlank = true;
while (local_client.connected()) // tant qu'un client est connecté
{
if (local_client.available()) // Si un client a envoyé une requête
{
char c = local_client.read(); // lire un caractère du client
if (c == '\n' && currentLineIsBlank) // Quand la dernière ligne envoyée par le client est vide et suivi de \n on va lui répondre
{
// On envoie un entête http standard en réponse
local_client.println("HTTP/1.1 200 OK");
local_client.println("Access-Control-Allow-Origin: *");
local_client.println("Content-Type: application/json");
local_client.println("Connection: close");
local_client.println();
// On envoie la valeur des capteur en format JSON
char sPostData[150] = "";
getJSON_DataFromSensors(sPostData);
local_client.println(sPostData);
break;
}
// every line of text received from the client ends with \r\n
if (c == '\n') // Si le caractère reçu est \n on positionne la variable currentLineIsBlank à vrai
currentLineIsBlank = true;
else
if (c != '\r') // Si le caractère reçu est \r on positionne la variable currentLineIsBlank à faux
currentLineIsBlank = false;
}
}
delay(1000); // On laisse 1s au browser pour récupérer les données qu'on a envoyées
local_client.stop(); // ferme la connection
}
}
// renvoie les données des capteurs en format JSON
void getJSON_DataFromSensors(char *sDataFromSensors)
{
// Une structure JSON commence par une accolade
strcpy(sDataFromSensors, "{");
// Copy la température de l'eau dans la chaine de caractère JSON de retour
char tempwater[30] = "";
sensors.requestTemperatures();
dtostrf(sensors.getTempCByIndex(0), 0, 1, tempwater);
strcat(sDataFromSensors, "\"Température de l'eau\":\" ");
strcat(sDataFromSensors, tempwater);
strcat(sDataFromSensors, "°C \",");
// Copy la température de l'air dans la chaine de caractère JSON de retour
char tempext[30] = "";
double dTempExt = dht.readTemperature();
if(!isnan(dTempExt)) // Si la température a été correctement relevé
{
dtostrf(dTempExt, 0, 1, tempext);
strcat(sDataFromSensors, "\"Température de l'air\":\" ");
strcat(sDataFromSensors, tempext);
strcat(sDataFromSensors, "°C \",");
}
else
strcat(sDataFromSensors, "\"Température de l'air\":\" erreur de lecture \",");
// Copy l'humidité de l'air dans la chaine de caractère JSON de retour
char humidext[30] = "";
double dHumidExt = dht.readHumidity();
if(!isnan(dHumidExt)) // Si l'humidité a été correctement relevé
{
dtostrf(dHumidExt, 0, 0, humidext);
strcat(sDataFromSensors, "\"Humidité de l'air\":\" ");
strcat(sDataFromSensors, humidext);
strcat(sDataFromSensors, "% \"");
}
else
strcat(sDataFromSensors, "\"Humidité de l'air\":\" erreur de lecture \"");
// Une structure JSON se termine par une accolade
strcat(sDataFromSensors, "}");
}