Съдържание:

Домашна метеорологична станция ESP-Now: 9 стъпки (със снимки)
Домашна метеорологична станция ESP-Now: 9 стъпки (със снимки)

Видео: Домашна метеорологична станция ESP-Now: 9 стъпки (със снимки)

Видео: Домашна метеорологична станция ESP-Now: 9 стъпки (със снимки)
Видео: MEGA Chia GPU Farming and Plotting Guide for Linux - Gigahorse Start to Finish - 2023 2024, Ноември
Anonim
Домашна метеорологична станция ESP-Now
Домашна метеорологична станция ESP-Now

Исках да имам домашна метеорологична станция от доста време и такава, която всеки от семейството може лесно да провери за температура и влажност. В допълнение към наблюдението на външните условия, исках да наблюдавам и определени помещения в къщата и гаражната си работилница. Това ще ни уведоми, когато е подходящ момент да проветрите къщата или да пуснете изсушителя (тук вали много през зимата). Това, което създадох, е базирана на ESP-Now сензорна система, която докладва на локален уеб-сървър, който всеки може да провери от компютъра или телефона си. За телефона написах като просто приложение за Android, за да направя това още по -лесно.

Стъпка 1: Подробности за дизайна

Подробности за дизайна
Подробности за дизайна

Исках да имам различни сензорни станции, които да поставя на различни места и да ги накарам да докладват на една главна станция (или хъб), която да запише информацията. След като опитах различни идеи, реших да използвам протокола ESP-Now на Espressif, тъй като позволяваше бърза комуникация директно между устройствата. Можете да прочетете малко за ESP-Now тук и това репо GitHub беше голяма част от моето вдъхновение.

Първата снимка показва оформлението на системата. Всеки сензор докладва своите измервания на шлюзово устройство, което препраща данните към основния сървър чрез твърда серийна връзка. Причината за това е, че протоколът ESP-Now не може да бъде активен едновременно с WIFI връзката. За да може потребителят да има достъп до уеб страницата, WIFI трябва да е включен по всяко време и това прави невъзможно използването на комуникациите ESP-Now на едно и също устройство. Докато шлюзовото устройство трябва да е устройство, базирано на Espressif (с възможност за ESP-Now), основният сървър може да бъде всяко устройство, което може да изпълнява уеб страница.

Някои сензорни станции ще изтощават батерии (или заредени със слънчеви батерии), а други просто ще имат захранване от мрежата. Исках обаче всички да използват възможно най -малко енергия и именно там функцията „дълбоко заспиване“, достъпна за устройствата ESP8266 и ESP32, е изключително полезна. Сензорните станции периодично биха се събуждали, правили измервания и ги изпращали до шлюзовото устройство и се връщали в сън за някакъв предварително програмиран период от време. Периодът им на събуждане от около 300 ms на всеки 5 минути (в моя случай) намалява значително тяхната консумация на енергия.

Стъпка 2: Сензори

Сензори
Сензори
Сензори
Сензори

Има различни сензори за избор за измерване на параметрите на околната среда. Реших да се придържам само към сензори с възможност за комуникация I2C, тъй като позволява бързи измервания и ще работи на всяко от устройствата, които имах. Вместо да работя директно с интегрални схеми, потърсих готови за използване модули със същите изводи, за да опростя дизайна си. Започнах само с искане да измервам температура и влажност и затова избрах модул, базиран на SI7021. По -късно исках сензор, който също може да измерва налягането, и реших да опитам сензорните модули, базирани на BME280. За някои места дори исках да наблюдавам нивата на осветеност и модулът BH1750 беше идеален за това като отделен сензорен модул. Купих сензорните си модули от ebay и това са модулите, които получих:

  • BME280 (GY-BMP/E280), измерва температура, влажност и налягане
  • SI7021 (GY-21), измерва температура и влажност
  • BH1750 (GY-302), измерва светлината

Има два стила на модулите за печатни платки GY-BMP/E280. И двата споделят един и същ извод за пинове 1 до 4. Един модул има два допълнителни пина, CSB и SDO. Тези два пина са предварително свързани към 4-пиновата версия на модула. Нивото на SDO щифта определя I2C адреса (Ground = по подразбиране 0x76, VCC = 0x77). CSB щифтът трябва да бъде свързан към VCC, за да изберете I2C интерфейса. Предпочитам 4 -пиновия модул, тъй като е готов за използване както е за моите цели.

Като цяло тези модули са много удобни за използване, тъй като вече имат инсталирани издърпващи се резистори за комуникационните линии и всички работят на 3.3V, така че са съвместими с платки, базирани на ESP8266. Имайте предвид, че пиновете на тези сензорни интегрални схеми обикновено не са толерантни към 5V, така че свързването им директно с нещо като Arduino Uno може да ги повреди трайно.

Стъпка 3: Сензорни станции

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

Както бе споменато, всички сензорни станции ще бъдат устройства Espressif, използващи комуникационния протокол ESP-Now. От предишни проекти и експерименти имах на разположение няколко различни устройства за провеждане на първоначалните ми тестове и включването им в окончателния дизайн. Под ръка имах следните устройства:

  • два модула ESP-01
  • две дъски за разработка на Wemos D1 mini
  • една дъска за разработка на Lolin ESP8266
  • една серийна WSPI платка за ESP12E
  • една платка GOOUUU ESP32 (38 -пинова платка за разработка)

Имах и платка за разработка на Wemos D1 R2, но имаше проблеми с нея, които не й позволяваха да се събуди от дълбок сън и като портално устройство ще се срине и няма да се рестартира правилно. По -късно го ремонтирах и той стана част от проекта за отваряне на гаражни врати. За да може "дълбокото заспиване" да работи, RST изводът на ESP8266 трябва да бъде свързан към щифта GPIO16, така че таймерът за заспиване може да събуди устройството. В идеалния случай тази връзка трябва да се осъществи с диод на Шотки (катод към GPIO16), така че ръчното нулиране през USB-TLL връзката по време на програмирането все още да работи. Въпреки това, резистор с ниска стойност (300 ома) или дори директна кабелна връзка все още може да бъде успешен.

Модулите ESP-01 не позволяват лесен достъп до щифта GPIO16 и човек трябва да запоява директно към интегралната схема. Това не е проста задача и не бих препоръчал това за всички. Платформата за сериен комплект WIFI на ESP12E беше нещо ново и изискваше доста промени, за да бъде полезна за моята цел. Най -лесните дъски за използване бяха дъските мини тип Wemos D1 и дъската Lolin. Устройствата ESP32 не изискват никакви модификации, за да работи дълбоко заспиване. Andreas Spiess има хубав инструктаж по този въпрос.

Стъпка 4: Сензорна станция ESP-01

Сензорна станция ESP-01
Сензорна станция ESP-01
Сензорна станция ESP-01
Сензорна станция ESP-01
Сензорна станция ESP-01
Сензорна станция ESP-01

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

Платките ESP-01 са много компактни и имат малко цифрови IO щифтове за работа, но това е достатъчно за I2C интерфейса. Дъските обаче изискват трудна модификация, за да позволят на "дълбокия сън" да работи. На показаната снимка проводник е запоен от ъгловия щифт (GPIO16) към щифта RST на заглавката. Проводникът, който използвах, е изолиран "ремонт" проводник с диаметър 0,1 мм. Изолационното покритие се стопява при нагряване, така че може да бъде запоено, за да се поправят следи и т.н. Размерът му затруднява работата с него и запоявах този проводник на място под микроскоп (в стил на любител/колекционер на печати). Имайте предвид, че заглавката от дясната страна има разстояние между щифтовете 0,1 "(2,54 мм). Инсталирането на диод Шотки тук няма да бъде никак лесно, затова реших просто да опитам проводника сам и двете устройства работят повече от месец без никакви проблеми.

