J’ai développé un tas de fonctionnalités autours de ces petits micro-contrôleurs (voir plus bas).
Tous les programmes communs sont à la racien du projet sur Github : https://github.com/FredThx/nodemcu_iot.git
Il n’y a qu’un seul fichier qui change d’un projet à l’autre : params.lua . Dans le cas présent, il faut prendre celui dans le répertoire ./cuisine .
C’est ce fichier que nous allons adapter à votre installation.
Pour dégoguer :
LOGGER = false
Si true : un fichier log.txt est créé et toutes les print y sont écrits.
Le hard :
LED_PIN = 3
BUZZER_PIN = 1
gpio.mode(LED_PIN, gpio.OUTPUT)
gpio.write(LED_PIN, gpio.LOW)
Pour les capteurs de température :
-- Capteur température DSx20
DS1820_PIN = 4
sensors = {
[string.char(40,255,74,144,81,20,0,250)] = "frigo",
[string.char(40,255,143,78,80,20,0,181)] = "congelateur",
[string.char(40,255,50,226,80,20,0,173)] = "cuisine",
[string.char(40,255,202,79,80,20,0,1)] = "test"
}
Là vous voyez les adresses de mes capteurs : aucune chance que vous ayez les mêmes. Pour l’instant laissez les : le programme affichera les adresses des capteurs détectés.
Pour les modules à charger, se limiter au strict minimum :
modules={
"ds1820_reader"
}
Pour d’autres projets, on peut ajouter les modules suivants :
433_switch | Pour piloter des prises électriques en 433 Mhz |
BMP_reader | Pour lire la pression et la température d’un capteur BMP180 |
DTH_reader | Pour lire un capteur Température-humidité DTH11 ou DTH22 |
i2c_display | Pour piloter un écran oled en i2c |
i2c_geste | Pour lire le capteur grove geste (détection de gestes de la main) |
i2c_lcd | Pour piloter un écran type LCD1602 |
mcp3008 | Pour lire les entrées analogiques d’un convertisseur MCP3008 (ou 3004) |
Paramètres WIFI :
SSID = {"WIFI_THOME1",'WIFI_THOME2'}
PASSWORD = "xxxx"
HOST = "NODE-CUISINE"
wifi_time_retry = 10 -- minutes
(maintenant vous connaissez mon code WIFI!!!, vous n’avez plus qu’a trouver l’adresse!)
Pour le SSID, soit vous n’avez qu’un réseau, dans ce cas SSID = “MON_WIFI” est suffisant. Si comme moi, vous avez plusieurs points d’accés avec des SSID distinct, utiliser une table pour lister les SSID. Si tous les points d’accés ont le même mot de passe, PASSWORD = “xxxx” est suffisant, sinon PASSWORD = {“code1″,”code2”}.
Le microcontrôleur se connectera au premier réseau WIFI qui répond.
Paramètres MQTT :
mqtt_host = "192.168.10.155"
mqtt_port = 1883
mqtt_user = "aaaa"
mqtt_pass = "xxx"
mqtt_client_name = HOST
mqtt_base_topic = "T-HOME/CUISINE/"
Adapter a votre serveur MQTT (IP, PORT, user).
Adapter à votre arborescence de messages MQTT.
Messages MQTT sortants
mesure_period = 10*60 * 1000
mqtt_out_topics = {}
mesure_periode (ici 10 minutes) défini la période d’envoie des données de température.
Chaque donnée à envoyer est décrite par :
mqtt_out_topics[mqtt_base_topic.."REFRIGERATEUR/temperature"]={
message = function()
t = readDSSensors("frigo")
return t
end,
qos = 0, retain = 0, callback = nil}
Adaptez à vos topics MQTT (pour moi, ça donne “T-HOME/CUISINE/REFRIGERATEUR/temperature” pour la température du réfrigérateur).
Le nom “frigo” doit être celui de la table des capteurs DS18b20 (sensors).
Messages MQTT entrants
mqtt_in_topics = {}
mqtt_in_topics[mqtt_base_topic.."LED"]={
["ON"]=function()
gpio.write(LED_PIN, gpio.HIGH)
end,
["OFF"]=function()
gpio.write(LED_PIN, gpio.LOW)
end}
mqtt_in_topics[mqtt_base_topic.."BUZZER"]={
["ON"]=function()
gpio.write(BUZZER_PIN, gpio.HIGH)
end,
["OFF"]=function()
gpio.write(BUZZER_PIN, gpio.LOW)
end}
Ici, on décrit que si on envoie le message MQTT avec comme topic “/T-HOME/CUISINE/LED” et comme valeur “ON”, la led va s’allumer. Idem pour OFF et pour le buzzer.
Adaptez comme vous voulez.
A noter qu’à chaque message sortant, il va être créé automatiquement une action sur le message sortant “topic_” qui va envoyer le message sortant avec sa valeur mesurée si la valeur du message est “SENDIT”.
Exemple :
Nous avons un message sortant “T_HOME/CUISINE/REFRIGERATEUR/temperature” dont la valeur est la température du réfrigérateur.
Si on envoie le message MQTT “T_HOME/CUISINE/REFRIGERATEUR/temperature_” avec la valeur “SENDIT”, le micro-contrôleur va envoyer un message “T_HOME/CUISINE/REFRIGERATEUR/temperature” sans attendre les 10 minutes.