DONOFF iot lysdæmper

Placeret på

Firmwaren

Hvad du har brug for
For at kompilere og overføre DONOFF-firmwaren til en ESP-01 skal du bruge:
  • Arduino IDE
  • ESP8266-kerneudvidelsen (2.4.2 eller 2.5.0)
  • Installerede 'ESP8266 Sketch Upload Tool'
  • PUYA-patchen (til ESP8266-kerneversion 2.4.2)

Mange ESP-01-kort, som du kan købe nu, har en flash-chip, der giver problemer med at læse indholdet af flash-hukommelsen (de har en Flash-chip af mærket PUYA). For at løse problemerne er der en midlertidig patch til version 2.4.2 (se her) tilgængelig (sandsynligvis er denne patch inkluderet i version 2.5.0 af ESP8266-udvidelsen). For version 2.4.2 (og tidligere) er det bydende nødvendigt, at du anvender denne patch i værktøjskæden.

WebSockets – en kort introduktion

World Wide Web blev skabt med den idé, at en klient (f.eks. en browser) sender en anmodning til en server, og at serveren honorerer denne anmodning ved at sende en webside (request-response model). Ulempen ved denne metode er, at serveren kun kan sende noget til en klient, hvis klienten specifikt anmoder om det. Men hvad hvis en server har ny information, som den vil sende til klienten? For at klare dette problem er der udviklet flere strategier, der gør det muligt for serveren at "skubbe" data til klienten. En af de mest populære strategier (uden for AJAX) var lang afstemning. Serveren og klienten holder HTTP-forbindelsen åben, indtil serveren har data at sende til klienten.

Problemet med alle disse løsninger er, at de involverer overhead af HTTP-protokollen. Hver 'HTTP-anmodning' sender et bjerg af overskrifter og cookies til serveren. Og det bliver hurtigt et stort bjerg af data, der skal sendes over linjen, hvilket igen forårsager forsinkelser (latency). Hvis du vil bygge noget som et browserbaseret REAL -time system, vil du have så lidt 'lag' som muligt for at holde tingene kørende.

Hvad www har brug for er en 'vedvarende', 'lav forsinkelse' forbindelse, der understøtter klient- og/eller server-initierede transaktioner! Og det er præcis, hvad WebSockets tilbyder, og DONOFF-firmwaren gør udstrakt brug af denne funktionalitet.

Hvordan fungerer WebSockets

WebSockets opretholder en forbindelse mellem klienten og serveren, som kan bruges af begge parter til at sende beskeder til hinanden til enhver tid.
Klienten etablerer WebSocket-forbindelsen gennem en proces kendt som 'WebSocket-handshake'. Processen starter, når klienten sender en normal HTTP-anmodning til serveren. Denne anmodning indeholder en såkaldt 'Upgrade header', hvorigennem serveren ved, at klienten ønsker at etablere en WebSocket-forbindelse.
Hvis serveren understøtter WebSocket-protokollen, accepterer den opgraderingen og bekræfter den over for klienten ved at returnere en opgraderingsheader.
Nu hvor håndtrykket er aftalt, erstattes den hidtil anvendte HTTP-forbindelse af en WebSocket-forbindelse over den samme underliggende TCP/IP-forbindelse. Fra nu af kan begge parter (klient og server) sende data til hinanden. Dataene sendes via WebSocket som en besked via en eller flere pakker, der indeholder de sendte data (nyttelasten).

Sådan fungerer DONOFF-firmwaren

Inden jeg går dybere ind i driften af DONOFF-firmwaren, forklarer jeg først nogle begreber. Hvad mener jeg med:
  • Master - dette er DONOFF'en, der har kontrol over sin egen lokale enhed og over alle Slave DONOFF'er
  • Slave – dette er en DONOFF, der kun kontrollerer sin egen lokale enhed
  • Server – dette er webserveren på en DONOFF (enten en master eller en slave)
  • Klient – dette er den browser, der opretter forbindelse til en DONOFF-webserver. Det er grænsefladen mellem hardwaren og brugeren
  • local-Device – dette er den fysiske enhed, som hver DONOFF (Master eller Slave) betjener

Når en DONOFF er tilsluttet lysnettet, vil den starte en webserver. Hvis webserveren har en URL som:

"http://hostname.local/"

fra klienten vil serveren sende siden index.html til klienten.
Denne index.html fil indeholder, udover html-koden, også Javascript-kode. Javascript-koden sikrer, at der etableres en WebSocket-forbindelse med webserveren.

Efter at denne forbindelse er etableret, sender klienten beskeden "getDevInfo" til serveren, som den reagerer på med en besked, der indeholder værtsnavnet for denne DONOFF, hvilken type DONOFF dette er (Master eller Slave), og hvilken firmware der kører på DONOFF.
Klienten sender derefter en besked, der beder om den seneste version af DOM ("updateDOM"). Serveren bygger nu en DOM, der indeholder dens lokale enhed (hvis det er en Master, af alle de andre DONOFFS, den kender til) og sender det tilbage til klienten.

Herfra er al kommunikation mellem klienten og serveren hændelsesdrevet. Hvis brugeren flytter en skyder på skærmen, vil klienten bemærke dette og sende en ny skyderværdi til serveren, som igen vil justere intensiteten af sin lokale enhed. Når brugeren klikker på On/Off-knappen, sender klienten den nye status til serveren, som derefter vil foretage de nødvendige handlinger for at opfylde brugerens anmodning.

Der er dog noget andet, der udløses, når en enheds tilstand ændres:
  • Hvis DONOFF er en slave, sender den en HTTP-anmodning til DONOFF-masteren med den nye status for dens lokale enhed. Masteren vil behandle disse oplysninger og (Master) serveren sender denne nye status til sin klient. Så hvis du flytter skyderen på slaven, vil den nye skyderposition også være synlig på klienten, der er tilsluttet masteren.
  • Hvis DONOFF er en master, og det ikke er en ændring af dens lokale enhed, så sender masteren en HTTP-anmodning til DONOFF-slaven med den nye status for slave-enheden, som igen vil ændre dens lokale enhed og (Slave) server vil sende den nye status til sin klient, som derefter opdaterer browseren. Kort sagt, alle ændringer på Master-klienten vil også være synlige på Slave-klienten.

Hvis masteren modtager en HTTP-anmodning fra en slave, som den endnu ikke kender, vil den inkludere de nye slavedata i sin enhedsliste og bygge en ny DOM. Det vil derefter sende en opdateret DOM (med den nye enhed i) til sin klient. Den nye enhed vil derefter være synlig i browseren.
Disse oplysninger sendes i en HTTP-anmodning:
IP-adresse // unik identifikation af denne DONOFF Label // som vist i skærmbilledet Type // er dette en D)immer eller en S)switch minState // hvad er den laveste PWM værdi, der kan indstilles maxState // hvad er den højeste PWM-værdi, der kan indstilles Status // hvad er den aktuelle PWM-værdi OnOff // er lampen tændt eller slukket hjerteslag // hvornår blev denne DONOFF sidst set?

Med jævne mellemrum sender hver slave en HTTP-anmodning til masteren for at fortælle den, at den stadig er online. Hver gang masteren modtager en HTTP-anmodning, vil den nulstille slavens hjerteslag. Hvis hjerteslagsværdien overstiger en vis grænse, vil masteren konkludere, at slaven ikke længere er online og fjerne denne slaves data fra dens enhedsliste, bygge en ny DOM og sende den til sin klient.

Multicast domænenavnesystem

DONOFF-firmwaren gør udstrakt brug af funktionaliteten i Multicast Domain Name System (mDNS). I små (lokale) computernetværk oversætter mDNS-protokollen værtsnavne til IP-adresser. Det er en såkaldt nul-konfigurationstjeneste. Takket være denne protokol er det muligt at få adgang til en server eller anden enhed ved at bruge dens mDNS-navn (værtsnavn) i stedet for dens IP-adresse. Med andre ord, hvis du skriver "DONOFF.local" som URL i din browser, vil mDNS slå IP-adressen op på DONOFF-enheden og præsentere websiden for DONOFF Master (eller Slave).
DONOFF-firmwaren på slaven bruger dette til at finde IP-adressen på DONOFF-masteren og spore ændringer i IP-adressen. DONOFF bruger ikke faste IP-adresser, så fra tid til anden kan IP-adressen på DONOFF Master ændre sig. Selvom mDNS "virker" i de fleste netværk, er der nogle (ældre) WiFi-routere og WiFi-forlængere, der blokerer mDNS-pakkerne. Hvis du ikke kan få adgang til DONOFF med dets værtsnavn (.local), skal du sandsynligvis opgradere din router og/eller forlængere eller kun bruge IP-adresser.

DONOFF HTML og CSS

Jeg er ikke en helt, når det kommer til websidedesign og layout. Dette er grunden til, at DONOFF-grænsefladen er ret enkel. Jeg har kun brugt CSS, jeg forstår, og jeg har ikke brugt nogen fancy biblioteker som bootstrap. Da de anvendte html og css er så enkle, kan du tilpasse grænsefladen til din smag (og send mig venligst skærmbilleder af, hvad du har lavet)!
Nuværende side 9. Firmwaren 1. Introduktion 2. Projektets mål 3. Elektronikken 4. Netstrøm AC til DC 5. MOSFET styrekredsløb 6. optokobler kredsløb 7. ESP8266 mikroprocessor 8. 3v3 DC strømforsyning 9. Firmwaren 10. Upload firmware 11. Første gangs opstart 12. telnet server 13. bygge DONOFF Sendt af Internet side Willem Aandewiel (1955) har en baggrund i elektronik og digitale teknikker. Det meste af sit arbejdsliv har han dog arbejdet med automation, hvor han har arbejdet i stort set alle discipliner fra programmør til projektleder og projektleder. Willem var en af de første hollændere med en mikrocomputer (KIM-1, 1976) på et tidspunkt, hvor pc'en endnu ikke var opfundet. I dag beskæftiger han sig hovedsageligt med design og produktion af små elektroniske kredsløb med mikroprocessorer. Hans 'mission i livet' er at gøre folk begejstrede for at lave deres egne elektroniske kredsløb, mikrocomputere og programmering.

Kommentarer

Webwinkelkeur Kiyoh Trustpilot Opencircuit