Programmation visuelle pour Sonoff Basic

Programmation visuelle pour Sonoff Basic
Un article sur la façon de transformer un appareil chinois bon marché en un contrôleur logique programmable. Cet appareil trouvera son utilisation tant dans l'automatisation domestique que dans le cadre de cours pratiques en informatique scolaire.
À titre de référence, par défaut, le programme Sonoff Basic fonctionne avec une application mobile via un service cloud chinois. Après la modification proposée, toute interaction ultérieure avec cet appareil sera possible via un navigateur.

Section I. Connecter Sonoff au service MGT24

Étape 1. Créer un tableau de bord

Inscrivez-vous sur le site mgt24 (si vous n'êtes pas encore inscrit) et connectez-vous avec votre compte.
ConnexionProgrammation visuelle pour Sonoff Basic

Pour créer un tableau de bord pour un nouvel appareil, cliquez sur le bouton « + ».
Exemple de création de tableau de bordProgrammation visuelle pour Sonoff Basic

Une fois le tableau de bord créé, il apparaîtra dans la liste de vos tableaux de bord.

Dans l'onglet « Installation » du tableau de bord créé, trouvez les champs « ID de l'appareil » et « Clé d'autorisation », car ces informations seront nécessaires pour configurer l'appareil Sonoff.
Exemple d'ongletProgrammation visuelle pour Sonoff Basic

Étape 2. Flasher l'appareil

Avec l'outil XTCOM_UTIL , téléchargez le firmware PLC Sonoff Basic dans l'appareil ; pour cela, vous aurez besoin d'un convertisseur USB-TTL. Voici l'instruction et un guide vidéo.

Étape 3. Configurer l'appareil

Alimentez l'appareil. Après que la diode LED s'allume, appuyez sur le bouton et maintenez-le enfoncé jusqu'à ce que la diode commence à clignoter périodiquement et uniformément.
À ce moment, un nouveau réseau wi-fi apparaîtra avec le nom « PLC Sonoff Basic », connectez votre ordinateur à ce réseau.
Décodage de l'indication LED

Indication LED
État de l'appareil

clignotement double périodique
pas de connexion au routeur

brille en continu
connexion établie avec le routeur

clignotement périodique et uniforme
mode point d'accès wi-fi

éteint
pas d'alimentation

Ouvrez votre navigateur internet et saisissez dans la barre d'adresse le texte « 192.168.4.1 », accédez à la page des paramètres réseau de l'appareil.

Remplissez les champs comme suit :

  • « Nom du réseau » et « Mot de passe » (pour lier l'appareil au routeur wi-fi domestique).
  • « ID de l'appareil » et « Clé d'autorisation » (pour l'authentification de l'appareil sur le service MGT24).

Exemple de configuration des paramètres réseau de l'appareilProgrammation visuelle pour Sonoff Basic

Enregistrez les paramètres et redémarrez l'appareil.
Ici un guide vidéo.

Étape 4. Connexion des capteurs (facultatif)

Le micrologiciel actuel prend en charge jusqu'à quatre capteurs de température ds18b20. Ici un guide vidéo sur le montage des capteurs. Apparemment, cette étape sera la plus compliquée, car elle nécessitera de l'habileté manuelle et un fer à souder.

Section II. Programmation visuelle

Étape 1. Création de scénarios

L'environnement de programmation utilisé est Blockly, cet environnement est simple à utiliser, donc pour créer des scénarios simples, il n'est pas nécessaire d'être programmeur.

J'ai ajouté des blocs spécialisés pour écrire et lire les paramètres de l'appareil. L'accès à chaque paramètre se fait par son nom. Pour les paramètres des appareils distants, des noms composites sont utilisés : «paramètre@appareil».
Liste déroulante des paramètresProgrammation visuelle pour Sonoff Basic

Exemple de scénario de commutation cyclique d'une charge (1 Hz) :
Programmation visuelle pour Sonoff Basic

Exemple de scénario synchronisant le fonctionnement de deux appareils distincts. En effet, le relais de l'appareil cible répète le fonctionnement du relais de l'appareil distant.
Programmation visuelle pour Sonoff Basic

Scénario pour un thermostat (sans hystérésis) :
Programmation visuelle pour Sonoff Basic

Pour créer des scénarios plus complexes, vous pouvez utiliser des variables, des boucles, des fonctions (avec des arguments) et d'autres constructions. Je vais éviter de tout détailler ici, car il existe déjà beaucoup de matériel pédagogique sur Blockly.

Étape 2. Ordre d'exécution des scénarios

Le scénario fonctionne en mode continu, et dès qu'il atteint sa fin, il redémarre. Il y a deux blocs qui peuvent temporairement suspendre le scénario, «delay» et «pause».
Le bloc «delay» est utilisé pour des délais en millisecondes ou en microsecondes. Ce bloc respecte strictement l'intervalle de temps, bloquant le fonctionnement de tout l'appareil.
Le bloc «pause» est utilisé pour des délais en secondes (ou moins), et il ne bloque pas l'exécution d'autres processus dans l'appareil.
Si le scénario contient une boucle infinie sans «pause», l'interpréteur initiera automatiquement une petite pause.
En cas d'épuisement de la mémoire allouée, l'interpréteur arrêtera l'exécution de ce scénario vorace (faites attention aux fonctions récursives).

Étape 3. Débogage des scénarios

Pour déboguer un script déjà chargé dans l'appareil, il est possible de lancer un pas à pas de la trace de programme. Cela peut être extrêmement utile lorsque le comportement du script ne correspond pas à ce que l'auteur avait prévu. Dans ce cas, le pas à pas permet à l'auteur de localiser rapidement la source du problème et de corriger l'erreur dans le script.

Script de calcul de la factorielle en mode débogage :
Programmation visuelle pour Sonoff Basic

L'outil de débogage est très simple et se compose de trois boutons principaux : « démarrer », « un pas en avant » et « arrêter » (n'oublions pas aussi les boutons « entrer » et « quitter » du mode débogage). En plus de la trace pas à pas, il est possible de définir un point d'arrêt sur n'importe quel bloc (en cliquant avec la souris sur le bloc).
Pour afficher les valeurs actuelles des paramètres (capteurs, relais) sur le moniteur, utilisez le bloc « print ».
Ici vidéo d'introduction sur l'utilisation du débogueur.

Section pour les curieux. Qu'est-ce qui se cache sous le capot ?

Pour que les scripts fonctionnent sur l'appareil cible, un interpréteur de bytecode et un assembleur de 38 instructions ont été développés. Dans le code source de blockly, un générateur de code spécialisé a été intégré, qui convertit les blocs visuels en instructions assembleur. Ensuite, ce programme assembleur est transformé en bytecode et transmis à l'appareil pour exécution.
L'architecture de cette machine virtuelle est assez simple et il n'est pas particulièrement utile de la décrire, vous trouverez de nombreux articles sur la conception de machines virtuelles simples sur Internet.
Pour la pile de ma machine virtuelle, j'alloue généralement 1000 octets, ce qui est plus que suffisant. Bien sûr, des récursions profondes peuvent épuiser n'importe quelle pile, mais il est peu probable qu'elles aient une application pratique.

Le bytecode final est assez compact. Par exemple, le bytecode pour le calcul de la même factorielle ne fait que 49 octets. Voici sa forme visuelle de représentation :
Programmation visuelle pour Sonoff Basic

Et voici son programme assembleur :

shift -1
ldi 10
call factorial, 1
print
exit
:factorial
ld_arg 0
ldi 1
gt
je 8
ld_arg 0
ld_arg 0
ldi 1
sub
call factorial, 1
mul
ret
ldi 1
ret

Si la forme assembleur n'a pas de valeur pratique, l'onglet « javascript », en revanche, offre une vue plus familière que les blocs visuels :

function factorial(num) {
  if (num > 1) {
    return num + factorial(num - 1);
  }
  return 1;
}

window.alert(factorial(10));

En ce qui concerne la performance. Lors de l'exécution d'un scénario simple de clignotement, j'ai obtenu une onde de 47 kHz sur l'oscilloscope (avec une fréquence d'horloge du processeur de 80 MHz).
Programmation visuelle pour Sonoff BasicProgrammation visuelle pour Sonoff Basic
Je considère que c'est un bon résultat, en tout cas, cette vitesse est presque dix fois plus rapide que celle de Lua et Espruino.

Partie finale

Pour conclure, je dirais que l'utilisation de scénarios nous permet non seulement de programmer la logique de fonctionnement d'un appareil individuel, mais aussi de relier plusieurs appareils en un seul mécanisme, où certains appareils influencent le comportement des autres.
Je souligne également que la méthode de stockage des scénarios choisie (directement dans les appareils eux-mêmes et non sur un serveur) facilite le changement d'appareils fonctionnant déjà vers un autre serveur, par exemple un Raspberry personnel, ici l'instruction.

C'est tout, je serais ravi d'entendre des conseils et des critiques constructives.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster