Point d’accès (AP) ESP8266 NodeMCU pour serveur Web

Point d'accès (AP) ESP8266 NodeMCU pour serveur Web

Dans ce didacticiel, vous apprendrez à configurer votre ESP8266 NodeMCU en tant que point d’accès (AP) à l’aide de l’IDE Arduino. Cela vous permet de vous connecter directement à votre ESP8266 via Wi-Fi sans routeur sans fil.

Point d'accès ESP8266 NodeMCU pour serveur Web

Pour définir l’ESP8266 comme point d’accès, utilisez WiFi.softAP(ssid, mot de passe);

Station et point d’accès ESP8266

Dans la plupart de nos projets de serveur Web ESP8266 NodeMCU, nous connectons l’ESP8266 à un routeur sans fil. Dans cette configuration, nous pouvons accéder à l’ESP8266 via le réseau local.

Dans ce scénario, le routeur agit comme un point d’accès et l’ESP8266 est défini comme une station. Ainsi, vous devez être connecté à votre routeur (réseau local) pour contrôler l’ESP8266.

ESP866 NodeMCU défini comme une station Wi-Fi

Dans certains cas, ce n’est peut-être pas la meilleure configuration (lorsque vous n’avez pas de routeur à proximité). Mais si vous définissez l’ESP8266 comme point d’accès (hotspot), vous pouvez être connecté à l’ESP8266 à l’aide de n’importe quel appareil doté de capacités Wi-Fi sans avoir besoin de vous connecter à votre routeur.

En termes simples, lorsque vous définissez l’ESP8266 comme point d’accès, vous créez son propre réseau Wi-Fi et les appareils Wi-Fi (stations) à proximité peuvent s’y connecter (comme votre smartphone ou votre ordinateur).

ESP866 NodeMCU défini comme mode point d'accès (AP)

Dans ce tutoriel, nous allons vous montrer comment définir l’ESP8266 comme point d’accès dans vos projets de serveur Web. De cette façon, vous n’avez pas besoin d’être connecté à un routeur pour contrôler votre ESP8266.

Parce que l’ESP8266 ne se connecte pas davantage à un réseau filaire (comme votre routeur), il s’appelle soft-AP (soft Access Point).

Cela signifie que si vous essayez de charger des bibliothèques ou d’utiliser un micrologiciel à partir d’Internet, cela ne fonctionnera pas. Cela ne fonctionne pas non plus si vous essayez d’envoyer des requêtes HTTP à des services sur Internet, comme la publication de lectures de capteurs sur le cloud.

Installation de la bibliothèque DHT pour ESP8266

Pour cet exemple, nous utiliserons un projet de serveur Web précédent qui affiche les lectures de capteur d’un capteur DHT.

Après avoir installé la carte ESP8266 dans l’IDE Arduino, pour lire à partir du capteur DHT, nous utiliserons le Bibliothèque DHT d’Adafruit. Pour utiliser cette bibliothèque, vous devez également installer le Bibliothèque de capteurs unifiés Adafruit.

Suivez les étapes suivantes pour installer ces deux bibliothèques :

1. Ouvrez votre IDE Arduino et accédez à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques. Le gestionnaire de bibliothèque devrait s’ouvrir.

2. Recherchez « DHT » dans la zone de recherche et installez la bibliothèque DHT d’Adafruit.

Installation de la bibliothèque Adafruit DHT

3. Après avoir installé la bibliothèque DHT d’Adafruit, tapez « Capteur unifié Adafruit” dans le champ de recherche. Faites défiler vers le bas pour trouver la bibliothèque et installez-la.

Installation de la bibliothèque de pilotes Adafruit Unified Sensor

Après avoir installé les bibliothèques, redémarrez votre IDE Arduino.

Point d’accès ESP8266 NodeMCU (AP)

Dans cet exemple, nous allons modifier le serveur Web ESP8266 à partir d’un didacticiel précédent pour ajouter des fonctionnalités de point d’accès. Voici l’exemple de projet que nous utiliserons : Serveur Web de température et d’humidité ESP8266 DHT11/DHT22 avec Arduino IDE.

Ce que nous allons vous montrer ici peut être utilisé avec n’importe quel exemple de serveur Web ESP8266.

Téléchargez le croquis fourni ci-dessous pour définir l’ESP8266 comme point d’accès.

/*********
  Rui Santos
  Complete project details at https://www.raspberryme.com/esp8266-nodemcu-access-point-ap-web-server/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*********/

// Import required libraries
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <Hash.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>

const char* ssid     = "ESP8266-Access-Point";
const char* password = "123456789";

#define DHTPIN 5     // Digital pin connected to the DHT sensor

// Uncomment the type of sensor in use:
//#define DHTTYPE    DHT11     // DHT 11
#define DHTTYPE    DHT22     // DHT 22 (AM2302)
//#define DHTTYPE    DHT21     // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

// current temperature & humidity, updated in loop()
float t = 0.0;
float h = 0.0;

// Create AsyncWebServer object on port 80
AsyncWebServer server(80);

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;    // will store last time DHT was updated

// Updates DHT readings every 10 seconds
const long interval = 10000;  

const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style>
    html {
     font-family: Arial;
     display: inline-block;
     margin: 0px auto;
     text-align: center;
    }
    h2 { font-size: 3.0rem; }
    p { font-size: 3.0rem; }
    .units { font-size: 1.2rem; }
    .dht-labels{
      font-size: 1.5rem;
      vertical-align:middle;
      padding-bottom: 15px;
    }
  </style>
</head>
<body>
  <h2>ESP8266 DHT Server</h2>
  <p>
    <span class="dht-labels">Temperature</span> 
    <span id="temperature">%TEMPERATURE%</span>
    <sup class="units">&deg;C</sup>
  </p>
  <p>
    <span class="dht-labels">Humidity</span>
    <span id="humidity">%HUMIDITY%</span>
    <sup class="units">%</sup>
  </p>
</body>
<script>
setInterval(function ( ) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("temperature").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "/temperature", true);
  xhttp.send();
}, 10000 ) ;

setInterval(function ( ) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("humidity").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "/humidity", true);
  xhttp.send();
}, 10000 ) ;
</script>
</html>)rawliteral";

// Replaces placeholder with DHT values
String processor(const String& var){
  //Serial.println(var);
  if(var == "TEMPERATURE"){
    return String
  }
  else if(var == "HUMIDITY"){
    return String(h);
  }
  return String();
}

void setup(){
  // Serial port for debugging purposes
  Serial.begin(115200);
  dht.begin();
  
  Serial.print("Setting AP (Access Point)…");
  // Remove the password parameter, if you want the AP (Access Point) to be open
  WiFi.softAP(ssid, password);

  IPAddress IP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(IP);

  // Print ESP8266 Local IP Address
  Serial.println(WiFi.localIP());

  // Route for root / web page
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html, processor);
  });
  server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", String
  });
  server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", String(h).c_str());
  });

  // Start server
  server.begin();
}
 
void loop(){  
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    // save the last time you updated the DHT values
    previousMillis = currentMillis;
    // Read temperature as Celsius (the default)
    float newT = dht.readTemperature();
    // Read temperature as Fahrenheit (isFahrenheit = true)
    //float newT = dht.readTemperature(true);
    // if temperature read failed, don't change t value
    if (isnan(newT)) {
      Serial.println("Failed to read from DHT sensor!");
    }
    else {
      t = newT;
      Serial.println
    }
    // Read Humidity
    float newH = dht.readHumidity();
    // if humidity read failed, don't change h value 
    if (isnan(newH)) {
      Serial.println("Failed to read from DHT sensor!");
    }
    else {
      h = newH;
      Serial.println(h);
    }
  }
}

Afficher le code brut

Personnalisez le SSID et le mot de passe

