Programmation visuelle pour Sonoff Basic

Programmation visuelle pour Sonoff Basic
Un article sur la façon de créer un contrôleur logique programmable à partir d'un appareil chinois bon marché. Un tel appareil trouvera son utilité aussi bien dans la domotique que comme cours pratiques d'informatique scolaire.
Pour 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 dans le navigateur.

Section I. Connexion de Sonoff au service MGT24

Étape 1 : Créer un panneau de contrôle

Inscrivez-vous sur le site mgt24 (si vous n'êtes pas déjà inscrit) et connectez-vous en utilisant votre compte.
Connectez-vous au systèmeProgrammation visuelle pour Sonoff Basic

Pour créer un panneau de contrôle pour un nouvel appareil, cliquez sur le bouton « + ».
Exemple de création d'un panneauProgrammation visuelle pour Sonoff Basic

Une fois le panneau créé, il apparaîtra dans votre liste de panneaux.

Dans l'onglet « Configuration » du panneau créé, recherchez les champs « ID de l'appareil » et « Clé d'autorisation » ; à l'avenir, ces informations seront requises lors de la configuration de l'appareil Sonoff.
Exemple d'ongletProgrammation visuelle pour Sonoff Basic

Étape 2. Reflasher l'appareil

Utilisation de l'utilitaire XTCOM_UTIL télécharger le firmware Automate Sonoff Basic à l'appareil, pour cela vous aurez besoin d'un convertisseur USB-TTL. Ici instruction и instruction vidéo.

Étape 3 : Configuration de votre appareil

Mettez l'appareil sous tension, une fois la LED allumée, appuyez sur le bouton et maintenez-le enfoncé jusqu'à ce que la LED commence à clignoter périodiquement et uniformément.
A ce moment, un nouveau réseau wi-fi appelé « PLC Sonoff Basic » apparaîtra, connectez votre ordinateur à ce réseau.
Explication de l'indication LED

LED d'indication
Statut du périphérique

double clignotement périodique
pas de connexion au routeur

brille continuellement
connexion établie avec le routeur

clignotement uniforme périodique
mode point d'accès Wi-Fi

éteint
Pas d'alimentation

Ouvrez un navigateur Internet et saisissez le texte « 192.168.4.1 » dans la barre d'adresse, 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 relier l'appareil à votre routeur Wi-Fi domestique).
  • « ID de l'appareil » et « Clé d'autorisation » (pour autoriser l'appareil sur le service MGT24).

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

Enregistrez les paramètres et redémarrez l'appareil.
il est instruction vidéo.

Étape 4. Connexion des capteurs (facultatif)

Le micrologiciel actuel prend en charge jusqu'à quatre capteurs de température DS18B20. Ici instruction vidéo pour l'installation de capteurs. Apparemment, cette étape sera la plus difficile, car elle nécessitera des bras tendus et un fer à souder.

Section II. Programmation visuelle

Étape 1 : Créer des scripts

Utilisé comme environnement de programmation Blockly, l'environnement est facile à apprendre, vous n'avez donc pas besoin d'être programmeur pour créer des scripts simples.

J'ai ajouté des blocs spécialisés pour l'écriture et la lecture des paramètres de l'appareil. Tout paramètre est accessible par son nom. Pour les paramètres des appareils distants, des noms composés sont utilisés : « paramètre@device ».
Liste déroulante des optionsProgrammation visuelle pour Sonoff Basic

Exemple de scénario d'allumage et d'extinction cyclique de la charge (1 Hz) :
Programmation visuelle pour Sonoff Basic

Un exemple de script synchronisant le fonctionnement de deux appareils distincts. À savoir, 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 thermostat (sans hystérésis) :
Programmation visuelle pour Sonoff Basic

Pour créer des scripts plus complexes, vous pouvez utiliser des variables, des boucles, des fonctions (avec arguments) et d'autres constructions. Je ne décrirai pas tout cela en détail ici, il y en a déjà pas mal sur le net. matériel pédagogique sur Blockly.

Étape 2 : Ordre des scripts

Le script s'exécute en continu et dès qu'il arrive à sa fin, il recommence. Dans ce cas, il existe deux blocs qui peuvent suspendre temporairement le script, « délai » et « pause ».
Le bloc "delay" est utilisé pour les retards en millisecondes ou microsecondes. Ce bloc maintient strictement l'intervalle de temps, bloquant le fonctionnement de l'ensemble de l'appareil.
Le bloc « pause » est utilisé pour les délais d'une seconde (ou moins) et ne bloque pas l'exécution d'autres processus dans l'appareil.
Si le script lui-même contient une boucle infinie dont le corps ne contient pas de « pause », l'interprète initie indépendamment une courte pause.
Si la pile mémoire allouée est épuisée, l'interpréteur arrêtera d'exécuter un script aussi gourmand en énergie (attention aux fonctions récursives).

Étape 3 : Débogage des scripts

Pour déboguer un script déjà chargé dans l'appareil, vous pouvez exécuter une trace de programme étape par étape. Cela peut être extrêmement utile lorsque le comportement du script s’avère différent de celui prévu par l’auteur. Dans ce cas, le traçage permet à l'auteur de trouver rapidement la source du problème et de corriger l'erreur dans le script.

Scénario de calcul factoriel 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 non plus le mode de débogage « entrer » et « quitter »). En plus du traçage étape par étape, vous pouvez définir un point d'arrêt sur n'importe quel bloc (en cliquant sur le bloc).
Pour afficher les valeurs actuelles des paramètres (capteurs, relais) dans le moniteur, utilisez le bloc « imprimer ».
il est vidéo de présentation à propos de l'utilisation du débogueur.