Модулите бяха инсталирани на две прототипни платки, които създадох. Единият (#1) е програматорска платка, която също позволява I2C модули да бъдат инсталирани и тествани, докато другият (#2) е платка за разработка/тестване на I2C устройства. За първата платка запоех заедно стар мъжки USB конектор и малка печатна платка, за да захранвам устройството директно от USB адаптер за стена. Другото устройство има обикновен DC жак, модифициран, за да се побере в заглавката на винтовата клема и също се захранва чрез адаптер за стена.

Схемата показва как са свързани и как работи програмистът. Нямам други модули ESP-01, така че не съм имал непосредствена нужда от програмиста. В бъдеще вероятно ще направя печатна платка за тях. И двете платки имат инсталиран сензорен модул SI7021, тъй като не се интересувах толкова от измерванията на налягането на тези места.

Стъпка 5: ESP 12E Serial WIFI Kit Sensor Station

ESP 12E серийна WIFI комплект сензорна станция
ESP 12E серийна WIFI комплект сензорна станция
ESP 12E серийна WIFI комплект сензорна станция
ESP 12E серийна WIFI комплект сензорна станция

Платката ESP12E Serial WIFI Kit не беше предназначена толкова за разработка, колкото за демонстрация на това, което може да се направи с това устройство. Купих го отдавна, за да науча малко за програмирането на ESP8266 и накрая реших да му дам нова употреба. Премахнах всички светодиоди, които бяха инсталирани за демонстрации и добавих заглавка за програмиране на USB, както и заглавка I2C, подходяща за модулите, които използвам. Той имаше CdS фоторезистор, свързан към аналоговия входен щифт и реших да го оставя там. Този конкретен уред щеше да наблюдава гаражната ми работилница и фотосензорът, който имаше, беше достатъчен, за да ме уведоми дали светлините са били случайно включени. За измерването на светлината нормализирах показанията, за да ми дам процент изход и всичко над „5“през нощта означаваше, че светлините бяха оставени включени или вратата на къщата не беше правилно затворена. Щифтовете RST и GPIO16 са ясно обозначени на печатната платка и свързващият ги диод Шотки е инсталиран от долната страна на печатната платка. Захранва се чрез серийна USB платка, която е директно включена в USB зарядно за стена. Имам екстри от тези USB серийни платки и нямам нужда от тази в момента.

Не съм направил схема за тази платка и по принцип не препоръчвам да се купува такава, която да се използва за тази цел. Платките Wemos D1 Mini са много по -подходящи и ще бъдат обсъдени по -нататък. Въпреки че, ако имате някой от тях и имате нужда от съвет, ще се радвам да помогна.

Стъпка 6: Мини сензорни станции D1

Мини сензорни станции D1
Мини сензорни станции D1
Мини сензорни станции D1
Мини сензорни станции D1
Мини сензорни станции D1
Мини сензорни станции D1

Предпочитаните от мен платки за разработка ESP8266 на Wemos D1 Mini са моите предпочитани за използване и ако трябва да го направя отново, просто бих ги използвал. Те имат голям брой достъпни IO пинове, могат да бъдат програмирани директно чрез Arduino IDE и все още са доста компактни. Пинът D0 е GPIO16 на тези платки и свързването на диод на Шотки е доста лесно. Схемата показва как свързвам тези платки и и двете използват сензорен модул BME2808.

Една от двете платки се използва за наблюдение на външното време и работи от слънчева батерия. Слънчев панел с размери 165 мм x 135 мм (6V, 3.5 W) е свързан към модул за зареждане на литиево-йонна батерия TP4056 (вижте диаграмата за настройка на сензорната станция за слънчева батерия). Този конкретен модул за зареждане (03962A) разполага със схема за защита на батерията, която е необходима, ако батерията (пакетът) не съдържа такава. Литиево-йонната батерия е рециклирана от стара батерия на лаптоп и все още може да издържи достатъчно зареждане за работа на D1 Mini платката, особено с активиран дълбок сън. Дъската беше поставена в пластмасов корпус, за да я предпази донякъде от елементите. Въпреки това, за да може вътрешността да бъде изложена на външната температура и влажност, две дупки с диаметър 25 мм бяха пробити от противоположните страни и покрити (отвътре) с черен пейзажен плат. Платът е проектиран така, че да позволява проникване на влага и затова влажността може да бъде измерена. В единия край на заграждението беше пробита малка дупка и монтиран прозрачен пластмасов прозорец. Тук е поставен светлинният сензорен модул BH1750. Цялото устройство е поставено на открито на сянка (не директно слънце), като светлинният сензор е насочен навън. Той работи от слънчевата батерия почти 4 седмици при нашето дъждовно/облачно зимно време тук.

Стъпка 7: Шлюз и уеб сървър

Шлюз и уеб сървър
Шлюз и уеб сървър
Шлюз и уеб сървър
Шлюз и уеб сървър
Шлюз и уеб сървър
Шлюз и уеб сървър

За устройството ESP-Now Gateway беше използвана платка Lolin NodeMCU V3 (ESP8266), а за уеб сървъра-ESP32 (платка GOOUUU). Почти всяка платка ESP8266 или дори ESP32 би могла да служи като шлюзово устройство, това беше просто платката, която бях „останал“, след като използвах всички останали платки, които имах.

Използвах платката ESP32, тъй като се нуждая от дъска с малко повече изчислителни мощности, за да събирам данните, да ги сортирам, да ги запиша в хранилището и да стартирам уеб сървъра. В бъдеще може да има и собствен сензор и локален (OLED) дисплей. За съхранение е използвана SD карта с персонализиран адаптер. Използвах общ адаптер за microSD към SD карта и запоявах 7 -пинов мъжки (0.1 стъпка) заглавие към покритите контакти. Следвах съветите от този GitHub за осъществяване на връзките.

Настройката за прототипиране (с кабели на Dupont) не включва сензорен модул, но финализираната печатна платка, която проектирах, позволява един, както и малък OLED дисплей. Подробности за това как проектирах тази печатна платка са част от различен Instructable.

Стъпка 8: Софтуер

Софтуер
Софтуер

Устройства ESP8266 (ESP-NOW)

Софтуерът за всички устройства е написан с помощта на Arduino IDE (v1.87). Всяка сензорна станция изпълнява по същество идентичен код. Те се различават само по това кои пинове се използват за I2C комуникации и към кой сензорен модул са свързани. Най-важното е, че те изпращат идентичния пакет от измервателни данни до станцията ESP-Now Gateway, независимо дали имат един и същ сензор. Това означава, че някои сензорни станции ще попълват фиктивни стойности за измерванията на налягането и нивото на светлината, ако нямат сензори за предоставяне на реални стойности. Кодът за всяка станция и шлюза е адаптиран от примерите на Антъни Елдър на този GitHub.

Кодът на шлюзовото устройство използва SoftwareSerial за комуникация с уеб сървъра, тъй като ESP8266 има само един напълно функциониращ хардуерен UART. Работейки с максимална скорост на предаване от 9600, той изглежда доста надежден и е повече от достатъчен за изпращане на тези сравнително малки пакети данни. Устройството за шлюз също е програмирано с частен MAC адрес. Причината за това е, че ако има нужда от подмяна, сензорните станции не трябва да се програмират отново с новия MAC адрес на получателя.

ESP32 (уеб сървър)

Всяка сензорна станция изпраща своя пакет данни към шлюзовото устройство, което го препраща към уеб сървъра. Заедно с пакета данни MAC адресът на сензорната станция също се изпраща за идентифициране на всяка станция. Уеб сървърът има таблица за търсене, за да определи местоположението на всеки сензор и съответно сортира данните. Интервалът от време между измерванията беше зададен на 5 минути плюс случаен фактор, за да се избегне сензорите да се „сблъскат“един с друг при изпращане към портата.

Домашният WIFI рутер е настроен да разпределя фиксиран IP адрес на уеб сървъра, когато той се свърже с WIFI. За моята беше 192.168.1.111. Въвеждането на този адрес във всеки браузър ще се свърже с уеб сървъра на метеорологичната станция, стига потребителят да е в обхвата на WIFI от (и да се свърже с) домашната мрежа. Когато потребителят се свърже с уеб страницата, уеб сървърът отговаря с таблица с измерванията и включва времето на последното измерване на всеки сензор. По този начин, ако сензорната станция не реагира, може да се види това от таблицата, ако показанието е на повече от 5-6 минути.

Данните се записват в отделни текстови файлове на SD карта и те също могат да бъдат изтеглени от уеб страницата. Може да се импортира в Excel или всяко друго приложение за нанасяне на данни

Приложение за Android

За да улесня преглеждането на местната информация за времето на смартфон, създадох сравнително приложение за Android, използвайки Android Studio. Той е достъпен на моята страница на GitHub тук. Той използва класа webview за зареждане на уеб страницата от сървъра и като такъв като ограничена функционалност. Той не може да изтегля файловете с данни и така или иначе нямах нужда от тези на телефона си.

Стъпка 9: Резултати

Резултати
Резултати

И накрая, ето някои резултати за моята метеорологична станция. Данните бяха изтеглени на лаптоп и нанесени в Matlab. Прикачих моите скриптове на Matlab и можете също да ги стартирате в GNU Octave. Външният сензор работи на своята слънчево заредена батерия от почти 4 седмици и рядко имаме слънце по това време на годината. Досега всичко работи добре и всеки в семейството може да потърси времето сам, вместо да ме пита сега!

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