BMP280 и ESP2866

28-05-2020, 16:07 0 комментариев
Подключение BMP280 к ESP2866 позволит вам создать практичный и увлекательный проект, а именно – домашнюю метеостанцию. О подобных датчиках мы уже говорили, оценив их существенную пользу, доступность и простоту эксплуатации. Сегодня продолжим рассматривать популярные в среде пользователей и разработчиков модули.

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

Технические характеристики:
  • напряжение: 3 – 3,3 V;
  • интерфейсы: I2C и SPI;
  • высотомер:   -500 ~ +9000 м.;
  • измеряемое атмосферное давление: 300 - 1100 гПа;
  • диапазон рабочих температур: -40 - 65 С;
  • габариты: 2 х 2,5 х 0,95мм.
Подробнее об этой модели метеодатчика можно почитать ТУТ.

Цифровой барометр BME280 – не менее интересный гаджет с неплохими возможностями анализатора. Его ценят за высокую точность измерения, невысокую стоимость и хорошие базовые параметры. Назовем основные:
  • шкала измерения температуры: от -40 до +85 °C;
  • ---- влажности: 0 - 100 %;
  • 3 режима работы (Sleep, Forced, Normal);
  • точность: до 90 процентов.
Переходите по ссылке в информационный материал, где мы детальнее говорили об этом устройстве.
Давайте попробуем подключить датчик давления BMP280 к ESP2866. Это не сложно!
Электрическая схема показана на скриншоте:
Для создания принципиальной схемы используем следующие аппаратные элементы:
  1. микроконтроллер NodeMCU (на базе чипа ESP8266).
  2. датчик атмосферного давления.
  3. соединительные провода.
  4. ПК с выходом в сеть Интернет.
Вот что у нас получилось в итоге:
Для дальнейшей прошивки и тестирования сборки будем использовать две специализированные библиотеки: Adafruit_Sensor.h и BME280. Они отсутствуют в среде разработки IDE, потому нам следует их дополнительно скачать и инсталлировать.
Еще одна библиотека имеется там по умолчанию, стандартно. Она необходима для управления шиной, называется Wire (наверняка вы наслышаны о ней).

Заливаем программный скетч:
/*
Тестировалось на 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("");
  }
}
Указанный выше вариант является самым простым, при желании его можно расширить, добавив к схеме подключения дополнительные детали: дисплей (для удобства вывода и просмотра значений), CO2-датчик, различные газоанализаторы.
На этом пока всё. Изучайте Arduino, создавайте собственные погодные станции и развивайтесь во всех направлениях!
Поделись в социальных сетях:
О авторе
Калугин Антон

Программист микроконтроллеров с 8-ми летним стажем, работал в таких компаниях как IBM, ASUS, Microsoft.

В комментариях с радостью отвечу на ваши вопросы.

Все статьи автора
Похожие новости

Сегодня поговорим о том, как подключить датчик давления BMP280 к Ардуино, для чего он необходим, какие библиотеки и прошивки применяются для его работы. Мы уже...

Метеостанция BME280 и ESP2866 - тема нашего сегодняшнего обсуждения. Мы с вами много говорили о датчиках атмосферного давления, их роли в современном...

Сегодня хотим поведать вам о том, как провести подключение BME280 к Arduino и для чего в целом необходимо данное устройство. Датчик давления – не что иное, как...

Подключение BMP180 к Arduino – процесс не сложный, но вполне практичный. Если вы всерьез занимаетесь проектами на базе этой программной среды, считаете себя...

На повестке дня еще один увлекательный и практичный проект – подключение датчика дыма MQ-2 к Arduino. Почему увлекательный – нет надобности пояснять, а вот о...

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