Hack : module Sonoff 4CH pro, compiler le firmware Espurna (Partie 2) • Domotique et objets connectés à faire soi-même

Dans le tutoriel précédent, nous avons vu comment hacker le Sonoff 4CH Pro en installant une image pré-compilée du firmware Open Source Espurna. C’est la méthode la plus simple et la plus rapide. Xose Pérez, l’auteur du firmware prépare les images à chaque mise à jour pour les cartes supportés en créant des combinaisons (DHT, OTA, DS12B20…). Le firmware Espurna permet de hacker de nombreux produits construits autour des modules ESP8285 ou ESP8266 d’Espressif. La plupart des produits commercialisés sont des modules de commande pour relais. Il reste encore plusieurs GPIO disponibles sur le module ce qui permet d’ajouter des capteurs. Dans ce tutoriel, nous allons voir comment personnaliser le firmware pour le Sonoff 4CH Pro . Nous allons lui ajouter une sonde DHT11 sur le GPIO2 puis compiler le code source à l’aide de PlatformIO fonctionnant sur l’éditeur Visual Studio Code de Microsoft. 

Préparer l’environnement de développement : Visual Studio Code, Plugin PlatformIO, esptool.py

Pour hacker le Sonoff 4CH pro, nous aurons besoin d’installer quelques outils

  • esptool.py, le script livré avec le SDK d’Espressif va nous permettre de sauvegarder le firmware d’origine (pour éventuellement le ré-installer), effacer la mémoire et installer le nouveau firmware. Suivez ce tutoriel pour l’installation sur Windows et celui-ci pour macOS.
  • Visual Studio Code (que je trouve plus légers et plus stable* qu’Atom avec PlatformIO) et le plugin PlatformIO (suivez ce tutoriel pour l’installation)

feekte1zlnrhor9plamy-6110112

(*) chacun est libre de choisir.

Préparation du Sonoff 4CH Pro

Suivez les étapes de ce tutoriel pour ajouter un connecteur permettant de flasher l’ESP8285 à l’aide d’un câble FTDI.

Respectez les consignes de sécurité indiquées dans le présent tutoriel et celui-ci. Ne faites aucune modification des modules lorsqu’ils sont sous tension ! Toutes les modifications techniques ou logicielles apportées sont réalisées sous votre entière responsabilité. Projets DIY ne pourra pas être tenu pour responsable en cas d’accident, blessure ou détérioration de matériel.

Trouver le port COM du Sonoff 4CH Pro

Mettez le module en flash mode (en reliant le GPIO0 à une broche GND à la mise sous tension).

Sur Windows, branchez le câble FTDI. Attendez que le drivers s’installe si c’est la première fois. Ouvrez PowerShell et exécutez la commande mode. Le port COM sur lequel est branché le Sonoff est listé. Si ce n’est pas le cas, allez dans le panneau de configuration pour vérifier que le drivers de votre câble FTDI est correctement installé

Sur macOS ou Linux, ouvrez le Terminal et exécutez la commande ls /dev/tty.usb* . En retour vous devriez avoir le port COM sous la forme

/dev/tty.usbserial-A1048DR2

Ajouter un capteur DHT11/DHT22 au Sonoff 4CH Pro

Sur le Sonoff 4CH Pro, il reste 3 GPIO disponibles (SDA du GPIO2, RX et TX). Par chance, toutes les broches sont disponibles sur le connecteur du port série ! Pour alimenter vos capteurs, vous disposez également d’un connecteur en soudant 2 hearders (GND, 3V3) à coté du connecteur situé à coté de la bobine. Il ne reste plus qu’à brancher un DHT11 ou un DHT22 (3V3, GND). Ici, j’ai branché la broche sur le connecteur SDA (GPIO2).

5gurmr7apqaemwsje7ze-8176782

Pour les autres modules Sonoff (ou les autres), voici le repérage des broches de l’ESP8285 et ESP8266.

