Din varukorg är för närvarande tom!
Wifi temperatursensor till Vera och thingspeak
Temperatursensor till Vera och thingspeak drivs med två AA batterier!
Detta är en Wifi kort med CPU för 20kr! Måtten 24mm X 16mm gör den optimal till mindre projekt.
Projektet senast uppdaterad: 2016-02-17
- 2016-02-17 : Mätning, optimering och uträkning av batteritiden för esp8266 12E och ds18b20.
- 2016-01-17 : Nyhet: Ny version av Firmware (V1.2): Stöd att beräkna batterikapaciteten och rapportera den. Rapport nu hur många ms wifi tog att starta.
- 2016-01-15 : En guide på hur du själv laddar upp kod och kopplar enheten finns nu här
Vad är detta?
Bygget nedan är Wifi sensorn ESP8266 12E med en DHT11 temperatursensor, just den här enheten rapporterar till min gratis http loggserver. Enheten har skickat temperaturen varje minut i några dagar med två AA 1.5v batterier. När enheten lyckats skicka data till loggservern läggs enheten i viloläge och drar då ca 10uA. Jag kommer att köra den här sensorn till den slutar rapportera för att se hur pass många skickningar batterierna klarar (risken är att det tar ett tag!). Jag valde att bygga den första med en DHT11 för att få möjlighet att övervaka luftfuktighet, exempelvis på vinden eller i källaren.
I viloläge drar ESP8266 12E runt 20 uA vilket gör det möjligt att köra enheten på två AA 1.5 batterier under mycket lång tid.
Projektet ovan är en esp8266 12E med namnet ”ESP8266-NR1″, koden är inte optimerad och DHT11 ger lite varierande världen. Detta kan beror nog på DTH11 och att spänningen understiger 3.3v, väntar nu på DHT22 för att se om det gör någon skillnad. Luvan hade även en idé om att köra en stepup modul för att ge korrekt spänning till DHT11, kommer att testa det med så fort den kommer.
Resultat
Loggen nedan kommer från loggningsprogrammet, det syns att ESP8266-NR1 (dvs den med DHT11) skiljer sig en hel del från den nya sensorn (ESP8266-NR2) som har en DS18B20 temperatursensor. Jag har även valt att i den nya sensorn skickar hur pass bra WIFI styrka den har, detta kan ge mig bra indikationer på om enheten kommer att dra onödigt mycket batteri eller har svårt att kommunicera.
ESP8266-NR1 | T: | (temperatur) 18 | H: | (luftfuktighet) 48
ESP8266-NR2 | (signalstyrka WIFI) -78 | (temperatur) 21.3
Vera
Efter att ha skapat en virtuell temperatursensor i vera och aktiverat funktionen i koden för ESP8266-NR2 dyker sensorn upp i Vera. Det är nu möjligt att skapa scenes som reagerar om temperaturen på sensorn överstiger eller understiger vissa värden.
Sensorn ESP8266-NR2 i Vera gränssnittet
Genom att aktivera loggning i Datamine inne i Vera:n får jag en snygg graf från sensorn.
Lödning
För att minska storleken på projektet lödde jag kablar och monterade allt runt sensorn (ESP8266-NR2), kommer att montera nästa sensor på ett kretskort och köra en DS18B20 utan hölje för att minska storleken på bygget. Sensorn skickar temperatur och wifi styrka var 300:e sekund, det borde ge en snittförbrukning på ca 3mA (beroende på hur pass bra koden är).
Bygget ovan är en ESP8266 12E med en DS18B20 temperatursensor och en 4.7K ohms resistor, det är allt som behövs för temperatursensorn.
Efter lödning och lite eltejp på två AA batterier, väntar nu på batterihållare och låda.
Förbrukning
Enligt ett förbrukningsdiagrammet jag hittade på internet ska ESP8266 12E dra ca 10uA i viloläget! Vilket gör att två AA batterier på 2800mA räcker länge om sensorn aldrig väcks. På samma sida gjordes en uträkning där ESP8266 drar ca 3mA i snitt om sensorn väcks var 300 sekund. Detta innebär att ju mer optimerad kod som körs desto kortare stund behöver sensorn vara vaken och desto längre kommer batteriet att hålla.
2016-01-13 – 20.00 – Uppdaterad mjukvaran till V1.1 med stöd för Thingspeak!
Har just uppdaterat mjukvaran på ESP8266-NR2 och bytt namn på den till ESP8266-NR3 vilket nu gör att enheten rapporterar data till tre olika destinationer varje gång den vaknar.
ESP8266-NR3 loggar nu till:
- Min hemautomations kontroller Vera, vilket gör att jag kan koppla scenes och övervakning på temperaturen.
- Thingspeak online webbtjänst (grafen nedan är live) Kan dock saknas poster ibland eftersom jag uppdaterar mjukvaran ofta just nu!
Utöver det så loggar den även till min loggserver.
Orsaken till att ESP8266-NR1 rapporterar ERROR är att DHT11 inte klarar att drivas stabilt på spänningar lägre än 3.3V. Luvan kom med en idé om att testa en stepup modul på den, väntar på leverans av den nu. Jag låter ESP8266-NR1 fortsätta skicka ändå för att få ett vettigt estimat på batteritiden.
Batteritiden verkar vara riktigt bra! har kört ESP8266-NR1 sedan den 10:e januari fram tills nu, den rapporterar varje minut och vilar en minut. Eftersom jag har lagt med en check på att värdet från DHT11 måste vara OK annars försöker den igen om 4 sekunder. Dvs just nu går den aldrig riktigt ner i viloläge och skickar var 4:e sekund eftersom DHT11 får felande temperaturer. Fram tills nu när den stannade 2016-01-13 23:16:43.067 har den skickat data 16793 ggr! Vid 2.28V slutade esp8266-NR1 att skicka data.
- 2016-01-10 13:08:36.450 | XXX.XXX.XXX.XXX | ESP8266-NR1 | T: | 22 | H: | 36
- 2016-01-13 23:16:43.067 | XXX.XXX.XXX.XXX | ESP8266-NR1 | ERROR
Rapportera Batteristatus (2016-01-27)
Har nu lyckats få en funktion som gör det möjligt att beräkna batteriets kapacitet, detta görs genom att bygga en spänningsdelare med hjälp av två resistorer. Detta gör det möjligt att omvandla spänningen som enheten matas med ner till 1V (eftersom enheten enbart har en analog port som stödjer 0-1V)
I mitt fall valde jag att nytta 6V för att mata enheten, jag nyttjar en ”ms1117” som tar ner spänningen till 3.3V vilket gör det möjligt nyttja ett batteripack med 4 AA batterier. Vid tester kunde jag köra ms1117 ända ner till 3.9V innan ESP8266 började bete sig konstigt. Enligt databladet för ms1117 bör spänningen man driver enheten med vara 1.5 – 2V högre än 3.3v.
Jag hittade en bra artikel på esp8266-projects.com hur man bygger en spänningsdelare och hur den sedan implementeras i ESP8266, exemplet på sidan visade tyvärr LUA kod.
I exemplet på sidan räknade han fram en spänningsdelare på 4.3V, jag behövde tyvärr en på 6V.
Detta blev mina värden 470K ohm (R1) 100k Ohm (R2) vilket gav mig ca 1V mellan R2 och jord.
Funktionen nedan läser av A0 (dvs ADC porten) och beräknar värdet utifrån det.
float getBatteryStatus() { // V1.2 --- testar att räkna batteristatus. BatteryLevel= analogRead(A0); USE_SERIAL.print("Raw batteri status: "); USE_SERIAL.println(String(BatteryLevel)); BatteryLevel = analogRead(A0); BatteryLevel = (BatteryLevel * BatteryPower) / VoltDivdierVoltage; // värdet 978 baseras på det värdet jag fick fram när jag matade 6V genom spänningsdelaren och mätte fram 0.978v USE_SERIAL.print("riktigt batterivarde: "); USE_SERIAL.println(String(BatteryLevel)); return BatteryLevel; }
Jag uppdaterade sedan funktionen som skickar till mitt loggningsprogram och får nu följande information där (utöver det som skickas till Thingspeak och Vera)
- Enhetsnamn = Namnet på enheten som skickar datat
- Firmware = Version av mjukvaran på ESP, detta för att se vilken nivå enheten kör med i framtiden.
- Temperatur = Temperatur som avlästes med hjälp av temperatursensorn.
- Totaltid = Anger hur många ms sensorn har varit vaken, kan vara bra för att se om koden blir bättre eller sämre med nyare firmware.
- Batterispänning = Skriver nu ut aktuell batteritid beräknat med: Avläst värde (mellan 0 – 1024) * 6V / 1024
Kommer att försöka lägga så batteristatus även rapporteras till Vera och eventuellt Thingspeak.
Vid obelastat test hade 4 gamla batterier 5.49V. När batteripaket kopplade in rapporterade ESP8266 5.30V till loggservern, vilket jag tycker verkar rätt så ok.
Tyvärr har ms1117 kretsen jag nyttjar en lysdiod som alltid lyser, detta kommer att dra onödigt med batteri och förkorta batteritiden enormt, kommer att demontera den så fort jag hinner.
(Skriver den just nu 2016-01-15) GUIDE: Koppla och ladda upp kod till ESP8266
Jag kommer att fylla på den här guiden med mer information så fort jag hinner! All kod finns uppe på Github så det är bara att spinna vidare på den 🙂
Pris för bygget är ca 40 – 50kr
- Wifi Sensor: ~20kr
- Tempsensor: ~10kr
- Resistor 4.7k ohm ~10.00 kr (för 100st)
- Två batterier ~15kr
[poll id=”16″]
I koden har jag valt att köra DS18B20 på port 4, i övrig finns alla variabler som ska ändras samlat i toppen av koden, dvs man behöver inte ändra mer än variablerna beskrivna nedan för att få igång en ESP8266-12E själv.
För att sensorn sedan ska vakna efter en deep sleep så behöver sensorn ha GPIO 16 kopplas ihop till RST pinnen. I övrigt är sensorn hanterad som vanligt med Arduino ISE
// Ange ditt wifi och lösenord. const char* WifiNamn = "DittWIFINamn"; // Ange namnet på ditt WIFI const char* WifiPass = "WifiLösenord"; // Lösenordet till ditt wifi nätverk. const int sleepTimeS = 300; // Ange hur länge sensorn ska sova, 300 sekunder = 5 minuter, 900 = 15 min osv. // Vera UI7 - Loggning till tempsensor (https://www.automatiserar.se/guide-skapa-temperatur-luftfuktighet-och-ljusenhet-i-vera-ui7/) int VeraDeviceID = 147; // Ange id på den virtuella sensorn du skapat i vera enligt guiden ovan. String VeraIP = "10.20.30.40"; // Ange ip eller namn till din vera kontroller. bool LoggaTillVera = true; // Ange om du vill logga till Veran (sätts till True då!) // Loggning till Automatiserar.se - HTTP server ( https://www.automatiserar.se/loggning-med-http/ ) String EnhetsNamn = "ESP8266-NR3"; // Ange namnet som Din esp modul ska registrera till loggservern. String DestinationsServer = "10.20.30.41"; // ange namnet eller ip dit du vill skicka datat. int DestinationsPort = 86; // ange porten du vill skicka datat på (normalt port 80) bool LoggaTillHttpServern = true; // anger om detta ska loggas till klienten från länken ovan. // Loggning till Thingspeak -- OBS man kan inte skicka oftare än var 15:e sekund! String ThingSpeakKey = "ThingSpeakKey"; int ThingSpeakID = 5; // ange vilket av de 5 thingspeak id:n du vill uppdatera. String ThingSpeakIP = "144.212.80.10"; // IP till thingspeak tjänsten (eftersom enheten inte har bra dns stöd just nu) bool LoggaTillThingSpeak = true;
Koden för Version 1.2 finns nu på Github! – Hämta koden här –
Guide: Aktivera loggning till veran
Börja med att gå igenom guiden: virtuell temperatur sensor i vera, skapa temperatursensorn.
Kvar att göra:
Ladda upp koden på Github– Check – 2016-01-13
Fixa stödet till Thingspeak– Check – 2016-01-13
Optimera koden– Check 2016-02-18 (v1.5 av koden)
Mät strömförbrukning vid send och vid sleep.– Check – 2016-02-18
- Paktera enheten snyggt.
Beräkna batteritiden.– Check – 2016-01-17
Ordna en Guide för att bygga detta.Check – 2016-01-16
Ordna en komponentlista. – Check 2016-02-18
// Ispep