

Brygge-enheten er plassert på en rekkverkstolpe i sørenden av badebryggen.
Grunnidéen var å kunne lese av vanntemperaturen på hytta. Så har det ballet på seg med mer eller mindre gode utvidelser av dette konseptet, som;
Hvis man først har et termometer på brygga, bør man jo kunne lese av temperaturen der også?
Hvorfor ikke kunne lese temperaturen andre steder enn bare i hytta?
Hadde det ikke vært kult med litt statistikk også?
Dette er egentlig versjon 2 av dette prosjektet. Jeg bygget første versjonen i fjor, men den var det så mye trøbbel med at det ikke hadde livets rett.
Det har vært nok trøbbel med versjon 2 også, men omsider er de fleste feilene rettet og systemet ser p.t ut til å fungere ganske godt.
Systemet består av to enheter, én på badebrygga på Sydstranda og én i vår hytte.
Brygge-enheten måler vanntemperaturen ved hjelp av en sensor i vannet. Deretter regner den ut trenden; Er temperaturen på vei opp eller ned, eller er den uendret? Den sjekker også om temperaturen er dagens høyeste.
Så oppdateres displayet med temperatur, klokkeslett, trend og dagens høyeste temperatur med tidspunkt. Displayet inneholder også en QR-kode du kan scanne. Den fører deg til nettsiden https://badetemp.jenner.no, hvor temperaturen og litt statistikk publiseres.
Etter at displayet er oppdatert, går enheten i dyp dvale til det er på tide å våkne igjen og gjenta syklusen.
Hytte-enheten har internettforbindelse og har en oppdatert klokke. Enheten tar imot temperaturen og en del andre verdier som brygge-enheten sender.
Disse verdiene sendes så til en kanal hos ThingSpeak. Det er en Data collector for IoT-enheter, som enkelt presenterer dataene i et format for web-sider. En web-server leser kanalen hos ThingSpeak og presenterer en web-side med vanntemperatur og historikk for de to siste døgnene.
Hver gang hytte-enheten mottar data fra brygge-enheten, responderer den med en kvittering som inneholder korrekt klokkeslett, som hytte-enheten henter fra en NTP-server (Network Time Protocol) på internett. På den måten kan brygge-enheten regne ut hvor lenge den skal gå i dvale før det er på tide å våkne igjen.

Prinsippskisse over systemet
Nettsiden som presenterer temperaturen er veldig enkel. Den inneholder bare to "widgets" som den henter fra ThinkSpeak som viser henholdsvis siste registrerte vanntemperatur og en graf over temperaturen de siste 48 timene.


