Dans ce projet, nous allons créer un blindage PCB indicateur d’état pour l’ESP32 comprenant deux rangées de LED néopixels RVB adressables, un capteur BME280 et un bouton-poussoir. Nous allons programmer la carte pour afficher un serveur Web avec les lectures du capteur BME280 et afficher la plage de température et d’humidité sur les LED (comme deux barres de progression). Nous allons également configurer un Wi-Fi Manager—les voyants indiquent s’il est déjà connecté à un réseau Wi-Fi ou s’il est en mode point d’accès.

Le Wi-Fi Manager vous permet de connecter les cartes ESP32 à différents points d’accès (réseaux) sans avoir à coder en dur les informations d’identification du réseau (SSID et mot de passe) et à télécharger un nouveau code sur la carte. Votre ESP rejoindra automatiquement le dernier réseau enregistré ou configurera un point d’accès que vous pourrez utiliser pour configurer les informations d’identification du réseau.
En suivant ce projet, vous en apprendrez plus sur les concepts suivants :
- Contrôler individuellement deux « bandes » de LED RVB adressables avec l’ESP32 ;
- Créez un serveur Web avec l’ESP32 à l’aide des événements envoyés par le serveur (SSE);
- Gérer les champs de saisie HTML pour enregistrer les données sur votre carte (SSID et mot de passe) ;
- Enregistrez les variables de manière permanente à l’aide de fichiers sur le système de fichiers ;
- Créez votre propre gestionnaire Wi-Fi à l’aide de la bibliothèque ESPAsyncWebServer ;
- Basculer entre le mode station et le mode point d’accès ;
- Et beaucoup plus…
Pour mieux comprendre le fonctionnement de ce projet, nous vous conseillons de jeter un œil aux tutoriels suivants :
Regardez le didacticiel vidéo

Ressources
Vous pouvez trouver toutes les ressources nécessaires pour construire ce projet dans les liens ci-dessous (ou vous pouvez visiter le Page du projet GitHub):
Aperçu du projet
Avant de passer directement au projet, examinons les fonctionnalités de PCB Shield (matériel et logiciel).
Caractéristiques du blindage PCB
Le bouclier est conçu avec des broches d’en-tête pour empiler la carte ESP32. Pour cette raison, si vous souhaitez construire et utiliser notre PCB, vous devez vous procurer la même carte de développement ESP32. Nous utilisons le Kit de développement ESP32 DOIT V1 carte (le modèle avec 36 GPIO).

Si vous souhaitez suivre ce projet et avoir un modèle ESP32 différent, vous pouvez assembler le circuit sur une planche à pain, ou vous pouvez modifier la disposition et le câblage du PCB pour qu’ils correspondent au brochage de votre carte ESP32. Tout au long de ce projet, nous fournissons tous les fichiers nécessaires si vous avez besoin de modifier le PCB.
De plus, vous pouvez suivre ce projet en assemblant le circuit sur une planche à pain si vous ne souhaitez pas construire un blindage PCB.
Le bouclier est composé de :
- Capteur de température, d’humidité et de pression BME280 ;
- Bouton;
- Deux rangées de 5 LED RVB adressables (WS2812B).

Si vous répliquez ce projet sur une planche à pain, au lieu de LED RVB adressables WS2812B individuelles, vous pouvez utiliser bandes LED RVB adressables.
Affectation des broches du blindage PCB
Le tableau suivant montre l’affectation des broches pour chaque composant sur le blindage :
| Composant | Affectation des broches ESP32 |
| BME280 | GPIO 21 (SDA), GPIO 22 (SCL) |
| Bouton | GPIO 18 |
| LED RVB adressables (rangée 1) | GPIO 27 |
| LED RVB adressables (rangée 2) | GPIO 32 |
Fonctionnalités du logiciel PCB
Vous pouvez programmer le bouclier de plusieurs manières différentes. Nous allons programmer l’ESP32 pour qu’il ait les fonctionnalités suivantes :
Serveur Web
Serveur Web pour afficher les lectures du capteur BME280 : température, humidité et pression. Il affiche également l’heure de la dernière mise à jour. Les lectures sont mises à jour automatiquement toutes les 30 secondes à l’aide d’événements envoyés par le serveur. En savoir plus sur les événements envoyés par le serveur dans ce projet.

Interface visuelle (DEL RVB adressables)
Les LED RVB sur le bouclier se comportent comme une barre de progression indiquant la plage de valeurs de température et d’humidité. Plus la température est élevée, plus le nombre de LED allumées est identique pour les relevés d’humidité. Les valeurs de température sont affichées dans une couleur orange/jaune et l’humidité est affichée dans une couleur bleu sarcelle.

Gestionnaire Wi-Fi
Le Wi-Fi Manager vous permet de connecter la carte ESP32 à différents points d’accès (réseaux) sans avoir à coder en dur les informations d’identification du réseau (SSID et mot de passe) et de télécharger un nouveau code sur votre carte. Votre ESP rejoindra automatiquement le dernier réseau enregistré ou configurera un point d’accès que vous pourrez utiliser pour configurer les informations d’identification du réseau.

Lorsque la carte est en mode Access Point (Wi-Fi Manager), toutes les LED sont allumées en rouge. Lorsque la carte est en mode station (serveur Web avec relevés de capteur), toutes les LED sont temporairement allumées en vert/bleu sarcelle avant d’afficher la plage de température et d’humidité.

Tester le circuit sur une planche à pain
Avant de concevoir et de construire le PCB, il est important de tester le circuit sur une planche à pain. Si vous ne voulez pas faire de PCB, vous pouvez toujours suivre ce projet en assemblant le circuit sur une planche à pain.
Pièces requises
Pour assembler le circuit sur une planche à pain, vous avez besoin des pièces suivantes (les pièces pour le PCB sont présentées dans une section ultérieure) :
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 !
Après avoir rassemblé toutes les pièces, assemblez le circuit en suivant le schéma de principe suivant :

*Nous avons fini par ne pas utiliser le bouton-poussoir pour ce projet particulier, il n’est donc pas nécessaire de l’inclure dans votre circuit.
Conception du PCB
Pour concevoir le circuit et le PCB, nous avons utilisé EasyEDA, un logiciel basé sur un navigateur, pour concevoir des PCB. Si vous souhaitez personnaliser votre PCB, vous devez télécharger les fichiers suivants :
Je ne suis pas un expert en conception de PCB. Cependant, la conception de PCB simples comme celui que nous utilisons dans ce didacticiel est simple. La conception du circuit fonctionne comme dans n’importe quel autre outil logiciel de circuit, vous placez certains composants et vous les câblez ensemble. Ensuite, vous affectez chaque composant à une empreinte.

Après avoir assigné les pièces, placez chaque composant. Lorsque vous êtes satisfait de la disposition, effectuez toutes les connexions et routez votre PCB.

Enregistrez votre projet et exportez les fichiers Gerber.
Remarque : vous pouvez récupérer les fichiers du projet et les modifier pour personnaliser le bouclier selon vos propres besoins.
Commander les PCB chez PCBWay
Ce projet est parrainé par PCBWay. PCBWay est un service complet de fabrication de cartes de circuits imprimés.

Transformez vos circuits de planche à pain de bricolage en circuits imprimés professionnels – obtenez 10 cartes pour environ 5 $ + expédition (qui variera selon votre pays).
Une fois que vous avez vos fichiers Gerber, vous pouvez commander le PCB. Suivez les étapes suivantes.
1. Téléchargez les fichiers Gerber – cliquez ici pour télécharger le fichier .zip
2. Accédez au site Web PCBWay et ouvrez la page PCB Instant Quote.

3. PCBWay peut récupérer tous les détails du PCB et les remplit automatiquement pour vous. Utilisez le « PCB de commande rapide (paramètres de remplissage automatique) ».

4. Appuyez sur le bouton « + Ajouter un fichier Gerber » pour télécharger les fichiers Gerber fournis.

Et c’est tout. Vous pouvez également utiliser OnlineGerberViewer pour vérifier si votre PCB est comme il se doit.

Si vous n’êtes pas pressé, vous pouvez utiliser la méthode d’expédition China Post pour réduire considérablement vos coûts. À notre avis, nous pensons qu’ils surestiment le délai d’expédition de China Post.

Vous pouvez augmenter la quantité de votre commande de PCB et changer la couleur du masque de soudure. Comme d’habitude, nous avons commandé la couleur bleue.

Une fois que vous êtes prêt, vous pouvez commander les PCB en cliquant sur « Enregistrer dans le panier » et terminer votre commande.
Déballage des PCB
Après environ une semaine d’utilisation de la méthode d’expédition DHL, j’ai reçu les PCB à mon bureau.

Comme d’habitude, tout est bien emballé et les PCB sont vraiment de haute qualité. Les lettres sur la sérigraphie sont vraiment bien imprimées et faciles à lire.
Nous sommes vraiment satisfaits du service PCBWay. Voici quelques autres projets que nous avons construits à l’aide du service PCBWay :
Souder les composants
Dans notre PCB, nous avons utilisé des LED SMD, des résistances SMD et des condensateurs SMD. Ceux-ci peuvent être un peu difficiles à souder, mais le PCB est bien meilleur. Si vous n’avez jamais soudé de SMD auparavant, nous vous recommandons de regarder quelques vidéos pour savoir comment procéder. Vous pouvez également vous procurer un kit de soudure SMD DIY pour vous entraîner un peu.
Voici une liste de tous les composants nécessaires pour assembler le PCB :

Voici les outils de soudure que nous avons utilisés :

Commencez par souder les composants SMD. Ensuite, soudez les broches de l’en-tête. Et enfin, soudez les autres composants ou utilisez des broches d’en-tête si vous ne souhaitez pas connecter les composants de manière permanente.
Voici à quoi ressemble le Shield ESP32 après avoir assemblé toutes les pièces.

La carte ESP32 doit s’empiler parfaitement sur les broches d’en-tête de l’autre côté du PCB.

Programmation du bouclier
Comme mentionné précédemment, nous allons programmer la carte pour qu’elle ait les fonctionnalités suivantes :
- Serveur Web pour afficher les lectures du capteur BME280 (mode station) ;
- Interface visuelle (LED RVB adressables) : les LED RVB sur le bouclier se comportent comme deux barres de progression indiquant la plage de valeurs de température et d’humidité ;
- Gestionnaire Wi-Fi : l’ESP32 rejoindra automatiquement le dernier réseau enregistré ou configurera un point d’accès que vous pourrez utiliser pour configurer les informations d’identification du réseau.
Le schéma suivant résume le fonctionnement du projet.

- Lorsque l’ESP démarre pour la première fois, il essaie de lire les fichiers ssid.txt, pass.txt et ip.txt (1) ;
- Si les fichiers sont vides (2) (la première fois que vous lancez la carte, les fichiers sont vides), votre carte est définie comme point d’accès et toutes les LED s’allument en rouge (3) ;
- En utilisant n’importe quel appareil compatible Wi-Fi avec un navigateur, vous pouvez vous connecter au point d’accès nouvellement créé (nom par défaut ESP-WIFI-MANAGER) ;
- Après avoir établi une connexion avec l’ESP-WIFI-MANAGER, vous pouvez vous rendre à l’adresse IP par défaut 192.168.4.1 pour ouvrir une page Web qui vous permet de configurer votre SSID et votre mot de passe (4) ;
- Le SSID, le mot de passe et l’adresse IP soumis sur le formulaire sont enregistrés dans les fichiers correspondants : ssid.txt, pass.txt et ip.txt (5) ;
- Après cela, la carte ESP redémarre (6) ;
- Cette fois, après le redémarrage, les fichiers ne sont pas vides, donc l’ESP va essayer de se connecter au réseau Wi-Fi en mode station en utilisant les paramètres que vous avez insérés sur le formulaire (7) ;
- S’il établit une connexion, le processus est terminé avec succès (8) (toutes les LED sont temporairement allumées en vert/bleu sarcelle) ;
- Vous pouvez accéder à la page Web principale qui affiche les lectures des capteurs (9) et les LED s’allument en fonction de la plage de température et d’humidité (10). Sinon, il définira le point d’accès (3) et vous pourrez accéder à l’adresse IP par défaut (192.168.4.1) pour ajouter une autre combinaison SSID/mot de passe.
Conditions préalables
Nous allons programmer la carte ESP32 à l’aide de l’IDE Arduino. Assurez-vous donc que le module complémentaire de carte ESP32 est installé.
Si vous souhaitez programmer l’ESP32/ESP8266 en utilisant VS Code + PlatformIO, suivez le tutoriel suivant :
Installation de bibliothèques (Arduino IDE)
Pour ce projet, vous devez installer toutes ces bibliothèques dans votre IDE Arduino.
Vous pouvez installer les quatre premières bibliothèques à l’aide du gestionnaire de bibliothèque Arduino. Accédez à Esquisse > Inclure la bibliothèque > Gérer les bibliothèques et recherchez le nom de la bibliothèque.
Les bibliothèques ESPAsyncWebServer et AsynTCP ne peuvent pas être installées via le gestionnaire de bibliothèque Arduino, vous devez donc copier les fichiers de bibliothèque dans le dossier Bibliothèques d’installation Arduino. Alternativement, dans votre IDE Arduino, vous pouvez aller à Sketch> Inclure la bibliothèque> Ajouter une bibliothèque .zip et sélectionner les bibliothèques que vous venez de télécharger.
Installation de bibliothèques (VS Code + PlatformIO)
Si vous programmez l’ESP32 à l’aide de PlatformIO, vous devez inclure les bibliothèques dans le fichier platformio.ini comme ceci :
[env:esp32doit-devkit-v1]
platform = espressif32
board = esp32doit-devkit-v1
framework = arduino
monitor_speed = 115200
lib_deps = adafruit/Adafruit NeoPixel @ ^1.7.0
adafruit/Adafruit Unified Sensor @ ^1.1.4
adafruit/Adafruit BME280 Library @ ^2.1.2
arduino-libraries/Arduino_JSON @ 0.1.0
Téléchargeur de système de fichiers
Avant de continuer, vous devez avoir installé le plugin ESP32 Uploader dans votre IDE Arduino. Suivez le tutoriel suivant avant de continuer :
Si vous utilisez VS Code avec PlatformIO, suivez le didacticiel suivant pour apprendre à télécharger des fichiers sur le système de fichiers :
Organiser vos fichiers
Pour garder le projet organisé et le rendre plus facile à comprendre, nous allons créer cinq fichiers différents pour construire le serveur Web :
- Esquisse Arduino qui gère le serveur Web ;
- index.html : pour définir le contenu de la page web en mode station pour afficher les relevés des capteurs ;
- style.css : pour styliser la page Web ;
- script.js : pour programmer le comportement de la page Web : gérer les réponses du serveur Web, les événements, mettre à jour l’heure, etc. ;
- wifimanager.html : pour définir le contenu de la page web pour afficher le Wi-Fi Manager lorsque l’ESP32 est en mode point d’accès.

Vous devez enregistrer les fichiers HTML, CSS et JavaScript dans un dossier appelé data dans le dossier d’esquisse Arduino, comme indiqué dans le diagramme précédent. Nous allons télécharger ces fichiers sur le système de fichiers ESP32 (SPIFFS).
Vous pouvez télécharger tous les fichiers du projet :
Création des fichiers HTML
Pour ce projet, vous avez besoin de deux fichiers HTML. Un pour construire la page principale qui affiche les lectures des capteurs (index.html) et un autre pour construire la page Wi-Fi Manager (wifimanager.html).
index.html
Copiez ce qui suit dans le fichier index.html.
<!DOCTYPE html>
<html>
<head>
<title>ESP IOT DASHBOARD</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/png" href="https://www.raspberryme.com/esp32-status-indicator-sensor-pcb/favicon.png">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="topnav">
<h1>ESP WEB SERVER SENSOR READINGS</h1>
</div>
<div class="content">
<div class="card-grid">
<div class="card">
<p class="card-title">BME280 Sensor Readings</p>
<p>
<table>
<tr>
<th>READING</th>
<th>VALUE</th>
</tr>
<tr>
<td>Temperature</td>
<td><span id="temp"></span> °C</td>
</tr>
<tr>
<td>Humidity</td>
<td><span id="hum"></span> %</td>
</tr>
<tr>
<td>Pressure</td>
<td><span id="pres"></span> hPa</td>
</tr>
</table>
</p>
<p class="update-time">Last update: <span id="update-time"></span></p>
</div>
</div>
</div>
<script src="script.js"></script>
</body>
</html>
Ce fichier crée un tableau pour afficher les lectures des capteurs. Voici le paragraphe qui affiche le tableau :
<p>
<table>
<tr>
<th>READING</th>
<th>VALUE</th>
</tr>
<tr>
<td>Temperature</td>
<td><span id="temp"></span> °C</td>
</tr>
<tr>
<td>Humidity</td>
<td><span id="hum"></span> %</td>
</tr>
<tr>
<td>Pressure</td>
<td><span id="pres"></span> hPa</td>
</tr>
</table>
</p>
Pour créer un tableau en HTML, commencez par les balises
. Cela enferme l’ensemble du tableau. Pour créer une ligne, utilisez les balises
. Le tableau est défini avec une série de lignes. Utilisez la paire
pour délimiter chaque ligne de données. L’en-tête du tableau est défini à l’aide des balises
, et chaque cellule du tableau est définie à l’aide des balises
.
Notez que les cellules pour afficher les lectures des capteurs ont des balises avec des identifiants spécifiques pour les manipuler ultérieurement en utilisant JavaScript pour insérer les lectures mises à jour. Par exemple, la cellule pour la valeur de température a l’id temp.
<td><span id="temp"></span> °C</td>
Enfin, il y a un paragraphe pour afficher la dernière fois que les lectures ont été mises à jour :
<p class="update-time">Last update: <span id="update-time"></span></p>
Il y a une balise avec l’identifiant de mise à jour. Cela sera utilisé plus tard pour insérer la date et l’heure à l’aide de JavaScript.
wifimanager.html
Copiez ce qui suit dans le fichier wifimanager.html.
<!DOCTYPE html>
<html>
<head>
<title>ESP Wi-Fi Manager</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div class="topnav">
<h1>ESP Wi-Fi Manager</h1>
</div>
<div class="content">
<div class="card-grid">
<div class="card">
<form action="/" method="POST">
<p>
<label for="ssid">SSID</label>
<input type="text" id ="ssid" name="ssid"><br>
<label for="pass">Password</label>
<input type="text" id ="pass" name="pass"><br>
<label for="ip">IP Address</label>
<input type="text" id ="ip" name="ip" value="192.168.1.200">
<input type ="submit" value ="Submit">
</p>
</form>
</div>
</div>
</div>
<script src="script.js"></script>
</body>
</html>
Ce fichier crée un formulaire HTML pour insérer le SSID et le mot de passe du réseau que vous souhaitez que l’ESP32 rejoigne. Vous pouvez également insérer l’adresse IP que vous souhaitez attribuer à votre ESP32. L’image suivante montre la page Web Wi-Fi Manager : trois champs de saisie et un bouton d’envoi.

Nous voulons envoyer les valeurs soumises sur les champs de saisie au serveur lorsque nous cliquons sur le bouton Soumettre.
Voici le formulaire HTML avec les trois champs de saisie :
<form action="/" method="POST">
<p>
<label for="ssid">SSID</label>
<input type="text" id ="ssid" name="ssid"><br>
<label for="pass">Password</label>
<input type="text" id ="pass" name="pass"><br>
<label for="ip">IP Address</label>
<input type="text" id ="ip" name="ip" value="192.168.1.200">
<input type ="submit" value ="Submit">
</p>
</form>
C’est le champ d’entrée pour le SSID :
<label for="ssid">SSID</label>
<input type="text" id ="ssid" name="ssid"><br>
Le champ de saisie du mot de passe :
<label for="pass">Password</label>
<input type="text" id ="pass" name="pass"><br>
Le formulaire HTML contient différents éléments de formulaire. Tous les éléments du formulaire sont inclus dans cette balise