Préparez-vous à découvrir comment fabriquer votre propre caméra thermique en utilisant un capteur AMG8833, un écran LCD et un serveur ESP8266. Non seulement vous pourrez voir le monde sous un angle totalement différent, mais vous pourrez aussi partager ces images incroyables sur votre serveur. Alors, êtes-vous prêts à transformer votre vision du monde ? C’est parti !🎥
#include <Adafruit_GFX.h> // include Adafruit graphics library
#include <Adafruit_ST7735.h> // include Adafruit ST7735 TFT library
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#define SSID “NOM_DE_MON_WIFI”
#define PASSWORD “MotDePasse”
ESP8266WebServer server(80);
html += “<h1>Thermal Imaging</h1>”;
html += “<div><a href=’https://retroetgeek.com’ target=’_blank’>Made by Retroetgeek.com</a> </div>”;
html += “}”;
html += “var timer = setInterval(chargerImage, 200);”; // Initialiser l’intervalle
void setup() {
tft.print(” Retroetgeek.com”);
void loop() {
float max_temp=-999;
for (int j = 0; j < IMAGE_W; j++) {
colorIndex = (uint8_t)constrain((int16_t)colorIndex, (int16_t)0, (int16_t)255);
// Serial.println(camColors[colorIndex]);
En matériel pour le capteur thermique il nous faut :
– 1 ESP8266 ou autre esp
– 1 capteur thermique AMG8833
– 1 écran lcd 128 x 160 (optionnel )
Pour les branchements de l’amg8833
On va devoir se référer aux i2c et spi de la carte que l’on a ici ( voir schéma )
Le pin D1 pour le SDA du capteur thermique.
Le pin D2 POUR LE SCL du capteur aussi.
Pour alimenter le capteur on peut soit le brancher a du 5v sur le VIN soit en 3.3V sur le 3V
Et on oublie pas le GND à la masse.
Et pour l’écran qui est optionnel .
Le pin D3 sur le pin CS
Le pin D4 connecté sur le RST
Le pin D5 connecté au SCL de l’écran.
Le pin D7 au SDA toujours de l’écran.
Et le pin D8 au pin DC.
L’alimenter en 3 ou 5V sur le Vcc et toujours la masse au Gnd.
Si vous n’avez pas encore effectué cette étape dans votre logiciel Arduino, suivez ces instructions : allez dans “Préférences”, puis “Gestionnaire de cartes supplémentaires” et ajoutez l’URL suivante : http://arduino.esp8266.com/stable/package_esp8266com_index.json
Ajouter la carte dans outils, type de carte, gestionnaire de carte et ajouter esp8266
Lorsque vous téléversez votre programme, assurez-vous de sélectionner la carte correcte pour un transfert de code réussi.
Maintenant, entrons dans la partie de programmation du microcontrôleur ESP8266 !
Voici ce que j’ai prévu :
- Établir une connexion à un réseau Wi-Fi.
- Récupérer les données du capteur thermique AMG8833.
- Remplit l’écran LCD.
- Générer la page avec les données thermique et en faire une sorte de webcam
Pour réaliser ces tâches, nous utilisons plusieurs bibliothèques indispensables dans notre programme :
- Adafruit AMG88xx de Adafruit pour gérer le capteur thermique.
- Adafruit ST7735 de Adafruit qui correspond a mon écran lcd, vous allez devoir trouver la librairie de votre écran si il est différent.
- Pour les autres librairies nécessaires, elles sont incluses lorsque vous ajoutez le package ESP8266. Si par hasard vous ne les trouvez pas, une recherche sur google il devrait vous permettre de les localiser. 😄
Passons au code de la caméra thermique, voici un exemple d’utilisation
Appelons les différentes librairies pour i2c avec Wire et le capteur thermique AMG8833
Puis si vous avez le même écran lcd ( sachant que c’est optionnel ) les librairies adafruit.
Ensuite les librairies pour le wifi de l’esp …
Avec SSID on y entre le nom de son wifi et dans PASSWORD le mot de passe.
On crée le serveur avec l’esp pour qu’il réponde à nos demandes avec ESP8266WebServer.
Puis si vous possédez toujours un écran on doit définir les pin pour pouvoir lui afficher quelque chose avec les différents define. Attention le câblage est diffèrent suivant votre ESP et votre écran lcd , donc à vous de voir la documentation.
Ensuite on va associer la variable tft avec l’écran et la librairie ST7735.
Puis la variable amg a la librairie Adafruit_AMG88xx
On affecte une variable pixels en float avec AMG88xx_PIXEL_ARRAY_SIZE
Puis on affecte IMAGE_W et IMAGE_H avec leur taille respective ( capteur 8×8 ).
Je définit une valeur minimale pour le mapping des températures ainsi qu’une valeur maximale avec MINTEMP et MAXTEMP, mais je vais modifier les valeurs plus tard dans le programme.
Puis le tableau camColors qui lui va contenir un tableau de couleur.
C’est lui qui va me permettre d’avoir a l’image des couleurs allant du violet pour le plus froid au rouge pour le plus chaud.
Je crée une variable String appelée htmlTable qui contiendra l’image html de la camera thermique.
J’ai ensuite un convertisseur de couleur nommé convertColor qui transforme la couleur du tableau en couleur rgb, pour être interprété en html.
Pour gerer l’affichage de notre image thermique je vais avoir besoin d’une fonction , ici c’est handleRoot qui contient le code html et javascript.
Dans cette page on a une function qui va tous les intervale d’un temps donnée, appeler la page image de notre serveur esp et l’afficher.
Puis la fonction handleImage qui elle va gérer “l’image” générée.
Partie setup, j’active le serial avec le classique Serial.begin puis on essaye d’activer le capteur thermique avec !amg.begin et je boucle tant que le capteur ne répond pas.
Ensuite on est sur une partie qui gère l’écran, on lui fait un init avec tft.initR pour lui appliquer un fond noir et on appelle l’écran ST7735.
On initialise après notre wifi et on boucle tant que l’on est pas connecté.
Je donne un nom a mon esp pour l’identifier plus rapidement avec Wifi.hostname.
J’affiche l’IP sur le serial ainsi que sur l’écran si on en a un.
Puis on définit les url surs lesquelles l’esp va répondre avec server.on et on va appeler 2 fonctions différentes. La fonction handleRoot pour l’url de base et handleImage pour l’url /image qui nous sert à récupérer “l’image”.
Puis on démarre le serveur avec server.begin.
Dans la boucle je lance la récupération des valeurs du capteurs avec amg.readPixels(pixels) , les valeurs vont se retrouver dans le tableau de données pixels.
J’ai la taille de mes carrés de l’affichage écran lcd avec squareSize puis, je met des valeurs min_temp et max_temp super haute pour trouver ensuite le minimum et le maximum dans les relevés du capteur (tableau pixels ).
J’ai crée une boucle for pour récupérer le min et max du relevé de température actuel.
Ensuite petit calcul de delta entre la température maximale et minimale.
Si la température max-min est inférieure à 10 alors je vais rajouter le delta de la moitié de la température pour avoir un écart de 10 degré entre le max et le minimum.
Sinon je minimum et le maximum deviennent la référence pour le mapping de couleur que l’on va faire ensuite.
Occupons nous du remplissage de l’écran tft avec une boucle de parcours for.
On récupère la tempC ( température ) du pixel ou on se trouve.
X et Y sont ensuite définis pour la position du carré a dessiner sur l’écran.
On va définir la couleur du carré avec un map de la température avec la map de la température du pixel sur lequel on on est avec comme mappeur MINTEMP et MAXTEMP.
On transforme le colorIndex pour récupérer une valeur
Et ensuite on va dessiner le “rectangle” avec tft.fillRect , des positions x et y, une taille de carré et la couleur qui va ressortir avec son index du tableau camColors.
Je me positionne ensuite en bas de l’écran pour écrire la température minimale et maximale relevée.
Passons sur la partie html, la génération du tableau qui va crée l’image thermique.
Je boucle de 0 à IMAGE_H et de 0 à IMAGE_W pour boucler sur toutes les valeurs de relevés de température.
On récupère les valeurs de pixels que l’on affecte dans tempC.
On est encore sur le système de récupération de couleur par rapport au mapping que l’on a vu dans la partie écran lcd.
Mais la ici la couleur récupérée on va la transformer en couleur rgb pour être interprétée en html avec le fonction convertColor; les valeurs de retour retrouveront dans r,g,b.
On rempli htmlTable avec un td du tableau avec la couleur dans background-color, ainsi que la valeur de température dans le td.
On termine avec un affichage de température min et max en html
Puis un server.handleClient pour que tout tourne bien pour l’esp.
Et voici le code : Télécharger Code caméra thermique AMG8833
Retrouve le matériel que j’ai utilisé pour la vidéo en bas de page
N’hésitez pas à poser vos questions sur les réseaux sociaux de la chaîne instagram , twitter , facebook ,youtube , discord; si vous ne comprenez pas certaines parties du tutoriel n’hésitez pas , me dire ce que vous aimeriez que je crée pour en faire des vidéos tutoriel et à partager les projets que vous aimeriez créer etc…
Comme toujours allez sur la page de C’est quoi Retro et Geek pour connaître tout ce que je recherche à faire sur la chaîne.
Merci les RetroGeeker et RetroGeekeuse