Turinys:

Dar viena išmanioji oro stotis, bet : 6 žingsniai (su nuotraukomis)
Dar viena išmanioji oro stotis, bet : 6 žingsniai (su nuotraukomis)

Video: Dar viena išmanioji oro stotis, bet : 6 žingsniai (su nuotraukomis)

Video: Dar viena išmanioji oro stotis, bet : 6 žingsniai (su nuotraukomis)
Video: Дневник хранящий жуткие тайны. Переход. Джеральд Даррелл. Мистика. Ужасы 2024, Lapkritis
Anonim
Image
Image
Dar viena išmani orų stotis, bet…
Dar viena išmani orų stotis, bet…
Dar viena išmani orų stotis, bet…
Dar viena išmani orų stotis, bet…
Dar viena išmani orų stotis, bet…
Dar viena išmani orų stotis, bet…

Gerai, aš žinau, kad tokių meteorologinių stočių yra visur, bet skirkite kelias minutes, kad pamatytumėte skirtumą …

  • Mažai energijos
  • 2 elektroninio popieriaus ekranai…
  • bet 10 skirtingų ekranų!
  • ESP32 pagrindu
  • akselerometras ir temperatūros / drėgmės jutikliai
  • „Wifi“atnaujinimas
  • 3D spausdintas dėklas

ir daug kitų naudingų gudrybių …

Pagrindinė idėja yra rodyti įvairią informaciją abiejuose ekranuose, atsižvelgiant į dėžutės padėtį. Korpusas yra lygiagretainio vamzdžio, grindinio akmens, formos, su tam tikru diržu, kuris tarnauja kaip pėda.

Prekės

Kaip matote, sistemą sudaro 2 elektroninio popieriaus ekranai ir 3D spausdinta dėžutė. Bet jame yra daug dalykų:

  • ESP32
  • Vienas akselerometras MPU6050
  • DHT22 jutiklis
  • LiPo baterija
  • PCB, skirta viskam prijungti
  • Namų duPont siūlai

ir „Wi-Fi“ryšį. Iš tikrųjų deklaruojami 3 tinklai, sistema juos bando po vieną, kol pavyksta prisijungti.

1 žingsnis: Kodėl dar viena oro stotis?

Kodėl kita orų stotis?
Kodėl kita orų stotis?
Kodėl kita orų stotis?
Kodėl kita orų stotis?
Kodėl kita orų stotis?
Kodėl kita orų stotis?
Kodėl kita orų stotis?
Kodėl kita orų stotis?

Idėja yra rodyti įvairią informaciją abiejuose ekranuose, atsižvelgiant į langelio orientaciją. Korpusas yra lygiagretainio vamzdžio, grindinio akmens, formos, su tam tikru diržu, kuris tarnauja kaip atrama, kad jis stovėtų.

Akselerometras nustato judesį ir orientaciją bei suaktyvina ekranus.

Norėdami sutaupyti energijos, pasirinkau elektroninio popieriaus ekranus (žr. Nuorodas žemiau), kurie išsaugo ekraną, net jei jie nebeveikia. Panašiai ir ESP32, aš pasirinkau „Lolin32“modulį (garsėjantį taupumu) ir turėjau išmokti valdyti gilų miegą ir pagreitį, kurį sukelia pagreičio matuoklis.

Ekranai yra prijungti per SPI, aš šiek tiek ieškojau, kol radau tinkamus kaiščius, kad galėčiau juos prijungti prie ESP32, žinodamas, kad man taip pat reikia I2C akselerometrui, kaiščio DHT22 skaitymui ir dar 2 akumuliatoriaus įtampos matavimui. ESP32 yra beveik visiškai įkrautas! Žinant, kad kai kurie kaiščiai yra tik skaitomi (aš juos naudojau DHT jutikliui), kiti negali būti naudojami kartu su „Wifi“, buvo šiek tiek sudėtinga rasti tinkamą konfigūraciją.

Dėžutė gali būti orientuota 4 kryptimis, plius plokščia. Apskritai 4*2+2 = 10 galimų informacijos tipų rodyti tik su 2 ekranais. Taigi tai leidžia parodyti daug dalykų:

  • Data ir dienos šventasis
  • Dabartinis laikas
  • Šiandienos orų prognozė
  • Artimiausių valandų orų prognozės
  • Artimiausių dienų orų prognozės
  • Akumuliatoriaus įkrovos lygis
  • Kadangi dar turėjau vietos, atsitiktinė citata iš specializuotos svetainės.

2 žingsnis: ko jums reikia?

Ko tau reikia ?
Ko tau reikia ?
Ko tau reikia ?
Ko tau reikia ?
Ko tau reikia ?
Ko tau reikia ?
  • ESP32: „Lolin32“modulis (labai mažos galios, aprūpintas akumuliatoriaus jungtimi, gali įkrauti akumuliatorių per USB plius)
  • 2 elektroninio popieriaus ekranai: 4,2 colio ir 2,9 colio. Aš pasirinkau modelius iš „Good Display“parduotuvės.
  • DHT22 jutiklis
  • Akselerometras MCU6050 - girometro I2C jutiklis
  • LiPo baterija
  • Akumuliatoriaus įtampos matavimui: 2 10k rezistoriai, 1 100k rezistorius, 1 100nF kondensatorius, 1 MOSFET tranzistorius
  • Lituoklis ir lituoklis, spausdintinė plokštė
  • Prieiga prie korpuso 3D spausdintuvo

Pridėtame paveikslėlyje parodyta visų PCB komponentų padėtis: turėjau sutaupyti vietos, kad tilptų į dėklą, kuris neturėtų būti per didelis.

Norėdami gauti orų duomenis, taip pat turite užsiregistruoti orų API ir įdėti raktus į reikiamas vietas „Variables.h“faile (žr. Toliau).

Orų svetainės:

  • apiksas
  • akuveras

3 žingsnis: Šis projektas privertė mane pagalvoti ir daug sužinoti …

Šis projektas privertė mane susimąstyti ir daug sužinoti …
Šis projektas privertė mane susimąstyti ir daug sužinoti …
Šis projektas privertė mane susimąstyti ir daug sužinoti …
Šis projektas privertė mane susimąstyti ir daug sužinoti …
Šis projektas privertė mane susimąstyti ir daug sužinoti …
Šis projektas privertė mane susimąstyti ir daug sužinoti …

Ši sistema turėjo būti mažos galios, todėl jums nereikės kiekvieną naktį įkrauti akumuliatoriaus … Norėdami sutaupyti energijos, pasirinkau elektroninio popieriaus ekranus, kurie išsaugo ekraną, net jei jie nebeveikia. Panašiai ir ESP32, aš pasirinkau „Lolin32“modulį (garsėjantį taupumu) ir turėjau išmokti valdyti gilų miegą bei pagreitį, kurį sukelia pagreičio matuoklis.

Dėžę galima nukreipti į 4 puses, labiau plokščią. Apskritai 4*2+2 = 10 galimų rodyti informacijos tipų. Taigi tai leidžia atlikti daug dalykų: datą ir dienos šventąjį, laiką, šiandienos orų prognozę, orų prognozes ateinančioms valandoms ar dienoms, akumuliatoriaus įkrovos lygį ir atsitiktinę citatą iš specializuotos svetainės.

Internete yra daug ko ieškoti, ir kaip žinote: „WiFi“yra energijos taupymo priešas …

Taigi turime valdyti ryšį, kad galėtume rodyti naujausią informaciją, bet nepraleisdami per daug laiko prisijungdami. Kita gana sudėtinga problema: gana tikslaus laiko laikymasis. Man nereikia RTC, nes galiu rasti laiko internete, tačiau vidinis ESP32 laikrodis gana šiek tiek nukrypsta, ypač miego metu. Turėjau rasti būdą, kaip likti pakankamai tiksliam, kol laukiau, kol iš naujo nustatysiu laikrodį internetu. Aš kas valandą jį sinchronizuoju internete.

Taigi yra kompromisas tarp autonomijos (interneto ryšio dažnumo) ir rodomos informacijos tikslumo.

Kita problema, kurią reikia išspręsti, yra atmintis. Kai ESP32 miega giliai, atmintis prarandama, išskyrus vadinamąją RTC RAM. Šios atminties plotis yra 4 MB, iš kurių tik 2 gali būti naudojamos programai. Šioje atmintyje turiu išsaugoti įvairius programos kintamuosius, kurie turi būti saugomi nuo vieno vykdymo iki kito po miego fazės: orų prognozės, laikas ir data, piktogramų failų pavadinimai, kabučiai ir tt Turėjau išmokti su tuo elgtis.

Kalbant apie piktogramas, jos saugomos SPIFFS, failų sistemoje ESP32. Uždarius nemokamą „Wunderground“orų API, turėjau ieškoti kitų nemokamų orų duomenų teikėjų. Aš pasirinkau du: vieną-dabartinės dienos orui su 12 valandų prognozėmis, kitą-kelių dienų prognozėms. Piktogramos nėra vienodos, todėl man kilo dvi naujos problemos:

  • Pasirinkite piktogramų rinkinį
  • Suderinkite šias piktogramas su dviejų svetainių prognozės kodais

Ši korespondencija taip pat buvo saugoma RTC RAM, kad jos nereikėtų kiekvieną kartą įkelti iš naujo.

Paskutinė problema su piktogramomis. Neįmanoma jų visų išsaugoti SPIFFS. Vieta per maža visiems mano failams. Reikėjo daryti vaizdo suspaudimą. Aš parašiau scenarijų „Python“, kuris skaito mano piktogramų failus ir suspaudžia juos į RLE, o tada saugo suspaustus failus SPIFFS. Ten ir laikėsi.

Tačiau elektroninio popieriaus rodymo biblioteka priima tik BMP tipo failus, o ne suspaustus vaizdus. Taigi turėjau parašyti papildomą funkciją, kad galėčiau rodyti savo piktogramas iš šių suspaustų failų.

Internete skaitomi duomenys dažnai būna „json“formatu: orų duomenys, dienos šventasis. Tam naudoju (puikią) arduinoJson biblioteką. Bet citatos nėra tokios. Aš juos paimu iš tam skirtos svetainės, todėl turiu juos perskaityti žiūrėdamas tiesiai į tinklalapio turinį. Tam turėjau parašyti konkretų kodą. Kiekvieną dieną, apie vidurnaktį, programa eina į šią svetainę ir skaito apie dešimt atsitiktinių citatų ir saugo jas RTC RAM. Vienas iš jų atsitiktinai rodomas, kai korpusas yra nukreiptas dideliu ekranu į viršų.

Aš perduodu jums kirčiuotų simbolių rodymo problemą (atsiprašau, bet citatos prancūzų kalba) …

Kai mažas ekranas pakeltas, rodoma akumuliatoriaus įtampa ir brėžinys, kad būtų geriau matomas likęs lygis. Baterijos įtampai nuskaityti reikėjo padaryti elektroninį mazgą. Kadangi matavimas neturėtų išsikrauti akumuliatoriaus, aš naudoju internete rastą diagramą, kurioje kaip jungiklis naudojamas MOSFET tranzistorius, kad srovė būtų suvartota tik tada, kai matuojama.

Kad galėčiau sukurti šią grandinę ir sutalpinti viską į dėžę, kurios norėjau kuo mažesnės, turėjau padaryti PCB, kad prijungčiau visus sistemos komponentus. Tai mano pirmasis PCB. Man pasisekė, nes pirmą kartą viskas gerai veikė šioje pusėje …

Žr. Implantavimo žemėlapį: „uždrausta zona“yra sritis, skirta USB kabeliui prijungti. „Lolin32“modulis leidžia įkrauti akumuliatorių per USB: akumuliatorius įkraunamas, jei prijungtas USB kabelis, ir modulis veikia tuo pačiu metu.

Paskutinis punktas: šriftai. Skirtingo dydžio, paryškinti ar ne, jie turėjo būti sukurti ir saugomi. Įdiegę šrifto failus į reikiamą katalogą, „Adafruit GFX“biblioteka tuo labai rūpinasi. Norėdami sukurti failus, naudoju „Font Converter“svetainę, labai patogu!

Įsitikinkite, kad pasirinkote:

  • Ekrano peržiūra: 2,4 colio TFT
  • Bibliotekos versija: „Adafruit GFX Font“

Taigi apibendrinant: didelis projektas, kuris leido man išmokti daug dalykų

4 veiksmas: el. Popieriaus ekranų naudojimas

Elektroninio popieriaus ekranų naudojimas
Elektroninio popieriaus ekranų naudojimas

Pagrindinis šių ekranų trūkumas aiškiai matomas vaizdo įraše: ekrano atnaujinimas užtrunka vieną ar dvi sekundes ir atliekamas mirksint (alternatyvus dviejų įprastų ir apverstų versijų rodymas). Tai priimtina informacijai apie orus, nes aš ją dažnai neatnaujinu (kas valandą, išskyrus langelio orientacijos keitimą). Bet ne tam laikui. Štai kodėl (ir norėdamas apriboti vartojimą) aš vis dar naudoju HH: MM ekraną (o ne sekundes).

Taigi turėjau ieškoti kito ekrano atnaujinimo būdo. Šie ekranai (kai kurie iš jų) palaiko dalinį atnaujinimą (taikomą arba ekrano sričiai, arba visam ekranui …), bet man tai nebuvo gerai, nes mano didelis ekranas (kuriame rodomas laikas) išsaugo pikselių vaiduoklius kurie yra pakeisti. Pavyzdžiui, kai pereinama nuo 10:12 iki 10:13, „2“yra šiek tiek matomas „3“viduje ir dar labiau matomas po „4“, „5“ir pan. Norėčiau norėčiau pabrėžti, kad taip yra mano ekrano atveju: aptariau tai su elektroninio popieriaus rodymo bibliotekos „GxEPD2“autoriumi, kuris man pasakė, kad šio reiškinio nepastebėjo savo ekranuose. Bandėme pakeisti parametrus, nepavykę medžioti vaiduoklių.

Taigi turėjome rasti kitą sprendimą: pasiūliau atlikti dalinį dvigubą gaivinimą, kuris išsprendė problemą (bent jau mane tai tenkina). Valandos prabėga nemirksint ekranui ir nėra vaiduoklių. Tačiau pakeitimas vyksta ne iš karto: norint pakeisti laiką reikia šiek tiek daugiau nei vienos sekundės.

5 žingsnis: tai padaryti

Darau tai
Darau tai
Darau tai
Darau tai
Darau tai
Darau tai
Darau tai
Darau tai

Siekiant užtikrinti, kad pasikeitus orientacijai niekas nejudėtų viduje, skirtingi komponentai (ekranai, elektroniniai moduliai, PCB, baterijos) yra klijuojami klijų pistoletu. Norėdami nukreipti laidus po PCB, aš jį sumontavau ant kojų, pagamintų iš tarpiklių, tas pats pasakytina apie akumuliatorių.

Netrukus įdiegsiu išorinę USB mikrofono jungtį, kad nereikėtų atidaryti dėklo, kad galėčiau įkrauti akumuliatorių.

Galbūt man taip pat bus įdomu atnaujinti OTA, kad viskas būtų tobula …

6 žingsnis: kodas ir failai

Image
Image

Pateikiami trys archyvo failai:

  • Weather station.zip: „Arduino“kodas, įkeliamas naudojant „Arduino IDE“
  • „Boite ecran.zip“: CAD ir 3D spausdintuvo failai
  • data.zip: failai, kuriuos reikia įkelti į ESP32 SPIFFS.

Jei nežinote, kaip įkelti failus į ESP32 SPIFFS, tiesiog perskaitykite šią pamoką, kurioje pateikiamas labai naudingas papildinys ir kaip jį naudoti „Arduino IDE“.

Gilaus miego programavimas visiškai skiriasi nuo standartinio „Arduino“programavimo. ESP32 atveju tai reiškia, kad ESP32 atsibunda ir atlieka sąranką, tada eina miegoti. Taigi, ciklo funkcija tuščia ir niekada nevykdoma.

Kai kuri inicijavimo fazė turi būti vykdoma tik vieną kartą pirmą kartą vykdant (pvz., Gauti laiką, orų duomenis, citatas ir tt), todėl ESP32 turi žinoti, ar dabartinis pabudimas yra pirmasis, ar ne: sprendimas yra išsaugoti kintamąjį RTC RAM (kuris išlieka aktyvus net gilaus miego fazėse), kuris padidinamas kiekvieną kartą pabudus. Jei jis lygus 1, tai yra pirmasis vykdymas, o ESP32 paleidžia inicializacijos etapą, kitaip šis etapas praleidžiamas.

Norėdami pažadinti ESP32, yra keletas galimybių:

  • Žadinimo laikmatis: kodas prieš miegą apskaičiuoja gilaus miego trukmę. Tai naudojama atnaujinant citatų ir dienos šventojo laiką (kas 1, 2, 3 ar 5 minutes) arba orų duomenis (kas 3 ar 4 valandas) (kas 24 valandas)
  • Nutraukti pabudimą: akselerometras siunčia signalą, kuris naudojamas ESP32 pažadinimui. Tai naudojama norint nustatyti orientacijos pasikeitimą ir atnaujinti ekranus
  • Lietimo jutiklio pažadinimas: ESP32 yra įrengtas su keliais kaiščiais, kurie veikia kaip jutikliniai jutikliai, tačiau jų negalima naudoti su laikmačio pažadinimu, todėl aš to nenaudojau.

Yra ir kitų programavimo gudrybių, esančių kitoje kodo vietoje, siekiant taupyti energiją (t. Y. Neprisijungti prie NTP serverio kiekvieną minutę), pašalinti akcentus, kurių nepalaiko „Adafruit GFX“biblioteka, kad nebūtų atnaujintas ekranas, jei nebūtina nustatyti pagreičio matuoklio parametrų, ypač pertraukiamam pabudimui, tiksliai apskaičiuoti miego laiką, kai atsibunda laikmatis, venkite naudoti serijinę konsolę, jei neprisijungę prie IDE (norėdami vėl sutaupyti energijos), atjunkite „wifi“, kai to nereikia, ir tt … ir kodas yra pilnas komentarų, padedančių suprasti funkcijas.

Dėkojame, kad perskaitėte šią instrukciją (mano pirmoji). Tikiuosi, kad jums patiks ir patiks kurti šią oro stotį

Jutiklių konkursas
Jutiklių konkursas

Antroji vieta jutiklių konkurse

Rekomenduojamas: