Visueel programmeren voor Sonoff Basic

Visueel programmeren voor Sonoff Basic
Een artikel over hoe je een goedkoop Chinees apparaat kunt ombouwen tot een programmeerbare logische controller. Dit apparaat kan zowel in huisautomatisering als voor praktische lessen in de schoolinformatica worden gebruikt.
Ter referentie, standaard werkt het Sonoff Basic-programma met de mobiele app via een Chinese cloudservice; na de voorgestelde aanpassing is al het verdere contact met dit apparaat mogelijk via de browser.

Hoofdstuk I. Verbinden van Sonoff met de MGT24-service

Stap 1. Een dashboard maken

Registreer je op de website mgt24 (als je nog niet geregistreerd bent) en log in met je account.
InloggenVisueel programmeren voor Sonoff Basic

Om een dashboard voor een nieuw apparaat te maken, klik op de knop ‘+’.
Voorbeeld van het maken van een dashboardVisueel programmeren voor Sonoff Basic

Nadat het dashboard is gemaakt, verschijnt het in de lijst met jouw dashboards.

In het tabblad ‘Installatie’ van het gemaakte dashboard, zoek de velden ‘Apparaat-ID’ en ‘Authenticatiecode’; deze informatie is later nodig bij de setup van het Sonoff-apparaat.
Voorbeeld van het tabbladVisueel programmeren voor Sonoff Basic

Stap 2. Het apparaat opnieuw flashen

Gebruik de tool XTCOM_UTIL om de firmware te uploaden PLC Sonoff Basic naar het apparaat; hiervoor heb je een USB-TTL converter nodig. Hier is een handleiding en videoinstructie.

Stap 3. Het apparaat configureren

Schakel het apparaat in; zodra de LED oplicht, druk op de knop en houd deze ingedrukt totdat de LED regelmatig gaat knipperen.
Op dat moment verschijnt er een nieuw wifi-netwerk met de naam ‘PLC Sonoff Basic’, verbind je computer met dit netwerk.
Uitleg van de LED-indicatie

LED-indicatie
Apparaatstatus

periodiek dubbel knipperen
geen verbinding met de router

continu aan
verbinding met de router is ingesteld

regelmatig knipperen
wifi-accesspointmodus

uit
geen voeding

Open een internetbrowser en voer in de adresbalk ‘192.168.4.1’ in om naar de pagina met netwerkparameters van het apparaat te gaan.

Vul de velden als volgt in:

  • ‘Netwerknaam’ en ‘Wachtwoord’ (om het apparaat aan de thuis-wifi-router te koppelen).
  • ‘Apparaat-ID’ en ‘Authenticatiecode’ (voor de autorisatie van het apparaat op de MGT24-service).

Voorbeeld van het instellen van de netwerkparameters van het apparaatVisueel programmeren voor Sonoff Basic

Sla de instellingen op en herstart het apparaat.
Hier videoinstructie.

Stap 4. Sensoren aansluiten (optioneel)

De huidige firmware ondersteunt tot vier ds18b20 temperatuur-sensoren. Hier videoinstructie is de installatie van de sensoren. Dit lijkt de meest uitdagende stap te zijn, aangezien het je directe handigheid en een soldeerbout zal vereisen.

Hoofdstuk II. Visuele programmering

Stap 1. Scenario's maken

Als programmeeromgeving wordt Blockly, een gebruiksvriendelijke omgeving, gebruikt, dus je hoeft geen programmeur te zijn om eenvoudige scenario's te maken.

Ik heb gespecialiseerde blokken toegevoegd voor het lezen en schrijven van apparaatparameters. Toegang tot elke parameter verloopt op naam. Voor parameters van externe apparaten worden samengestelde namen gebruikt: "parameter@apparaat".
Keuzelijst van parametersVisueel programmeren voor Sonoff Basic

Voorbeeld van een scenario voor het cyclisch in- en uitschakelen van een belasting (1Hz):
Visueel programmeren voor Sonoff Basic

Voorbeeld van een scenario dat de werking van twee aparte apparaten synchroniseert. Namelijk, het relais van het doelaan apparaat herhaalt de werking van het relais van het externe apparaat.
Visueel programmeren voor Sonoff Basic

Scenario voor een thermostaat (zonder hysterese):
Visueel programmeren voor Sonoff Basic

Om complexere scenario's te creëren, kunnen variabelen, lussen, functies (met argumenten) en andere constructies worden gebruikt. Ik zal hier niet alles gedetailleerd uiteenzetten, er is al veel onderwijsmateriaal over Blockly.

Stap 2. Uitvoeringsvolgorde van scenario's

Het scenario werkt continu, en zodra het zijn einde bereikt, start het opnieuw. Er zijn twee blokken die tijdelijk de uitvoering van het scenario kunnen pauzeren: "delay" en "pause".
Het blok "delay" wordt gebruikt voor milliseconde- of microsecondevertragingen. Dit blok houdt strikt het tijdsinterval in stand, waarbij de werking van het hele toestel wordt geblokkeerd.
Het blok "pause" wordt gebruikt voor secondes (en minder) vertragingen, en het blok blokkeert de uitvoering van andere processen in het toestel niet.
Als het scenario een oneindige lus bevat, waarin "pause" niet is opgenomen, zal de interpreter zelf een korte pauze initiëren.
Bij een uitputting van de toegewezen stapelgeheugen zal de interpreter de uitvoering van een dergelijk 'hongerige' scenario stoppen (wees voorzichtig met recursieve functies).

Stap 3. Scenario's debuggen

Voor het debuggen van een al geladen script op het apparaat, kan de programma-uitvoering stap voor stap worden getraceerd. Dit is bijzonder nuttig wanneer het gedrag van het script afwijkt van de bedoeling van de auteur. In dat geval stelt de traceerfunctie de auteur in staat om snel de bron van het probleem te vinden en de fout in het script te corrigeren.

Script voor het berekenen van de faculteit in debugmodus:
Visueel programmeren voor Sonoff Basic

De debugtool is heel eenvoudig en bestaat uit drie basisknoppen: «start», «één stap vooruit» en «stop» (vergeet ook de «in» en «uit» van de debugmodus niet). Naast stap-voor-stap tracing kun je op elk blok een breakpoint instellen (door met de muis op het blok te klikken).
Om de huidige waarden van de parameters (sensoren, relais) op het beeldscherm weer te geven, gebruik je de blok «print».
Hier overzichtvideo over het gebruik van de debugger.

Sectie voor nieuwsgierigen. Wat zit er onder de motorkap?

Om ervoor te zorgen dat de scripts op het doelapparaat werken, is er een bytecode-interpreter en assembler ontwikkeld met 38 instructies. In de broncode van blockly is een gespecialiseerde codegenerator ingebouwd die visuele blokken omzet in assemblerinstructies. Later wordt dit assemblerprogramma omgezet in bytecode en naar het apparaat gestuurd voor uitvoering.
De architectuur van deze virtuele machine is redelijk eenvoudig en het heeft niet veel zin om het te beschrijven; je vindt veel artikelen op internet over het ontwerpen van de eenvoudigste virtuele machines.
Voor de stack van mijn virtuele machine reserveer ik meestal 1000 bytes, dit is ruimschoots voldoende. Natuurlijk kunnen diepe recursies elke stack uitputten, maar ze zullen zelden praktische toepassingen vinden.

De uiteindelijke bytecode is behoorlijk compact. Ter illustratie, de bytecode voor het berekenen van dezelfde faculteit is slechts 49 bytes. Dit is de visuele voorstelling ervan:
Visueel programmeren voor Sonoff Basic

En dit is zijn assemblerprogramma:

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

Als de assemblerrepresentatie geen praktische waarde heeft, dan biedt het tabblad «javascrit» daarentegen een meer vertrouwde weergave dan de visuele blokken:

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

window.alert(factorial(10));

Wat betreft de prestaties. Bij het uitvoeren van het eenvoudigste knipperprogramma kreeg ik een meander van 47 kHz op het oscilloscoopscherm (met een kloksnelheid van de processor van 80 MHz).
Visueel programmeren voor Sonoff BasicVisueel programmeren voor Sonoff Basic
Ik beschouw dit als een behoorlijk resultaat, tenminste, deze snelheid is bijna tien keer sneller dan die van Lua en Espruino.

Slotgedeelte

Samenvattend kan ik zeggen dat het gebruik van scripts ons niet alleen in staat stelt om de logica van een afzonderlijk apparaat te programmeren, maar ook de mogelijkheid biedt om verschillende apparaten te verbinden tot een enkel mechanisme, waarbij sommige apparaten invloed hebben op het gedrag van andere.
Ik wil ook opmerken dat de gekozen manier van het opslaan van scripts (rechtstreeks in de apparaten zelf, niet op de server) het eenvoudiger maakt om al werkende apparaten naar een andere server te schakelen, bijvoorbeeld naar een thuis Raspberry, hier. handleiding.

Dat is alles, ik sta open voor suggesties en constructieve kritiek.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster