Table des matières:
- Étape 1: Création d'un environnement de construction
- Étape 2: Obtenez le code source, configurez et créez
- Étape 3: Connecter les composants matériels
- Étape 4: Flashez et exécutez
- Étape 5: Interagir
- Étape 6: Détails de la mise en œuvre
Vidéo: Bande LED WiFi + Capteur de température avec ESP8266 : 6 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
Ce tutoriel décrit les étapes pour configurer un ESP8266 et le faire parler à la fois à un capteur de température et à une bande LED, tout en pouvant également recevoir des entrées et envoyer des sorties avec MQTT via WiFi. Le projet a été réalisé pour un cours suivi à Cal Poly San Luis Obispo à l'automne 2016 - CPE 439: Systèmes embarqués en temps réel. L'objectif global était de démontrer la facilité de créer une "chose" connectée à Internet avec du matériel bon marché.
Fournitures/équipement requis:
- Carte de développement NodeMCU ESP8266
- Bande LED WS2812B
- MAX31820 Capteur de température
- Planche à pain
- Résistance de 4,7K ohms
- résistance de 220 ohms
- fils de liaison
- câble micro usb
- PC (ou VM) exécutant Linux (par exemple, Ubuntu)
Hypothèses/Prérequis:
- expérience avec l'utilisation d'outils en ligne de commande et l'installation de packages sur une distribution basée sur Debian
- compréhension de base de la syntaxe Makefile
- fils de connexion
Étape 1: Création d'un environnement de construction
Pour construire le projet, vous aurez besoin d'esp-open-sdk installé sur votre machine. Suivez le lien et lisez les instructions de construction. En bref, vous ferez des commandes sudo apt-get pour installer des dépendances, un clone git --recursive pour cloner/télécharger esp-open-sdk, et enfin une commande make pour compiler esp-open-sdk.
Regarde moi
Étape 2: Obtenez le code source, configurez et créez
Maintenant que esp-open-sdk est construit, clonez le référentiel du projet.
git clone
Accédez au répertoire du projet, créez un dossier.local et copiez les exemples de paramètres.
cd esp-rtos-tests
mkdir -p.local cp settings.example.mk.local/settings.mk
Ouvrez maintenant.local/settings.mk avec n'importe quel éditeur de texte et modifiez les paramètres suivants:
- OPENSDK_ROOT: le chemin absolu de l'emplacement de esp-open-sdk que vous avez construit à l'étape 1
- WIFI_SSID: Le SSID de votre réseau WiFi
- WIFI_PASS: Le mot de passe de votre réseau WiFi
- PIXEL_COUNT: Le nombre de pixels sur votre bande LED WS2812B
Remarque: Étant donné que ce projet utilise SPI pour piloter les LED et utilise le NodeMCU 3.3v pour les alimenter, vous ne pourrez probablement pas piloter plus de ~ 60 LED.
Remarque: les autres paramètres n'ont pas besoin d'être modifiés, mais peuvent l'être si vous le souhaitez. Il est recommandé de garder l'ordre des priorités des tâches. Plus le numéro de priorité est bas, plus la priorité de la tâche est basse.
Maintenant, construisez le projet:
make -C exemples/cpe439
Si tout est configuré correctement, la compilation devrait commencer. A la fin vous devriez voir:
'firmware/cpe439.bin' créé avec succès
Regarde moi
Étape 3: Connecter les composants matériels
Maintenant que le code est compilé, il est temps de connecter nos périphériques.
Tout d'abord, collez le NodeMCU sur la planche à pain, puis utilisez des cavaliers pour effectuer les connexions comme indiqué sur le schéma.
Quelques choses à savoir:
- Important: la ligne de données WS2812B n'est pas bidirectionnelle. Si vous regardez attentivement les marques sur le côté LED de la bande, vous devriez voir de petites flèches pointant dans une direction. La sortie de D7 du NodeMCU doit se diriger vers le WS2812B de la même manière que le marqueur de direction, que vous pouvez voir sur le diagramme si vous regardez de près.
- Selon le type de connecteurs fournis avec votre WS2812B, vous devrez peut-être apporter quelques modifications pour les connecter en toute sécurité à la maquette. Vous pouvez également utiliser des pinces crocodiles pour les connecter à des câbles de démarrage compatibles avec la maquette.
- Les broches du MAX31820 ont un pas plus petit et sont plus fines que les cavaliers standard de 0,1"/2,54 mm, ce qui les rend difficiles à connecter. Une solution consiste à utiliser des câbles de raccordement femelle à mâle, à retirer le boîtier en plastique du côté femelle, puis utilisez une pince pour sertir les extrémités du cavalier femelle autour des plus petites broches du MAX31820.
Vérifiez les connexions avant de mettre le NodeMCU sous tension afin de ne pas endommager les composants.
Étape 4: Flashez et exécutez
Clignotant
Avec tout le matériel connecté, branchez votre NodeMCU et flashez avec la commande suivante:
make flash -C exemples/cpe439 ESPPORT=/dev/ttyUSB0
/dev/ttyUSB0 est le numéro de série sous lequel le NodeMCU doit apparaître. Si d'autres périphériques série sont connectés, ils peuvent apparaître sous la forme /dev/ttyUSB1 ou un autre numéro. Pour vérifier, vous pouvez exécuter cette commande deux fois, une fois avec NodeMCU débranché et une fois avec celui-ci branché, et comparer la différence:
ls /dev/ttyUSB*
Un autre problème que vous pouvez rencontrer est de ne pas avoir la permission d'accéder à l'appareil. Deux façons de résoudre ce problème sont:
-
Ajoutez votre utilisateur au groupe d'appel:
sudo adduser $ (whoami) dialout
- chmod ou chown l'appareil:
sudo chmod 666 /dev/ttyUSB0 sudo chown $(whoami):$(whoami) /dev/ttyUSB0La première méthode est préférée car il s'agit d'une solution permanente.
Fonctionnement
Après avoir exécuté la commande flash avec succès, l'appareil démarrera immédiatement et commencera à exécuter le code compilé. À tout moment après avoir clignoté, vous pouvez exécuter la commande suivante pour regarder la sortie série:
python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 /dev/ttyUSB0 500000 --raw -q
Pour gagner du temps, vous pouvez ajouter ceci à votre fichier ~/.bashrc:
alias nodemcu='python3 -m serial.tools.miniterm --eol CRLF --exit-char 003 /dev/ttyUSB0 500000 --raw -q'
..qui vous permet de taper simplement "nodemcu" comme alias pour cette commande.
Si tout est configuré correctement, votre bande LED devrait s'allumer en vert, et en série, vous devriez voir une connexion Wi-Fi, obtenir une adresse IP, se connecter à MQTT et des messages indiquant que les données de température sont en cours d'expulsion.
connecté avec MyWiFiSSID, canal 1dhcp client start…wifi_task: status = 1wifi_task: status = 1ip:192.168.2.23, mask:255.255.255.0, gw:192.168.2.1ws2812_spi_init okRequest temp OKwifi_task: status = 5xQueueReceive Started_25.43xQuett_Ta:: (Re)connexion au serveur MQTT test.mosquitto.org …xQueueReceive +25.50xQueueSend ok doneSend MQTT connect … MQTTv311donexQueueReceive +25.56 xQueueSend ok
Étape 5: Interagir
En supposant que votre appareil se soit connecté au WiFi et au courtier MQTT avec succès, vous pourrez envoyer et recevoir des données du NodeMCU avec MQTT. Si vous ne l'avez pas déjà fait, installez le package clients mosquitto:
sudo apt-get install mosquitto-clients
Vous devriez maintenant pouvoir utiliser les programmes mosquitto_pub et mosquitto_sub depuis votre shell.
Recevoir des mises à jour de température
Pour recevoir des données de température, nous utiliserons la commande mosquitto_sub pour nous abonner au sujet sur lequel le NodeMCU publie.
mosquitto_sub -h test.mosquitto.org -t /cpe439/temp
Vous devriez voir les données de température (en degrés Celsius) arriver dans le terminal.
+25.87+25.93+25.68…
Réglage à distance de la couleur de la bande LED
Un format de message simple est utilisé pour envoyer des valeurs RVB au NodeMCU via MQTT. Le format de la commande ressemble à ceci:
r:RRRg:GGGb:BBB~
Où RRR, GGG, BBB correspondent aux valeurs RVB (0-255) de la couleur que vous souhaitez envoyer. Pour envoyer notre commande, nous utiliserons la commande mosquitto_pub. Voici quelques exemples:
mosquitto_pub -h test.mosquitto.org -t /cpe439/rgb -m 'r:255g:0b:0~' # redmosquitto_pub -h test.mosquitto.org -t /cpe439/rgb -m 'r:0g:255b: 0~' # greenmosquitto_pub -h test.mosquitto.org -t /cpe439/rgb -m 'r:0g:0b:255~' # bleu
Si vous voulez faire preuve de créativité, trouvez un sélecteur de couleurs en ligne comme celui-ci et modifiez la commande avec la valeur RVB de votre choix.
Fais attention
Les sujets de ce projet sont définis sur /cpe439/rgb et /cpe439/temp sur un courtier MQTT public, ce qui signifie que rien n'empêche quelqu'un d'autre de publier ou de s'abonner aux mêmes sujets que vous. Pour essayer des choses, utiliser un courtier public est bien, mais pour des projets plus sérieux, vous voudrez vous connecter à un courtier avec une protection par mot de passe ou exécuter votre propre courtier sur le serveur.
Étape 6: Détails de la mise en œuvre
Un fil
L'ESP8266 n'a qu'un seul cœur, donc le blocage de tâches telles que l'attente de 750 ms pour que le capteur de température effectue une mesure de température entraînerait normalement un dysfonctionnement du WiFi, voire un crash. Dans le paradigme FreeRTOS, vous appelez vTaskDelay() pour gérer ces longues attentes, mais il existe également de nombreuses attentes plus courtes requises entre les lectures et les écritures qui sont plus courtes que la coche du système FreeRTOS et ne peuvent donc pas être évitées avec vTaskDelay(). Pour les contourner également, le pilote onewire de ce projet a été écrit pour s'exécuter à partir d'une machine d'état pilotée par la minuterie matérielle de l'ESP8266, qui peut déclencher des événements aussi bas que toutes les 10 microsecondes, ce qui se trouve être le plus court temps requis entre les opérations de lecture/écriture onewire. La plupart des autres implémentations utilisent un appel bloquant à delay_us() ou similaire pour gérer cela, mais si vous effectuez constamment des mises à jour de température, tous ces retards commencent à s'accumuler, ce qui entraîne une application moins réactive. La source de cette portion de code se trouve dans le dossier extras/onewire.
WS2812B
L'ESP8266 n'a pas d'options matérielles standard pour PWM suffisamment rapide pour piloter des bandes LED à 800 KHz. Pour contourner ce problème, ce projet utilise la broche SPI MOSI pour piloter les LED. En ajustant la fréquence d'horloge de SPI et en modifiant la charge utile SPI, vous pouvez obtenir un contrôle assez fiable de chaque LED individuelle. Cette méthode n'est pas sans défauts - pour l'une, les LED doivent être alimentées avec une source de 5 V et un décaleur de niveau doit être ajouté à la sortie de la broche SPI. Mais 3.3V fonctionne. Deuxièmement, il y a des problèmes qui se produisent en raison d'un timing imparfait à l'aide de la méthode SPI. Et troisièmement, vous ne pouvez plus utiliser SPI pour autre chose. Des informations supplémentaires sur cette méthode peuvent être trouvées ici, et la source de cette partie de code se trouve dans le dossier extras/ws2812.
Une méthode plus fiable pour piloter des bandes LED consiste à utiliser des i2s. Cependant, cette méthode a beaucoup de hacks spécifiques aux puces, donc SPI semblait être un meilleur choix comme exercice d'apprentissage.
Conseillé:
Interfaçage Arduino avec capteur à ultrasons et capteur de température sans contact : 8 étapes
Interfaçage Arduino avec capteur à ultrasons et capteur de température sans contact : De nos jours, les fabricants et les développeurs préfèrent Arduino pour le développement rapide du prototypage de projets. Arduino est une plate-forme électronique open source basée sur du matériel et des logiciels faciles à utiliser. Arduino a une très bonne communauté d'utilisateurs. Dans ce projet
Lecture de la température à l'aide du capteur de température LM35 avec Arduino Uno : 4 étapes
Lecture de la température à l'aide du capteur de température LM35 avec Arduino Uno : Salut les gars dans cette instructables, nous allons apprendre à utiliser LM35 avec Arduino. Lm35 est un capteur de température qui peut lire des valeurs de température de -55°c à 150°C. C'est un appareil à 3 bornes qui fournit une tension analogique proportionnelle à la température. Haut
Point d'accès (AP) NodeMCU ESP8266 pour serveur Web avec capteur de température DT11 et température et humidité d'impression dans le navigateur : 5 étapes
Point d'accès (AP) NodeMCU ESP8266 pour serveur Web avec capteur de température DT11 et température et humidité d'impression dans le navigateur : salut les gars dans la plupart des projets que nous utilisons ESP8266 et dans la plupart des projets, nous utilisons ESP8266 comme serveur Web afin que les données soient accessibles sur n'importe quel appareil via wifi en accédant au serveur Web hébergé par ESP8266, mais le seul problème est que nous avons besoin d'un routeur fonctionnel pour
Comment utiliser le capteur de température DHT11 avec Arduino et la température d'impression Chaleur et humidité : 5 étapes
Comment utiliser le capteur de température DHT11 avec Arduino et la température d'impression Chaleur et humidité : Le capteur DHT11 est utilisé pour mesurer la température et l'humidité. Ce sont des amateurs d'électronique très populaires. Le capteur d'humidité et de température DHT11 permet d'ajouter très facilement des données d'humidité et de température à vos projets électroniques de bricolage. C'est par
Bande LED activée par capteur de mouvement avec minuterie : 6 étapes (avec photos)
Bande LED activée par capteur de mouvement avec minuterie : Salut à tous ! Je suis vraiment heureux d'écrire un autre instructable en ce moment. Ce projet a vu le jour lorsque j'ai été contacté par un collègue instructable-er (?!) (David @dducic) il y a plusieurs mois, me demandant de l'aide à la conception. Voici donc la spécification d'origine : &q