Visuele programmering voor Sonoff Basic

Visuele programmering voor Sonoff Basic
Een artikel over hoe je een programmeerbare logische controller kunt maken van een goedkoop Chinees apparaat. Een dergelijk apparaat zal zowel in de domotica als in de praktijklessen in de informatica op scholen worden gebruikt.
Ter referentie: het Sonoff Basic-programma werkt standaard met een mobiele applicatie via een Chinese cloudservice; na de voorgestelde wijziging is alle verdere interactie met dit apparaat mogelijk in de browser.

Sectie I. Sonoff verbinden met de MGT24-service

Stap 1: Maak een controlepaneel

Schrijf je in op de site mgt24 (indien nog niet geregistreerd) en log in met uw account.
Log inVisuele programmering voor Sonoff Basic

Om een ​​controlepaneel voor een nieuw apparaat aan te maken, klikt u op de knop “+”.
Voorbeeld van het maken van een paneelVisuele programmering voor Sonoff Basic

Zodra het paneel is aangemaakt, verschijnt het in uw lijst met panelen.

Zoek op het tabblad “Setup” van het aangemaakte paneel de velden “Apparaat-ID” en “Authorisatiesleutel”; in de toekomst zal deze informatie vereist zijn bij het instellen van het Sonoff-apparaat.
Tab voorbeeldVisuele programmering voor Sonoff Basic

Stap 2. Flash het apparaat opnieuw

Het hulpprogramma gebruiken XTCOM_UTIL download de firmware PLC Sonoff Basis naar het apparaat, hiervoor heeft u een USB-TTL converter nodig. Hier instructie и Video-instructie.

Stap 3. Apparaat instellen

Schakel het apparaat van stroom, nadat de LED oplicht, drukt u op de knop en houdt u deze ingedrukt totdat de LED periodiek gelijkmatig begint te knipperen.
Op dit moment verschijnt er een nieuw wifi-netwerk genaamd “PLC Sonoff Basic”, verbind uw computer met dit netwerk.
Uitleg LED-indicatie

LED-indicatie
Apparaatstatus

periodiek dubbel knipperen
geen verbinding met router

schijnt continu
verbinding tot stand gebracht met de router

periodiek uniform knipperen
Wi-Fi-toegangspuntmodus

uitgedoofd
Geen stroomvoorziening

Open een internetbrowser en voer de tekst “192.168.4.1” in de adresbalk in, ga naar de instellingenpagina van de netwerkinstellingen van het apparaat.

Vul de velden als volgt in:

  • “Netwerknaam” en “Wachtwoord” (om het apparaat te koppelen aan uw Wi-Fi-router thuis).
  • “Apparaat-ID” en “Authorisatiesleutel” (om het apparaat te autoriseren op de MGT24-service).

Voorbeeld van het instellen van apparaatnetwerkparametersVisuele programmering voor Sonoff Basic

Sla de instellingen op en start het apparaat opnieuw op.
Hier Video-instructie.

Stap 4. Sensoren aansluiten (optioneel)

De huidige firmware ondersteunt maximaal vier ds18b20-temperatuursensoren. Hier Video-instructie voor installatie van sensoren. Blijkbaar zal deze stap de moeilijkste zijn, omdat hiervoor rechte armen en een soldeerbout nodig zijn.

Sectie II. Visuele programmering

Stap 1: Scripts maken

Gebruikt als programmeeromgeving Blockley, de omgeving is gemakkelijk te leren, dus je hoeft geen programmeur te zijn om eenvoudige scripts te maken.

Ik heb gespecialiseerde blokken toegevoegd voor het schrijven en lezen van apparaatparameters. Elke parameter is toegankelijk via de naam. Voor parameters van externe apparaten worden samengestelde namen gebruikt: “parameter@apparaat”.
Vervolgkeuzelijst met optiesVisuele programmering voor Sonoff Basic

Voorbeeldscenario voor het cyclisch in- en uitschakelen van de belasting (1Hz):
Visuele programmering voor Sonoff Basic

Een voorbeeld van een script dat de werking van twee afzonderlijke apparaten synchroniseert. Het relais van het doelapparaat herhaalt namelijk de werking van het relais van het apparaat op afstand.
Visuele programmering voor Sonoff Basic

Scenario voor thermostaat (zonder hysteresis):
Visuele programmering voor Sonoff Basic

Om complexere scripts te maken, kunt u variabelen, lussen, functies (met argumenten) en andere constructies gebruiken. Ik zal dit hier niet allemaal in detail beschrijven; er staat al heel veel op het net. educatief materiaal over Blockly.

Stap 2: Volgorde van scripts

Het script wordt continu uitgevoerd en zodra het einde is bereikt, begint het opnieuw. In dit geval zijn er twee blokken die het script tijdelijk kunnen pauzeren, “delay” en “pause”.
Het blok "vertraging" wordt gebruikt voor vertragingen van milliseconden of microseconden. Dit blok handhaaft strikt het tijdsinterval en blokkeert de werking van het hele apparaat.
Het “pauze”-blok wordt gebruikt voor tweede (of minder) vertragingen en blokkeert de uitvoering van andere processen op het apparaat niet.
Als het script zelf een oneindige lus bevat, waarvan de hoofdtekst geen “pauze” bevat, initieert de tolk zelfstandig een korte pauze.
Als de toegewezen geheugenstapel leeg is, stopt de tolk met het uitvoeren van zo'n stroomvretend script (wees voorzichtig met recursieve functies).

Stap 3: Foutopsporing in scripts

Om fouten op te sporen in een script dat al in het apparaat is geladen, kunt u stap voor stap een programmatracering uitvoeren. Dit kan uiterst handig zijn als het gedrag van het script anders blijkt te zijn dan de auteur bedoelde. In dit geval kan de auteur dankzij tracering snel de oorzaak van het probleem vinden en de fout in het script corrigeren.

Scenario voor het berekenen van faculteiten in debug-modus:
Visuele programmering voor Sonoff Basic

De debug-tool is heel eenvoudig en bestaat uit drie hoofdknoppen: “start”, “een stap vooruit” en “stop” (laten we ook de debug-modus “enter” en “exit” niet vergeten). Naast stapsgewijze tracering kunt u op elk blok een breekpunt instellen (door op het blok te klikken).
Gebruik het blok "print" om de huidige waarden van parameters (sensoren, relais) in de monitor weer te geven.
Hier overzichtsvideo over het gebruik van de debugger.

Sectie voor nieuwsgierigen. Wat zit er onder de motorkap?

Om de scripts op het doelapparaat te laten werken, zijn een bytecode-interpreter en een assembler met 38 instructies ontwikkeld. In de broncode van Blockly is een gespecialiseerde codegenerator ingebouwd die visuele blokken omzet in montage-instructies. Vervolgens wordt dit assemblerprogramma omgezet in bytecode en ter uitvoering naar het apparaat overgedragen.
De architectuur van deze virtuele machine is vrij eenvoudig en het heeft geen zin om deze te beschrijven; op internet vindt u veel artikelen over het ontwerpen van de eenvoudigste virtuele machines.
Normaal gesproken wijs ik 1000 bytes toe voor de stapel van mijn virtuele machine, wat voldoende is. Natuurlijk kunnen diepe recursies elke stapel uitputten, maar het is onwaarschijnlijk dat ze enig praktisch nut hebben.

De resulterende bytecode is vrij compact. De bytecode voor het berekenen van dezelfde faculteit is bijvoorbeeld slechts 49 bytes. Dit is de visuele vorm:
Visuele programmering 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 assemblagevorm van representatie geen enkele praktische waarde heeft, geeft het tabblad “javascrit” daarentegen een vertrouwder uiterlijk dan visuele blokken:

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

window.alert(factorial(10));

Wat betreft prestaties. Toen ik het eenvoudigste flasher-script uitvoerde, kreeg ik een blokgolf van 47 kHz op het oscilloscoopscherm (bij een processorkloksnelheid van 80 MHz).
Visuele programmering voor Sonoff BasicVisuele programmering voor Sonoff Basic
Ik denk dat dit een goed resultaat is, deze snelheid is in ieder geval bijna tien keer sneller dan Lua и Spaans.

Laatste deel

Samenvattend zal ik zeggen dat het gebruik van scripts ons niet alleen in staat stelt de logica van de werking van een afzonderlijk apparaat te programmeren, maar het ook mogelijk maakt om meerdere apparaten in één mechanisme aan te sluiten, waarbij sommige apparaten het gedrag van andere beïnvloeden.
Ik merk ook op dat de gekozen methode voor het opslaan van scripts (rechtstreeks op de apparaten zelf, en niet op de server) het overschakelen van reeds werkende apparaten naar een andere server vereenvoudigt, bijvoorbeeld naar een Raspberry thuis, hier instructie.

Dat is alles, ik zal blij zijn om advies en opbouwende kritiek te horen.

Bron: www.habr.com

Voeg een reactie