WI-FI метеостанция на модуле ESP

Вот несложная метеостанция, которую можно себе сделать для возможности передавать данные о погоде через интернет. Устройство создано на базе wi-fi модуля ESP8266-07, дисплея OLED 0.96&#8243,, датчики HTU21d и BMP280, зарядное TP4056, солнечная панель 2 Вт, li-ion батарея 2000 мА/ч, стабилизатор MCP1700 и немного пассивных радиоэлементов. ESP программирование в Arduino.

Принципиальная схема метеостанции

Датчик погодных условий работает в цикле периодического пробуждения из режима сна, каждые 30 минут. После выхода, он подключается к сети wi-fi, считывает датчики и напряжение аккумулятора, после чего отправляет данные на серверы Thingspeak и Blynk, затем обновляет данные на дисплее и снова впадает в сон.

Во время работы средний ток потребления метеостанцией около 80 мА, в режиме сна ток падает до 3 мА, причём большую часть потребляет OLED дисплей.

Конструкция самодельной метеостанции

Плата с деталями закрыта в промышленном герметичном корпусе из пластика.

Работает погодная станция от энергии солнечной батареи, точнее она постоянно подзаряжает литиевый аккумулятор. Напряжение после ночи падает до 3.95 В и, следовательно, даже через несколько пасмурных дней аккумулятор должен продолжать работать.

Управляющая программа

Если вы находитесь в зоне действия двух или более доступных сети wi-fi, то вот решение подключения через модуль ESP:

#include &lt,ESP8266WiFi.h&gt,

const char* ssid1 = ssid_sieci_1, const char* password1 = haslo_sieci_1, const char* ssid2 = ssid_sieci_2, const char* password2 = haslo_sieci_2, const char* ssid3 = ssid_sieci_3, const char* password3 = haslo_sieci_3, const char* ssid4 = ssid_sieci_4, const char* password4 = haslo_sieci_4, const char* ssid5 = ssid_sieci_5, const char* password5 = haslo_sieci_5&#8243,, const byte Czas_max_timeout = 30,

word timeout = 0, byte Status_polaczenia = 0,

void setup() { Serial.begin(115200), delay(10), } //********************************************************************************************************* void loop() { Wlacz_wifi(), Skanuj_wifi(), Wykonaj_zadanie(), Rozlacz_wifi_i_wylacz(), delay(5000), } //********************************************************************************************************* void Wykonaj_zadanie() { if (Status_polaczenia == 1){ Serial.println( ), Serial.println(Wykonuje zadanie), } } //*********************************************************************************************************

void Wlacz_wifi() { Serial.println( ), Serial.println(Wlaczam WIFI), WiFi.forceSleepWake(), delay(100), } //********************************************************************************************************* void Rozlacz_wifi_i_wylacz() { Serial.println( ), Serial.println(Rozlaczam WIFI), WiFi.disconnect(), Status_polaczenia = 0, WiFi.forceSleepBegin(), Serial.println(Wylaczam WIFI w celu oszczedzania energii), Serial.println( ), Serial.println( ), Serial.println( ), } //********************************************************************************************************* void Polacz_z_wifi(){ timeout = 0, for (int timeout=0, timeout &lt,= Czas_max_timeout, timeout++){ if (WiFi.status() != WL_CONNECTED) {delay(200),Serial.print(.),} else {timeout = Czas_max_timeout,Status_polaczenia = 1,Serial.print( Polaczono),} if (timeout == Czas_max_timeout && Status_polaczenia == 0) {Serial.print(TIMEOUT),WiFi.disconnect(),} } } //********************************************************************************************************* void Skanuj_wifi(){ byte znana_siec = 0, byte Dostepna_siec_1 = 0, byte Dostepna_siec_2 = 0, byte Dostepna_siec_3 = 0, byte Dostepna_siec_4 = 0, byte Dostepna_siec_5 = 0,

Serial.println(Skanowanie dostepnych sieci WIFI),

int n = WiFi.scanNetworks(), if (n == 0){ Serial.println(Nie znaleziono zadnych sieci!), } else { Serial.print(Znaleziono ), Serial.print(n), Serial.print( sieci WIFI),

for (int i = 0, i &lt, n, ++i){ if ( WiFi.SSID(i) == ssid1 && Dostepna_siec_1 == 0) {znana_siec++,Dostepna_siec_1 = 1,} if ( WiFi.SSID(i) == ssid2 && Dostepna_siec_2 == 0) {znana_siec++,Dostepna_siec_2 = 1,} if ( WiFi.SSID(i) == ssid3 && Dostepna_siec_3 == 0) {znana_siec++,Dostepna_siec_3 = 1,} if ( WiFi.SSID(i) == ssid4 && Dostepna_siec_4 == 0) {znana_siec++,Dostepna_siec_4 = 1,} if ( WiFi.SSID(i) == ssid5 && Dostepna_siec_5 == 0) {znana_siec++,Dostepna_siec_5 = 1,} } Serial.print( w tym ), Serial.print(znana_siec), Serial.print( dostepnych znanych sieci), Status_polaczenia = 0,

if (Dostepna_siec_1 == 1 && Status_polaczenia == 0) {WiFi.begin(ssid1, password1),Serial.println( ),Serial.print(Laczenie z (1) ),Serial.print(ssid1),Polacz_z_wifi(),} if (Dostepna_siec_2 == 1 && Status_polaczenia == 0) {WiFi.begin(ssid2, password2),Serial.println( ),Serial.print(Laczenie z (2) ),Serial.print(ssid2),Polacz_z_wifi(),} if (Dostepna_siec_3 == 1 && Status_polaczenia == 0) {WiFi.begin(ssid3, password3),Serial.println( ),Serial.print(Laczenie z (3) ),Serial.print(ssid3),Polacz_z_wifi(),} if (Dostepna_siec_4 == 1 && Status_polaczenia == 0) {WiFi.begin(ssid4, password4),Serial.println( ),Serial.print(Laczenie z (4) ),Serial.print(ssid4),Polacz_z_wifi(),} if (Dostepna_siec_5 == 1 && Status_polaczenia == 0) {WiFi.begin(ssid5, password5),Serial.println( ),Serial.print(Laczenie z (5) ),Serial.print(ssid5),Polacz_z_wifi(),} } }

Тут процессор сам выбирает себе сеть, с которой он свяжется и передаст данные о погоде. Система работает уже более 1 года. Морозы до -20C ей не страшны.

Гитарный комбик с питанием от аккумуляторов – схема и корпус

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: