Administration web de données mesurées par le BME280 connecté à un ESP8266 sur MicroPython sur Rapsberry pi.
Orginal code author : https://randomnerdtutorials.com/micropython-mqtt-esp32-esp8266/.
Le projet est basé sur un Rapsberri pi 4 avec Php, MariaDB, PhpmyAdmin, apache2... Pour faire fonctionner le système de manière locale il vous faudra simplement:
- Wi-fi AcessPoint
- ESP8266
- BME280
- Serveur ou Raspberry Pi
- Thony (IDE) / MobaXterm(optionel)
- Python
- Node-red
- LAMP server
- Git
Une fois le serveur mis en place, téléchargez le code source en téléchargeant ce repository ainsi que le package node-red. Téléchargez le firmware micropython.
Après l'installation de Git: git clone https://github.com/Laurent-Andrieu/BME280-ESP8266/
pour cloner le repo.
Vous pouvez modifier le code comme bon vous semble.
Vous devez impérativement modifier les fichiers boot.py:
- SSID: ssid Wi-Fi
- PASS: clé wpa2
- mqtt_broker: adresse ipv4
Ainsi que le fichier main.py
- mqtt_broker: adresse_ipv4
éventuellement les topics dans lesquels vous souhaitez écrite ansi que les données à envoyer
La compilation permet d'économiser la mémoire RAM, le code sera alors retenu dans la mémoire flash allant jusqu'a 1Mb selon les modèles.
Une fois terminé, il faut le compiler à l'aide de mpy-cross:python -m mpy_cross "/Laurent-Andrieu/BME280-ESP8266/BME280.py"
.
Faites ça pour tous les fichiers excepté boot.py
.
'Téléversez' le firmware précedement téléchargé: Deploying the firmware.
Une fois connecté en UART au REPL du module ESP8266, faites: import webrepl_setup
. Suivez les instructions du help()
afin de mettre un mot de passe WebREPL et d'établir la première connexion Wi-fi.
Puis démarrez le WebREPL, changez l'adresse avec celle du module. À présent vous pouvez vous y connecter et lui envoyer les fichiers boot.py, main.mpy, BME8200.mpy, umqttsimple.mpy.
Le BME280 à la particularité de pouvoir communiquer en SPI ou en I²C. La communication se fera en I²C. Pour celà, il faut brancher les Pins de manière suivante:
- Pin D0 -> RST : permet le réveil du mode deep-sleep (D0 = ALARM0).
- Pin D1 -> SCL : Signal d'horloge.
- Pin D2 -> SDA : Bus de données.
- 3.3V -> VCC,CSB : Alimentation et Mode I²C.
- GND -> GND, SDO: Alimentation et 8ème bit d'adresse (0x76).
Le programme étant géré par le firmware µPython, il va chercher à lire premièrement le fichier nommé explictement boot.py
.
Le module boot connecte l'ESP8266 en Wi-Fi puis au broker MQTT du réseau local sans chiffrement ni identifiants. Il envoie les informations du module(mémoire, version, nom, id, configuration IP..).
Le module est importé par le module boot.py et appelé à la fin de son execution. Les variables et modules importés depuis le fichier boot.py sont éffacés à la fin de son execution. On rappelle alors les modules nécessaires.
Il permet de se connecter en Wi-Fi et au broker MQTT puis d'y envoyer les données sur la température, la pression atmosphérique et l'humidité demandés au BME280. Il passe alors en mode deep-sleep pendant 5 minutes et reprend son cycle en redémarrant.
Une fois tout celà terminé, débranchez la connection de l'alarme (Pin D0) puis redémarrez le module avec le bouton RST, rebranchez l'alarme ou bien débranchez l'alimentation puis rebranchez la à nouveau. Vous pourrez à tout moment re-upload un nouveau code de la même façon, sinon connectez vous en UART, appyuez sur RST puis à l'aide de l'IDE Thony, envoyer un ou plusieurs 'break' avec 'Ctrl + F2'.
À partir de là vous pourrez réactiver le webREPL et remodifier le code.
Une fois téléchargé depuis le repo, décompréssez le: tar -zxvf bme280-esp8266-0.0.1-npm.tgz
à la racine de votre dossier Node-Red (~/.node-red/).
Une fois la base de donnée installée, importez la base 'capteur'.
Le programme présent consomme au total 14.12mA/h sous 5v. Si vous désirez changer le code et le temps en mode Deep-sleep, prévoyez de remesurer la consommation.
- Déterminer les différentes quantités de courant consommées et leur durée.
- Déterminer le nombre de cycle / heure.
- Multiplier le nombre de cycle/heure par le temps de consommation.
- Diviser ce produit par 1 heure sur même base de temps.
- Multiplier la valeur de courant par ce résultat.
- Recommencer pour chaque valeur de courant différente
- Faire la somme.
[]:20mA/4s toute les 5 mins. Soit 12 fois/heure.
12x4 = 48s/h <=> 48s/1h = 48/3600 = 0.013h
20mAx0.013h = 0.26mA/h
[]:82mA/17s //
12x17 = 204s/1h = 204/3600 = 0.056h
82mAx0.056h = 4.64mA/h
[Deep-sleep]:9.92mA/5min //
12x5 = 60min/h; 60min - (17s+4s) = 55.8min/h
55.8min/60min = 0.93h
9.92mAx0.93h = 9.22mA/h.
Total:14.12mA/h.