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

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

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

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

WI-FI метеостанция на модуле ESPЭлектрическая схема WI-FI метеостанции на модуле ESP

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

WI-FI метеостанция на модуле ESPДанные о погоде на экране

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

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

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

WI-FI метеостанция на модуле ESPГотовый корпус

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

WI-FI метеостанция на модуле ESPСолнечная панель 2 ватта

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

Если вы находитесь в зоне действия двух или более доступных сети 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,

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 ей не страшны.


1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Понравилась статья? Поделиться с друзьями:
Настройка смартфонов и гаджетов, оборудования и подключение Смарт ТВ, мобильные операторы