Nettsiden vist på en mobil.
Dersom man scroller ned til bunn av siden, finner man litt info mo prosjektet, samt linker til Mer om Prosjekt Badetermometer og Telemetri-info.
Mer om Prosjekt Badetermometer er jo denne siden og Telemetri-info er en side som viser litt mer teknisk statistikk, som batterispenning, ladestatus, styrke på radiosignalene i begge ender, og ev tapte datapakker i begge retninger.
Det er noen forhold som gjør systemet litt mer komplekst enn man kanskje skulle tro. Og det måtte litt prøving og feiling til, før jeg kom frem til passende komponenter og moduler, og å ha fått koden til å fungere tilfredsstillende.
Det som la de største føringene i designet er faktumet at det ikke er noen strøm ved badebrygga. Dermed måtte brygge-enheten bli batteridrevet med mulighet for å lades via solceller. Da jeg ikke ønsket at enheten på brygga skulle bli for stor, ble det et beskjedent batteri og noen ganske små solcellepaneler. Dette førte igjen til et aldri så lite jag etter å spare strøm.
Kommunikasjonen fra brygga til hytta måtte forholde seg til et lavt strømbudsjett. WiFi ville brukt ganske mye strøm, spesielt når avstanden er så stor. Og det er slett ikke sikker det ville fungert, selv med store, retningsstyrte antenner. Så, WiFi var utelukket. Valget falt i stedet på LoRa-radioer. Dette er lav-effekt radioer som opererer på 868MHz-båndet og kan sende over store avstander (opp mot 15 km) med relativt lavt effektforbruk. Ulempen er at datamengden og hastigheten også er lav.
Mikroprosessoren som ble valgt, en ESP32 fra Espressif, har fordelen av at den kan gå i dyp dvale. Da bruker den minimalt med strøm (ca 15µA). For å utnytte dette, bestemte jeg meg for at temperaturen bare skulle registreres én gang i timen. For å spare enda mer strøm, måtte også øvrige komponenter på brygga kunne gå i dvale. LoRa-modulen som er valgt til dette prosjektet kan dette. Men, hvis radioen er i dvale, kan ikke hytte-enheten kontrakte brygge-enheten. Så brygge-enheten må selv holde greie på når den skal våkne.
For at også displayet skulle spare maksimalt med strøm, falt valget på et E-paper-display. Dette er samme type som viser prisene på butikkhyllene. Det unike med E-paper display er at de kun bruker strøm når de oppdateres. Etter det, kan strømmen kobles fra og infomasjonen blir stående i displayet for evig (i hvert fall noen måneder).
Den eneste modulen som ikke er i stand til å gå i dvale eller på annen måte spare strøm, er spenningsregulatoren. Når alt annet er i dvale, trekker den fortsatt en noe strøm.
Boksen som det hele ble bygge inn i har litt "industri-preg", men jeg liker at man ser modulene gjennom det klare dekselet.
På hytta eksisterer ikke samme begrensningene, der er det både strøm og trådløst internett tilgjengelig. Enheten på hytta består av samme mikroprosessor som i brygge-enheten. Dels er det praktisk å forholde seg til samme type CPU, men også fordi den har en RTC-modul og en WiFi-modul innebygget. Og det er akkurat det som trengs i hytta. Enheten bruker WiFi til å koble seg til interenett hvor den synkroniserer sin egen Real Time Clock (RTC) med en NTP-server (Network Time Protocol) på internett. Den har også kontakt med ThingSpeak, som er en Data collector for IoT-enheter. Dit sendes vanntemperaturen og klokkeslett, sammen med en del telemetri-data.
Sist i informasjons-kjeden er en Web-server. Denne leser bare dataene fra ThingSpeak og presenterer vanntemperatur og litt statistikk. (I tillegg har jeg lagt denne artikkelen der.) Fordi kanalen jeg benytter hos ThinkSpeak er satt "åpen" kan alle som ønsker, hente informasjonen der.
| Mikroprosessormodul: | ESP32 Wroom Devkit v1 | |
| Radiomodul: | Ebyte LoRa E220-900T22D | |
| Display: | MH-ET Live, 2.13" E-paper | |
| Temperatursensor: | Luxorparts DS18B20 | |
| Solcellepanel: | No-brand, 2x 0.3W 5V | |
| Solcellelademodul: | Eletechsup SDBK03TA | |
| Spenningsmodul: | LC technology SX1308 | |
| LiPo-batteri: | 1100mAh |

Alle moduler i brygge-enheten
| Mikroprosessormodul: | ESP32 Wroom Devkit v1 | |
| Radiomodul: | Ebyte LoRa E220-900T22D | |
| (I tillegg til en 5V strømforsyning (type wall-wart) |
Hytte-enheten er pr nå plassert på en terrasse-søyle på hyttas vestside. Mulig den blir flyttet inn, med en ekstern antenne på utsiden av hytta.
Skissen nedenfor beskriver trafikkflyten i hele systemet. De to enhetene lever sine egne liv, men blir synkronisert.
Når hytte-enheten starter (oransje start-boble i skissen), begynner den med en NTP-sync for å få riktig klokke. Deretter oppdateres klokken med en ny sync mot NTP-serveren én gang i halvtimen.
Når brygge-enheten starter (blå start-boble), begynner den med å sende en "Time request" til hytte-enheten for å få riktig tid. Deretter regner den ut hvor lenge den skal sove og går i dvale. Når den våkner igjen, leser den temperaturen fra sensoren, gjør noen kalkuleringer og viser temperatur med mer i displayet. Deretter sender den data til hytte-enheten, får en ny kvittering med korrekt klokke, regner ut ny tid å sove og går i dvale igjen.
Hver gang hytte-enheten mottar data, sender den disse videre til ThingSpeak.
Helt til høyre vises Web-serveren som periodisk oppdaterer siden med informasjon fra ThingSpeak.

Dataflyt i hele systemet
Mikroprosessorene er programmert i C++. Brygge-enheten har ca 450 linjer med kode, hytte-enheten rundt 300.
Begge er satt opp med mulighet for å oppdateres over WiFi, også kalt OTA, (Over The Air). Hytte-enheten benytter jo WiFi for å kommunisere med internett, så der er OTA alltid tilgjengelig. Brygge-enheten har jo ikke WiFi slått på vanligvis, men dette kan aktiveres når en oppgradering skal skje. Da kan jeg sitte på brygga med en laptop og oppgradere koden via OTA, uten å åpne boksen, eller koble til noen ledninger.