цифровая электроника
вычислительная техника
встраиваемые системы

 

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

Автор: Mike(admin) от 7-08-2017, 20:45

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


Микроконтроллер 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


Теги: ESP32, WiFi, Wi-Fi



Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий