Publié le 12 avril 2020 - par

Programmer un module Sonoff Basic avec un Raspberry Pi

La marque itead recouvre de nombreux produits de domotique. Parmi ceux-ci, la gamme Sonoff dans laquelle on trouve des prises connectées ou des commutateurs comme le Sonoff Basic. On trouve ce commutateur WiFI pour moins de 10 euros sur les sites en ligne.

Pourquoi s’intéresser à ce commutateur me direz vous ? bin… il est à base d’ESP8266 dont nous avons déjà parlé sur ce blog… et il est tout à fait possible de le programmer avec un Raspberry Pi. Pas besoin de dégainer la grosse artillerie et d’allumer votre super PC, un tout ch’ti Raspberry Pi suffira largement pour vous amuser avec ce module sur un coin d’établi !

DANGER 240V

Ce module est alimenté par la tension du secteur 240v. Le contact avec les fils soumis à cette tension est mortel !
Il vous appartient de prendre toutes les précautions pour éviter tout contact même accidentel avec le secteur. Les pistes de circuit imprimé du module transportent le 240v. Faites toujours comme si le module était connecté au secteur. On oublie vite que la prise est branchée ! Remettez systématiquement le module dans son boîtier avant de le connecter au secteur.
L’auteur ou le blog framboise314 ne pourront être tenus pour responsable en cas d’accident ou de dommage.

 

Le module Sonoff Basic

Présentation

Le module Sonoff Basic WiFi Wireless est un interrupteur piloté en WiFI, protégé dans un boîtier IP66 (protégé contre les poussière et les jets d’eau). Enfin ça c’est la doc qui le dit. Pour les projections d’eau je serai plutôt réservé 🙂

Caractéristiques

  • Allumage et extinction à distance
  • Application gratuite pour iOS et Android mobile eWeLink
  • Contrôle sur réseau local – Allumez ou éteignez l’appareil même sans accès à Internet
  • État du dispositif affiché en temps réel sur l’application
  •  Réglage de minuteries programmées/ compte à rebours/boucles pour activer/désactiver à une heure précise via l’application
  • Intégration à la smarthome (maison intelligente)
  • Allumage/Extinction d’un groupe d’appareils d’un seul coup
  • Déclenchement possible par la température, le bruit … en fonction des capteurs installés
  • Fonctionne avec Amazon Alexa, Google Assistant, IFTTT, Google Nest et de nombreux logiciels domotique

Sympa tout ça, non ? Moi ce qui me gêne un peu c’est de passer par l’appli eWelink pour allumer ma lampe de salon. Pas parce que ça me gêne qu’un serveur chinois enregistre cette action (quoique), mais parce qu’il semble inconcevable de mettre en œuvre toute cette technologie pour allumer… une lampe 🙂 

Attention !
Après avoir reprogrammé ce module Sonoff, vous ne pourrez plus l’utiliser comme le constructeur le prévoyait. Il faudra gérer les programmes vous même !

Le matériel

Le module que j’ai reçu était présenté dans une boîte en carton fin. Les vis de fixation des plaques de blocage des fils ne sont pas montées, elles sont à part dans un petit sachet en plastique. Ces deux plaques s’enlèvent donc très facilement. Le boîtier est juste clipsé à la base et s’ouvre très facilement avec l’ongle ou avec un tournevis fin. Pour éviter de détériorer, j’ai utilisé l’outil en plastique que j’utilise pour démonter tablettes et téléphones.

Dans le boîtier du Sonoff Basic

A l’intérieur on découvre le module monté sur son circuit imprimé. Le secteur 240v entre par la droite et ressort par la gauche après avoir transité via le relais. Un bouton poussoir accessible via l’extérieur du boîtier et une LED nous permettront d’interagir avec le module par la suite.

Sous la carte du Sonoff Basic

