Sisällysluettelo:

Vielä yksi älykäs sääasema, mutta : 6 vaihetta (kuvilla)
Vielä yksi älykäs sääasema, mutta : 6 vaihetta (kuvilla)

Video: Vielä yksi älykäs sääasema, mutta : 6 vaihetta (kuvilla)

Video: Vielä yksi älykäs sääasema, mutta : 6 vaihetta (kuvilla)
Video: KUILUUN - Skinwalker Ranch Brandon Fugal kanssa (Viimeisimmät näkemykset) 2024, Marraskuu
Anonim
Image
Image
Vielä yksi älykäs sääasema, mutta…
Vielä yksi älykäs sääasema, mutta…
Vielä yksi älykäs sääasema, mutta…
Vielä yksi älykäs sääasema, mutta…
Vielä yksi älykäs sääasema, mutta…
Vielä yksi älykäs sääasema, mutta…

OK, tiedän, että tällaisia sääasemia on saatavilla kaikkialla, mutta kestää muutaman minuutin nähdä ero …

  • Virta vähissä
  • 2 e-paperinäyttöä…
  • mutta 10 eri näyttöä!
  • ESP32 -pohjainen
  • kiihtyvyysanturi ja lämpötila / kosteusanturit
  • Wifi päivitys
  • 3D -painettu kotelo

ja paljon muita hyödyllisiä temppuja …

Pääidea on näyttää erilaisia tietoja molemmissa näytöissä laatikon suunnasta riippuen. Kotelo on muotoinen rinnakkaisputkinen laatta, päällystyskivi, jossa on eräänlainen vyö, joka toimii jaloina.

Tarvikkeet

Kuten näette, järjestelmä koostuu kahdesta e-paperinäytöstä ja 3D-tulostetusta laatikosta. Mutta siinä on paljon asioita:

  • ESP32
  • Yksi MPU6050 -kiihtyvyysanturi
  • DHT22 -anturi
  • LiPo -akku
  • Piirilevy, joka yhdistää kaiken
  • Kotitekoisia duPont -lankoja

ja Wi-Fi-yhteys. Itse asiassa kolme verkkoa on ilmoitettu, järjestelmä testaa niitä yksi kerrallaan, kunnes se onnistuu muodostamaan yhteyden.

Vaihe 1: Miksi toinen sääasema?

Miksi toinen sääasema?
Miksi toinen sääasema?
Miksi toinen sääasema?
Miksi toinen sääasema?
Miksi toinen sääasema?
Miksi toinen sääasema?
Miksi toinen sääasema?
Miksi toinen sääasema?

Ajatuksena on näyttää erilaisia tietoja molemmilla näytöillä laatikon suunnasta riippuen. Kotelo on rinnakkaisputkimaisen laatikon muotoinen, päällystyskivi, jossa on eräänlainen vyö, joka toimii tukena sen seisomiseen.

Kiihtyvyysmittari tunnistaa liikkeen ja suunnan ja käynnistää näytöt.

Energian säästämiseksi valitsin sähköiset paperinäytöt (katso viitteet alla), jotka pitävät näytön, vaikka niissä ei enää olisi virtaa. Samoin ESP32: n kohdalla valitsin Lolin32-moduulin (joka on tunnettu säästäväisyydestään) ja minun piti oppia hallitsemaan syvää unta ja kiihtyvyysmittarin aiheuttamaa keskeytyksen heräämistä.

Näytöt on kytketty SPI: n kautta, etsin melko vähän ennen kuin löysin oikeat nastat niiden liittämiseksi ESP32: een tietäen, että tarvitsen myös kiihtyvyysmittarin I2C: n, tapin DHT22: n lukemiseen ja kaksi muuta akun jännitteen mittaamiseen. ESP32 on lähes täyteen ladattu! Tietäen, että jotkut nastat ovat vain luku -tilaa (käytin niitä DHT-anturille), toisia ei voi käyttää yhdessä Wifin kanssa, oikean kokoonpanon löytäminen oli hieman monimutkaista.

Laatikko voidaan suunnata neljään suuntaan sekä litteäksi. Kaiken kaikkiaan 4*2+2 = 10 mahdollista informaatiotyyppiä näytettäväksi vain kahdella näytöllä. Sen avulla voit näyttää monia asioita:

  • Päivämäärä ja päivän pyhimys
  • Nykyinen aika
  • Tämän päivän sääennuste
  • Sääennusteet tuleville tunneille
  • Sääennusteet tuleville päiville
  • Akun varaustaso
  • Ja koska minulla oli vielä tilaa, satunnainen lainaus erikoistuneelta verkkosivustolta.

Vaihe 2: Mitä tarvitset?

Mitä tarvitset ?
Mitä tarvitset ?
Mitä tarvitset ?
Mitä tarvitset ?
Mitä tarvitset ?
Mitä tarvitset ?
  • ESP32: Lolin32 -moduuli (erittäin pieni virta, varustettu akkuliittimellä, voi ladata akun USB plus -liitännän kautta)
  • 2 sähköpaperinäyttöä: 4,2 tuumaa ja 2,9 tuumaa. Valitsin mallit Good Display -kaupasta.
  • DHT22 -anturi
  • MCU6050 kiihtyvyysanturi - gyrometri I2C -anturi
  • LiPo -akku
  • Akun jännitteen mittaus: 2 10k vastukset, 1100k vastus, 1100nF kondensaattori, 1 MOSFET transistori
  • Juotos- ja juotosraudat, piirilevy
  • Pääsy kotelon 3D -tulostimeen

Liitteenä olevassa kuvassa näkyy kaikkien piirilevyn osien sijainti: Minun piti säästää tilaa, jotta se mahtuu koteloon, jonka ei pitäisi olla liian suuri.

Jotta saat säätiedot, sinun on myös rekisteröidyttävä sääsovellusliittymiin ja asetettava avaimet oikeisiin paikkoihin Variables.h -tiedostossa (katso alla).

Sääsivustot:

  • apixu
  • accuweather

Vaihe 3: Tämä projekti sai minut ajattelemaan ja oppimaan paljon…

Tämä projekti sai minut ajattelemaan ja oppimaan paljon…
Tämä projekti sai minut ajattelemaan ja oppimaan paljon…
Tämä projekti sai minut ajattelemaan ja oppimaan paljon…
Tämä projekti sai minut ajattelemaan ja oppimaan paljon…
Tämä projekti sai minut ajattelemaan ja oppimaan paljon…
Tämä projekti sai minut ajattelemaan ja oppimaan paljon…

Tämän järjestelmän piti kuluttaa vähän virtaa, joten sinun ei tarvitse ladata akkua joka ilta … Energian säästämiseksi valitsin sähköisen paperin näytöt, jotka pitävät näytön, vaikka niissä ei enää olisi virtaa. Samoin ESP32: n kohdalla valitsin Lolin32-moduulin (joka on tunnettu säästäväisyydestään) ja minun piti oppia hallitsemaan syvää unta ja kiihtyvyysmittarin aiheuttamaa herätystä.

Laatikko voidaan suunnata neljään suuntaan, tasaisemmin. Kaiken kaikkiaan 4*2+2 = 10 mahdollista näyttötyyppiä. Sen avulla voit tehdä monia asioita: päivämäärän ja päivän pyhimyksen, kellonajan, tämän päivän sääennusteen, sääennusteet tuleville tunneille tai päiville, akun varaustason ja satunnaisen lainauksen erikoissivustolta.

Se on paljon etsimistä Internetistä, ja kuten tiedät: WiFi on energiansäästön vihollinen …

Joten meidän on hallittava yhteyttä, jotta voimme näyttää ajantasaisia tietoja, mutta ilman liikaa aikaa yhteyden muodostamiseen. Toinen melko monimutkainen ongelma: melko tarkan ajan pitäminen. En tarvitse RTC: tä, koska löydän ajan Internetistä, mutta ESP32: n sisäinen kello liikkuu melko paljon, etenkin uniaikoina. Minun piti löytää tapa pysyä riittävän tarkana odottaessani kellon nollaamista Internetissä. Synkronoin sen uudelleen Internetissä joka tunti.

Itsenäisyyden (Internet-yhteyksien taajuus) ja näytettyjen tietojen oikeellisuuden välillä on siis kompromissi.

Toinen ongelma, joka on ratkaistava, on muisti. Kun ESP32 on syvässä unessa, muisti katoaa lukuun ottamatta RTC RAM -muistia. Tämä muisti on 4 Mt leveä, josta vain 2 voidaan käyttää ohjelmaan. Tähän muistiin minun on tallennettava eri ohjelmamuuttujat, jotka on säilytettävä suorittamisesta toiseen nukkumisvaiheen jälkeen: sääennusteet, aika ja päivämäärä, kuvaketiedostojen nimet, lainausmerkit jne. Minun oli opittava käsittelemään sitä.

Kuvakkeista puheen ollen, ne tallennetaan SPIFFS -tiedostojärjestelmään, ESP32 -tiedostojärjestelmään. Ilmaisen Wunderground -sääsovellusliittymän sulkemisen jälkeen minun piti etsiä muita ilmaisia säätietojen tarjoajia. Valitsin kaksi: yhden kuluvan päivän säälle, 12 tunnin ennusteille ja toisen monen päivän ennusteille. Kuvakkeet eivät ole samat, joten se aiheutti minulle kaksi uutta ongelmaa:

  • Valitse kuvakesarja
  • Yhdistä nämä kuvakkeet kahden sivuston ennustekoodeihin

Tämä kirjeenvaihto on myös tallennettu RTC -muistiin, jotta sitä ei tarvitse ladata joka kerta.

Viimeinen ongelma kuvakkeiden kanssa. Kaikkia niitä ei voi tallentaa SPIFFS -tiedostoihin. Tila on liian pieni kaikille tiedostoilleni. Oli pakko tehdä kuvan pakkaus. Kirjoitin Pythonissa komentosarjan, joka lukee kuvaketiedostoni ja pakkaa ne RLE -muotoon ja tallentaa sitten pakatut tiedostot SPIFFS -tiedostoon. Siellä se piti.

Mutta e-paperin näyttökirjasto ottaa vain BMP-tyyppisiä tiedostoja, ei pakattuja kuvia. Joten minun piti kirjoittaa lisätoiminto voidakseni näyttää kuvakkeet näistä pakatuista tiedostoista.

Internetistä luetut tiedot ovat usein json -muodossa: säätiedot, päivän pyhä. Käytän tähän (suurta) arduinoJson -kirjastoa. Mutta lainaukset eivät ole sellaisia. Otan ne erilliseltä sivustolta, joten minun on luettava ne katsomalla suoraan verkkosivun sisältöön. Minun piti kirjoittaa siihen erityinen koodi. Joka päivä, keskiyön aikaan, ohjelma menee tälle sivustolle ja lukee noin kymmenen satunnaista lainausta ja tallentaa ne RTC -muistiin. Yksi näytetään satunnaisesti, kun kotelo on suunnattu suurelle näytölle ylöspäin.

Välitän teille aksenttimerkkien näyttöongelman (anteeksi, mutta lainaukset ovat ranskaksi)….

Kun pieni näyttö on ylhäällä, akun jännite näytetään ja piirustus näyttää jäljellä olevan tason paremmin. Akun jännitteen lukemiseksi oli tehtävä elektroninen kokoonpano. Koska mittauksen ei pitäisi tyhjentää akkua, käytin Internetistä löytyvää kaaviota, jossa käytetään MOSFET -transistoria kytkimenä kuluttaakseen virtaa vain mittauksen yhteydessä.

Jotta voisin tehdä tämän piirin ja sovittaa kaikki laatikkoon, jonka halusin pienimmän mahdollisen, minun piti tehdä piirilevy järjestelmän kaikkien komponenttien liittämiseksi. Tämä on ensimmäinen PCB. Olin onnekas, koska kaikki toimi hyvin ensimmäistä kertaa tällä puolella …

Katso istutuskartta: "kielletty alue" on alue, joka on varattu USB -kaapelin liittämistä varten. Lolin32 -moduulin avulla voit ladata akun USB: n kautta: akku ladataan, jos USB -kaapeli on kytketty, ja moduuli toimii samanaikaisesti.

Viimeinen kohta: fontit. Eri kokoisia, lihavoituja tai ei, ne oli luotava ja tallennettava. Adafruit GFX -kirjasto huolehtii siitä erittäin hyvin, kun olet asentanut kirjasintiedostot oikeaan hakemistoon. Tiedostojen luomisessa käytin Font Converter -sivustoa, erittäin kätevää!

Varmista, että valitset:

  • Esikatselunäyttö: TFT 2,4"
  • Kirjastoversio: Adafruit GFX Font

Yhteenvetona: iso projekti, jonka avulla sain oppia paljon asioita

Vaihe 4: Sähköpostinäyttöjen käyttäminen

Sähköpostinäyttöjen käyttäminen
Sähköpostinäyttöjen käyttäminen

Näiden näyttöjen suurin haitta näkyy selvästi videossa: näytön päivitys kestää yhden tai kaksi sekuntia ja se vilkkuu (vaihtoehtoinen näyttö kahden näytön normaalista ja käänteisestä versiosta). Tämä on hyväksyttävää säätiedoille, koska en päivitä niitä kovin usein (joka tunti lukuun ottamatta laatikon suunnanmuutosta). Mutta ei siihen aikaan. Siksi (ja kulutuksen rajoittamiseksi) käytän edelleen HH: MM -näyttöä (ei sekunteja).

Joten minun piti etsiä toinen tapa päivittää näyttö. Nämä näytöt (jotkut niistä) tukevat osittaista päivitystä (sovelletaan joko näytön osaan tai koko näyttöön …), mutta se ei ollut hyvä minulle, koska suuri näyttö (joka näyttää ajan) pitää pikselien haamut jotka korvataan. Esimerkiksi kun siirrytään kello 10:12 - 10:13, 2 näkyy hieman 3: n sisällä, ja se tulee vieläkin näkyvämmäksi 4: n, 5: n jne. Jälkeen. Haluaisin huomauttaakseni, että näin on minun näytölläni: Keskustelin siitä sähköisen paperikirjaston GxEPD2 tekijän kanssa, joka kertoi minulle, ettei hän havainnut tätä ilmiötä omilla näytöillään. Yritimme muuttaa parametreja onnistumatta metsästämään haamuja.

Joten meidän oli löydettävä toinen ratkaisu: ehdotin osittaista kaksinkertaista virkistämistä, joka ratkaisi ongelman (ainakin se on tyydyttävä minulle). Tunnit kuluvat ilman, että näyttö vilkkuu eikä aaveita ole. Vaihto ei kuitenkaan ole välitön: ajan muuttaminen kestää hieman yli sekunnin.

Vaihe 5: Valmistaminen

Tekeminen
Tekeminen
Tekeminen
Tekeminen
Tekeminen
Tekeminen
Tekeminen
Tekeminen

Varmistaaksesi, että mikään ei liiku suunnan muuttuessa, eri osat (näytöt, elektroniset moduulit, piirilevyt, paristot) liimataan liimapistoolilla. Jos haluat reitittää johdot piirilevyn alle, asensin sen välikappaleilla tehtyihin jaloihin, sama koskee akkua.

Pian asennan ulkoisen USB -mikrofoniliittimen, joten minun ei tarvitse avata koteloa akun lataamiseksi.

Ehkä olen myös kiinnostunut päivittämään OTA: n täydentääksesi kaiken….

Vaihe 6: Koodi ja tiedostot

Image
Image

Tarjolla on kolme arkistotiedostoa:

  • Weather station.zip: Arduino -koodi, ladattava Arduino IDE: n avulla
  • Boite ecran.zip: kotelon CAD- ja 3D -tulostintiedostot
  • data.zip: ESP32: n SPIFFS -tiedostoon ladattavat tiedostot.

Jos et tiedä kuinka ladata tiedostoja ESP32: n SPIFFS -tiedostoihin, lue vain tämä opetusohjelma, jossa on erittäin hyödyllinen laajennus ja sen käyttö Arduino IDE: ssä.

Syväunen ohjelmointi on aivan erilainen kuin Arduinon vakio -ohjelmointi. ESP32: lle se tarkoittaa, että ESP32 herää ja suorittaa asetukset ja siirtyy sitten nukkumaan. Silmukkafunktio on siis tyhjä, eikä sitä koskaan suoriteta.

Jotkin alustusvaiheet on suoritettava vain kerran ensimmäisen suorituksen yhteydessä (kuten ajan, säätietojen, lainausten jne. Saaminen), joten ESP32: n on tiedettävä, onko nykyinen herätys ensimmäinen vai ei: tätä varten Ratkaisu on tallentaa muuttuja RTC RAM -muistiin (joka pysyy aktiivisena myös syvän unen vaiheissa), joka kasvaa jokaisen herätyksen yhteydessä. Jos se on yhtä kuin 1, se on ensimmäinen suoritus ja ESP32 suorittaa alustusvaiheen, muuten tämä vaihe ohitetaan.

ESP32: n herättämiseksi on useita vaihtoehtoja:

  • Ajastinherätys: koodi laskee syvän unen keston ennen nukkumaanmenoa. Tätä käytetään päivittämään lainausten ja pyhimyksen aika (1, 2, 3 tai 5 minuutin välein) tai säätiedot (3 tai 4 tunnin välein) (24 tunnin välein)
  • Keskeytä herätys: kiihtyvyysmittari lähettää signaalin, jota käytetään ESP32: n herättämiseen. Tätä käytetään suunnanmuutoksen havaitsemiseen ja näyttöjen päivittämiseen
  • Kosketusanturin herätys: ESP32 on varustettu useilla kosketusanturina toimivilla nastoilla, mutta niitä ei voi käyttää ajastinherätyksen kanssa, joten en käyttänyt tätä.

On muitakin ohjelmointitemppuja muualla koodissa, jotta aika pysyy tarkana samalla kun säästät energiaa (eli et yhdistä NTP -palvelinta joka minuutti), poistat aksentit, joita Adafruit GFX -kirjasto ei tue, jotta näyttöä ei päivitetä, jos ei ole tarpeen asettaa kiihtyvyysmittarin parametreja erityisesti keskeytysherätystä varten, laskea nukkumisaika tarkasti ajastimen herätyksen yhteydessä, vältä sarjakonsolin käyttöä, jos sitä ei ole kytketty IDE: hen (energian säästämiseksi uudelleen) wifi, kun sitä ei tarvita jne.… ja koodi on täynnä kommentteja, jotka auttavat ymmärtämään toimintoja.

Kiitos, että luit tämän ohjeen (ensimmäinen). Toivottavasti pidät siitä ja nautit tämän sääaseman tekemisestä

Anturikilpailu
Anturikilpailu

Toinen sija anturikilpailussa

Suositeltava: