Kazalo:

Še ena pametna vremenska postaja, vendar : 6 korakov (s slikami)
Še ena pametna vremenska postaja, vendar : 6 korakov (s slikami)

Video: Še ena pametna vremenska postaja, vendar : 6 korakov (s slikami)

Video: Še ena pametna vremenska postaja, vendar : 6 korakov (s slikami)
Video: HAYLOU Xiaomi RS4 (LS12) Smart Watch IP68: Things To Know // In-Depth Review 2024, Junij
Anonim
Image
Image
Še ena pametna vremenska postaja, vendar …
Še ena pametna vremenska postaja, vendar …
Še ena pametna vremenska postaja, vendar …
Še ena pametna vremenska postaja, vendar …
Še ena pametna vremenska postaja, vendar …
Še ena pametna vremenska postaja, vendar …

V redu, vem, da je povsod na voljo toliko takih vremenskih postaj, vendar si vzemite nekaj minut, da vidite razliko…

  • Nizka moč
  • 2 zaslona za e-papir…
  • ampak 10 različnih zaslonov!
  • Na osnovi ESP32
  • merilnika pospeška in senzorjev temperature / vlažnosti
  • Posodobitev Wi -Fi
  • 3D natisnjena torbica

in še veliko drugih uporabnih trikov …

Glavna ideja je prikazati različne informacije na obeh zaslonih, odvisno od orientacije škatle. Ohišje je v obliki paralelepipedične škatle, tlakovca, z nekakšnim pasom, ki služi kot noga.

Zaloge

Kot lahko vidite, je sistem sestavljen iz 2 zaslonov e-papirja in 3D natisnjene škatle. Je pa v tem veliko stvari:

  • ESP32
  • En merilnik pospeška MPU6050
  • Senzor DHT22
  • LiPo baterija
  • PCB za povezavo celotne stvari
  • Domače niti duPont

in povezavo Wi-Fi. Dejansko so prijavljena 3 omrežja, sistem jih preizkuša eno za drugim, dokler se ne uspe povezati.

1. korak: Zakaj druga vremenska postaja?

Zakaj druga vremenska postaja?
Zakaj druga vremenska postaja?
Zakaj druga vremenska postaja?
Zakaj druga vremenska postaja?
Zakaj druga vremenska postaja?
Zakaj druga vremenska postaja?
Zakaj druga vremenska postaja?
Zakaj druga vremenska postaja?

Ideja je prikazati različne vrste informacij na obeh zaslonih, odvisno od orientacije škatle. Ohišje je v obliki paralelepipedske škatle, tlakovca, z nekakšnim pasom, ki služi kot opora, da stoji.

Merilnik pospeška zazna gibanje in orientacijo ter sproži zaslone.

Zaradi varčevanja z energijo sem izbral zaslone za e-papir (glej spodaj navedene reference), ki ohranijo zaslon, tudi če nimajo več napajanja. Podobno za ESP32 sem izbral modul Lolin32 (znan po svoji varčnosti) in se moral naučiti obvladovati globok spanec ter prebujanje ob prekinitvah, ki jih ustvari merilnik pospeška.

Zasloni so povezani prek SPI, kar nekaj sem iskal, preden sem našel prave zatiče, ki bi jih povezali z ESP32, saj sem vedel, da potrebujem tudi I2C za merilnik pospeška, pin za branje DHT22 in 2 druga za merjenje napetosti akumulatorja. ESP32 je skoraj popolnoma napolnjen! Ker vemo, da so nekateri zatiči samo za branje (uporabil sem jih za senzor DHT), drugih ni mogoče uporabljati skupaj z Wifi, iskanje prave konfiguracije je bilo nekoliko zapleteno.

Škatla je lahko usmerjena v 4 smeri in ravno. Vse skupaj omogoča 4*2+2 = 10 možnih vrst informacij za prikaz na samo 2 zaslonih. Tako lahko prikažete veliko stvari:

  • Datum in svetnik dneva
  • Trenutni čas
  • Današnja vremenska napoved
  • Vremenske napovedi za prihodnje ure
  • Vremenska napoved za prihodnje dni
  • Raven napolnjenosti baterije
  • In ker sem imel še prostor, naključni citat s specializirane spletne strani.

2. korak: Kaj potrebujete?

Kaj potrebujete?
Kaj potrebujete?
Kaj potrebujete?
Kaj potrebujete?
Kaj potrebujete?
Kaj potrebujete?
  • ESP32: Modul Lolin32 (zelo nizka moč, opremljen s priključkom za baterijo, lahko polni baterijo prek USB -ja plus)
  • 2 zaslona za papir: 4,2 in 2,9 palca. Modele sem izbrala v trgovini Good Display.
  • Senzor DHT22
  • Merilnik pospeška MCU6050 - senzor žirometer I2C
  • LiPo baterija
  • Za merjenje napetosti akumulatorja: 2 10k uporov, 1 100k upor, 1 100nF kondenzator, 1 MOSFET tranzistor
  • Spajkalnik in spajkalnik, tiskano vezje
  • Dostop do 3D tiskalnika za ohišje

Na priloženi sliki je prikazan položaj vseh komponent na tiskanem vezju: prihraniti sem moral prostor za namestitev v ohišje, ki ne bi smelo biti preveliko.

Če želite dobiti vremenske podatke, se morate registrirati tudi v vremenskih vmesnikih API in ključe postaviti na ustrezna mesta v datoteki »Variables.h« (glejte spodaj).

Vremenske spletne strani:

  • apixu
  • accuweather

3. korak: Ta projekt me je prepričal in se veliko naučil …

Ta projekt me je veliko zamislil in se naučil…
Ta projekt me je veliko zamislil in se naučil…
Ta projekt me je veliko zamislil in se naučil…
Ta projekt me je veliko zamislil in se naučil…
Ta projekt me je veliko zamislil in se naučil…
Ta projekt me je veliko zamislil in se naučil…

Ta sistem naj bi bil nizke porabe energije, tako da vam baterije ni treba polniti vsako noč … Zaradi varčevanja z energijo sem izbral zaslone za e-papir, ki ohranijo zaslon, tudi če niso več napajani. Podobno za ESP32 sem izbral modul Lolin32 (znan po svoji varčnosti) in se moral naučiti obvladovati globok spanec ter prebudilni klic ob prekinitvah, ki jih ustvari merilnik pospeška.

Škatla je lahko usmerjena v 4 smeri, bolj ravna. Vse skupaj omogoča 4*2+2 = 10 možnih vrst informacij za prikaz. Tako vam omogoča veliko stvari: datum in svetnika dneva, čas, današnjo vremensko napoved, vremenske napovedi za prihodnje ure ali dni, raven napolnjenosti baterije in naključno ponudbo s specializiranega spletnega mesta.

Na internetu je veliko za iskati in kot veste: WiFi je sovražnik varčevanja z energijo …

Zato moramo upravljati povezavo, da prikažemo najnovejše informacije, vendar ne porabimo preveč časa za povezovanje. Še en precej zapleten problem: ohranjanje dokaj natančnega časa. RTC -ja ne potrebujem, saj lahko najdem čas na internetu, vendar se notranja ura ESP32 precej premika, zlasti med spanjem. Moral sem najti način, kako ostati dovolj natančen, medtem ko sem čakal na ponastavitev ure po internetu. Vsako uro ga znova sinhroniziram na internetu.

Torej obstaja kompromis med avtonomijo (pogostostjo internetnih povezav) in natančnostjo prikazanih informacij.

Drug problem, ki ga je treba rešiti, je spomin. Ko je ESP32 v globokem spanju, se izgubi pomnilnik, razen tistega, kar se imenuje RTC RAM. Ta pomnilnik je širok 4 MB, od tega je za program mogoče uporabiti le 2. V ta spomin moram shraniti različne programske spremenljivke, ki jih je treba med fazo spanja hraniti od ene do druge izvedbe: vremenske napovedi, čas in datum, imena datotek z ikonami, narekovaje itd..

Ko govorimo o ikonah, so shranjene v datotečnem sistemu ESP32 SPIFFS. Po zaprtju brezplačnega vremenskega vmesnika Wunderground sem moral poiskati druge brezplačne ponudnike vremenskih podatkov. Izbral sem dva: enega za vreme za trenutni dan z 12 urnimi napovedmi in drugega za večdnevne napovedi. Ikone niso enake, zato sem povzročil dve novi težavi:

  • Izberite nabor ikon
  • Ujemajte te ikone s kodami napovedi dveh spletnih mest

Ta korespondenca je bila shranjena tudi v pomnilniku RTC, tako da je ni treba vsakič znova naložiti.

Zadnja težava z ikonami. Vseh je nemogoče shraniti v SPIFFS. Prostor je premajhen za vse moje datoteke. Treba je bilo stisniti sliko. Napisal sem skript v Pythonu, ki bere moje datoteke z ikonami in jih stisne v RLE, nato pa stisnjene datoteke shrani v SPIFFS. Tam je držalo.

Toda knjižnica za prikaz e-papirja sprejema samo datoteke tipa BMP, ne stisnjene slike. Zato sem moral napisati dodatno funkcijo, da sem lahko prikazal svoje ikone iz teh stisnjenih datotek.

Podatki, prebrani na internetu, so pogosto v formatu json: vremenski podatki, sveti dan. Za to uporabljam (odlično) knjižnico arduinoJson. Citati pa niso takšni. Vzamem jih z namenskega spletnega mesta, zato jih moram prebrati tako, da pogledam neposredno v vsebino spletne strani. Za to sem moral napisati posebno kodo. Vsak dan, okoli polnoči, program obišče to spletno mesto in prebere približno deset naključnih narekovajev ter jih shrani v pomnilnik RTC. Ena je naključno prikazana med njimi, ko je ohišje obrnjeno z velikim zaslonom navzgor.

Predstavljam vam problem prikaza naglašenih znakov (oprostite, ampak narekovaji so v francoščini)….

Ko je majhen zaslon navzgor, se prikaže napetost baterije z risbo, da bolje vidite preostalo raven. Za odčitavanje napetosti akumulatorja je bilo treba izdelati elektronski sklop. Ker meritev ne bi smela izprazniti baterije, sem uporabil diagram, ki ga najdem na internetu, ki uporablja tranzistor MOSFET kot stikalo, da porabi tok le, ko se izvede meritev.

Da bi lahko naredil to vezje in vse spravil v škatlo, ki sem jo želel čim manjše, sem moral narediti tiskano vezje za povezavo vseh komponent sistema. To je moje prvo tiskano vezje. Imel sem srečo, ker je na tej strani prvič vse dobro delovalo …

Oglejte si zemljevid implantacije: "prepovedano območje" je območje, rezervirano za priključitev kabla USB. Modul Lolin32 vam omogoča, da napolnite baterijo prek USB -ja: baterija se napolni, če je priključen kabel USB, in modul deluje hkrati.

Zadnja točka: pisave. Različne velikosti, krepke ali ne, jih je bilo treba ustvariti in shraniti. Knjižnica Adafruit GFX za to zelo dobro poskrbi, potem ko ste datoteke pisav namestili v pravi imenik. Za ustvarjanje datotek sem uporabil spletno mesto Font Converter, zelo priročno!

Prepričajte se, da ste izbrali:

  • Zaslon za predogled: TFT 2.4"
  • Knjižnična različica: pisava Adafruit GFX

Če povzamem: velik projekt, ki mi je omogočil, da sem se naučil veliko stvari

4. korak: Uporaba zaslonov za e-papir

Uporaba zaslonov za e-papir
Uporaba zaslonov za e-papir

Glavna pomanjkljivost teh zaslonov je jasno vidna na videoposnetku: posodobitev zaslona traja eno ali dve sekundi in se izvede z utripanjem (alternativni prikaz običajne in obrnjene različice obeh zaslonov). To je sprejemljivo za vremenske podatke, ker jih ne posodabljam pogosto (vsako uro, razen spremembe orientacije polja). Ampak ne zaenkrat. Zato (in za omejitev porabe) še vedno uporabljam zaslon HH: MM (ne sekund).

Zato sem moral poiskati drug način za posodobitev zaslona. Ti zasloni (nekateri od njih) podpirajo delno posodobitev (uporabljeno bodisi za območje zaslona ali za celoten zaslon …), vendar zame ni bilo dobro, ker moj velik zaslon (ki prikazuje čas) ohranja duhove slikovnih pik ki se zamenjajo. Na primer, pri prehodu z 10:12 na 10:13 je '2' malo vidno znotraj '3' in postane še bolj vidno po '4', '5' itd. da poudarim, da to velja za moj zaslon: o tem sem se pogovarjal z avtorjem knjižnice za prikaz e-papirja GxEPD2, ki mi je povedal, da tega pojava ni opazoval s svojimi zasloni. Poskušali smo spremeniti parametre, vendar nismo uspeli loviti duhov.

Zato smo morali najti drugo rešitev: predlagal sem delno dvojno osvežitev, ki je rešila problem (vsaj zame je zadovoljiv). Ure minevajo, ne da bi zaslon utripal in ni duhov. Prehod pa ni takojšen: za spremembo časa traja nekaj več kot eno sekundo.

5. korak: Ustvarite

Ustvarjanje
Ustvarjanje
Ustvarjanje
Ustvarjanje
Ustvarjanje
Ustvarjanje
Ustvarjanje
Ustvarjanje

Za zagotovitev, da se ob spremembi orientacije v notranjosti nič ne premakne, so različne komponente (zasloni, elektronski moduli, tiskana vezja, baterije) zlepljene s pištolo za lepilo. Za napeljavo žic pod tiskano vezje sem jo namestil na noge, narejene z distančniki, enako velja za baterijo.

Kmalu bom namestil zunanji priključek za mikrofon USB, da mi ne bo treba odpirati ohišja, da napolnim baterijo.

Mogoče me bo zanimala tudi posodobitev s strani OTA, da bo vse skupaj izpopolnilo …

6. korak: Koda in datoteke

Image
Image

Na voljo so tri arhivske datoteke:

  • Weather station.zip: koda Arduino za nalaganje z uporabo Arduino IDE
  • Boite ecran.zip: datoteke CAD in 3D tiskalnika za ohišje
  • data.zip: datoteke, ki jih je treba naložiti v SPIFFS ESP32.

Če ne veste, kako naložiti datoteke v SPIFFS ESP32, samo preberite to vadnico, ki predstavlja zelo uporaben vtičnik in kako ga uporabljati v Arduino IDE.

Programiranje globokega spanja se precej razlikuje od standardnega programiranja Arduina. Za ESP32 to pomeni, da se ESP32 zbudi in izvede nastavitev, nato pa zaspi. Torej je funkcija zanke prazna in se nikoli ne izvede.

Neko inicializacijsko fazo je treba zagnati samo enkrat pri prvi izvedbi (na primer pridobivanje časa, vremenskih podatkov, narekovajev itd.), Zato mora ESP32 vedeti, ali je trenutno prebujanje prvo ali ne: rešitev je shranjevanje spremenljivke v pomnilnik RTC (ki ostane aktivna tudi v fazah globokega spanja), ki se poveča ob vsakem prebujanju. Če je enako 1, je to prva izvedba in ESP32 zažene fazo inicializacije, sicer se ta faza preskoči.

Če želite prebuditi ESP32, obstaja več možnosti:

  • Časovna prebujanje: koda izračuna trajanje globokega spanca pred spanjem. To se uporablja za posodobitev časa (vsake 1, 2, 3 ali 5 minut) ali vremenskih podatkov (vsake 3 ali 4 ure) citatov in svetnika dneva (vsakih 24 ur)
  • Prekinitev prebujanja: merilnik pospeška pošlje signal, ki se uporablja za prebujanje ESP32. To se uporablja za zaznavanje spremembe orientacije in posodabljanje zaslonov
  • Zbujanje senzorja na dotik: ESP32 je opremljen z več nožicami, ki delujejo kot senzorji na dotik, vendar jih ni mogoče uporabiti s časovnim prebujanjem, zato tega nisem uporabil.

Drugje v kodi obstajajo drugi programski triki, da ohranite čas točen in hkrati prihranite energijo (tj. Ne povežete strežnika NTP vsako minuto), da odstranite poudarke, ki jih knjižnica Adafruit GFX ne podpira, da se izognete posodobitvi zaslona, če ni nujno, da nastavite parametre merilnika pospeška, zlasti za prekinitev prebujanja, natančno izračunajte čas spanja v primeru prebujanja časovnika, izogibajte se uporabi serijske konzole, če ni povezana z IDE (za varčevanje z energijo), odklopite wifi, kadar ni potreben itd … in koda je polna komentarjev, ki pomagajo razumeti funkcije.

Hvala, ker ste prebrali ta Instructable (moj prvi). Upam, da vam bo všeč in da boste uživali pri izdelavi te vremenske postaje

Natečaj senzorjev
Natečaj senzorjev

Podprvak na tekmovanju senzorjev

Priporočena: