Съдържание:

Още една интелигентна метеорологична станция, но : 6 стъпки (със снимки)
Още една интелигентна метеорологична станция, но : 6 стъпки (със снимки)

Видео: Още една интелигентна метеорологична станция, но : 6 стъпки (със снимки)

Видео: Още една интелигентна метеорологична станция, но : 6 стъпки (със снимки)
Видео: Детето ми се храни само със зеленчуци 2024, Юни
Anonim
Image
Image
Още една интелигентна метеорологична станция, но …
Още една интелигентна метеорологична станция, но …
Още една интелигентна метеорологична станция, но …
Още една интелигентна метеорологична станция, но …
Още една интелигентна метеорологична станция, но …
Още една интелигентна метеорологична станция, но …

Добре, знам, че навсякъде има толкова много такива метеорологични станции, но отделете няколко минути, за да видите разликата …

  • Ниска мощност
  • 2 дисплея за електронна хартия …
  • но 10 различни екрана!
  • Базиран на ESP32
  • акселерометър и сензори за температура / влажност
  • Актуализация на wifi
  • 3D печатна кутия

и много други полезни трикове …

Основната идея е да се показва различна информация и на двата дисплея в зависимост от ориентацията на кутията. Калъфът е във формата на паралелепипедична кутия, павета, с своеобразен колан, който служи като крак.

Консумативи

Както можете да видите, системата се състои от 2 екрана за електронна хартия и 3D печатна кутия. Но има много неща в него:

  • ESP32
  • Един акселерометър MPU6050
  • Сензор DHT22
  • LiPo батерия
  • Печатна платка за свързване на всичко
  • Домашни нишки duPont

и Wi-Fi връзка. Всъщност са декларирани 3 мрежи, системата ги тества една по една, докато успее да се свърже.

Стъпка 1: Защо друга метеорологична станция?

Защо друга метеорологична станция?
Защо друга метеорологична станция?
Защо друга метеорологична станция?
Защо друга метеорологична станция?
Защо друга метеорологична станция?
Защо друга метеорологична станция?
Защо друга метеорологична станция?
Защо друга метеорологична станция?

Идеята е да се показват различни видове информация на двата екрана в зависимост от ориентацията на кутията. Калъфът е във формата на паралелепипедична кутия, павета, с своеобразен колан, който служи като опора, за да го стои.

Акселерометърът открива движение и ориентация и задейства дисплеи.

За да спестя енергия, избрах екраните за електронна хартия (вижте препратките по-долу), които поддържат дисплея, дори ако вече не се захранват. По същия начин за ESP32 избрах модула Lolin32 (известен със своята пестеливост) и трябваше да се науча как да управлявам дълбок сън и събуждането при прекъсване, генерирано от акселерометъра.

Екраните са свързани чрез SPI, потърсих доста, преди да намеря правилните щифтове, за да ги свържа с ESP32, знаейки, че също се нуждая от I2C за акселерометъра, щифт за четене на DHT22 и 2 други за измерване на напрежението на батерията. ESP32 е почти напълно зареден! Знаейки, че някои пинове са само за четене (използвах тези за DHT сензора), други не могат да се използват заедно с Wifi, беше малко сложно да се намери правилната конфигурация.

Кутията може да бъде ориентирана в 4 посоки, плюс плоска. Като цяло това прави 4*2+2 = 10 възможни типа информация за показване само с 2 екрана. Така че ви позволява да показвате много неща:

  • Датата и светецът на деня
  • Текущото време
  • Днешната прогноза за времето
  • Прогнози за времето за следващите часове
  • Прогнози за времето за следващите дни
  • Ниво на зареждане на батерията
  • И тъй като все още имах място, случаен цитат от специализиран уебсайт.

Стъпка 2: Какво ви трябва?

Какво ти е необходимо ?
Какво ти е необходимо ?
Какво ти е необходимо ?
Какво ти е необходимо ?
Какво ти е необходимо ?
Какво ти е необходимо ?
  • ESP32: Модул Lolin32 (много ниска мощност, оборудван с конектор за батерия, може да зарежда батерията чрез USB плюс)
  • 2 дисплея на хартия: 4,2 инча и 2,9 инча. Избрах моделите от магазин Good Display.
  • Сензор DHT22
  • Акселерометър MCU6050 - сензор за жирометър I2C
  • LiPo батерия
  • За измерване на напрежението на батерията: 2 10k резистора, 1 100k резистор, 1 100nF кондензатор, 1 MOSFET транзистор
  • Припой и поялник, печатна платка
  • Достъп до 3D принтер за калъфа

Прикаченото изображение показва позицията на всички компоненти на печатната платка: Трябваше да спестя място, за да се побере в кутията, което не трябва да е твърде голямо.

За да получите данните за времето, вие също трябва да се регистрирате в метеорологичните интерфейси (API) за времето и да поставите ключовете си на правилните места във файла „Variables.h“(вижте по -долу).

Метеорологични сайтове:

  • apixu
  • натрупвам

Стъпка 3: Този проект ме накара да мисля и да науча много …

Този проект ме накара да мисля и да науча много …
Този проект ме накара да мисля и да науча много …
Този проект ме накара да мисля и да науча много …
Този проект ме накара да мисля и да науча много …
Този проект ме накара да мисля и да науча много …
Този проект ме накара да мисля и да науча много …

Тази система трябваше да бъде с ниска мощност, така че не е необходимо да зареждате батерията всяка вечер … За да спестя енергия, избрах екраните за електронна хартия, които поддържат дисплея, дори ако вече не се захранват. По същия начин за ESP32, аз избрах модула Lolin32 (известен със своята пестеливост) и трябваше да се науча как да управлявам дълбок сън и повикването за събуждане при прекъсване, генерирано от акселерометъра.

Кутията може да бъде ориентирана в 4 посоки, по -плоска. Като цяло това прави 4*2+2 = 10 възможни вида информация за показване. Така че ви позволява да правите много неща: датата и светеца на деня, часа, днешната прогноза за времето, прогнозите за времето през следващите часове или дни, нивото на зареждане на батерията и произволен цитат от специализиран уебсайт.

Това е много за търсене в интернет и както знаете: WiFi е врагът на енергоспестяването …

Така че трябва да управляваме връзката, за да показваме актуална информация, но без да харчим твърде много време за свързване. Друг доста сложен проблем: поддържане на доста точно време. Не ми трябва RTC, тъй като мога да намеря време в интернет, но вътрешният часовник на ESP32 се движи доста, особено по време на сън. Трябваше да намеря начин да бъда достатъчно точен, докато чаках да нулирам часовника чрез интернет. Ресинхронизирам го в интернет на всеки час.

Така че има компромис между автономията (честотата на интернет връзките) и точността на показваната информация.

Друг проблем, който трябва да се реши, е паметта. Когато ESP32 е в дълбок сън, паметта се губи, с изключение на това, което се нарича RTC RAM. Тази памет е широка 4MB, от които само 2 могат да се използват за програмата. В тази памет трябва да съхраня различните програмни променливи, които трябва да се съхраняват от едно изпълнение до следващо, след фаза на заспиване: прогнози за времето, час и дата, имена на файлове с икони, кавички и т.н. Трябваше да се науча да се справя с това.

Говорейки за икони, те се съхраняват във SPIFFS, файловата система ESP32. След закриването на безплатния Wunderground API за времето, трябваше да потърся други безплатни доставчици на данни за времето. Избрах две: една за времето за текущия ден, с 12 часови прогнози, и друга за многодневните прогнози. Иконите не са еднакви, така че ми причини два нови проблема:

  • Изберете набор от икони
  • Свържете тези икони с кодовете за прогнози на 2 -те сайта

