IoT Värmare

En värmefläkt som styrs via internet

PseudoGuide:

Nedan följer en odetaljerad guide för dig som vill bygga något liknande, Google är din vän när det kommer till specifika frågor, eller någon på ARC för den delen.

OBS!

Då det här projektet innefattar kontakt med 230VAC, var extremt försiktig. Dubbelkolla så att inget är inkopplat när du ska hålla på med komponenterna, även om du bara ska flytta på en sladd.

Komponenter:

  • ESP-01 (ESP-8266): Brains of the operation. 3.3V system, kan dö i kontakt med 5V (TX-RX pinnarna klarar av 5V enligt min erfarenhet så den seriella kommunikationen kan ske direkt till Arduinokortet utan nivåomvandlare)

  • 5V relä: Låter dig styra t.ex. 230VAC med en 5V signal.

  • Nivåomvandlare: Konverterar en spänning till en annan spänning (i detta fall 5V-3.3V) så att två styrsystem baserade på olika spänningar kan kommunicera, vi använder den för att styra relämodulen med styrkortet (ESP-01)

  • Slaktad mobilladdare: Gör om 230VAC till 5V USB, så att vi kan mata relämodulen och efter mer trixande även styrkortet.

  • 3.3V regulator: Trixar om 5V från mobil-laddaren till 3.3V som styrkortet kan använda.

  • Snabbklämma: Låter oss skarva sladdar i värmefläkten utan att löda eller på annat sätt permanent binda ihop dem.

  • Elkabel: Används för att koppla om 230VAC-sladdarna då längden på dem som redan finns i fläkten förmodligen inte räcker, tänk på att välja en kabel i samma tjocklek, eller tjockare, så att kabeln klarar av strömmen till fläkten.

 

Koppling

De blåa rektanglarna definierar de färdiga komponenterna, och sladdarna från vägguttaget.

På bilden är det inte en ESP-01 modul, utan ESP-201. Det som skiljer dem åt är bara vilka pinnar på själva IC-kretsen man kommer åt, då båda är baserade på ESP8266. ESP-01 är den enklaste att arbeta med då du bara har totalt 8 pinnar, vilket t.ex. betyder att IO15 redan är byglad med IO0 (med ESP-07 behöver du göra det själv, mer om varför senare).

Innan vi kopplar ihop allting permanent kan det vara bra att använda en så kallad breadboard samt kopplingskablar, detta för att vi ska kunna koppla snabbt och byta ut komponenter när vi gör fel och har sönder dem. Eftersom jag inte lever som jag lär, gjorde jag allt i ett svep på PCB:n, men är du inte säker på vad du sysslar med så bör du följa tipset ovan.

Det finns två olika startlägen för ESP8266 chippet, det ena är programmeringsläget, när vi alltså flashar chippet med ny mjukvara(förenklat). Det andra är normalläget, när den exekverar koden som redan finns på chippet. För att starta i programmeringsläget behöver vi koppla enligt tabellen nedan.

*Jag rekommenderar att du använder en extern strömkälla då chippet drar lite mer kräm än vad många Arduinos/FTDI programmerare klarar av.  ** På ESP-01 är GPIO15 byglad till GPIO0

*Jag rekommenderar att du använder en extern strömkälla då chippet drar lite mer kräm än vad många Arduinos/FTDI programmerare klarar av.

** På ESP-01 är GPIO15 byglad till GPIO0

Tabellen gäller när du ska programmera via ett Arduinokort, har du en dedikerad FTDI-programmerare så ska TX gå till RX, och vice versa. Notera att GPIO2 (som jag styr reläet med) inte får vara kopplat till jord (GND) för att starta upp i detta läge. Egentligen ska både CH_PD(EN) och GPIO2 vara kopplade till 3V med en så kallad "pull-up" resistor, men jag har alltid kommit undan med att koppla CH_PD(EN) direkt till 3V och lämna GPIO2 flytande ("floating").

För att starta i normalläget ska GPIO0/GPIO15 kopplas med en pull-up resistor till 3V, men jag har alltid kommit undan med att lämna dem flytande (men inte kopplade till jord!).

 

PCB:n jag gjorde har stift kopplade till chippet så att jag lätt kan uppdatera mjukvaran.

Programmering

Okej, du vet vad du ska köpa och hur du ska koppla för att elektronerna ska komma dit de ska, men vad för kod ska du knyckla in i ESP-01 chippet för att den ska göra något med alla elektroner?

Jag har en MQTT-server på en gammal laptop hemma, det är otroligt mycket enklare att sätta upp än vad man tror och det är via den värmaren kommer styras. Konceptet bakom MQTT är dels själva servern, som kallas mäklare (broker) och flera klienter som kommunicerar med varandra via servern. Kommunikationen sker genom att man publicerar och prenumererartrådar. Den enda kommunikationen klienten direkt riktar till servern är meta-kommunikation, alltså vad som ska kommuniceras och hur. I MQTT fallet är det först uppgifter för att släppas in på servern, och sen vilken/vilka tråd(ar) klienten vill publicera/prenumerera på (lätt förenklat).

Värmaren kommer alltså läsa av en tråd, bestämma om det är en temperatur som skickas (t.ex. "20") eller ett nytt tröskelvärde (t.ex. "T 20") och sedan i fall ett: avgöra om den ska sätta på relämodulen eller inte beroende på temperaturen i förhållande till tröskelvärdet och i fall två: uppdatera tröskelvärdet.

Jag använde Arduino IDE för att skriva min allt annat än optimerade kod i (C/C++).