Programmation visuelle pour Sonoff Basic

image

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 application à la fois dans la domotique et comme une leçon pratique en informatique scolaire.

Pour référence, par défaut, le programme Sonoff Basic fonctionne avec une application mobile via le service cloud chinois, après la modification proposée, toutes les autres interactions avec cet appareil deviendront possibles dans le navigateur.

Section I. Connexion de Sonoff au MGT24


Étape 1. Créez un panneau de contrôle


Inscrivez-vous sur le site mgt24 (si vous n'êtes pas encore inscrit) et connectez-vous sous votre compte.

Se connecter
image

Pour créer un panneau de contrôle pour un nouvel appareil, cliquez sur le bouton "+".

Exemple de création de panneau
image

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

Dans l'onglet «Installation» du panneau créé, recherchez les champs «Device ID» et «Authorization Key», à l'avenir, ces informations seront nécessaires lors de la configuration de l'appareil Sonoff.

Exemple d'onglet
image

Étape 2. Flashage de l'appareil


À l'aide de l'utilitaire XTCOM_UTIL, téléchargez le micrologiciel Sonoff Basic PLC sur l'appareil, pour cela, vous avez besoin d'un convertisseur USB-TTL. Voici l' instruction et l' instruction vidéo .

Étape 3. Configurer l'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 régulièrement de manière uniforme.

À ce stade, un nouveau réseau Wi-Fi appelé «PLC Sonoff Basic» apparaîtra, connectez votre ordinateur à ce réseau.

Indication LED de décodage
Indication LEDStatut de l'appareil
double clignotement périodiquepas de connexion avec le routeur
brille continuellementconnexion établie avec le routeur
clignotement uniforme périodiquemode point d'accès wifi
éteindrepas de pouvoir


Ouvrez un navigateur Internet et entrez 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 lier l'appareil à votre routeur Wi-Fi domestique).
  • «Device ID» et «Authorization Key» (pour autoriser l'appareil sur le service MGT24).

Exemple de configuration des paramètres réseau de l'appareil
image

Enregistrez les paramètres et redémarrez l'appareil.

Voici un tutoriel vidéo .

Étape 4. Connexion des capteurs (facultatif)


Le micrologiciel actuel prend en charge jusqu'à quatre capteurs de température DS18B20. Voici un didacticiel vidéo sur le montage des capteurs. Apparemment, cette étape sera la plus difficile, car elle nécessitera des mains directes et un fer à souder.

Section II. Programmation visuelle


Étape 1. Script


Blockly est utilisé comme environnement de programmation, 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 écrire et lire les paramètres du périphérique. L'accès à n'importe quel paramètre se fait par nom. Les noms composés sont utilisés pour les paramètres du périphérique distant: «paramètre @ périphérique».

Liste déroulante d'options
image

Un exemple de scénario d'allumage et d'extinction cyclique de la charge (1 Hz):

image

Un exemple de scénario qui synchronise le fonctionnement de deux périphériques distincts. A savoir, le relais du dispositif cible répète le fonctionnement du relais du dispositif distant.

image

Scénario pour thermostat (sans hystérésis):

image

Pour créer des scripts plus complexes, vous pouvez utiliser des variables, des boucles, des fonctions (avec des arguments) et d'autres constructions. Je ne décrirai pas tout cela en détail ici, le réseau a déjà beaucoup de matériel de formation sur Blockly .

Étape 2. Ordre de script


Le script s'exécute en continu et dès qu'il atteint sa fin, il recommence. Il y a deux blocs qui peuvent suspendre temporairement le script, «delay» et «pause».

Le bloc de retard est utilisé pour des retards en millisecondes ou microsecondes. Cette unité maintient strictement l'intervalle de temps, bloquant le fonctionnement de l'ensemble de l'appareil.

Le bloc pause est utilisé pour les seconds (peut-être moins) retards, et il ne bloque pas l'exécution d'autres processus dans l'appareil.

Si le script contient en lui-même une boucle infinie, dans le corps de laquelle il n'y a pas de «pause», l'interpréteur lance indépendamment une petite pause.

Si la pile de mémoire allouée est épuisée, l'interpréteur arrêtera l'exécution d'un tel script vorace (attention aux fonctions récursives).

Étape 3. Débogage des scripts


Pour déboguer un script déjà chargé dans le périphérique, vous pouvez exécuter la trace du programme par étapes. Cela peut être extrêmement utile lorsque le comportement du script n'est pas celui voulu 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.

Le script de calcul factoriel en mode débogage:

image

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" (nous n'oublierons pas non plus "entrer" et "sortir" du mode débogage). En plus du suivi é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) sur le moniteur, utilisez le bloc d'impression.
Voici une vidéo de présentation sur l'utilisation du débogueur.

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


Pour que les scripts fonctionnent sur le périphérique cible, un interpréteur de bytecode et un assembleur pour 38 instructions ont été développés. Un générateur de code spécialisé a été intégré au code source par blocs qui convertit les blocs visuels en instructions d'assembleur. À l'avenir, ce programme d'assemblage est converti en bytecode et transféré sur le périphérique pour exécution.

L'architecture de cette machine virtuelle est assez simple et il n'y a aucun sens à la décrire; sur le net, vous trouverez de nombreux articles sur la conception de machines virtuelles simples.

Pour la pile de ma machine virtuelle, j'alloue généralement 1000 octets, cela suffit avec une marge. Bien sûr, les récursions profondes peuvent épuiser n'importe quelle pile, mais il est peu probable qu'elles trouvent une application pratique.

Le bytecode résultant est assez compact. Par exemple, le bytecode pour calculer le même factoriel n'est que de 49 octets. Voici sa présentation visuelle:

image

Et voici son programme d'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 de l'assembleur n'a aucune valeur pratique, 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)); 

Quant aux performances. Lorsque j'ai commencé le scénario clignotant le plus simple, sur l'écran de l'oscilloscope, j'ai obtenu un méandre de 47 kHz (à une vitesse d'horloge du processeur de 80 MHz).

image

image

Je pense que c'est un bon résultat, au moins cette vitesse est presque dix fois plus rapide que celle de Lua et Espruino .

La dernière partie


Pour résumer, je dirai que l'utilisation de scripts nous permet non seulement de programmer la logique d'un appareil individuel, mais permet également de relier 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 des appareils existants vers un autre serveur, par exemple, le Raspberry domestique, voici les instructions .

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

Source: https://habr.com/ru/post/fr436272/


All Articles