DONOFF iot ljusdimmer

Placerad på

Den fasta programvaran

Vad du behöver
För att kompilera och överföra DONOFF firmware till en ESP-01 behöver du:
  • Arduino IDE
  • ESP8266 kärnförlängning (2.4.2 eller 2.5.0)
  • Installerade 'ESP8266 Sketch Upload Tool'
  • PUYA-patchen (för ESP8266 kärnversion 2.4.2)

Många ESP-01-kort som du kan köpa nu har ett flashchip som orsakar problem med att läsa innehållet i flashminnet (de har ett Flash-chip av märket PUYA). För att lösa problemen finns det en tillfällig patch för version 2.4.2 (titta här) tillgänglig (troligen ingår den här patchen i version 2.5.0 av ESP8266-tillägget). För version 2.4.2 (och tidigare) är det absolut nödvändigt att du applicerar denna patch i verktygskedjan.

WebSockets – en kort introduktion

World Wide Web skapades med idén att en klient (till exempel en webbläsare) gör en begäran till en server och att servern respekterar denna begäran genom att skicka en webbsida (request-response-modell). Nackdelen med denna metod är att servern bara kan skicka något till en klient om klienten specifikt begär det. Men vad händer om en server har ny information som den vill skicka till klienten? För att hantera detta problem har flera strategier utvecklats som gör att servern kan "pusha" data till klienten. En av de mest populära strategierna (utanför AJAX) var långa omröstningar. Servern och klienten håller HTTP-anslutningen öppen tills servern har data att skicka till klienten.

Problemet med alla dessa lösningar är att de involverar overhead för HTTP-protokollet. Varje "HTTP-förfrågan" skickar ett berg av rubriker och cookies till servern. Och det blir snabbt ett stort berg av data som måste skickas över linjen, vilket i sin tur orsakar förseningar (latency). Om du vill bygga något som ett webbläsarbaserat REAL -time-system, vill du ha så lite "lag" som möjligt för att få saker att fungera smidigt.

Vad www behöver är en "beständig", "låg fördröjning"-anslutning som stöder klient- och/eller serverinitierade transaktioner! Och det är precis vad WebSockets erbjuder och DONOFF-firmwaren använder sig av denna funktion i stor utsträckning.

Hur fungerar WebSockets

WebSockets upprätthåller en anslutning mellan klienten och servern som kan användas av båda parter för att skicka meddelanden till varandra när som helst.
Klienten upprättar WebSocket-anslutningen genom en process som kallas "WebSocket-handskakning". Processen startar när klienten skickar en normal HTTP-förfrågan till servern. Denna begäran innehåller en så kallad 'Upgrade header' genom vilken servern vet att klienten vill upprätta en WebSocket-anslutning.
Om servern stöder WebSocket-protokollet godkänner den uppgraderingen och bekräftar den för klienten genom att returnera en uppgraderingshuvud.
Nu när handskakningen har överenskommits ersätts HTTP-anslutningen som har använts dittills av en WebSocket-anslutning över samma underliggande TCP/IP-anslutning. Från och med nu kan båda parter (klient och server) skicka data till varandra. Data skickas via WebSocket som ett meddelande via ett eller flera paket som innehåller den skickade datan (nyttolasten).

Hur DONOFF firmware fungerar

Innan jag går djupare in på driften av DONOFF-firmwaren förklarar jag först några begrepp. Vad menar jag med:
  • Master – detta är DONOFF som har kontroll över sin egen lokala enhet och över alla slav-DONOFFs
  • Slave – detta är en DONOFF som endast kontrollerar sin egen lokala enhet
  • Server – detta är webbservern på en DONOFF (antingen en master eller en slav)
  • Klient – det här är webbläsaren som ansluter till en DONOFF-webbserver. Det är gränssnittet mellan hårdvaran och användaren
  • local-Device – detta är den fysiska enheten som varje DONOFF (Master eller Slave) betjänar

Efter att en DONOFF är ansluten till elnätet kommer den att starta en webbserver. Om webbservern har en URL som:

"http://hostname.local/"

från klienten kommer servern att skicka sidan index.html till klienten.
Denna index.html-fil innehåller, förutom html-koden, även Javascript-kod. Javascript-koden säkerställer att en WebSocket-anslutning upprättas med webbservern.

Efter att denna anslutning har upprättats skickar klienten meddelandet "getDevInfo" till servern som den svarar på med ett meddelande som innehåller värdnamnet för denna DONOFF, vilken typ av DONOFF detta är (Master eller Slave) och vilken firmware som körs på DONOFF.
Klienten skickar sedan ett meddelande som frågar efter den senaste versionen av DOM (“updateDOM”). Servern bygger nu en DOM som innehåller dess lokala enhet (om det är en Master, av alla andra DONOFFS den känner till) och skickar tillbaka den till klienten.

Från och med nu är all kommunikation mellan klienten och servern händelsestyrd. Om användaren flyttar ett skjutreglage på skärmen kommer klienten att märka detta och skicka ett nytt skjutreglagevärde till servern som i sin tur kommer att justera intensiteten på sin lokala enhet. När användaren klickar på På/Av-knappen kommer klienten att skicka den nya statusen till servern, som sedan vidtar nödvändiga åtgärder för att uppfylla användarens begäran.

Det finns dock något annat som utlöses när en enhets tillstånd ändras:
  • Om DONOFF är en slav kommer den att skicka en HTTP-förfrågan till DONOFF-mästaren med den nya statusen för dess lokala enhet. Mastern kommer att bearbeta denna information och (Master) servern kommer att skicka denna nya status till sin klient. Så om du flyttar skjutreglaget på slaven, kommer den nya skjutreglagets position också att vara synlig på klienten som är ansluten till mastern.
  • Om DONOFF är en Master, och det inte är en förändring av dess lokala enhet, kommer Mastern att skicka en HTTP-förfrågan till DONOFF-slaven med den nya statusen för Slave-enheten, som i sin tur kommer att ändra dess lokala enhet och (slav)servern kommer att skicka den nya statusen till sin klient som sedan uppdaterar webbläsaren. Kort sagt, varje förändring på Master-klienten kommer också att vara synlig på Slave-klienten.

Om mastern tar emot en HTTP-begäran från en slav som den ännu inte känner till, kommer den att inkludera den nya slavdatan i sin enhetslista och bygga en ny DOM. Den kommer sedan att skicka en uppdaterad DOM (med den nya enheten i) till sin klient. Den nya enheten kommer då att synas i webbläsaren.
Denna information skickas i en HTTP-förfrågan:
IP-adress // unik identifiering av denna DONOFF-etikett // som visas på skärmen Typ // är detta en D)immer eller en S)switch minState // vilket är det lägsta PWM-värdet som kan ställas in maxState // vad är det högsta PWM-värde som kan ställas in Status // vad är det aktuella PWM-värdet OnOff // är lampan På eller Av hjärtslag // när sågs denna DONOFF senast?

Med jämna mellanrum skickar varje slav en HTTP-förfrågan till Mastern för att meddela att den fortfarande är online. Varje gång mästaren tar emot en HTTP-förfrågan kommer den att återställa slavens hjärtslag. Om hjärtslagsvärdet överstiger en viss gräns kommer Mastern att dra slutsatsen att Slaven inte längre är online och ta bort denna Slaves data från dess enhetslista, bygga en ny DOM och skicka den till sin klient.

Multicast-domännamnssystem

DONOFFs firmware använder i stor utsträckning funktionaliteten i Multicast Domain Name System (mDNS). I små (lokala) datornätverk översätter mDNS-protokollet värdnamn till IP-adresser. Det är en så kallad zero-configuration-tjänst. Tack vare detta protokoll är det möjligt att komma åt en server eller annan enhet genom att använda dess mDNS-namn (värdnamn) istället för dess IP-adress. Med andra ord, om du skriver "DONOFF.local" som URL i din webbläsare, kommer mDNS att leta upp IP-adressen för DONOFF-enheten och presentera webbsidan för DONOFF Master (eller Slave).
DONOFF-firmwaren på slaven använder detta för att hitta IP-adressen för DONOFF-mastern och spåra ändringar i IP-adressen. DONOFF använder inte fasta IP-adresser, så då och då kan IP-adressen för DONOFF Master ändras. Även om mDNS "fungerar" i de flesta nätverk, finns det några (äldre) WiFi-routrar och WiFi-förlängare som blockerar mDNS-paketen. Om du inte kan komma åt DONOFF med dess värdnamn (.local), måste du förmodligen uppgradera din router och/eller extender(ar) eller endast använda IP-adresser.

DONOFF HTML och CSS

Jag är ingen hjälte när det kommer till webbdesign och layout. Detta är anledningen till att DONOFF-gränssnittet är ganska enkelt. Jag har bara använt CSS som jag förstår och jag har inte använt några snygga bibliotek som bootstrap. Eftersom html och css som används är så enkla, kan du anpassa gränssnittet efter eget tycke (och skicka mig skärmdumpar av vad du gjort)!
Nuvarande sida 9. Den fasta programvaran 1. Introduktion 2. Projektmål 3. Elektroniken 4. Nätnät AC till DC 5. MOSFET styrkrets 6. optokopplarkrets 7. ESP8266 mikroprocessor 8. 3v3 DC strömförsörjning 9. Den fasta programvaran 10. Ladda upp firmware 11. Uppstart första gången 12. telnet-server 13. bygga DONOFF Postat av Hemsida Willem Aandewiel (1955) har en bakgrund inom elektronik och digital teknik. Men större delen av sitt yrkesverksamma liv har han arbetat inom automation där han har arbetat inom i stort sett alla discipliner från programmerare till projektledare och projektledare. Willem var en av de första holländarna med en mikrodator (KIM-1, 1976) vid en tidpunkt då datorn ännu inte hade uppfunnits. Numera sysslar han främst med design och produktion av små elektroniska kretsar med mikroprocessorer. Hans "uppdrag i livet" är att göra människor entusiastiska över att göra sina egna elektroniska kretsar, mikrodatorer och programmering.

Kommentarer

Webwinkelkeur Kiyoh Trustpilot Opencircuit