Микроконтроллер ESP32, обладающий возможностями коммуникации по WiFi и Bluetooth, набирает популярность, и на его основе уже создаются различные полезные электронные устройства и оборудование. Его очень высокая (среди микроконтроллеров) вычислительная мощность, потрясающий дополнительный функционал и довольно низкая цена позволяют применять ESP32 в достаточно сложных проектах.


Погодная станция на основе ESP32 своими руками

На базе ESP32 благодаря его возможностям беспроводной связи можно самостоятельно создать несложную, но в то же время весьма функциональную погодную станцию, которая может быть качественнее и дешевле погодной станции на основе Arduino и ESP8266.


Проект погодной станции на ESP32

Данный проект предполагает то, что эта погодная станция будет автономной, то есть будет питаться не от сети, а от энергии солнца благодаря встроенным солнечным панелям. Таким образом, ее без проблем можно будет поместить на балкон или на веранду частного дома. Из разновидности модулей с микроконтроллером здесь используется FireBeetle ESP32 IOT компании DFRobot. В него без проблем можно загружать код из Arduino IDE. Все физические параметры считываются датчиком BME280. Необходимая энергия обеспечивается двумя солнечными панелями на 6 В, которые могут предоставлять 2 Вт мощности. Эти солнечные ячейки будут подключены параллельно. Полученная энергии хранится в литиево-ионной аккумуляторной батарее напряжением 3.7 В с емкостью 1000 мАч. Модуль Solar Lipo Charger от DFRobot будет отвечать за управление питанием.


Схема подключения ESP32 и других элементов погодной станции


Схема подключения ESP32 и других элементов погодной станции

Микроконтроллер FireBeetle ESP32 IOT питается от батареи 3.7V, которая подключается к зарядному устройству Solar Lipo. Солнечные элементы подключены к портам PWR In. Порты Vcc и GND микроконтроллера FireBeetle ESP32 IOT подключены к портам Vout зарядного устройства Solar Lipo. Питание BME280 обеспечивается напряжением 3.3 В от микроконтроллера Firebeetle ESP32 IOT. Связь осуществляется через линии I2C (SDA / SCL).


Код ESP32 для работы погодной станции

Чтобы использовать приведенный ниже код, следует внести в него небольшие изменения. Во-первых, следует отметить, что программа использует сервис Thingspeak.com, поэтому сначала нужно зарегистрироваться в нем и получить API. Затем этот API следует ввести вместо YOUR_API_KEY в качестве значения для переменной api_key. Также можно изменить значение переменной TIME_TO_SLEEP для изменения интервала перехода в режим сна.

#include <WiFi.h> #include <WiFiMulti.h> WiFiMulti WiFiMulti; const char ssid = "YOUR_SSID"; // имя сети WiFi const char password = "YOUR_WIFI_PASSWORD"; // пароль сети WiFi const char host = "api.thingspeak.com"; String api_key = "YOUR_API_KEY"; // ключ API // библиотека датчика BME280 #include <DFRobot_BME280.h> #define SEA_LEVEL_PRESSURE 1013.25f DFRobot_BME280 bme; //I2C float temp, pressure, hum, alt; //переменные датчика BME280 // библиотека для перевода ESP32 в режим сна #include "esp_deep_sleep.h" #define uS_TO_m_FACTOR 60000000 // Коэффициент преобразования микросекунд в минуты #define TIME_TO_SLEEP 1 // время через которое ESP32 перейдет в режим сна void setup() { Serial.begin(115200); delay(10); Connect_to_Wifi(); if (!bme.begin()) { Serial.println("No sensor device found, check line or address!"); } delay(100); Get_Values(); Send_Data(); esp_deep_sleep_enable_timer_wakeup(TIME_TO_SLEEP uS_TO_m_FACTOR); Serial.println("Going to sleep now"); esp_deep_sleep_start(); } void loop() { } void Get_Values() { temp = bme.temperatureValue(); delay(100); pressure = bme.pressureValue() / 100.0F; hum = bme.humidityValue(); alt = bme.altitudeValue(SEA_LEVEL_PRESSURE); delay(100); Serial.println("Collect data"); Serial.print("Temperature :"); Serial.print(temp); Serial.println(" C"); Serial.print("Pressure:"); Serial.print(pressure); Serial.println(" hPa"); Serial.print("Humidity :"); Serial.print(hum); Serial.println(" %"); Serial.print("Approx. Altitude:"); Serial.print(alt); Serial.println(" m"); Serial.println("------END------"); BME280_Sleep(); } void Connect_to_Wifi() { WiFiMulti.addAP(ssid, password); Serial.println(); Serial.println(); Serial.print("Wait for WiFi... "); while (WiFiMulti.run() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void Send_Data() { Serial.println("Prepare to send data"); WiFiClient client; const int httpPort = 80; if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } else { String data_to_send = api_key; data_to_send += "&field1="; data_to_send += String(temp); data_to_send += "&field2="; data_to_send += String(hum); data_to_send += "&field3="; data_to_send += String(pressure); data_to_send += "\r\n\r\n"; client.print("POST /update HTTP/1.1\n"); client.print("Host: api.thingspeak.com\n"); client.print("Connection: close\n"); client.print("X-THINGSPEAKAPIKEY: " + api_key + "\n"); client.print("Content-Type: application/x-www-form-urlencoded\n"); client.print("Content-Length: "); client.print(data_to_send.length()); client.print("\n\n"); client.print(data_to_send); delay(1000); } client.stop(); } void BME280_Sleep() { //Serial.println("BME280 to Sleep mode"); Wire.beginTransmission(0x77); Wire.write((uint8_t)BME280_REGISTER_CONTROL); Wire.write((uint8_t)0b00); Wire.endTransmission(); }

© digitrode.ru



Источник: http://digitrode.ru/computing-devices/mcu_cpu/881-pogodnaya-stanciya-na-osnove-esp32-svoimi-rukami.html


Поделись с друзьями



Рекомендуем посмотреть ещё:


Закрыть ... [X]

Как самостоятельно установит ESP на Opel Astra GTC Пособие автомобилиста Мастер класс аренда


Esp своими руками Esp своими руками Esp своими руками Esp своими руками Esp своими руками Esp своими руками

ШОКИРУЮЩИЕ НОВОСТИ