Тази кореспонденция също се съхранява в RTC RAM, така че не трябва да се презарежда всеки път.

Последен проблем с иконите. Невъзможно е всички да се съхраняват в SPIFFS. Мястото е твърде малко за всичките ми файлове. Трябваше да се направи компресия на изображението. Написах скрипт в Python, който чете моите файлове с икони и ги компресира в RLE и след това съхранява компресираните файлове в SPIFFS. Там се държеше.

Но библиотеката за показване на електронна хартия приема само файлове от BMP тип, а не компресирани изображения. Затова трябваше да напиша допълнителна функция, за да мога да показвам иконите си от тези компресирани файлове.

Данните, прочетени в интернет, често са във формат json: данни за времето, Светец на деня. Използвам (страхотната) библиотека arduinoJson за това. Но цитатите не са такива. Взимам ги от специален сайт, така че трябва да ги прочета, като погледна директно в съдържанието на уеб страницата. Трябваше да напиша конкретен код за това. Всеки ден, около полунощ, програмата отива на този сайт и чете около десет случайни кавички и ги съхранява в RTC RAM. Единият се показва на случаен принцип сред тях, когато корпусът е ориентиран с голям екран нагоре.

Предавам ви проблема с показването на знаци с акцент (съжалявам, но кавичките са на френски)….

Когато малкият екран е нагоре, се показва напрежението на батерията с чертеж, за да се види по -добре оставащото ниво. Беше необходимо да се направи електронен монтаж за отчитане на напрежението на батерията. Тъй като измерването не трябва да разрежда батерията, използвах диаграма, намерена в интернет, която използва MOSFET транзистор като превключвател, за да консумира ток само когато се извърши измерването.

За да мога да направя тази схема и да вместя всичко в кутията, която исках възможно най -малката, трябваше да направя печатна платка, за да свържа всички компоненти на системата. Това е първата ми печатна платка. Имах късмет, защото всичко работи добре за първи път от тази страна …

Вижте картата за имплантиране: „забранената зона“е зона, запазена за свързване на USB кабела. Модулът Lolin32 ви позволява да презареждате батерията чрез USB: батерията се зарежда, ако USB кабелът е свързан, и модулът работи едновременно.

Последна точка: шрифтовете. С различни размери, смели или не, те трябваше да бъдат създадени и съхранявани. Библиотеката на Adafruit GFX се грижи за това много добре, след като сте инсталирали файловете с шрифтове в правилната директория. За създаването на файловете използвах сайта Font Converter, много удобно!

Уверете се, че сте избрали:

  • Дисплей за предварителен преглед: TFT 2.4"
  • Библиотечна версия: Adafruit GFX шрифт

И така да обобщим: голям проект, който ми позволи да науча много неща

Стъпка 4: Използване на дисплеи за електронна хартия

Използване на дисплеи за електронна хартия
Използване на дисплеи за електронна хартия

Основният недостатък на тези екрани е ясно видим на видеото: актуализацията на дисплея отнема една или две секунди и става чрез мигане (алтернативен дисплей на нормалните и обърнати версии на двата екрана). Това е приемливо за метеорологичната информация, тъй като не я актуализирам много често (на всеки час с изключение на промяна на ориентацията на кутията). Но не за времето. Ето защо (и за да огранича консумацията) все още използвам дисплея HH: MM (не секундите).

Затова трябваше да търся друг начин за актуализиране на дисплея. Тези екрани (някои от тях) поддържат частична актуализация (приложена или към част от екрана, или към целия екран …), но това не беше добре за мен, защото моят голям екран (който показва времето) запазва призраци на пикселите които се заменят. Например, когато преминавате от 10:12 до 10:13, "2" е малко видимо вътре в "3" и става още по -видимо след "4", "5" и т.н. да отбележа, че случаят с моя екран е такъв: обсъдих го с автора на библиотеката за показване на електронни хартии GxEPD2, който ми каза, че не е наблюдавал това явление със собствените си екрани. Опитахме се да променим параметрите, без да успеем да ловим призраци.

Затова трябваше да намерим друго решение: предложих да направя частично двойно освежаване, което реши проблема (поне за мен е задоволителен). Часовете минават, без екранът да мига и няма призраци. Преминаването обаче не е незабавно: отнема малко повече от една секунда, за да промените времето.

Стъпка 5: Направете го

Правя го
Правя го
Правя го
Правя го
Правя го
Правя го
Правя го
Правя го

За да се гарантира, че нищо не се движи вътре при промяна на ориентацията, различните компоненти (дисплеи, електронни модули, печатни платки, батерии) са залепени с пистолет за лепило. За да прокарам проводниците под печатната платка, инсталирах го на крака, направени с дистанционни елементи, същото важи и за батерията.

Скоро ще инсталирам външен USB конектор за микрофон, така че няма да се налага да отварям кутията, за да заредя батерията.

Може би също ще се интересувам от актуализиране от OTA, за да усъвършенствам всичко….

Стъпка 6: Кодът и файловете

Image
Image

Предлагат се три архивни файла:

  • Weather station.zip: кодът на Arduino, за качване с помощта на Arduino IDE
  • Boite ecran.zip: CAD и 3D принтерните файлове за калъфа
  • data.zip: файловете, които трябва да бъдат качени в SPIFFS на ESP32.

Ако не знаете как да качвате файлове в SPIFFS на ESP32, просто прочетете този урок, който представя много полезен плъгин и как да го използвате в Arduino IDE.

Програмирането на дълбок сън е доста различно от стандартното програмиране на Arduino. За ESP32 това означава, че ESP32 се събужда и изпълнява настройката, след което заспива. Така че функцията цикъл е празна и никога не се изпълнява.

Някои фази на инициализация трябва да се изпълняват само веднъж при първото изпълнение (като получаване на времето, метеорологичните данни, кавички и т.н.), така че ESP32 трябва да знае дали текущото събуждане е първото или не: за това решението е да се съхранява променлива в RTC RAM (която остава активна дори по време на фази на дълбок сън), която се увеличава при всяко събуждане. Ако е равно на 1, това е първото изпълнение и ESP32 изпълнява фазата на инициализация, в противен случай тази фаза се пропуска.

За да събудите ESP32, има няколко възможности:

  • Таймер за събуждане: кодът изчислява продължителността на дълбокия сън преди лягане. Това се използва за актуализиране на часа (на всеки 1, 2, 3 или 5 минути) или метеорологичните данни (на всеки 3 или 4 часа) на цитатите и светеца на деня (на всеки 24 часа)
  • Прекъсване при събуждане: акселерометърът изпраща сигнал, който се използва за събуждане на ESP32. Това се използва за откриване на промяна на ориентацията и актуализиране на дисплеите
  • Събуждане със сензор за докосване: ESP32 е снабден с няколко пина, действащи като сензори за докосване, но те не могат да се използват с таймер за събуждане, така че не използвах това.

Има и други трикове за програмиране другаде в кода, за да поддържате времето точно, като същевременно пестите енергия (т.е. да не свързвате NTP сървъра всяка минута), да премахвате акцентите, които не се поддържат от библиотеката Adafruit GFX, за да избегнете актуализиране на дисплея, ако не е необходимо да задавате параметрите на акселерометъра, особено за събуждане при прекъсване, да изчислявате точно времето за заспиване в случай на събуждане на таймера, избягвайте използването на серийната конзола, ако не е свързана с IDE (за да пестите енергия отново), изключете wifi, когато не е необходим и т.н. … и кодът е пълен с коментари, които помагат да се разберат функциите.

Благодаря, че прочетохте тази инструкция (първата ми). Надявам се да ви хареса и да се насладите на създаването на тази метеорологична станция

Състезание за сензори
Състезание за сензори

Вицешампион в състезанието за сензори

Препоръчано: