Mundarija:

Yana bir aqlli ob -havo stantsiyasi, lekin : 6 qadam (rasmlar bilan)
Yana bir aqlli ob -havo stantsiyasi, lekin : 6 qadam (rasmlar bilan)

Video: Yana bir aqlli ob -havo stantsiyasi, lekin : 6 qadam (rasmlar bilan)

Video: Yana bir aqlli ob -havo stantsiyasi, lekin : 6 qadam (rasmlar bilan)
Video: Ey birar kun Morojni🍦yegani boraylik😘 | #dilime 2024, Iyun
Anonim
Image
Image
Yana bir aqlli ob -havo stantsiyasi, lekin …
Yana bir aqlli ob -havo stantsiyasi, lekin …
Yana bir aqlli ob -havo stantsiyasi, lekin …
Yana bir aqlli ob -havo stantsiyasi, lekin …
Yana bir aqlli ob -havo stantsiyasi, lekin …
Yana bir aqlli ob -havo stantsiyasi, lekin …

OK, bilaman, hamma joyda bunday ob -havo stantsiyalari bor, lekin farqni ko'rish uchun bir necha daqiqa vaqt ajrating …

  • Kam quvvat
  • 2 ta elektron qog'oz displeyi …
  • lekin 10 xil ekran!
  • ESP32 ga asoslangan
  • akselerometr va harorat / namlik sensori
  • Wi -Fi yangilanishi
  • 3D bosilgan quti

va boshqa ko'plab foydali fokuslar …

Asosiy g'oya, qutining yo'nalishiga qarab, har ikkala displeyda ham har xil ma'lumotlarni ko'rsatishdir. Koson parallelepipedli quti, yulka toshi shaklida, oyoq vazifasini bajaradigan belbog 'turiga ega.

Ta'minotlar

Ko'rib turganingizdek, tizim 2 ta elektron qog'ozli ekran va 3D bosilgan qutidan iborat. Ammo unda juda ko'p narsalar bor:

  • ESP32
  • Bitta MPU6050 akselerometr
  • DHT22 sensori
  • LiPo batareyasi
  • Hammasini ulash uchun tenglikni
  • Uyda tayyorlangan duPont mavzulari

va Wi-Fi ulanishi. Aslida 3 ta tarmoq e'lon qilingan, tizim ulanishga muvaffaq bo'lguncha ularni birma -bir tekshiradi.

1 -qadam: Nima uchun boshqa ob -havo stantsiyasi?

Nima uchun boshqa ob -havo stantsiyasi?
Nima uchun boshqa ob -havo stantsiyasi?
Nima uchun boshqa ob -havo stantsiyasi?
Nima uchun boshqa ob -havo stantsiyasi?
Nima uchun boshqa ob -havo stantsiyasi?
Nima uchun boshqa ob -havo stantsiyasi?
Nima uchun boshqa ob -havo stantsiyasi?
Nima uchun boshqa ob -havo stantsiyasi?

Maqsad, qutining yo'nalishiga qarab, har ikkala ekranda har xil ma'lumotlarni ko'rsatishdir. Koson parallelepipedli quti shaklida, toshbo'ron shaklida, uni turtish uchun tayanch vazifasini o'taydigan belbog'li.

Akselerometr harakat va yo'nalishni aniqlaydi va displeylarni ishga tushiradi.

Energiyani tejash uchun men elektron qog`oz ekranlarni tanladim (quyida keltirilgan havolalarga qarang), ular displey ishlamay qolsa ham saqlanib qoladi. Xuddi shunday ESP32 uchun men Lolin32 modulini tanladim (tejamkorligi bilan mashhur) va men chuqur uyquni boshqarishni va akselerometr yordamida uyquni uyg'otishni o'rganishim kerak edi.

Ekranlar SPI orqali ulangan, men ularni ESP32 -ga ulash uchun to'g'ri pimlarni topishdan oldin biroz qidirib topdim, chunki menga akselerometr uchun I2C, DHT22 o'qish uchun pin va boshqa 2 ta batareya zo'riqishini o'lchash kerak. ESP32 deyarli to'liq zaryadlangan! Ba'zi pinlar faqat o'qish uchun ekanligini bilaman (men ularni DHT sensori uchun ishlatganman), boshqalarini Wi-Fi bilan birga ishlatish mumkin emas, to'g'ri konfiguratsiyani topish biroz murakkab edi.

Qutini 4 tomonga yo'naltirish mumkin, shuningdek tekis. Bularning barchasi 4*2+2 = 10 ta ma'lumot turini faqat 2 ta ekran bilan ko'rsatishga imkon beradi. Shunday qilib, u sizga ko'p narsalarni ko'rsatishga imkon beradi:

  • Sana va kunning azizlari
  • Hozirgi vaqt
  • Bugungi ob -havo ma'lumoti
  • Yaqin soatlar uchun ob -havo ma'lumotlari
  • Yaqin kunlar uchun ob -havo ma'lumotlari
  • Batareyaning zaryadlanish darajasi
  • Va menda hali bo'sh joy bor edi, maxsus veb -saytdan tasodifiy taklif.

2 -qadam: Sizga nima kerak?

Sizga nima kerak ?
Sizga nima kerak ?
Sizga nima kerak ?
Sizga nima kerak ?
Sizga nima kerak ?
Sizga nima kerak ?
  • ESP32: Lolin32 moduli (juda kam quvvat, batareya ulagichi bilan jihozlangan, batareyani USB plus orqali zaryadlashi mumkin)
  • 2 ta epaper displeyi: 4,2 dyuym va 2,9 dyuym. Men modellarni Good Display do'konidan tanladim.
  • DHT22 sensori
  • MCU6050 akselerometr - girometr I2C sensori
  • LiPo batareyasi
  • Batareya zo'riqishini o'lchash uchun: 2 ta 10k rezistor, 1 100k qarshilik, 1 100nF kondansatör, 1 MOSFET tranzistor
  • Lehim va lehim temir, bosilgan elektron karta
  • Koson uchun 3D printerga kirish

Taqdim etilgan rasmda tenglikdagi barcha komponentlarning joylashuvi ko'rsatilgan: men korpusga mos keladigan joyni tejashim kerak edi, bu juda katta bo'lmasligi kerak.

Ob -havo ma'lumotlarini olish uchun siz ob -havo API -larida ro'yxatdan o'tishingiz va kalitlaringizni 'Variables.h' fayliga to'g'ri joylashtirishingiz kerak (pastga qarang).

Ob -havo saytlari:

  • apixu
  • accuweather

3 -qadam: Ushbu loyiha meni ko'p o'ylashga va o'rganishga majbur qildi …

Bu loyiha meni ko'p o'ylashga va o'rganishga majbur qildi …
Bu loyiha meni ko'p o'ylashga va o'rganishga majbur qildi …
Bu loyiha meni ko'p o'ylashga va o'rganishga majbur qildi …
Bu loyiha meni ko'p o'ylashga va o'rganishga majbur qildi …
Bu loyiha meni ko'p o'ylashga va o'rganishga majbur qildi …
Bu loyiha meni ko'p o'ylashga va o'rganishga majbur qildi …

Bu tizim kam quvvatli bo'lishi kerak edi, shuning uchun har kecha batareyani zaryad qilishning hojati yo'q edi … Energiyani tejash uchun men ekranni elektr quvvati bo'lmasa ham ushlab turadigan elektron qog'oz ekranlarini tanladim. Xuddi shunday ESP32 uchun men Lolin32 modulini tanladim (tejamkorligi bilan mashhur) va men chuqur uyquni boshqarishni va akselerometr ishlab chiqarishni to'xtatishga chaqirishni o'rganishim kerak edi.

Qutini 4 tomonga yo'naltirish mumkin, tekisroq. Bularning barchasi 4*2+2 = 10 ta ma'lumot turini ko'rsatadi. Shunday qilib, bu sizga ko'p narsalarni qilishga imkon beradi: sana va kunning azizlari, vaqt, bugungi ob -havo ma'lumoti, yaqin soat yoki kunlar uchun ob -havo ma'lumotlari, batareyaning zaryadlanish darajasi va ixtisoslashtirilgan veb -saytdan tasodifiy narx.

Internetda ko'p narsalarni qidirish mumkin va siz bilasiz: WiFi - energiya tejashning dushmani …

Shunday qilib, biz ulanishni boshqarishimiz kerak, chunki eng yangi ma'lumotlarni ko'rsatish uchun, lekin ulanish uchun ko'p vaqt sarflamaymiz. Yana bir murakkab muammo: aniq vaqtni saqlash. Menga RTC kerak emas, chunki men Internetda vaqt topa olaman, lekin ESP32 ning ichki soati, ayniqsa, uyqu paytida biroz siljiydi. Men Internetda soatni qayta tiklashni kutib, etarlicha aniq bo'lishning yo'lini topishim kerak edi. Men uni har soatda Internetda qayta sinxronlashtiraman.

Shunday qilib, avtonomiya (Internetga ulanish chastotasi) va ko'rsatilgan ma'lumotlarning to'g'riligi o'rtasida farq bor.

Yana bir hal qilinadigan muammo - bu xotira. ESP32 qattiq uyquda bo'lsa, xotira yo'qoladi, faqat RTC RAM deb ataladi. Bu xotira kengligi 4 MB, shundan faqat 2 tasi dastur uchun ishlatilishi mumkin. Bu xotirada, men uyqu fazasidan so'ng, bir dasturdan ikkinchisiga saqlanishi kerak bo'lgan turli xil dastur o'zgaruvchilarini saqlashim kerak: ob -havo ma'lumotlari, vaqt va sana, fayllar nomlari, tirnoq va boshqalar. Men bu bilan shug'ullanishni o'rganishim kerak edi..

Belgilar haqida gapirganda, ular SPIFFS, ESP32 fayl tizimida saqlanadi. Bepul Wunderground ob -havo API yopilgandan so'ng, men boshqa bepul ob -havo ma'lumotlarini etkazib beruvchilarni izlashga majbur bo'ldim. Men ikkitasini tanladim: biri hozirgi ob-havo uchun, 12 soatlik prognoz bilan, ikkinchisi ko'p kunlik prognozlar uchun. Belgilar bir xil emas, shuning uchun menga ikkita yangi muammo tug'dirdi:

  • Belgilar to'plamini tanlang
  • Ushbu piktogramma 2 saytning prognoz kodlariga mos keladi

Bu yozishmalar RTC operativ xotirasida ham saqlangan, shuning uchun uni har safar qayta yuklash shart emas.

Piktogramma bilan oxirgi muammo. Hammasini SPIFFS -da saqlash mumkin emas. Mening fayllarim uchun joy juda kichik. Tasvirni siqishni qilish kerak edi. Men Python -da skript yozdim, u piktogramma fayllarini o'qiydi va ularni RLE -ga siqadi, so'ngra siqilgan fayllarni SPIFFS -da saqlaydi. U erda o'tkazdi.

Ammo elektron qog'ozli displey kutubxonasi siqilgan tasvirlarni emas, faqat BMP tipidagi fayllarni oladi. Men siqilgan fayllardan ikonkalarni ko'rsatish uchun qo'shimcha funktsiyani yozishim kerak edi.

Internetda o'qiladigan ma'lumotlar ko'pincha json formatida bo'ladi: ob -havo ma'lumoti, kun azizlari. Buning uchun (buyuk) arduinoJson kutubxonasidan foydalanaman. Lekin iqtiboslar unday emas. Men ularni maxsus saytdan olaman, shuning uchun ularni to'g'ridan -to'g'ri veb -sahifaning mazmuniga qarab o'qishim kerak. Buning uchun maxsus kod yozishim kerak edi. Har kuni, yarim tunda, dastur ushbu saytga kiradi va o'nga yaqin tasodifiy tirnoqlarni o'qiydi va ularni RTC operativ xotirasida saqlaydi. Ulardan biri tasodifan ko'rsatiladi, agar korpus katta ekran yuqoriga qaratilsa.

Men sizga aksent belgilarni ko'rsatish muammosini aytib beraman (afsuski, tirnoq frantsuz tilida).

Qachon kichik ekran yuqoriga, batareya zo'riqishida ko'rsatiladi, qolgan darajasini yaxshiroq ko'rish uchun chizilgan. Batareya zo'riqishini o'qish uchun elektron yig'ilish qilish kerak edi. O'lchov batareyani zaryadsizlantirmasligi uchun, men Internetda topilgan sxemadan foydalanganman, u faqat o'lchov o'tkazilganda tokni iste'mol qilish uchun MOSFET tranzistorini kalit sifatida ishlatadi.

Bu sxemani tuzish va hamma narsani qutiga joylashtirish uchun men imkon qadar kichik bo'lishni xohlardim, tizimning barcha komponentlarini ulash uchun tenglikni yasashim kerak edi. Bu mening birinchi PCB. Men omadli edim, chunki hamma narsa birinchi marta bu tomondan yaxshi ishladi …

Implantatsiya xaritasiga qarang: "taqiqlangan zona" - bu USB kabelini ulash uchun ajratilgan maydon. Lolin32 moduli batareyani USB orqali zaryadlash imkonini beradi: agar USB kabeli ulangan bo'lsa, batareya zaryadlanadi va modul bir vaqtning o'zida ishlaydi.

Oxirgi nuqta: shriftlar. Har xil o'lchamdagi, qalinmi yoki yo'qmi, ularni yaratish va saqlash kerak edi. Adafruit GFX kutubxonasi shrift fayllarini kerakli katalogga o'rnatganingizdan so'ng, bu masalada juda yaxshi g'amxo'rlik qiladi. Fayllarni yaratish uchun men Font Converter saytidan foydalandim, bu juda qulay!

Tanlaganingizga ishonch hosil qiling:

  • Oldindan ko'rish: TFT 2.4"
  • Kutubxona versiyasi: Adafruit GFX shrift

Xulosa qilib aytadigan bo'lsam: katta loyiha, bu menga ko'p narsalarni o'rganishga imkon berdi

4-qadam: Elektron qog'ozli displeylardan foydalanish

Elektron qog'ozli displeylardan foydalanish
Elektron qog'ozli displeylardan foydalanish

Bu ekranlarning asosiy kamchiligi videoda aniq ko'rinadi: displeyning yangilanishi bir yoki ikki soniya davom etadi va miltillash orqali amalga oshiriladi (ikkita ekranning normal va teskari versiyalarining muqobil ko'rinishi). Bu ob -havo ma'lumoti uchun maqbuldir, chunki men uni tez -tez yangilab turmayman (har soatda, qutining yo'nalishini o'zgartirishdan tashqari). Lekin vaqt uchun emas. Shuning uchun (va iste'molni cheklash uchun) men hali ham HH: MM displeyidan foydalanaman (soniyalar emas).

Shuning uchun displeyni yangilashning boshqa usulini izlashga to'g'ri keldi. Bu ekranlar (ularning ba'zilari) qisman yangilanishni qo'llab -quvvatlaydi (ekranning bir qismiga yoki butun ekranga qo'llaniladi …), lekin bu men uchun yaxshi emas edi, chunki mening katta ekranda (vaqt ko'rsatiladigan) piksellar arvohlari saqlanadi. ular almashtiriladi. Masalan, 10:12 dan 10:13 gacha o'tganda, "2" "3" ichida biroz ko'rinadi va "4", "5" va hokazolardan keyin yanada aniqroq ko'rinadi. Bu mening ekranim uchun shunday ekanligini ta'kidlash uchun: men buni GxEPD2 elektron qog'ozli kutubxona muallifi bilan muhokama qildim, u menga bu hodisani o'z ekranlari bilan kuzatmaganligini aytdi. Biz arvohlarni ovlashga muvaffaq bo'lmasdan parametrlarni o'zgartirishga harakat qildik.

Shunday qilib, biz boshqa echim topishga majbur bo'ldik: men muammoni hal qilgan (hech bo'lmaganda bu men uchun qoniqarli) qisman ikkilamchi yangilanishni taklif qildim. Soatlar ekran miltillamasdan o'tadi va arvohlar yo'q. Biroq, o'zgarish darhol emas: vaqtni o'zgartirish uchun bir soniyadan biroz ko'proq vaqt kerak bo'ladi.

5 -qadam: uni yaratish

Buni qilish
Buni qilish
Buni qilish
Buni qilish
Buni qilish
Buni qilish
Buni qilish
Buni qilish

Yo'nalish o'zgarganda hech narsa ichkariga kirmasligini ta'minlash uchun turli komponentlar (displeylar, elektron modullar, tenglikni kartalari, batareyalar) yopishtiruvchi qurol bilan yopishtirilgan. PCB ostidagi simlarni yo'naltirish uchun men uni bo'shliqlar bilan yasalgan oyoqlarga o'rnatdim, xuddi shu narsa batareyaga ham tegishli.

Tez orada men tashqi USB mikrofon ulagichini o'rnataman, shuning uchun batareyani zaryad qilish uchun korpusni ochishim shart emas.

Ehtimol, men hammasini mukammal qilish uchun OTA tomonidan yangilanishga qiziqaman …

6 -qadam: Kod va fayllar

Image
Image

Uchta arxiv fayllari taqdim etiladi:

  • Weather station.zip: Arduino IDE yordamida yuklash uchun Arduino kodi
  • Boite ecran.zip: sumka uchun SAPR va 3D printer fayllari
  • data.zip: ESP32 SPIFFS -ga yuklanadigan fayllar.

Agar siz fayllarni ESP32 -ning SPIFFS -ga qanday yuklashni bilmasangiz, bu qo'llanmani o'qing, u juda foydali plaginni taqdim etadi va uni Arduino IDE -da qanday ishlatishni ko'rsatadi.

Chuqur uyqu dasturlari Arduino standart dasturidan ancha farq qiladi. ESP32 uchun bu shuni anglatadiki, ESP32 uyg'onadi va sozlamani bajaradi, keyin uxlab qoladi. Shunday qilib, loop funktsiyasi bo'sh va hech qachon bajarilmaydi.

Birinchi ishga tushirish bosqichi faqat birinchi marta bajarilishi kerak (masalan, vaqt, ob -havo ma'lumotlari, tirnoq va hk), shuning uchun ESP32 joriy uyg'onish birinchi yoki yo'qligini bilishi kerak: buning uchun Yechim-bu har bir uyg'onish vaqtida ko'paytiriladigan RTC RAM (hatto chuqur uyqu fazalarida ham faol bo'lib qoladigan) saqlash. Agar u 1 ga teng bo'lsa, bu birinchi bajarilish va ESP32 ishga tushirish bosqichini ishga tushiradi, aks holda bu bosqich o'tkazib yuboriladi.

ESP32 -ni uyg'otish uchun bir nechta imkoniyatlar mavjud:

  • Taymerni uyg'otish: kod uxlashdan oldin chuqur uyquning davomiyligini hisoblab chiqadi. Bu vaqtni (har 1, 2, 3 yoki 5 daqiqada) yoki ob -havo ma'lumotlarini (har 3 yoki 4 soatda) tirnoq va kun azizlarini (har 24 soatda) yangilash uchun ishlatiladi.
  • To'xtatilgan uyg'onish: akselerometr ESP32 ni uyg'otish uchun signal yuboradi. Bu yo'nalishning o'zgarishini aniqlash va displeylarni yangilash uchun ishlatiladi
  • Sensorli uyg'onish: ESP32 sensorli sensorlar vazifasini bajaradigan bir nechta pinlar bilan jihozlangan, lekin ularni taymerni uyg'otishda ishlatib bo'lmaydi, shuning uchun men buni ishlatmadim.

Kodning boshqa joylarida vaqtni to'g'ri saqlash uchun, ya'ni energiyani tejashda (ya'ni, har daqiqada NTP serverini ulamaslik uchun), Adafruit GFX kutubxonasi qo'llab -quvvatlamaydigan aksentlarni olib tashlash uchun, agar displeyni yangilamaslik uchun. akselerometr parametrlarini o'rnatish, ayniqsa, tanaffusda uyg'onish uchun kerak emas, taymer uyg'onganida uxlash vaqtini aniq hisoblash, IDE-ga ulanmagan bo'lsa, seriyali konsolni ishlatishdan saqlaning (energiyani qayta tejash uchun), uzing. kerak bo'lmaganda wifi va boshqalar … va kod funktsiyalarni tushunishga yordam beradigan izohlarga to'la.

Ushbu ko'rsatmalarni o'qiganingiz uchun tashakkur (mening birinchi kitobim). Umid qilamanki, sizga bu ob -havo stantsiyasi yoqadi va yoqadi

Sensorlar musobaqasi
Sensorlar musobaqasi

Sensorlar musobaqasida ikkinchi o'rinni egalladi

Tavsiya: