Wifi temperaturmåler

Amarillo

Norbrygg-medlem
Jeg ble oppfordret på en annen tråd om å lage en guide for å bygge en temperaturmåler med wifi og blynk. Denne kan brukes til forskjellige oppgaver, men mest aktuelt er vel overvåking av temperatur i gjæringsskap.

Jeg starter med oversikt over hvilke deler som trengs. Det er mulig å bygge den for rundt 30-40 kroner, men for den som ikke er fortrolig med lodding, og å lage egne dupont-kabler anbefaler jeg delene under, som kommer på ca 60 kroner. Å bygge dette skulle være overkommelig for de aller fleste, men litt teknisk innsikt og ikke mer enn 7-8 tommeltotter er en fordel :)


NodeMCU (styreenhet):
https://www.ebay.com/itm/NodeMCU-Lu...446767?hash=item58c774dcef:g:O-0AAOSw9N1V2-Ww


DS18B20 (temperatursensor):
https://www.ebay.com/itm/10K1-3950-...hash=item3f73e423c0:m:m1fPYlpbVPXj8uML6H87R2Q

Velg 1 eller 2 meters ledning på sensoren og DS18B20 i drop-down-menyen. Kan være kjekt å ha to meter.


4,7K Ohm motstand:
https://www.ebay.com/itm/10PCS-Meta...hash=item282f441fa9:m:m3k8MHmQimBpz9EUwdt8Nsg

Velg 4.7K Ohm i drop-down-menyen (viktig med K'en). Trenger bare en motstand pr. sensor, men minste kvanta i salg på ebay er 10 stk. Samme pris for 100 stk, for de som tenker stort.


Terminal med skrukoblinger:
https://www.ebay.com/itm/Nano-Termi...833907?hash=item285f41b673:g:iKgAAOSwArxbPz1L

Denne er beregnet på en Arduino Nano, men en enkel hack (fra ca 6:00) gjør at den kan brukes til en nodeMCU. Det er mye enklere med skrukoblinger enn dupont-koblinger og er også mer driftsikkert, kablene sitter godt.


I tillegg trengs en strømforsyning på 5v. En vanlig mobillader med microUSB kan brukes.


Kommer tilbake med guide for bygging/programmering.
 
Sist redigert:
Jeg hadde alle delene liggende så jeg har satt dem sammen.
Å kutte basen der styreenheten skal sitte gikk greit med en minisag. I videoen brukes det en skarp kniv som også fungerer bra.
IMG_2095.JPG

Man trenger strengt tatt bare den ene halvdelen, men for å få det hele til å stå støtt bruker jeg begge.
Sensorledningen består av tre ledninger med fargene rød (pluss), sort (jord) og gul (signal). Disse skal kobles til tre punkter på styreenheten, sort på 'G', rød på '3V' og gul på 'D4'. Se på selve styreenheten og ikke på basen, merkingen på den er beregnet på en Arduino. Det er fire punkter til høyre for 'D4', det samme må det være på rekken med skruterminaler før gul ledning. Motstanden på 4,7 kOhm kobles sammen med rød og gul ledning.
IMG_2103.JPG

Det er alt som skal til og enheten er klar for programmering.
IMG_2105.JPG
 
Sist redigert:
Dersom flere ds18b20 skal paralellkobles er det ikke da anbefalt med 5v i stedet for 3,3v?
 
3v skal være ok, samme hvor mange det er. Min mesketemperaturmåler har to sensorer og henter 3v direkte fra en nodeMCU med 3.3v batteridrift. Hver sensor trekker max 1,5mA så det er snakk om små strømstyrker. Men med mange sensorer ville jeg nok hatt en separat strømforsyning på 5v i stedet for å koble til direkte.
 
Da var det programmering.

Det finnes forskjellig software for å programmere og laste opp kode. Jeg bruker Arduino IDE som egentlig er laget for Arduino, men som kan utvides til også å kunne programmere ESP8266-brikken som ligger på nodeMCU.

Med en pc (eller Mac), gå til https://www.arduino.cc/en/Main/Software og ned til 'Download Arduino IDE'. Her velger du operativsystemet du bruker på din pc. Det er mulig å velge Windows fra XP til 10, og Mac og Linux. Installer og start opp programmet, startbildet vil se sånn ut:

ide1.jpg

Slett all tekst i vinduet og lim inn denne koden:

Kode:
#include <DallasTemperature.h>
#include <BlynkSimpleEsp8266.h>;
#define ONE_WIRE_BUS 2

const char* ssid = "";
const char* wifiPassord = "";
const char auth[] = "";
float  temperatur,kalibrering,maxTemp,minTemp;
int timer1,start;
BlynkTimer timer;

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

BLYNK_WRITE(V3) {
  if (param.asInt()) {
    start = millis();
  } else {
    if (millis() - start > 1000) {
      maxTemp = 0;
      minTemp = 100;
      Blynk.virtualWrite(2, 0);
      Blynk.virtualWrite(4, 0);
    }
  }
}

BLYNK_WRITE(V5) {
  kalibrering = param.asFloat();
}

void setup() {
  Blynk.begin(auth, ssid, wifiPassord);
  while (Blynk.connect() == false) {}
  Blynk.syncAll();
  timer1 = timer.setInterval(5000, hentTemp);
}

void loop() {
  Blynk.run();
  timer.run();
}

void hentTemp() {
  sensors.requestTemperatures();
  temperatur = (sensors.getTempCByIndex(0)) + kalibrering;
  delay(50);
     if (temperatur > maxTemp) {
    maxTemp = temperatur;
    Blynk.virtualWrite(2, maxTemp);
  }
  if (temperatur < minTemp) {
    minTemp = temperatur;
    Blynk.virtualWrite(4, minTemp);
  }
  Blynk.virtualWrite(1, temperatur);
}

Lagre filen med en navn du husker.

I koden vil du finne disse to linjene:
const char* ssid = "";
const char* wifiPassord = "";
Mellom anførselstegnene skriver du navnet på det wifi-nettet du bruker (ssid) og passordet på nettverket. Viktig at dette skrives helt riktig, hvis ikke vil det ikke fungere. Viktig også at det legges mellom anførselstegnene som dette:
const char* ssid = "mittNettverk";
const char* wifiPassord = "1234abcd";
Lagre filen på nytt.

Du trenger tre ekstra biblioteker for å få koden til å fungere. To for sensoren og ett for Blynk. Her er jeg på litt tynn is, for jeg husker ikke hva som følger med Arduino IDE og hva jeg har lastet ned selv.

Gå inn på 'Sketch' -> 'Include Library' -> 'Manage Libraries...'
I søkefeltet skriver du 'max31850'. Hvis du får opp en linje der det står Max31850 DallasTemp så trykk på denne og trykk på 'Install'.
Gjør det samme på nytt, men skriv 'blynk' i søkefeltet. Får du opp 'Blynk by Volodymyr Shymanskyy' så velg denne og installer. Til slutt, skriv 'onewire' i søkefeltet og installer 'OneWire by Jim Studt'.
Noen som kan teste dette? Jeg kan legge inn hvordan man laster ned et bibliotek hvis det er noe som mangler.

max.jpg blynk.jpgonewire.jpg

En utvidelse for at Arduino IDE skal kunne programmere esp8266 er også nødvendig å installere.
Gå inn på 'File' -> 'Preferences'. I feltet 'Additional Boards Manager URLs' lim inn denne adressen: http://arduino.esp8266.com/stable/package_esp8266com_index.json
Trykk OK.
Gå til 'Tools' -> 'Boards:...' -> 'Boards Manager...' og legg inn 'esp8266' i søkefeltet. Velg 'esp8266 by ESP8266 Community' og installer. Steng programmet og åpne det igjen.

preferences.jpg boards.jpg

Hvis alt ble gjort riktig, skal du nå finne NodeMCU i Boards-menyen. Velg 'Tools' -> 'Board:' -> 'NodeMCU 1.0 (ESP12-E Module)'.

node.jpg

For å sjekke om alt er i orden så kjør en kompilering, trykk på haketegnet øverst til venstre (Verify). Programmet vil da oversette koden til maskinkode og vil reagere hvis noe er feil eller mangler. Hvis det står 'Done compiling' og feltet nederst i vinduet fortsatt er blått, er alt greit og koden kan lastes opp til styreenheten. Du trenger en usb-kabel, en vanlig kabel for mobil passer. Koble sammen enheten og pc'en. Pc'en bruker kanskje litt tid første gang hvis den må installere noen drivere, det går som regel av seg selv.

pc.jpg

Velg menyen 'Tools' -> 'Port' -> COM(X)
Velg den COM-porten som er tilgjengelig, det er som regel bare en, men den kan ha forskjellige nummer fra gang til gang.

com.jpg

Trykk på den store pilen på det blå feltet oppe i vinduet (Upload). Programmet vil først kompilere igjen. Hvis alt er ok, lastes programmet over. Det kan ta litt tid, men står det 'Done uploading' på det blå feltet nede skal alt være greit og du kan ta deg en velfortjent øl :beermug: Du vil også se det på NodeMCU, den skal blinke blått hvert femte sekund hvis alt virker. Skifter det blå feltet derimot til orange og du ser masse orange tekst er det noe feil. Se på feilmeldingen(e), kanskje klarer du å fikse det selv. Hvis ikke, ta et skjermbilde og legg inn her i tråden. Det er mye som kan knirke i starten, så det er mer normalt enn unormalt at ikke alt er på stell. Virker det på første forsøk synes jeg nesten du fortjener en øl til :beercheers:

Da mangler bare siste steg som er Blynk, kommer tilbake til det.
 
Sist redigert:
Jeg har funnet et ESP8266 kort som håndterer ekte Deep sleep. Dette passer perfekt for batteridrift. Kortet kan kjøre Amarillo sin kode over.
Denne er også perfekt dersom du skal lage en Tilt selv.
Den koster 20$ via Tindie
Jeg har fått et tilbud på 15$ + forsendelse.
Dersom flere ønsker en slik enhet til samme pris, send meg en PM slik at vi ikke roter til Amarillo sin tråd [emoji4]
http://www.kevindarrah.com/wiki/index.php?title=TrigBoard
Dersom vi blir tilstrekkelig mange, sender en bestilling i løpet av en uke
7c094658d6932d5dcb22323509e7c739.png
 
Interessant kort, men det virker som at det trenger en ekstern hendelse for å vekkes? Typisk en dør/vindu med magnetbryter som lukkes/åpnes. I tillegg vekker den seg selv en gang hver time for å sjekke spenning på batteriet. Kan jo sikkert måle temperaturen samtidig, men blir vel litt langt intervall.

Fysisk vekking fra deepsleep var noe vi diskuterte i tråden for wifi gjæringstemperatur så vidt jeg husker, der ville den passet godt.
 
Kortet har BÅDE ekstern trigger og intern klokke for oppvåkning
«The board will wake itself up once an hour to check the battery voltage - if running low, a push notification is sent to warn the user. This timer can be used to check other things as well - temperature changes, accelerometers, or other environmental sensors.»
 
Interessant kort, men det virker som at det trenger en ekstern hendelse for å vekkes? Typisk en dør/vindu med magnetbryter som lukkes/åpnes. I tillegg vekker den seg selv en gang hver time for å sjekke spenning på batteriet. Kan jo sikkert måle temperaturen samtidig, men blir vel litt langt intervall.

Fysisk vekking fra deepsleep var noe vi diskuterte i tråden for wifi gjæringstemperatur så vidt jeg husker, der ville den passet godt.
Man behøver ikke sjekke mer enn 1 gang i timen for å måle FG? I linken så står det "This timer can be used to...", betyr det at det er mulig å endre wake-up intervallene? Da kan man jo sjekke målingene så ofte man vil.
 
Tiden skal kunne styres. Jeg kommer til å samle data hvert 5 min, men kun sende data hver time. Innsamling krever langt mindre strøm enn sending
 
Nei. Det er feil.
Den har en timer chip TPL5111 som ligger på utsiden av esp8266
se følgende video fra 4:00 min inn og 15:00 inn
 
Ok, det stemmer sikkert. Men alt av esp som selges, helt fra esp-01 har muligheten for klokkestyrt deepSleep, de har vel en timer chip festet på kretskortet. Men trigBoard har en annen type klokkestyrt dvalefunksjon?
 
Siste steg, Blynk.
Blynk er en app der du kan bygge styringssystemer via wifi eller mobildata. Med Blynk kan du bygge en egen app og hente sensor-data og styre f.eks. reléer fra hvor som helst bare du har tilgang til nett. Å lage egne apper er uoppnåelig for de fleste av oss, men med Blynk går det som en lek.

Søk på Blynk på Google Play for Android eller App Store for iPhone/iPad. Last ned og installer.

Velg 'New Project'
new.jpg

Legg inn et navn på prosjektet, f.eks. 'Temperaturmåler'. På 'Choose Device' velg 'NodeMCU' fra listen. Trykk 'Create'.
create.jpg
Du får beskjed om at 'Auth Token' er sendt til epost-adressen din. Denne skal legges inn i koden etterpå for at appen og din nodeMCU skal linkes sammen.

Da har du en blank app som du kan fylle med såkalte widgets, det kan være display, knapper, joysticks, timere, leds, grafer og mye mer. Plussen i det grønne feltet åpner widget-boksen der du kan se alt som kan legges til. For dette prosjektet velg 'Gauge' under 'Displays'. Denne vil vise temperaturen fra sensoren. Når du har den på skjermen så trykk på den og hold en liten stund for å forandre størrelse. Dette vil bli hoved-displayet på appen så forstørr den til den fyller nesten hele skjermen. Trykk en gang for å gå ut av resize-modus.
gauge.jpg

Trykk en gang til for å komme inn på innstillinger. Blynk bruker noe de kaller virtuelle pins. I koden på enheten blir f.eks. data fra en sensor hentet inn og lagt på en virtuell pin. Blynk kan også styre fysiske pins på en enhet, men som regel bruker man de virtuelle. I koden min er det denne setningen: Blynk.virtualWrite(1, temperatur); som legger temperaturen fra sensoren på virtuell pin 1 og sender data til Blynk-serveren. Ved å tilegne virtuell pin 1 til displayet vi har laget, vil appen hente data fra serveren og vise denne i displayet. Måten vi gjør dette på er å velge 'Virtual' og 'V1' i 'Input' i innstillinger. Her kan du også velge hvilken skala displayet skal ha, farge, skrive navn på displayet og velge fontstørrelse.
settings.jpg

Dette displayet er alt som skal til for å vise temperaturen, men jeg har lagt til noe mer som er kjekt å ha. To display som viser maks og min temperatur, en knapp for å nulle disse, og knapper for å kalibrere sensoren.

De to displayene for max og min finner du også under 'Displays' og heter 'Labeled Value'. Instillinger vises her:
min.jpg maxlabel.jpg

Knappen finner du under 'Controllers' og heter 'Styled Button'. Her kan man leke seg med mye forskjellig når det gjelder utforming og farger, det eneste som er viktig er at den kobles til V3. Den er kodet sånn at den må holdes inne i minst 1 sekund for å nulle de to displayene. Dette er gjort for at man ikke skal nulle ved en feiltagelse hvis man kommer borti knappen.
button.jpg

Til kalibrering har jeg brukt en 'Step H' widget som du finner under 'Controllers'.
step.jpg

Denne har jeg lagt under de andre så den ikke vises til vanlig, men er lett å finne ved å scrolle opp. Dette er den eneste widgeten som man ikke kan forandre størrelse på, det kan man på de andre. Alle kan flyttes og legges der man vil for å lage sin egen layout, denne er ikke fast, men kan når som helst forandres så det er bare å prøve seg fram.
app1.jpg app2.jpg

Hver gang du bruker en widget betaler du med en viss mengde 'energy'. Jeg tror du starter med 2000 energy, og det rekker akkurat til en enkel app som dette, den bruker 1900. Widgets som f.eks. 'Super Chart' som er en graf som viser utvikling over tid koster 900 energy, og vil kreve at man kjøper ekstra energy for noen kroner. Det fine er at når du sletter en widget får du tilbake like mye energy som den kostet, så det er enkelt å prøve ut nye design.

For å koble sammen Blynk-appen med din hardware må du legge inn 'Auth Token' du fikk tilsendt på epost. Det er en kode med 32 tegn som må legges inn i koden. I koden finner du denne linjen:
const char auth[] = "";
Mellom anførselstegnene skal koden legges, på samme måte som ssid og wifi-passord ble lagt inn.
Den nye koden må deretter lastes over på NodeMCU igjen.

Når dette er gjort og den står og blinker hvert 5. sekund kan du starte appen. Det gjør du med pila øverst til høyre. Hvis alt er riktig vil du da få temperaturen på displayet. Min har stått en ukes tid uten feil nå, så alt skal fungere stabilt.

Hvis noe ikke fungerer, eller du har spørsmål så legg det ut her og jeg skal prøve å svare. Det ble mye info, men ikke mist motet av den grunn, ta en ting om gangen så er det overkommelig.

Lykke til!
 
Sist redigert:
testet Blynk for for noen år siden når de ble lansert. Utrolig artig :)
Måtte forsøke igjen nå, med din kode... Tusen takk for kode.
Jeg fikk opprinnelig ikke min og max til å fungere. Trykket tilfeldigvis på resett, så fungerte de plutselig. Dette bør du muligens legge inn i bruksanvisningen - som forøvrig er strålende.
M
 
Tilbake
Topp