Section pour les curieux. Qu'y a-t-il sous le capot ?

Pour que les scripts fonctionnent sur l'appareil cible, un interpréteur de bytecode et un assembleur avec 38 instructions ont été développés. Le code source de Blockly intègre un générateur de code spécialisé qui convertit les blocs visuels en instructions d'assemblage. Par la suite, ce programme assembleur est converti en bytecode et transféré à l'appareil pour exécution.
L'architecture de cette machine virtuelle est assez simple et il n'y a pas d'intérêt particulier à la décrire : sur Internet vous trouverez de nombreux articles sur la conception des machines virtuelles les plus simples.
J'alloue généralement 1000 XNUMX octets à la pile de ma machine virtuelle, ce qui est suffisant. Bien sûr, les récursions profondes peuvent épuiser n’importe quelle pile, mais il est peu probable qu’elles aient une quelconque utilité pratique.

Le bytecode résultant est assez compact. À titre d'exemple, le bytecode permettant de calculer la même factorielle ne fait que 49 octets. Voici sa forme visuelle :
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 de représentation assemblée n'a aucune valeur pratique, alors l'onglet « javascrit », au contraire, donne un aspect plus familier que les blocs visuels :

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

window.alert(factorial(10));

Concernant les performances. Lorsque j'ai exécuté le script flasher le plus simple, j'ai obtenu une onde carrée de 47 kHz sur l'écran de l'oscilloscope (à une vitesse d'horloge du processeur de 80 MHz).
Programmation visuelle pour Sonoff BasicProgrammation visuelle pour Sonoff Basic
Je pense que c'est un bon résultat, au moins cette vitesse est presque dix fois plus rapide que Lua и Espruino.

Partie finale

Pour résumer, je dirai que l'utilisation de scripts nous permet non seulement de programmer la logique de fonctionnement d'un appareil distinct, mais permet également de connecter plusieurs appareils en un seul mécanisme, où certains appareils influencent le comportement des autres.
Je note également que la méthode choisie de stockage des scripts (directement dans les appareils eux-mêmes, et non sur le serveur) simplifie le basculement d'appareils déjà fonctionnels vers un autre serveur, par exemple vers un Raspberry domestique, ici instruction.

C'est tout, je serai heureux d'entendre des conseils et des critiques constructives.

Source: habr.com

Ajouter un commentaire