Метеостанция BME280 и ESP2866
Начнем по традиции с технических характеристик цифрового барометра:
- напряжение питания: 3.3V;
- диапазон измерения давления: 300-1100 hPa;
- -- температуры: от -40 до +85 °C;
- влажность: 0 - 100 %;
- тип прошивки: SPI, I2C.
Так для чего же нужна домашняя метеостанция, когда существует Интернет и множество других информационных источников? – Поясняем, синоптики дают обычно лишь усредненный анализ информации о погоде по нашему региону. Он часто бывает неточным или совсем приблизительным. Имея под рукой собственную синоптическую станцию (установленную в вашем месте проживания), вы открываете доступ к надежным информационным данным и точно знаете, когда пойдет дождь ∕ выпадет снег. Кроме того, подобный бытовой прибор сообщит вам о влажности в квартире и за ее пределами. Удобно, не правда ли?
Подключение BME280 к NodeMCU
Нам понадобятся такие аппаратные компоненты:- Контроллер ESP2866
- Модуль датчика
- Соединительные провода
Для дальнейшего тестирования нашей разработки и компиляции понадобится специализированный софт – библиотеки Adafruit_Sensor, Adafruit_BME280, Wire (для контроля интерфейса), ESP8266WiFi.
https://github.com/adafruit/Adafruit_BME280_Library
https://github.com/adafruit/Adafruit_Sensor
Они позволят сэкономить нам время для написания кодов. Просто скачайте их (по данным ссылкам) и добавьте в среду программирования Ардуино IDE (открываем Менеджер, идем по пути: Скетч > Подключить библиотеку > Добавить .ZIP). Перезапускаем ПО.
Теперь можно написать скетч:
/*
Тестировалось на Arduino IDE 1.8.5
Дата тестирования 03.10.2019г.
*/
#include <ESP8266WiFi.h> // Подключаем библиотеку ESP8266WiFi
#include <Wire.h> // Подключаем библиотеку Wire
#include <Adafruit_BME280.h> // Подключаем библиотеку Adafruit_BME280
#include <Adafruit_Sensor.h> // Подключаем библиотеку Adafruit_Sensor
#define SEALEVELPRESSURE_HPA (1013.25) // Задаем высоту
Adafruit_BME280 bme; // Установка связи по интерфейсу I2C
const char* ssid = "Название Вашей WiFi сети"; // Название Вашей WiFi сети
const char* password = "Пароль от Вашей WiFi сети"; // Пароль от Вашей WiFi сети
WiFiServer server(80); // Указываем порт Web-сервера
String header;
void setup() {
Serial.begin(115200); // Скорость передачи 115200
bool status;
if (!bme.begin(0x76)) { // Проверка инициализации датчика
Serial.println("Could not find a valid BME280 sensor, check wiring!"); // Печать, об ошибки инициализации.
while (1); // Зацикливаем
}
Serial.print("Connecting to "); // Отправка в Serial port
Serial.println(ssid); // Отправка в Serial port
WiFi.begin(ssid, password); // Подключение к WiFi Сети
while (WiFi.status() != WL_CONNECTED) { // Проверка подключения к WiFi сети
delay(500); // Пауза
Serial.print("."); // Отправка в Serial port
}
Serial.println(""); // Отправка в Serial port
Serial.println("WiFi connected."); // Отправка в Serial port
Serial.println("IP address: "); // Отправка в Serial port
Serial.println(WiFi.localIP()); // Отправка в Serial port
server.begin();
}
void loop(){
WiFiClient client = server.available(); // Получаем данные, посылаемые клиентом
if (client) {
Serial.println("New Client."); // Отправка "Новый клиент"
String currentLine = ""; // Создаем строку для хранения входящих данных от клиента
while (client.connected()) { // Пока есть соединение с клиентом
if (client.available()) { // Если клиент активен
char c = client.read(); // Считываем посылаемую информацию в переменную "с"
Serial.write(c); // Отправка в Serial port
header += c;
if (c == '\n') { // Вывод HTML страницы
if (currentLine.length() == 0) {
client.println("HTTP/1.1 200 OK"); // Стандартный заголовок HT
client.println("Content-type:text/html ");
client.println("Connection: close"); // Соединение будет закрыто после завершения ответа
client.println("Refresh: 10"); // Автоматическое обновление каждые 10 сек
client.println();
client.println("<!DOCTYPE html><html>"); // Веб-страница создается с использованием HTML
client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
client.println("<meta charset='UTF-8'>"); // Делаем русскую кодировку
client.println("<link rel=\"icon\" href=\"dаta:,\">");
client.println("<style>body { text-align: center; font-family: \"Trebuchet MS\", Arial;}");
client.println("table { border-collapse: collapse; width:40%; margin-left:auto; margin-right:auto; }");
client.println("th { padding: 12px; background-color: #0043af; color: white; }");
client.println("tr { border: 1px solid #ddd; padding: 12px; }");
client.println("tr:hover { background-color: #bcbcbc; }");
client.println("td { border: none; padding: 12px; }");
client.println(".sensor { color:white; font-weight: bold; background-color: #bcbcbc; padding: 1px; }");
client.println("</style></head><body><h1>Метеостанция на BME280 и ESP8266</h1>");
client.println("<table><tr><th>Параметр</th><th>Показания</th></tr>");
client.println("<tr><td>Температура</td><td><span class=\"sensor\">");
client.println(bme.readTemperature());
client.println(" *C</span></td></tr>");
client.println("<tr><td>Давление</td><td><span class=\"sensor\">");
client.println(bme.readPressure() / 100.0F);
client.println(" hPa</span></td></tr>");
client.println("<tr><td>Приблизительная высота над уровнем моря</td><td><span class=\"sensor\">");
client.println(bme.readAltitude(SEALEVELPRESSURE_HPA));
client.println(" m</span></td></tr>");
client.println("<tr><td>Влажность</td><td><span class=\"sensor\">");
client.println(bme.readHumidity());
client.println(" %</span></td></tr>");
client.println("</body></html>");
client.println();
break;
} else {
currentLine = "";
}
} else if (c != '\r') {
currentLine += c;
}
}
}
header = "";
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
}
}
Конечно, при желании вы можете модернизировать схему, добавив в нее OLED-дисплей (LCD TFT Display), газоанализатор, датчик CO2 и другие устройства. Как видите, процесс очень увлекателен и имеет явную практическую ценность. Экспериментируйте, создавайте собственные проекты!
Подключение BMP280 к ESP2866 позволит вам создать практичный и увлекательный проект, а именно – домашнюю метеостанцию. О подобных датчиках мы уже говорили,...
Сегодня хотим поведать вам о том, как провести подключение BME280 к Arduino и для чего в целом необходимо данное устройство. Датчик давления – не что иное, как...
Сегодня поговорим о том, как подключить датчик давления BMP280 к Ардуино, для чего он необходим, какие библиотеки и прошивки применяются для его работы. Мы уже...
Сегодня поговорим о том, как воплотить в жизнь подключение FPM10A к Arduino, что это за модуль, где используется, каковы параметры его работы и т.д. Речь идет...
Сегодня у нас на рассмотрении подключение MQ-135 к Arduino и все, что с ним связано. Данная тема и в особенности модуль сенсора выбраны не случайно, ведь в...