Rangé les dossiers bolo-thingspeak et bolo, commencé à rédiger le readme de bolo-thingspeak
@@ -1,11 +1,20 @@
|
||||
# Reflashage d'un SonOff Basic avec un firmware Lua et les outils pour pouvoir le programmer à distance
|
||||
# Mesure de température et d'humidité
|
||||
|
||||
|
||||
Petit projet de reflashage d'un SonOff Basic avec un firmware Lua et les outils pour pouvoir le programmer à distance sans devoir le brancher sur le port série.
|
||||
|
||||

|
||||
|
||||
|
||||
ATTENTION, il faut mettre à jour toutes les URL des images !
|
||||
|
||||
|
||||
|
||||
|
||||
Petit projet pour mesurer la température et l'humidité avec un capteur HTU21D et l'afficher sur ThingSpeak. Comme par exemple pour monitorer la température et l'humidité d'un local au cours du temps.
|
||||
|
||||

|
||||
|
||||
Exemple de sortie sur ThingSpeak
|
||||
|
||||
|
||||
# ATTENTION, ce projet débute et la *base* de ce Readme est *emprunté* à un autre projet, il reste donc à le modifier !
|
||||
zf200101.1112
|
||||
@@ -13,21 +22,22 @@ zf200101.1112
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
Constellation de sondes de mesures
|
||||
|
||||

|
||||

|
||||
|
||||
Montage du capteur HTU21D directement sur le NodeMCU, chose à ne PAS faire, car la température du NodeMCU fausse complètement les mesures d'humidité !
|
||||
|
||||

|
||||
|
||||
Exemple de sortie sur Grafana
|
||||

|
||||
|
||||
|
||||
<br><br>
|
||||
On peut voir ici, avec ce projet assez complet, toutes les possibilités offertes de la programmation d'un NodeMCU en LUA, en mode événementiel. <br>
|
||||
Choses qui ne seraient pas possible si on l'avait fait en C++ (mode Arduino), comme par exemple:
|
||||
|
||||
* configuration du WIFI via une page WEB servie par le NodeMCU
|
||||
* serveur WEB *Active Server Pages ZYX*, permet de faire des pages HTML dynamiques avec du code LUA in line. Les pages HTML sont sauvées dans le système de fichiers de la FLASH du NodeMCU
|
||||
* serveur WEB pour l'affichage de l'humidité et de la température
|
||||
* serveur WEB pour l'IDE, modification du code source en remote directement depuis une page WEB, pas besoin d'IDE
|
||||
@@ -37,17 +47,17 @@ Choses qui ne seraient pas possible si on l'avait fait en C++ (mode Arduino), co
|
||||
Toutes les fonctions sont bien séparées dans des scripts, cela *complexifie* le projet mais cela facilite la portabilité entre les projets et aussi sa mise au point.
|
||||
|
||||
|
||||
## Astuces de mesures
|
||||
## Principes de mesures
|
||||
|
||||
On utilise un tout petit capteur, le **HTU21D**, d'humidité et de température I2C.
|
||||
|
||||

|
||||

|
||||
|
||||
Il est vraiment très bon marché (1.5$), simple à utiliser et super précis.
|
||||
|
||||
https://www.aliexpress.com/item/32480177429.html
|
||||
|
||||

|
||||

|
||||
|
||||
Incroyable la résolution de la mesure ! On peut observer ici l'arrivée le matin au salon, l'ouverture de la porte de la salle de bain après avoir pris la douche et l'ouverture de la fenêtre. Tout ceci dans la résolution de 1 à 3% de l'humidité relative
|
||||
|
||||
@@ -60,24 +70,90 @@ Datasheet:
|
||||
https://cdn.sparkfun.com/assets/6/a/8/e/f/525778d4757b7f50398b4567.pdf
|
||||
|
||||
|
||||
### Schéma
|
||||
|
||||
|
||||
zzz
|
||||
|
||||
|
||||
|
||||
## Le cloud ThingSpeak
|
||||
|
||||
bla bla bla
|
||||
|
||||
|
||||
Les conditions du gratuit
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Parties principales du code
|
||||
Tout se passe dans ces 4x fichiers !
|
||||
|
||||
### Les secrets du projet
|
||||
|
||||
ThingSpeak
|
||||
|
||||
token !
|
||||
|
||||
|
||||
chip id
|
||||
|
||||
|
||||
|
||||
|
||||
### La mesure de température et d'humidité
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### L'envoi des mesures dans le Cloud ThingSpeak
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### L'horloge des mesures
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
Il faut *flasher* le NodeMCU avec ce firmware:
|
||||
|
||||
https://github.com/zuzu59/NodeMCU_Lua/blob/master/Firmware/nodemcu-master-18-modules-2019-12-17-20-28-32-float.bin
|
||||
https://github.com/zuzu59/NodeMCU_Lua/blob/master/Firmware/nodemcu-master-19-modules-2019-12-31-16-40-12-float.bin
|
||||
|
||||
Avec ces modules:
|
||||
```
|
||||
file gpio http i2c net node rtctime sntp tmr uart wifi
|
||||
adc ads1115 bit enduser_setup file gpio http i2c mqtt net node ow rtctime sjson sntp tmr uart wifi ws2812
|
||||
```
|
||||
|
||||
## Utilisation
|
||||
|
||||
### Visualisation des données dans Grafana
|
||||
|
||||
Exemple de sortie dans Grafana
|
||||
### Configuration du WIFI du NodeMCU_Lua
|
||||
|
||||
https://snapshot.raintank.io/dashboard/snapshot/LUqdTJYLNuC6WatmJoN21yQSEQ0UJ0oy
|
||||
xxx
|
||||
|
||||
|
||||
|
||||
### Configuration de ThingSpeak
|
||||
|
||||
token !
|
||||
|
||||
|
||||
|
||||
### Visualisation des données dans ThingSpeak
|
||||
|
||||
Exemple de sortie dans ThingSpeak
|
||||
|
||||
zzz
|
||||
|
||||
|
||||
### Distribution des rôles de NodeMCU
|
||||
@@ -89,13 +165,13 @@ secrets_projet.lua
|
||||
```
|
||||
|
||||
|
||||
### Exportation des données en CSV depuis Grafana
|
||||
### Exportation des données en CSV depuis ThingSpeak
|
||||
|
||||
Quand on a trouvé la mesure qui nous convient sur Grafana, on peut l'exporter en CSV pour en faire un rapport dans un tableur par exemple.
|
||||
zzz, on peut l'exporter xxx en CSV pour en faire un rapport dans un tableur par exemple.
|
||||
|
||||

|
||||

|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
### Affichage des températures/humidité en local sur le NodeMCU
|
||||
@@ -135,7 +211,7 @@ telnet -rN 192.168.0.xxx
|
||||
|
||||
|
||||
|
||||
zf191221.0825
|
||||
zf200116.1902
|
||||
|
||||
|
||||
pense bête:
|
||||
|
||||
@@ -5,21 +5,19 @@
|
||||
-- par 'wifi_init.lua' au moment du boot
|
||||
|
||||
function secrets_project()
|
||||
print("\n secrets_project.lua zf20011.1818 \n")
|
||||
print("\n secrets_project.lua zf20015.1657 \n")
|
||||
|
||||
--zLED=4 -- NodeMCU
|
||||
zLED=7 -- SonOff
|
||||
zLED=4 -- NodeMCU
|
||||
--zLED=7 -- SonOff
|
||||
zRELAY=6 -- SonOff
|
||||
|
||||
influxdb_url="http://xxx:8086/write?db=yyy&u=uuu&p=ppp"
|
||||
print("influxdb_url: "..influxdb_url)
|
||||
|
||||
influxdb_table="tutu"
|
||||
print("influxdb_table: "..influxdb_table)
|
||||
thingspeak_url="http://api.thingspeak.com/update?api_key=xxx"
|
||||
|
||||
node_id = "generic"
|
||||
if node.chipid() == 6734851 then node_id = "sonoff_1" end
|
||||
if node.chipid() == 6734851 then node_id = "sonoff_1" zLED=7 end
|
||||
if node.chipid() == 16110605 then node_id = "sonoff_2" zLED=7 end
|
||||
if node.chipid() == 3049119 then node_id = "adc_1" end
|
||||
if node.chipid() == 3048906 then node_id = "bolo_1" end
|
||||
print("node_id: "..node_id)
|
||||
end
|
||||
secrets_project()
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
# Quelques commandes remote (luatool) à envoyer avec le plugin Atom-IDE-terminal de l'éditeur Atom
|
||||
# zf200113.0734
|
||||
# zf200116.1833
|
||||
|
||||
Todo à faire pour ce projet !
|
||||
|
||||
|
||||
- terminer la page .html affichage de la température et de l'humidité
|
||||
- trouver un moyen pour configurer la lED dans initz.lua sans le rendre dangereux en cas de problème (éviter le reflashing en cas de reboot loop)
|
||||
|
||||
- lancement ou arrêt du WEBIDE via la home page
|
||||
- flip/flop du relais depuis la page api_sonoff
|
||||
- arrêter de demander de connecter le WIFI automatiquement en mode station juste après le boot dans la config wifiinit (automatic connect)
|
||||
- ajouter le contrôle flip/flop du btn sur RELAY
|
||||
- arrêter de demander de connecter le WIFI automatiquement en mode station juste après le boot dans la config wifiinit (automatic connect)
|
||||
- if verbose print partout dans *.lua
|
||||
- le wifi setup ne fonctionne toujours pas quand il y a déjà un ap de connecté (problème du reboot quand adrs ip ok)!
|
||||
|
||||
v- ajouter fonction restart dans z_index.html (ATTENTION avec un argument restart, pas besoin de faire une page restart.html !)
|
||||
v- ajouter l'affichage du node_id dans z_index.html
|
||||
v- ajouter le web_srv2 dans boot au lieu de boot2
|
||||
@@ -63,6 +66,7 @@ for k,v in pairs(_G) do print(k,v) end
|
||||
# commandes lua pour ce projet
|
||||
export zIP="192.168.0.182"
|
||||
export zIP="192.168.4.1"
|
||||
export zIP="192.168.4.4"
|
||||
export zport="23"
|
||||
./luatool.py --ip $zIP:$zport -f z_index.html
|
||||
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
-- Petit script pour faire office de crontab pour les
|
||||
--mesures
|
||||
print("\n 0_cron.lua zf191225.1803 \n")
|
||||
|
||||
cron1=tmr.create()
|
||||
cron1:alarm(300*1000, tmr.ALARM_AUTO, function()
|
||||
send_data()
|
||||
end)
|
||||
@@ -1,34 +0,0 @@
|
||||
-- Petit script pour envoyer les valeurs sur un serveur WEB (InfluxDB)
|
||||
-- via un http GET
|
||||
print("\n 0_send_data.lua zf191228.2310 \n")
|
||||
|
||||
function zpost(zarg)
|
||||
if verbose then print("zarg: "..zarg) end
|
||||
http.post(influxdb_url, 'Content-Type: application/x-www-form-urlencoded\r\n', zarg, function(code, data)
|
||||
-- print("toto")
|
||||
if (code < 0) then
|
||||
print("HTTP request failed")
|
||||
print("zuzu", code, data)
|
||||
else
|
||||
if verbose then print(code, data) end
|
||||
end
|
||||
-- print("tutu")
|
||||
end)
|
||||
end
|
||||
|
||||
function send_data()
|
||||
if verbose then print("send_data: ") end
|
||||
ztemp = readTemp() zhumd = readHumi()
|
||||
if verbose then print("Temperature: "..ztemp.." °C") end
|
||||
if verbose then print("Humidity: "..zhumd.." %") end
|
||||
|
||||
--zpost("bolo_ruru,capteur=th"..node_id.." humidity="..zhumd)
|
||||
--zpost("bolo_ruru,capteur=th"..node_id.." temperature="..ztemp)
|
||||
|
||||
-- print("titi")
|
||||
end
|
||||
|
||||
--[[
|
||||
verbose=true
|
||||
send_data()
|
||||
]]
|
||||
@@ -1,46 +0,0 @@
|
||||
-- Scripts à charger après le boot pour démarrer son projet
|
||||
|
||||
|
||||
ATTENTION: n'existe plus depuis le 190108.1747 !
|
||||
|
||||
|
||||
print("\n boot2.lua zf200106.2331 \n")
|
||||
|
||||
function boot2()
|
||||
print("boot2 starting...")
|
||||
boot2_tmr=nil boot2_tmr1=nil boot2_go=nil
|
||||
print(node.heap()) collectgarbage() print(node.heap())
|
||||
|
||||
--f= "0_htu21d.lua" if file.exists(f) then dofile(f) end
|
||||
--f= "0_send_data.lua" if file.exists(f) then dofile(f) end
|
||||
--f= "0_cron.lua" if file.exists(f) then dofile(f) end
|
||||
--f= "web_ide2.lua" if file.exists(f) then dofile(f) end
|
||||
f=nil
|
||||
|
||||
verbose = true
|
||||
|
||||
boot2=nil
|
||||
end
|
||||
|
||||
boot2_tmr1=tmr.create()
|
||||
boot2_tmr1:alarm(1*1000, tmr.ALARM_AUTO , function()
|
||||
if boot2_go then
|
||||
boot2_tmr1:unregister() boot2()
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
--[[
|
||||
tmr.create():alarm(1*1000, tmr.ALARM_AUTO, function()
|
||||
print(node.heap())
|
||||
end)
|
||||
]]
|
||||
|
||||
--[[
|
||||
for k,v in pairs(_G) do print(k,v) end
|
||||
]]
|
||||
@@ -1,35 +0,0 @@
|
||||
-- programme pour faire clignoter x fois une LED avec un rapport on/off en mS
|
||||
|
||||
function flash_led_xfois()
|
||||
print("\n flash_led_xfois.lua zf191221.1454 \n")
|
||||
|
||||
zTm_On_LED = 50 zTm_Off_LED = 100 nbfois = 0
|
||||
zLED=4 gpio.write(zLED, gpio.HIGH) gpio.mode(zLED, gpio.OUTPUT)
|
||||
ztmr_Flash_LED = tmr.create()
|
||||
|
||||
function blink_LED ()
|
||||
if nbfois >= xfois then
|
||||
-- print(nbfois)
|
||||
nbfois = 0
|
||||
else
|
||||
if gpio.read(zLED)==gpio.HIGH then
|
||||
gpio.write(zLED, gpio.LOW)
|
||||
-- tmr.alarm(ztmr_Flash_LED, zTm_Off_LED, tmr.ALARM_SINGLE, blink_LED)
|
||||
ztmr_Flash_LED:alarm(zTm_Off_LED, tmr.ALARM_SINGLE, blink_LED)
|
||||
else
|
||||
gpio.write(zLED, gpio.HIGH)
|
||||
nbfois = nbfois+1
|
||||
-- tmr.alarm(ztmr_Flash_LED, zTm_On_LED, tmr.ALARM_SINGLE, blink_LED)
|
||||
ztmr_Flash_LED:alarm(zTm_On_LED, tmr.ALARM_SINGLE, blink_LED)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
flash_led_xfois()
|
||||
|
||||
--[[
|
||||
xfois =2
|
||||
blink_LED ()
|
||||
]]
|
||||
|
After Width: | Height: | Size: 966 KiB |
BIN
Mesures/humidity/bolo-thingspeak/img/HTU21D.jpg
Normal file
|
After Width: | Height: | Size: 81 KiB |
BIN
Mesures/humidity/bolo-thingspeak/img/HTU21D_deporte.jpg
Normal file
|
After Width: | Height: | Size: 793 KiB |
BIN
Mesures/humidity/bolo-thingspeak/img/banc_test_HTU21D.jpg
Normal file
|
After Width: | Height: | Size: 662 KiB |
BIN
Mesures/humidity/bolo-thingspeak/img/graph_thingspeak1.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
Mesures/humidity/bolo-thingspeak/img/htu21d_on_NodeMCU.jpg
Normal file
|
After Width: | Height: | Size: 713 KiB |
|
After Width: | Height: | Size: 969 KiB |
|
After Width: | Height: | Size: 329 KiB |
BIN
Mesures/humidity/bolo-thingspeak/schema/pcb.png
Normal file
|
After Width: | Height: | Size: 161 KiB |
BIN
Mesures/humidity/bolo-thingspeak/schema/schéma.png
Normal file
|
After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 966 KiB |
BIN
Mesures/humidity/bolo/img/Constellation_sondes_mesures2.jpg
Normal file
|
After Width: | Height: | Size: 966 KiB |
BIN
Mesures/humidity/bolo/img/HTU21D_deporte.jpg
Normal file
|
After Width: | Height: | Size: 793 KiB |
|
Before Width: | Height: | Size: 912 KiB |
BIN
Mesures/humidity/bolo/img/banc_test_HTU21D.jpg
Normal file
|
After Width: | Height: | Size: 662 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
BIN
Mesures/humidity/bolo/img/station_de_telemetrie_autonome.jpg
Normal file
|
After Width: | Height: | Size: 969 KiB |
BIN
Mesures/humidity/bolo/schema/pcb.png
Normal file
|
After Width: | Height: | Size: 161 KiB |
@@ -1,14 +1,16 @@
|
||||
# Quelques commandes remote (luatool) à envoyer avec le plugin Atom-IDE-terminal de l'éditeur Atom
|
||||
# zf200113.0734
|
||||
# zf200116.1833
|
||||
|
||||
Todo à faire pour ce projet !
|
||||
|
||||
- trouver un moyen pour configurer la lED dans initz.lua sans le rendre dangereux en cas de problème (éviter le reflashing en cas de reboot loop)
|
||||
- lancement ou arrêt du WEBIDE via la home page
|
||||
- flip/flop du relais depuis la page api_sonoff
|
||||
- arrêter de demander de connecter le WIFI automatiquement en mode station juste après le boot dans la config wifiinit (automatic connect)
|
||||
- arrêter de demander de connecter le WIFI automatiquement en mode station juste après le boot dans la config wifiinit (automatic connect)
|
||||
- ajouter le contrôle flip/flop du btn sur RELAY
|
||||
- if verbose print partout dans *.lua
|
||||
- le wifi setup ne fonctionne toujours pas quand il y a déjà un ap de connecté (problème du reboot quand adrs ip ok)!
|
||||
|
||||
v- ajouter fonction restart dans z_index.html (ATTENTION avec un argument restart, pas besoin de faire une page restart.html !)
|
||||
v- ajouter l'affichage du node_id dans z_index.html
|
||||
v- ajouter le web_srv2 dans boot au lieu de boot2
|
||||
|
||||