Vous devez définir un nom SSID et un mot de passe pour accéder à l’ESP8266. Dans cet exemple, nous définissons le nom SSID ESP8266 sur ESP8266-Point d’accès, mais vous pouvez modifier le nom comme bon vous semble. Le mot de passe est 123456789mais vous pouvez également le modifier.

const char* ssid     = "ESP8266-Access-Point";
const char* password = "123456789";

Configuration de l’ESP8266 en tant que point d’accès (AP)

Il y a une section dans le mettre en place() pour définir l’ESP8266 comme point d’accès à l’aide du softAP() méthode:

WiFi.softAP(ssid, password);

Il existe également d’autres paramètres facultatifs que vous pouvez transmettre au softAP() méthode. Voici tous les paramètres :

.softAP(const char* ssid, const char* password, int channel, int ssid_hidden, int max_connection)
  • ssid (défini précédemment) : 31 caractères maximum
  • le mot de passe (défini précédemment) : minimum de 8 caractères. S’il n’est pas spécifié, le point d’accès sera ouvert (maximum 63 caractères)
  • canaliser: numéro de canal Wi-Fi (1-13). La valeur par défaut est 1
  • ssid_hidden: si défini sur true, le SSID sera masqué
  • max_connection: max stations connectées simultanément, de 0 à 8

Ensuite, obtenez l’adresse IP du point d’accès à l’aide du softAPIP() méthode et imprimez-le dans le moniteur série.

IPAddress IP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(IP);

Noter: par défaut, l’adresse IP du point d’accès est 192.168.4.1

Ce sont les extraits de code que vous devez inclure dans les croquis de votre serveur Web pour définir l’ESP8266 en tant que point d’accès logiciel.

Pour savoir comment fonctionne le code complet du serveur Web, lisez : ESP8266 NodeMCU DHT11/DHT22 Serveur Web de température et d’humidité avec Arduino IDE.

Pièces requises

Pour poursuivre ce didacticiel, vous avez besoin des pièces suivantes :

Vous pouvez utiliser les liens précédents ou accéder directement à MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

1643500085 968 Point dacces AP ESP8266 NodeMCU pour serveur Web

Diagramme schématique

Assemblez toutes les pièces en suivant le schéma suivant :

ESP8266 NodeMCU Access Point (AP) Diagramme schématique du circuit du serveur Web Capteur DHT

Connexion au point d’accès ESP8266

Lorsque l’ESP8266 exécute l’esquisse, dans votre smartphone, ouvrez vos paramètres Wi-Fi et appuyez sur le ESP8266-Point d’accès réseau:

Connectez-vous au point d'accès ESP8266 NodeMCU (mode AP)

Entrez le mot de passe que vous avez défini précédemment.

Point d'accès ESP8266 NodeMCU (AP) Entrez le mot de passe

Ouvrez votre navigateur Web et tapez l’adresse IP http://192.168.4.1. La page du serveur Web doit se charger :

Serveur Web de point d'accès ESP8266 NodeMCU utilisant l'IDE Arduino

La page du serveur Web est un peu différente du serveur Web d’origine. Ce serveur Web affiche deux icônes à côté de la température et de l’humidité. Ces icônes sont chargées à partir du site Web Font Awesome. Cependant, comme l’ESP8266 agit comme un point d’accès logiciel (il n’est pas connecté à Internet), nous ne pouvons pas charger ces icônes.

Conclusion

Dans ce didacticiel, vous avez appris à configurer l’ESP8266 en tant que point d’accès logiciel. Cela vous permet de vous connecter au serveur Web ESP8266 directement via Wi-Fi sans avoir besoin de vous connecter à un routeur.

Cependant, notez que l’ESP8266 n’est pas connecté à Internet, vous ne pouvez donc pas faire de requêtes HTTP à d’autres services pour publier des données de capteur ou pour obtenir des données d’Internet (comme charger les icônes).

Vous aimerez aussi lire :

Merci d’avoir lu.