Sous la carte on repère les pistes transportant la tension secteur (les grosses pistes étamées), séparées par des vides sans circuit pour évitez les amorçages, étincelles… Sur la gauche le circuit U3 qui est notre ESP8266.

L’ESP8266 et son antenne

C’est un ESP8266 tout ce qu’il y a de plus classique.

Il est relié à l’antenne WiFI par le condensateur C27. Vu la taille de l’antenne, n’escomptez pas des portées énormes, une dizaine de mètres c’est déjà pas mal.

Schéma

Le schéma est disponible en ligne. Vous pouvez télécharger le schéma du Sonoff Basic en cliquant sur ce lien.

Comment programmer ce module ?

Les connecteurs absents

Facile… En attaquant les entrées Tx et Rx de l’ESP8266. Ah zut, le fabricant a juste oublié de monter le connecteur pour y accéder (c’est peut-être voulu, non?)

Et voilà la scène de crime ! Ces pastilles 1, 2, 3, 4 et 5 n’attendent que l’arrivée d’un connecteur au pas de 2,54mm (1/10 pouce) pour servir. Sur votre module, il y a de fortes chances que les pastilles soient obstruées par de la soudure. Pas facile dans ces conditions d’insérer notre connecteur …

Le connecteur 2,54mm

Voilà le type de connecteur à monter, il est souvent livré en bande de 40 ou 50, il suffit de couper avec une pince coupant, pour séparer 5 pins.

Bon, on va commencer par enlever cette soudure.

Enlever la soudure

Là on a plusieurs solutions.

  • La première, si vous avez une pompe à dessouder (manuelle ou pneumatique) va consister en un chauffage de la pastille au fer à souder, suivi d’une aspiration. Il faut avoir le matériel.
  • La seconde c’est d’utiliser de la tresse à dessouder. Vous chauffez la pastille jusqu’à rendre liquide la soudure, puis vous appliquez de la tresse à dessouder. Par capillarité la soudure va remonter dans la tresse et le trou sera nettoyé. Quand la tresse n’aspire plus la soudure, on coupe l’extrémité et on continue avec de la tresse “neuve”.
  • N’ayant ni l’un ni l’autre sous la main (en fait j’ai une pompe à dessouder et de la tresse, mais ça me gonflait de chercher où je les ai “rangés”) j’ai utilisé une méthode archaïque mais efficace, la “claque technique”. Parfois on met une claque technique à une unité centrale de PC (pas par méchanceté, pour vérifier/provoquer les faux contacts), ici ça va servir à “éjecter la soudure” des trous. Prenez le module en main, chauffez la pastille pour faire fondre la soudure et rapidement (avant que ça ne refroidisse) tapez violemment la main (pas le module) sur la table. Par inertie, la soudure va continuer son chemin et vous retrouvez une petite plaque de soudure collée sur la table !

Faites de même pour les 5 pastilles. Vous trouverez un résumé de ces techniques (sauf la mienne 🙂 sur ce site wikihow.

Vous devriez obtenir quelque chose qui ressemble à ça.

Monter le connecteur 5 points

Il ne reste plus qu’à mettre le connecteur 5 points en place et à le souder avec précaution. Si vous avez des doutes sur votre façon de souder, jetez un coup d’œil à l’ebook gratuit que j’ai mis en ligne.

Voilà ce que vous devriez obtenir. A présent notre ESP8266 est accessible via son port série et nous allons pouvoir le programmer et même recevoir des messages envoyés sur le port série.

Vous avez accès à l’alimentation 3,3v et GND, au port série Rx et Tx, ainsi qu’à un GPIO, le N° 14.

Prenez en compte que :

  • Le circuit doit être alimenté en 3,3v, pas en 5v
  • Il ne faut pas connecter l’alimentation 3,3v quand le module est relié au secteur
  • Sous une alimentation de 3,3v seule la LED s’allume, le relais ne colle pas

L’ESP8266

L’ESP8266 est un circuit intégré à microcontrôleur avec connexion Wi-Fi développé par le fabricant chinois Espressif.

En août 2014, les passionnés d’électronique découvrent la version ESP-01, de taille réduite, qui permet de connecter un microcontrôleur à un réseau Wi-Fi et d’établir des connexions TCP/IP avec des commandes Hayes. La traduction progressive de la documentation (à l’origine uniquement en chinois) ainsi que le prix réduit du circuit ont permis le développement d’une communauté de développeurs et de passionnés de l’ESP8266. Depuis le circuit ESP8266 a été décliné dans de nombreuses versions.

Les variantes ont toutes des spécificités. Certaines auront plus de broches de GPIO accessibles (2 seulement pour l’ESP8266 de base, 11 pour un ESP12), d’autres auront plus de mémoire flash disponible (entre 512K, 1MB or 4MB suivant les versions choisies). (Source Wikipedia)

Programmer l’ESP8266

Si vous faites de l’Arduino, vous avez déjà tout ce qu’il faut pour programmer l’ESP8266, il suffit d’adapter l’IDE Arduino (Integrated Development Environment) pour qu’il soit compatible avec les ESP. Si vous ne l’utilisez pas encore, voilà une occasion d’installer l’IDE Arduino sur votre Raspberry Pi.

L’IDE Arduino sur Raspbian

L’IDE Arduino s’installe aisément sur Raspbian. Naviguez sur la page arduino.cc et téléchargez depuis la page Download la version arduino-1.8.12-linuxarm.tar.xz.

Vous avez un nouvel icône dans le menu Programmation : Arduino IDE. Dans les types de cartes (Outils => Type de carte) l’ESP ne figure pas, nous allons l’ajouter.

Nota : Lors de l’installation j’ai eu un message d’erreur, je n’ai pas trop cherché, je l’ai contourné en créant le fichier manquant manuellement.

Le message :

Le contournement :

Puis relancez l’installation.

Ajouter l’ESP8266 à l’IDE Arduino

Rendez vous sur la page web  https://github.com/esp8266/Arduino#installing-with-boards-manager

récupérez le lien .json encadré ci-dessus (https://arduino.esp8266.com/stable/package_esp8266com_index.json).

Dans l’IDE Arduino, ouvrez la fenêtre Fichier => Préférences

Collez le lien .json dans la zone indiquée par la flèche.

Ouvrez Outils => Type de Carte => Gestionnaire de carte

Cherchez la bibliothèque ESP8266 by ESP8266 Community et Cliquez sur InstallerL’installation commence. Attendez la fin de l’installation, fermez la fenêtre et redémarrez l’IDE Arduino.Vous avez maintenant accès aux ESP8266 dans la liste des cartes. Choisissez celui qui correspond à votre modèle. Ici ce sera Generic ESP8266 Module.Vérifiez que le port USB est bien indiqué. Si vous ne voyez pas d’USB0, laissez l’ESP connecté au port USB et redémarrez l’IDE.

Sélectionnez le port /dev/ttyUSB0 pour communiquer avec l’ESP8266.

Modifier le programme du module Sonoff

Attention !
NE PAS CONNECTER LE MODULE  AU SECTEUR

Un adaptateur USB/série comme celui-ci ou tout autre modèle conviendra. D’un côté il y a une prise USB utilisable sur un PC (photo ci-dessus) mais aussi sur un Raspberry Pi. De l’autre côté on a un connecteur destiné à recevoir des fils Dupont pour relier les pins de l’adaptateur à l’ESP8266. On pourrait également connecter directement le port GPIO du Raspberry Pi comme dans cet article, par exemple.

Mise sous tension du module Sonoff Basic

Connecter l’adaptateur USB

Connecter l’adaptateur USB. On a besoin des fils TxD et RxD (émission et réception de données du port série) et de l’alimentation +3,3v et GND.

Connecter le module Sonoff Basic

Connectez les fils correspondants sur le module Sonoff. Attention de ne pas faire d’inversion, surtout au niveau de l’alimentation, ce qui serait fatal au module. La pin du GPIO14, à droite, reste libre.

Mise sous tension du module Sonoff Basic

Connectez l’adaptateur USB à un port USB du Raspberry Pi. Sur ce modèle une LED indique que l’adaptateur est sous tension. La LED du module Sonoff doit se mettre à clignoter au rythme d’une fois par seconde.

Mettre le module Sonoff Basic en mode programmation

Débrancher l’adaptateur USB du Raspberry Pi. Pour ma part je me contente de débrancher le fil Dupont du 3,3v. Appuyer sur la tige du bouton poussoir. Maintenez le bouton appuyé et rebranchez l’adaptateur USB (ou le fil 3,3v dans mon cas). Maintenez bien le bouton appuyé plus de 3 secondes. Vous pouvez relâcher le bouton. La LED ne doit pas clignoter. Si elle clignote c’est que vous avez compté trop vite ! Recommencez 🙂

Votre module Sonoff Basic est maintenant passé en mode programmation.

Charger un programme dans l’ESP8266 du module Sonoff Basic

Lancez l’IDE Arduino sur le Raspberry Pi (Menu principal > Programmation > Arduino IDE)

Saisissez ce programme, disponible également en téléchargement en cliquant sur ce lien.

A la fin de la programmation,  vous devriez avoir quelque chose qui ressemble à ça dans la fenêtre de l’IDE Arduino 

Pour lancer le programme il faut resetter le module Sonoff. Je le fais en débranchant le 3,3v et en le rebranchant au niveau de l’adaptateur USB. Les plus courageux pourront monter un interrupteur !


Après ce reset la LED doit clignoter en envoyant deux flash brefs suivis d’une pause d’une demi seconde. J’ai modifié le programme blink dans ce sens car si on a un blink qui fait clignoter la LED exactement comme avant qu’on reprogramme le module… bin on se demande si ça a fonctionné ou pas 😀 sur la vidéo ci-dessus vous verrez les 2 flash.

Piloter le module Sonoff depuis une page web

On a fait la première partie du chemin en transférant avec succès un nouveau programme dans le module Sonoff. Au passage vous noterez qu’il ne pourra plus être utilisé comme le constructeur le prévoyait, c’est à vous de gérer tout ça maintenant 🙂

Programme de commande par page web

Dans l’IDE Arduino, saisissez le programme suivant, ou si vous avez la flemme téléchargez le programme de commande du Sonoff Basic par page web en cliquant sur ce lien. Modifiez les identifiants de connexion en fonction de vos identifiants.

Ici le programme est affiché sous forme d’image car c’est plus simple que de gérer les indentations avec ce $%@ϖ#!! d’éditeur WordPress 🙂
Normalement le programme est suffisamment commenté pour comprendre les différentes actions de chaque partie.

  • Un “bon” programme c’est 50% de programme, 50% de commentaires (minimum)
  • Les commentaires je les mets avant ou en même temps que j’écris le programme
  • Si je dis “je les mettrai après”, je les mets JAMAIS
  • Dans un an si je dois reprendre un programme sans commentaire, il vaut mieux repartir de zéro
  • Si c’est un collègue qui reprend un de mes programmes sans commentaire, c’est encore pire 😉

Transfert du programme dans le module Sonoff

Déconnectez l’adaptateur USB pour mettre le Sonoff hors tension. Appuyez sur le bouton du Sonoff, tenez appuyé. Reranchez la prise USB. Attendez au moins 3 secondes que l’ESP8266 passe en mode programmation.

Cliquez sur le bouton de téléversement de l’IDE Arduino. L’IDE compile votre programme (croquis) puis le transfère dans l’ESP8266.

Si tout se passe bien, à la fin du transfert vous obtenez un message WroteLeaving
Par contre le reset c’est vous qui allez le faire en débranchant et en rebranchant l’adaptateur USB du Raspberry Pi. L’ESP8266 redémarre et la LED doit clignoter plusieurs fois (ligne 52 à 64) en attendant que l’ESP8266 se voie attribuer une adresse IP par le DHCP de la box.

Lorsque la LED s’arrête de clignoter (normalement ça clignote juste 3 ou 4 fois maxi) votre module Sonoff est prêt à recevoir vos ordres.

Utiliser le moniteur série

Si vous regardez le programme, il comporte de nombreuses lignes commençant par Serial.println. Ces lignes sont inutiles en utilisation normale du module Sonoff car il n’a pas d’écran. Par contre, pour la mise au point c’est un outil très intéressant. Les lignes Serial.println envoient les informations que vous décidez vers le port série. Il suffit d’ouvrir le terminal via le menu de l’IDE (Outils > Moniteur Série), de vérifier que la vitesse du moniteur correspond à celle que l’ESP8266 a reçue du programme (ligne 45) et vous verrez pendant le lancement du programme des indications sur ce qu’il se passe. Vous pouvez bien entendu ajouter d’autres infos comme l’état de la LED et du relais par exemple.

Avec ces infos et l’arrêt des clignotements de la LED vous savez que le module Sonoff est connecté à la box. Il n’y a plus qu’à commander le commutateur à distance.

Commande du module Sonoff Basic sur une page web

Ouvrez une page web sur l’adresse du module. Facile si vous avez ouvert le moniteur série, sinon allez fouiner dans le DHCP de votre box. La page web peut être sur le Raspberry Pi (on en profite puisqu’il est à côté), sur un PC, un MAC, un smartphone ou une tablette.

Normalement vous obtenez cette page web.  La LED est éteinte sur le module Sonoff. Cliquez sur le bouton ON : La LED s’allume. Attention, comme le module n’est pas encore relié au secteur, le relais ne colle pas et vous n’entendez rien.

La page web change et vous obtenez ceci.  La LED est allumée sur le module Sonoff. Cliquez sur le bouton OFF : La LED s’éteint et le relais ne fait toujours pas de bruit. Mais cette manipulation nous permet de vérifier que tout se passe bien et que le programme fonctionne.

Utilisation en réel du module Sonoff Basic

NE CONNECTEZ RIEN AU SECTEUR POUR LE MOMENT

Débranchez tous les fils provenant de l’adaptateur USB qui sont connectés sur le module Sonoff. Branchez les fils secteur sur l’entrée du module. Remontez le module dans son boîtier avant de le connecter au secteur. Prenez toutes les précautions pour ne pas entrer en contact avec la tension 240 v.

Branchez la prise de courant. La LED va clignoter plusieurs fois en attendant l’adresse IP. Quand la LED ne clignote plus, allez sur la page web et actionnez les boutons. Cette fois la LED s’allume et s’éteint, mais vous entendez aussi le relais qui claque à chaque commande et si vous avez connecté une lampe 240v à la sortie du module, elle va s’allumer et s’éteindre en même temps que la LED.

Les essais de commutation en vidéo

 

Conclusion

Nous voici à la fin de ce tutoriel. Vous aurez vu comment modifier le programme d’un module Sonoff Basic pas cher pour l’adapter à vos besoins. Ce n’est qu’une mise en bouche, car avec ces infos, vous pouvez maintenant automatiser la commande. Il suffit de piloter depuis un programme en Python pour pouvoir gérer par programme l’allumage et l’extinction de ce qui est branché à la sortie du module.

Ah oui au fait, vous avez vu qu’on n’a pas utilisé le GPIO14 qui était lui aussi accessible… On pourrait y brancher d’autres choses, non ? Un autre relais… une sonde de température DS18B20 pour faire une espèce de thermostat… ? Mais ça, c’est une autre histoire 🙂

Sources

  • https://www.sigmdel.ca/michel/ha/domo/domo_04_fr.html
  • https://www.sigmdel.ca/michel/ha/sonoff/flashing_sonoff_fr.html
  • https://www.itead.cc/wiki/images/f/f8/Sonoff-Schmatic.pdf
  • https://gist.github.com/jeffreyroshan/
  • https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer
  • https://randomnerdtutorials.com/reprogram-sonoff-smart-switch-with-web-server/

How to Flash a Custom Firmware to Sonoff

Sonoff – $5 WiFi Wireless Smart Switch Introduction

 

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

13 réflexions au sujet de « Programmer un module Sonoff Basic avec un Raspberry Pi »

  1. bzh44

    Merci pour ce nouvel article bien intéressant. Ca m’énerve toujours de voir des tas d’objets “connectés” qui doivent passer par internet alors que tout peut se passer dans la maison.
    En plus encore une fois on apprend plein de choses … comme la “claque technique”. J’aurai pu économiser une pompe à dessouder il y a quelques années 😉

    Répondre
    1. François MOCQ Auteur de l’article

      merci 🙂
      après cette technique de “tape” ne fonctionne que pour déboucher une pastille. Pour dessouder un connecteur ou un composant il faut quand même une pompe ou de la tresse 😉

      Répondre
      1. François MOCQ Auteur de l’article

        Bonjour Francis
        Vous avez raison
        je confirme pour la R1 ce n’est pas un 8266. Voici une capture d’écran de la vidéo
        Sonoff R1
        Après j’ai eu un doute et en reprenant l’image et en la triturant un peu il me semble que c’est bien un ESP8285…
        Sonoff R1 ESP model
        Vous me direz ce que vous en pensez.
        cdt
        françois

        Répondre
  2. vVDB

    Vous pouvez utiliser les ports nommé RX et TX comme des E/S ! Donc 2 de plus.
    Mettez l’OTA sur le programme pour mettre à jour par WiFi.
    C’est comme ça que l’on utilise 4 E/S avec un peu coûteux ESP-01. Largement suffisant pour la majorité des IOT.

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour
      merci pour ce retour. je découvre tout juste ce module et l’ESP8266 et je partage mes essais pour ceux que ça intéresse.
      Si ça vous dit de partager des exemples de vos réalisations su framboise314, les pages vous sont ouvertes 🙂

      Répondre
  3. Vincent

    Est-ce que le module peut être utilisable en mettant du 12V continue à la place du 220V alternatif ?
    Je demande cela pour savoir s’il est possible de faire manipuler par un étudiant sans qu’il ne prenne de risque avec le 220V.
    Merci

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Vincent
      comme ça non, car le 220v alimente une alim à découpage à IW1700 (voir le schéma)
      il faudrait envoyer du 3,3v (c’est ce qu’on fait avec l’adaptateur) et modifier un peu la carte pour que la ligne 220v n’arrive plus sur l’alim mais juste sur le relais
      après ça si vous envoyez du 12v à l’entrée, il sera commuté par le relais
      je résume :
      – Couper la piste entre l’arrivée 220v et l’alim à découpage
      – Appliquer du 12v à la place du 220v
      – Alimenter la carte en 3,3v comme dans l’article
      – Alimenter le relais en 5v
      cdt
      françois

      Répondre
  4. SEBASTIEN j

    Bonsoir François,
    On peu aussi citer Tasmota qui semble être un très bon firmware alternatif pour le sonoff.
    Je trouvais galère la version propriétaire chinoise livrée avec mais là c’est assez simple pour faire du http, mqtt , ajouter des Capteurs type ds18b20.

    Répondre
  5. Bud Spencer

    “Un “bon” programme c’est 50% de programme, 50% de commentaires (minimum)”
    Perdu !
    Si un programme n’est pas explicite avec un minimum de commentaires, alors c’est un mauvais programme.

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.