Sauvegarder  le firmware d’origine et effacer la mémoire

Depuis PowerShell ou le Terminal, exécutez la commande suivante en remplaçant le port COM de votre carte pour sauvegarder le firmware d’origine sur votre ordinateur

esptool.py --port PORT_COM read_flash 0x00000 0x100000 image1M.bin

Le dump (la copie) de la mémoire flash est enregistré dans le fichier image1M.bin dans le répertoire d’exécution du script esptool.py.

Maintenant, exécutez cette commande pour effacer totalement l’ancien firmware de la mémoire flash de l’ESP8285. Modifiez le port COM avant d’exécuter la commande.

esptool.py --port PORT_COM erase_flash

Pour restaurer l’ancien firmware, exécutez cette commande en modifiant le port COM.

esptool.py --port PORT_COM write_flash -fs 1MB -fm dout 0x0 image1M.bin

Attention. L’ESP8285 doit être en flash mode pour pouvoir effectuer les opérations décrites ici. Il faut remettre le module en flash mode après chaque exécution d’une commande esptool.

Tout est prêt.

Récupérer le code source du projet Espurna

Allez sur le site du projet puis sur la page Download (téléchargement) puis sur l’onglet Branches. Cliquez sur Zip (par exemple) en face de la branche Master (ou dev si vous aimez essuyer les plâtres :-)). Décompressez le fichier ZIP.

Lancez Visual Studio Code. La fenêtre de PlatformIO (PIO Home) s’affiche à l’ouverture de l’éditeur. Ouvrez le projet Espurna en cliquant sur Open Project. Il faut pointer vers la racine du projet. Actuellement, c’est le dossier code. C’est le dossier qui contient le fichier de configuration platformio.ini.

Ouvrez le fichier platformio.ini. Il contient différentes configurations déjà prêtent à l’emploi. On dispose de “clés” pour indiquer au compilateur comment construire le firmware :

  • -DDHT_SUPPORT : ajoute le support les capteurs DHT11 et DHT22
  • -DRF_SUPPORT : support pour le récepteur RF
  • -DALEXA_SUPPORT qui permet de mimer un appareil domotique Belkin WeMo facile à piloter avec l’Amazon Echo Dot
  • -DHLW8012_SUPPORT permet de prendre en charge le circuit de mesure de courant HLW8012 utilisé par le Sonoff POW par exemple
  • -DEMON_SUPPORT permet d’intégrer un capteur de mesure de courant tel que le SCT-013-010.
  • -DAI_THINKER pour piloter les ampoules connectées RGB AI-Thinker que l’on trouve sur AliExpress par exemple.
  • -DNOFUSS_SUPPORT qui permet de faire des mises à jour automatiques depuis un serveur NoFUSS.

Recherchez la chaine 4ch-pro et ajoutez ce bloc qui permet d’indiquer au compilateur d’ajouter la librairie DHT.

[env:itead-sonoff-4ch-pro-dht22]
platform = espressif8266
framework = arduino
board = esp01_1m
board_flash_mode = dout
lib_deps = ${common.lib_deps}
lib_ignore = ${common.lib_ignore}
build_flags = ${common.build_flags_1m} -DITEAD_SONOFF_4CH_PRO -DDHT_SUPPORT=1
monitor_baud = 115200

On va maintenant devoir indiquer la broche sur laquelle est connecté le capteur ainsi que le type utilisé (par exemple DHT11). Allez dans le dossier config et ouvrez le fichier sensors.h. Dans le bloc DHTXX, la clé DHT_PIN permet d’indiquer la broche sur laquelle le capteur est connecté. Ici, il est sur la broche 2 (GPIO2, repérée SDA sur le connecteur série) de l’ESP8285. On dispose d’autres paramètres, dont voici  :

  • DHT_UPDATE_INTERVAL : l’intervalle de mesure. Par défaut 60000ms
  • DHT_TYPE : le type de DHT utilisé (DHT11, DHT21, DHT22)
  • On peut spécifier les Topics (n’utilisez pas de caractères accentués)

Enregistrez les modifications des 2 fichiers. Tout est prêt pour la compilation.

Compiler le firmware Espurna modifié

On va commencer par démarrer l’outil en ligne de commande (CLI) de PlatformIO. Cliquez sur la petite icône dans la barre d’outil située dans le coin inférieur gauche de Visual Studio Code.

Xose préconise de commencer par mettre à jour les librairies avant de compiler

pio lib update

Les librairies étant maintenant à jour, on peut compiler le firmware. C’est là qu’intervient la magie de PlatformIO. On indique la cible à compiler à l’aide de la commande pio run -e  suivi du nom de la configuration. Ici itead-sonoff-4ch-pro-dht22. Après quelques dizaines de secondes de travail, le binaire est prêt.

[Thu Sep 28 15:58:00 2017] Processing itead-sonoff-4ch-pro-dht22 (framework: arduino; lib_deps: DHT sensor library, Adafruit Unified Sensor, https://github.com/xoseperez/Time, ArduinoJson, https://github.com/me-no-dev/ESPAsyncTCP#991f855, https://github.com/me-no-dev/ESPAsyncWebServer#a94265d, https://github.com/marvinroger/async-mqtt-client#v0.8.1, PubSubClient, Embedis, NtpClientLib, OneWire, DallasTemperature, Brzo I2C, EspSoftwareSerial, https://bitbucket.org/xoseperez/justwifi.git#1.1.5, https://bitbucket.org/xoseperez/hlw8012.git#1.0.1, https://bitbucket.org/xoseperez/fauxmoesp.git#2.2.0, https://bitbucket.org/xoseperez/nofuss.git#0.2.5, https://bitbucket.org/xoseperez/emonliteesp.git#0.2.0, https://bitbucket.org/xoseperez/debounceevent.git#2.0.1, https://github.com/xoseperez/my9291#2.0.0, https://github.com/xoseperez/RemoteSwitch-arduino-library.git; build_flags: -g -DMQTT_MAX_PACKET_SIZE=400  -Wl,-Tesp8266.flash.1m0.ld -DITEAD_SONOFF_4CH_PRO -DDHT_SUPPORT=1; lib_ignore: ; platform: espressif8266; board: esp01_1m; monitor_baud: 115200; board_flash_mode: dout)
------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
Converting espurna.ino
Collected 46 compatible libraries
Looking for dependencies...
Library Dependency Graph
|--  v1.3.0
|   |--  v1.0.2
|--  v1.0.2
|--  v5.11.1
|--  v2.6
|--  v1.2.0
|-- 
|   |--  v1.0.4
|   |   |--  v1.0
|   |--  v1.0
|   |--  v1.5
|   |--  v1.0
|--  v2.3.2
|--  v3.7.7
|   |--  v2.3.2
|--  v1.3.0
|-- 
|--  v1.0
|--  v0.8.1
|   |--  v1.0.1
|   |   |--  v1.0
|--  v1.1.5
|   |--  v1.0
|--  v1.5
|-- 
|   |--  v1.0
|--  v2.2.0
|   |--  v1.0.1
|   |   |--  v1.0
|   |--  v1.0
|--  v1.0
|--  v1.0
|--  v1.0.1
|--  v1.0
|   |--  v1.0
|   |-- 
|   |   |--  v1.0
|--  v0.2.5
|   |--  v5.11.1
|   |--  v1.1
|   |   |--  v1.0
|   |   |--  v1.1
|   |   |   |--  v1.0
|--  v1.0
|--  v1.0.1
|   |--  v1.0
|--  v2.0.0
|--  v2.0.1
|--  v0.2.0
|-- 
|   |--  v1.0.1
|   |   |--  v1.0
|   |--  v1.0
|   |--  v5.11.1
|   |--  v1.0
|-- 
Compiling .pioenvs/itead-sonoff-4ch-pro-dht22/src/espurna.ino.o
Linking .pioenvs/itead-sonoff-4ch-pro-dht22/firmware.elf
Calculating size .pioenvs/itead-sonoff-4ch-pro-dht22/firmware.elf
Building .pioenvs/itead-sonoff-4ch-pro-dht22/firmware.bin
text       data     bss     dec     hex filename
439239    10080   31680  480999   756e7 .pioenvs/itead-sonoff-4ch-pro-dht22/firmware.elf
=================================================== [SUCCESS] Took 16.26 seconds ===================================================

============================================================ [SUMMARY] ============================================================
Environment wemos-d1mini-relayshield            [SKIP]
Environment wemos-d1mini-relayshield-ssl        [SKIP]
Environment wemos-d1mini-relayshield-ota        [SKIP]
Environment nodemcu-lolin                       [SKIP]
Environment nodemcu-lolin-ssl                   [SKIP]
Environment nodemcu-lolin-ota                   [SKIP]
Environment tinkerman-espurna-h                 [SKIP]
Environment tinkerman-espurna-h-ota             [SKIP]
Environment itead-sonoff-basic                  [SKIP]
Environment itead-sonoff-basic-ota              [SKIP]
Environment itead-sonoff-basic-dht22            [SKIP]
Environment itead-sonoff-basic-dht22-ota        [SKIP]
Environment itead-sonoff-basic-ds18b20          [SKIP]
Environment itead-sonoff-rf                     [SKIP]
Environment itead-sonoff-rf-ota                 [SKIP]
Environment itead-sonoff-pow                    [SKIP]
Environment itead-sonoff-pow-ota                [SKIP]
Environment itead-sonoff-dual                   [SKIP]
Environment itead-sonoff-dual-ota               [SKIP]
Environment itead-sonoff-4ch                    [SKIP]
Environment itead-sonoff-4ch-ota                [SKIP]
Environment itead-sonoff-4ch-pro                [SKIP]
Environment itead-sonoff-4ch-pro-dht22          [SUCCESS]
Environment itead-sonoff-4ch-pro-ota            [SKIP]
Environment itead-sonoff-touch                  [SKIP]
Environment itead-sonoff-touch-ota              [SKIP]
Environment itead-sonoff-b1                     [SKIP]
Environment itead-sonoff-b1-ota                 [SKIP]
Environment itead-sonoff-t1-1ch                 [SKIP]
Environment itead-sonoff-t1-1ch-ota             [SKIP]
Environment itead-sonoff-t1-2ch                 [SKIP]
Environment itead-sonoff-t1-2ch-ota             [SKIP]
Environment itead-sonoff-t1-3ch                 [SKIP]
Environment itead-sonoff-t1-3ch-ota             [SKIP]
Environment itead-sonoff-led                    [SKIP]
Environment itead-sonoff-led-ota                [SKIP]
Environment itead-sonoff-rfbridge               [SKIP]
Environment itead-sonoff-rfbridge-ota           [SKIP]
Environment itead-slampher                      [SKIP]
Environment itead-slampher-ota                  [SKIP]
Environment itead-s20                           [SKIP]
Environment itead-s20-ota                       [SKIP]
Environment itead-1ch-inching                   [SKIP]
Environment itead-1ch-inching-ota               [SKIP]
Environment itead-motor                         [SKIP]
Environment itead-motor-ota                     [SKIP]
Environment electrodragon-wifi-iot              [SKIP]
Environment electrodragon-wifi-iot-ota          [SKIP]
Environment workchoice-ecoplug                  [SKIP]
Environment workchoice-ecoplug-ota              [SKIP]
Environment jangoe-wifi-relay                   [SKIP]
Environment jangoe-wifi-relay-ota               [SKIP]
Environment openenergymonitor-mqtt-relay        [SKIP]
Environment openenergymonitor-mqtt-relay-ota    [SKIP]
Environment jorgegarcia-wifi-relays             [SKIP]
Environment jorgegarcia-wifi-relays-ota         [SKIP]
Environment aithinker-ai-light                  [SKIP]
Environment aithinker-ai-light-ota              [SKIP]
Environment magichome-led-controller            [SKIP]
Environment magichome-led-controller-ota        [SKIP]
Environment huacanxing-h801                     [SKIP]
Environment huacanxing-h801-ota                 [SKIP]
Environment huacanxing-h802                     [SKIP]
Environment huacanxing-h802-ota                 [SKIP]
Environment itead-bnsz01                        [SKIP]
Environment itead-bnsz01-ota                    [SKIP]
Environment wion-50055                          [SKIP]
Environment wion-50055-ota                      [SKIP]
Environment exs-wifi-relay-v31                  [SKIP]
Environment exs-wifi-relay-v31-ota              [SKIP]
Environment wemos-v9261f                        [SKIP]
Environment wemos-v9261f-ota                    [SKIP]
Environment esp01-v9261f                        [SKIP]
Environment esp01-v9261f-ota                    [SKIP]
Environment esp01-ech1560                       [SKIP]
Environment esp01-ech1560-ota                   [SKIP]
Environment esp8266-1m-ota                      [SKIP]
Environment esp8266-4m-ota                      [SKIP]
=================================================== [SUCCESS] Took 16.26 seconds ===================================================

Juste pour info, le fichier a été enregistré dans le dossier masqué .pioenvs.

Comme tout s’est bien déroulé et qu’aucune erreur n’a été renvoyée, il est temps de flasher l’ESP8285. Mettez le module en flash mode puis exécutez la commande suivante pour lancer le téléchargement (le firmware est de nouveau compilé).

Compiling .pioenvs/itead-sonoff-4ch-pro-dht22/src/espurna.ino.o
Linking .pioenvs/itead-sonoff-4ch-pro-dht22/firmware.elf
Checking program size
text       data     bss     dec     hex filename
439223    10072   31672  480967   756c7 .pioenvs/itead-sonoff-4ch-pro-dht22/firmware.elf
Building .pioenvs/itead-sonoff-4ch-pro-dht22/firmware.bin
Looking for upload port...
Auto-detected: /dev/cu.usbserial-A1048DR2
Uploading .pioenvs/itead-sonoff-4ch-pro-dht22/firmware.bin
Uploading 453440 bytes from .pioenvs/itead-sonoff-4ch-pro-dht22/firmware.bin to flash at 0x00000000
................................................................................ [ 18% ]
................................................................................ [ 36% ]
................................................................................ [ 54% ]
................................................................................ [ 72% ]
................................................................................ [ 90% ]
...........................................                                      [ 100% ]
=================================================== [SUCCESS] Took 69.56 seconds ===================================================

C’est terminé. Suivez les étapes de configuration indiquées dans le tutoriel précédent.

Intégration de la sonde DHT11/DHT22 branchée au Sonoff 4CH pro à Domoticz

Allez sur Domoticz et créez deux nouveaux instruments virtuels. Le premier pour la température, le second pour l’humidité.

Allez à l’onglet Domoticz depuis l’interface d’administration du firmware Espurna. Vous avez maintenant deux nouveaux IDX à indiquer pour la température et l’humidité. Petit regret par rapport à Tasmota qui est capable de regrouper les mesures dans un seul capteur virtuel (peut être dans la v2…). Enregistrez la modification avec Update. Attendez une minute (ou la durée configurée dans le fichier sensors.h pour que les premières mesures s’affichent sur Domoticz.

Voilà, vous pouvez maintenant ajouter des capteurs à vos modules Sonoff. L’intégration est vraiment très rapide et efficace avec le firmware Espurna. On perd le système de Rules d’ESP Easy mais on gagne en simplicité de mise en oeuvre.

Le tableau suivant récapitule les principales spécifications des commutateurs WiFi Itead Swich Smart Home Sonoff

No posts for this criteria.

Avez-vous aimé cet article ?