Archives par étiquette : esp8266

Tasmota : la domotique facile

Peut-être ne connaissez vous pas Tasmota, un firmware domotique qui permet de re-flasher certains modules, vous savez ceux qui discutent avec d’obscures serveurs chinois, ceux qui demandent à associer une application Android par marque.

Avec Tasmota, terminé : vous unifiez tous vos modules avec un seul et même firmware, vous les faites pointer vers votre broker MQTT et vous gérez vous même vos besoins en domotique.

Voici un test avec un interrupteur mural Sonoff T1 1CH. Commençons par le démonter :

Sur la droite, le connecteur J3 avec GND, TXD, RXD, VCC. Soudez y des fils, branchez les en croisant Txd / RxD sur un adaptateur USB/TTL et ne reliez pas encore l’adapteur sur son port USB.

Mais ce n’est pas tout. Retournez la platine :

En bas à droite, le dernier plot du connecteur 4 points est GND, la masse. Venez brancher un fil entre ce point et le point TP2:

Maintenez la connexion sur TP2 puis branchez l’adapteur USB : votre module est alors en mode programmation !

Téléchargez tasmota-lite.bin dans sa dernière version depuis le Github Tasmota.

Ouvrez un terminal Linux ou MacOS, passez en admin puis lancez :

esptool.py --port /dev/tty.SLAB_USBtoUART --baud 115200 write_flash -fm dout -fs 1MB 0x00000 tasmota-lite.bin 

Vous adapterez /dev/tty.SLAB_USBtoUART selon le nom de votre interface USB/TTL. Quelques minutes plus tard, un nouveau réseau WiFi va apparaitre, à vous de jouer désormais pour accéder à l’interface de gestion :

 

ESP8266 : Wifi Kit 8 en test

Découverte récente sur Amazon du Wifi Kit 8 produit par Heltec :

Sur cette image, nous lui avons monté une sonde de température DS18B20, histoire de faire travailler la bestiole en charge. Cette sonde transmet ses données toutes les 2 minutes sur notre broker MQTT Mosquitto, via une connexion WiFi.

Ce petit ESP8266 dispose d’un écran LCD mais surtout d’une alimentation pour batterie, avec gestion de charge intégrée :

Un simple batterie LiPo de 1000 mAh et vous voici protégé d’une coupure de courant, c’est simple et pourtant radical. Venez ajouter un chargeur solaire sur la prise micro-USB et vous voici en totale autonomie avec un petit IoT très sympa.

Son brochage reste simple, avec de multiples E/S et une unique entrée analogique :

Le flashage sous ESPeasy est possible, il n’a fonctionné ici qu’avec Esptools depuis Ubuntu : jamais Winchose 10 n’a réussi à le flasher, jamais il n’a trouvé le bon port COM. Amis Linuxiens, la solution reste et restera toujours le libre pour bricoler en paix 😉

Retenez par contre qu’ESPeasy nécessitera d’ajouter cette rule pour valider l’afficheur au boot de l’IoT :

On System#Boot do
gpio,16,1
endon

En effet, sans valider le GPiO 16, point d’Oled, c’est ainsi, un petit bug connu sur ce modèle, facile à contourner comme vous pouvez le voir.

Un bon p’tit ESP8266 donc, pas le moins cher, mais sympa si vous avez besoin d’afficher 2 ou 3 lignes d’informations, capable d’être autonome en prime, pas de raison de se priver donc.

ESPeasy : afficher les valeurs de vos capteurs

Avec ESPEasy installé sur un ESP8266, vous pouvez brancher de multiples capteurs et transmettre leurs valeurs en MQTT sur votre broker Mosquitto, en http sur votre domotique, etc.

Seulement il y a encore plus simple pour juste visualiser les valeurs obtenues, juste avec un http://IP_ESP8266/tempe.esp par exemple.  IP_ESP8266 est l’adresse IP utilisée par votre ESP sur votre réseau local, des fois que…

ESP01 avec platine relai + sonde température DS18B20

Prenons comme exemple notre petit ESP01 muni d’une sonde DHT11, configurée comme suit :

Retenez le Name de la sonde, ici temperature et les Values reçues via cette sonde, à savoir Temperature et Humidity. Nous allons donc lire les valeurs de cette sonde via un fichier injecté sur l’ESP. Commencez par créer un fichier tempe.esp comme suit :

<html>
<head>
</head>
<body>
Temperature : [temperature#Temperature] C
<br>
Humidite : [temperature#Humidity] %
<br>
</body>
</html>

Nous retrouvons ici le nom de la sonde en minuscules, et les noms des valeurs mesurées avec une lettre majuscule à chaque fois. S vous aviez une sonde appelée ds18b20 par exemple, il vous suffirait d’utiliser ce nom générique, tout simplement.

Chargeons le fichier tempe.esp sur http://IP_ESP8266/upload et rendons-nous sur :

http://IP_ESP8266/tempe.esp

pour visualiser les mesures :

Temperature : 26.00 C
Humidite : 43.00 %

Ce type d’affichage simplifié peut bien entendu évoluer vers plus compliqué, ceci n’est qu’un exemple de débutant 😉

ESP-01 : platine relai et sonde DS18B20

Dans le monde fabuleux des IoT, nous avons déjà parlé des ESP8266, et nous parlerons ici de l’ESP01, une version avec 1 Mo de mémoire flash et très peu de GPiO utilisables : 0 pour la platine relai, 2 pour la sonde de température que nous allons lui ajouter.

Voyons un peu ce que cela donne visuellement :

A gauche, l’ESP01, programmé avec ESP Easy, enfiché sur sa platine relai, et collé sur le relai la sonde DS18B20. Sur cette platine DS18B20, de gauche à droite la masse (bleu), le +5Vcc (orange) et le signal (jaune), à relier comme suit sur le côté soudures de la platine relai :

Du coté configuration d’ESP Easy :

Pour contrôler le relai, envoyez par ex http://192.168.1.140/control?cmd=GPIO,0,1 (ici l’ESP à l’IP 192.168.1.140) pour couper le relai, ou http://192.168.1.140/control?cmd=GPIO,0,0 pour l’activer.

A vous de jouer maintenant, vous disposez désormais d’une sonde tout-en-un, parfaitement capable de détecter une température et de faire agir le relai en fonction du résultat, pour un chauffage par exemple.

 

MQTT : découverte

MQTT, vous connaissez ? Non, alors allez faire un saut sur Wikipedia par exemple, il s’agit d’un protocole à destination de ces IoT, l’internet des objets, ou encore les objets connectés, ces petits modules qui vont rapidement envahir notre univers et consommer nos adresses IP pour venir communiquer, qui une température, qui une mesure de l’air, une vitesse du vent, une luminosité, un taux de remplissage d’un container, etc.

Curieux, je me suis intéressé à Mosquitto, un serveur que j’ai installé sur un gros serveur Ubuntu d’Ovh, mais qui fonctionnera tout aussi bien sur Raspberry Pi 3 (cherche Google, cherche…). Ce serveur, s’appelle Broker dans le langage des objets connectés.

MQTT va fonctionner avec des topics, c’est à dire des sujets donnés : par exemple /capteur/exterieur/temperature sera un sujet auquel il sera possible d’accéder si l’un de vos IoT diffuse dessus.

De même, /capteur/+/temperature viendra concerner à la fois /capteur/interieur/temperature que /capteur/exterieur/temperature, mais ne lire pas les trames de /capteur/exterieur/pression par exemple.

Pareil, avec /capteur/exterieur/#, vous lirez TOUS les capteurs extérieurs, mais pas l’intérieur.

Nous avons donc des IoT, un Broker, et des clients. L’IoT se connecte au Broker (mode publish), transmet des informations sur un topic donné, peu importe les informations, tout est possible. Le serveur les reçoit et les diffuse aux clients qui sont abonnés (mode subscribe) au bon topic. L’exemple ci-dessous tiré d’internet illustre le fonctionnement de base :

Vous suivez ? Ajoutons qu’on peut sécuriser les connexions par login/mot de passe, voir même basculer en SSL moyennant la génération de certificats.

Imaginons un exemple concret :

  • un raspberry Pi en broker MQTT
  • un raspberry Pi abonné à différents topics, chargé d’afficher ce qu’il reçoit
  • une sonde de température
  • une sonde de luminosité
  • un sonde de détection de CO2

Chaque sonde publiera un topic en particulier, via le Raspberry Pi installé en broker. Le Raspberry Pi client pourra alors récupérer via un script Python les différentes valeurs et les afficher sur une page html au fur et à mesure de leur arrivée : vous avez un tableau de bord simple, très économique, et pourrez en permanence mesurer ce que bon vous semble.

En sonde, j’ai utilisé avec succès un simple NodeMcu, basé sur un ESP8266, connecté en WiFi à une box quelconque, programmé avec un script Arduino trouvé au hasard sur internet. J’ai également pu m’exercer à diffuser (= publish) des informations via le terminal d’un portable Ubuntu.

En conclusion de ce rapide billet, sachez que MQTT peut tout faire, et plus encore si vous le reliez à LoraWan : il disposerait ainsi d’une connexion sans fil équivalente à un réseau GSM de base, à moindre coût toutefois. Je pense que nous en reparlerons, ce nouveau monde connecté semble très sympa à explorer, surtout avec l’utilisation de petits sondes à coût très faible.

 

Raspberry Pi + H801 : contrôlez vos LEDs RGB

Le petit H801 proposé sur nombre de boutiques asiatiques est un contrôleur de LEDs RGB (Red, Green Blue) qui va soit générer son propre réseau WiFi, soit venir se connecter au WiFi de votre box.

espleds

Pour très peu d’Euros, vous allez ainsi pouvoir briller en société, venir contrôler un ruban à LEDs au moyen de votre smartphone. Intégrant un ESP8266, l’appareil est en outre reprogrammable à volonté, les exemples ne manquent pas sur internet.

Reste maintenant à venir intégrer ce bijou de technologie chinoise à votre domotique, à pouvoir le contrôler de façon un peu plus simple qu’avec l’application de base d’un smartphone Android. En fouillant un peu sur la toile mondiale, je suis tombé sur ce billet qui dégrossit le fonctionnement de la bestiole, mais hélas cela n’a pas fonctionné ici : les codes d’identification de mon module semblaient différents de ceux initialement utilisés.

Ni une, ni deux, direction Wireshark pour venir analyser les trames UDP diffusées par l’application sur ma tablette Android (192.168.1.181 sur mon réseau local) :

wireshark osx

et plus précisément la trame udp émise du port 30978 vers le port 30977 :

wireshark trame

Bon sang, mais c’est bien sur, la trame doit impérativement débuter par fbeb, suivi par 6 codes hexa correspondant à la couleur.

Sur notre Raspberry Pi, installons sendip et tentons d’éteindre les LEDs :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbeb00000000005c59d6000 -v 192.168.1.127

Ici, 192.168.1.127 est l’IP utilisée par notre H801 sur le réseau local WiFi, vous l’adapterez à votre installation propre bien entendu. Pas besoin d’IP source, la seule réception de la bonne trame UDP suffit visiblement à contenter notre H801.

Partant du principe qu’il faut remplacer les 6 codes hexa, voici comme obtenir une LED totalement blanche :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbebffffff00005c59d6000 -v 192.168.1.127

ou rouge :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbebFF000000005c59d6000 -v 192.168.1.127

ou verte :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbeb7AFF0400005c59d6000 -v 192.168.1.127

La recette pour définir la couleur est simple. Partez de ce principe :

sendip -p ipv4 -p udp -us 30978 -ud 30977 -d 0xfbebXXXXXX00005c59d6000 -v 192.168.1.127

ou les XXXXXX (6 fois X) représentent le code couleur hexadécimal que vous allez trouver sur ce site

rgb

Exemple de couleur verte, codée 7AFF04

A vous de jouer désormais, vous allez pouvoir vous amuser sur votre Raspi préféré 😉

Raspberry Pi Zero : nouveau, miniature, mais….

 

Nos ingénieux concepteurs britanniques annoncent un nouveau venu sur le marché des mini-machines : le Raspberry Pi Zero !
raspberrypi zero

Les caractéristiques techniques, avant de détailler plus avant :

  • CPU Broadcom BCM2835, 1GHz ARM11 core (40% plus rapide que le premier Raspberry Pi 1)
  • Ram 512MB LPDDR2
  • slot micro-SD
  • connecteur mini-HDMI, 1080p60
  • Micro-USB pour alimentation et data
  • Port GPIO 40 broches identique aux Raspberry Pi A+/B+/2B
  • un port vidéo (non connecté)
  • Dimensions de seulement 65mm x 30mm x 5mm

Bon, génial, un module tout petit, mais hélas sans aucune connexion réseau : il faudra tout ajouter, que ce soit du WiFi ou de l’ethernet, via le seul et unique port USB disponible. Si vous en voulez plus, il faudra un hub usb, rendant du coup le montage tellement moins compact.

J’avoue une certaine déception vu le prix actuel des puces 2.4 GHz : pourquoi ne pas avoir prévu de connexion réseau, un peu à l’instar des ESP8266 ? Ces derniers, s’ils sont bien équipés en WiFi sont hélas encore un peu à la traine coté firmware : c’était là l’occasion de jouer une carte forte pour le Raspberry Pi Zero, occasion loupée il me semble.

A l’époque des IoT, un Raspberry sans connexion réseau apparait donc comme une aberration, un non sens total pour un objet qui aurait été tellement merveilleux s’il avait pu communiquer vers le monde extérieur.

 

 

ESP8266 ESP12 : map des ports GPIO

Il n’est pas toujours aisé d’associer les ports GPIO physiques d’un ESP12 à la valeur à utiliser en programmation d’un script LuA. Voici le brochage d’un ESP12 :

esp12_pinout

et voici les correspondances que j’ai pu trouver, du moins pour les GPIO utilisables sur ce module :

PORT
PHYSIQUE
GPIO
PORT
SCRIPT LUA
0 3
2 4
4 2
5 1
12 6
13 7
14 5
15 8
16 0


Par exemple, si vous branchez une LED sur le GPIO15 (broche +) et sur la masse (GND), via une résistance de 2k2, vous pouvez utiliser ce script LuA pour la faire clignoter :

gpio.mode(8, gpio.OUTPUT)
gpio.write(8, gpio.LOW)
for i = 1, 4 do
 gpio.write(8, gpio.HIGH)
 tmr.delay(100000)
 gpio.write(8, gpio.LOW)
 tmr.delay(100000)
end

Si vous utilisez la broche GPIO4, dans le script vous remplacerez 8 par 2 :

gpio.mode(2, gpio.OUTPUT)
gpio.write(2, gpio.LOW)
for i = 1, 4 do
 gpio.write(2, gpio.HIGH)
 tmr.delay(100000)
 gpio.write(2, gpio.LOW)
 tmr.delay(100000)
end

Simple non ?

 

 

Raspberry Pi 2 domotique : ESP8266 capteur d’ouverture suite (13)

Le capteur d’ouverture présenté dans le précédent billet prend forme. Le voici désormais totalement intégré dans une boite de dérivation :
esp8266_domotique

La boite de dérivation ira s’encastrer dans une cloison en placo, l’installation étant prévu dans une maison en rénovation. Elle comporte l’alimentation 220 V / 3.3v, les bornes électriques, les dominos pour venir raccorder le capteur d’ouverture reed, et un petit ESP8266 version ESP12 programmé en Lua.

Le point d’accès de la photo va lui permettre de relier tous les capteurs ESP12 ensemble, indépendamment de la box internet utilisée : changez de box, les capteurs seront toujours opérationnels, pas besoin de reprogrammer leur réseau WiFi. Les IP sont affectées par le serveur dhcp de la box, mais on peut aussi envisager des IP fixes (gaffe au changement de box dans ce cas…).

Dans le projet de rénovation, plusieurs capteurs d’ouverture vont être implantés, avec le projet d’en ajouter également un sur la sonnette de la porte d’entrée, de façon à être prévenu en notre absence : email + capture d’écran de la caméra rue, par exemple.

Il va falloir désormais s’occuper de gérer le script en Python3 sur le Raspberry Pi utilisé comme serveur, et là, c’est le plus difficile, même si cela reste vraiment passionnant à développer 😉

 

Raspberry Pi 2 domotique : ESP8266 capteur d’ouverture (12)

Transformons un petit ESP8266 (version ESP12) en capteur d’ouverture de porte. Je passe sur le script init.lua destiné à initialiser la connexion Wifi par exemple, vous en trouverez un exemple sur ce billet.

esp12_3

ESP12

Voici le script que j’ai appelé contactESP2.lua, on se retrouve après pour détailler son fonctionnement :

 

-- on active le GPIO4 en entree
gpio.write(2, gpio.LOW)
gpio.mode(2, gpio.INT, gpio.PULLUP)

-- contact porte ferme par defaut
ouvert = 0
cu = nil
-- 
-- nom = nom du capteur
-- porttcp = port TCP d'émission de trame si détection d'ouverture
-- portudp = port UDP d'écoute des trames de status
-- ip = adresse IP du serveur TCP Raspi Domo en écoute
--
nom = "sonde1"
porttcp = 5665
portudp = 5665
ip = "192.168.1.60"

print(nom .. "/n")
function contact(level) -- on lit le contact du gpio4
 etat = gpio.read(2)
 if etat == 1 then
 ouvert = 1
 print('PORTE OUVERTE')
 cu=net.createConnection(net.TCP)
 cu:on("receive",function(cu,c) print(c) end)
 cu:connect(porttcp,ip) -- connexion du port tcp sur l'ip choisie
 cu:send(nom .. "\n") -- envoi du code du capteur suivi d'un retour ligne
 
 tmr.delay(1000000)
 else ouvert = 0
 end
 end

-- configuration port gpio 4 en entree

gpio.trig(2, "both", contact) -- si changement etat on lance la fonction contact

-- si on emet une trame udp "sat"+nom du capteur sur le port udp sélectionné
-- la sonde repond par "ok" suivi du nom du capteur

s=net.createServer(net.UDP) 
s:on("receive",function(s,c)
 print(c)
 if c == "stat" .. nom then
 print('status sonde ok')
 cu=net.createConnection(net.TCP)
 cu:connect(porttcp,ip)
 cu:send("ok".. nom .. "\n")
 end 
 end) 
s:listen(portudp)

 

Et voilà, de retour, c’est long, oui je sais 😉

Branchez un contacteur de porte sur le port GPIO4 de votre ESP 12 (j’ai utilisé cette version pour éviter certains bugs logiciels au boot) d’un coté, sur GND (la masse) de l’autre.

esp8266_porte

ESP12 + capteur d’ouverture

Dans notre exemple, lorsque le contact s’ouvre (= port ouverte), une trame « sonde1 » est envoyée sur l’ip 192.168.1.60 port TCP 5665. Si j’envois une trame « statsonde1 » sur le port UDP 5665, la sonde va me répondre « oksonde1 » sur son port TCP 5665.

Bien entendu, tout se configure :

[checklist]

  • le port TCP
  • le port UDP
  • l’IP du serveur qui va recevoir les trames (j’ai programmé un Raspberry Pi en Python3 pour cela)

[/checklist]

On peut faire différent, et imaginer par exemple recevoir l’impulsion de détection d’un capteur de mouvement, lui aussi alimenté en 3.3v si je ne m’abuse, un peu ce genre de platine :

ir_sensor_motion

Capteur de mouvement

La fonction d’interrogation de la sonde est un gadget, mais cela peut être utile si vous souhaitez demander à votre domotique de surveiller régulièrement le fonctionnement des différents capteurs : c’est mieux qu’un ping, et on peut au besoin envoyer d’autres informations, comme avec cette sonde de température domotique que Blogwifi vous avait présentée par le passé.

L’ESP12 disposant de multiples GPIO, vous devriez pouvoir rajouter d’autres possibilités de détection en parallèle avec le GPIO4. A vous de jouer, n’hésitez pas à faire part de vos expériences dans les commentaires.