Публикация показаний датчика BME680 с помощью ESP32, MQTT и ESP-IDF


В данной статье мы научимся публиковать показания датчика BME680 с помощью ESP32 и MQTT, используя ESP-IDF. ESP32 будет выступать в качестве клиента-издателя MQTT и публиковать показания датчика, включающие температуру, давление, влажность и качество воздуха, по различным темам. Любой клиент MQTT может получать эти значения датчика, подписавшись на эти темы:

  • esp32/bme680/temperature
  • esp32/bme680/humidity
  • esp32/bme680/pressure
  • esp32/bme680/gas

Если вы используете несколько датчиков, вы также можете создать строку JSON и опубликовать значения датчиков в рамках одной темы.

Публикация показаний датчика BME680 с помощью ESP32, MQTT и ESP-IDF

Мы будем использовать MQTT-брокер Mosquitto на Raspberry Pi, но вы также можете установить его на свои компьютеры под управлением Windows и Linux, если вы их используете. Издатель и подписчик установят соединения с MQTT-брокером, установленным на Raspberry Pi. После этого ESP32 будет публиковать показания датчиков в указанные темы каждые несколько секунд.

Прежде чем изучать данную статью советуем прочитать руководство по подключению датчика BME680 к ESP32 с помощью ESP-IDF.

Также на нашем сайте вы можете посмотреть и другие статьи про публикацию показаний различных датчиков с помощью ESP32 и MQTT:

Датчик BME680

BME680 — это маломощный датчик «четыре в одном», объединяющий датчики температуры, давления, влажности и газа. Он работает от напряжения 1,8–3,8 В и взаимодействует с другими микроконтроллерами по протоколам I2C и SPI. Этот датчик используется в таких областях, как отслеживание качества воздуха, измерение влажности, отслеживание погодных условий, домашняя автоматизация и управление GPS-навигацией.

Схема расположения контактов

Ниже представлена ​​схема расположения контактов датчика BME680:

​​Схема расположения контактов датчика BME680

Название контакта Описание контакта
VCC Контакт для питания датчика
GND Общий провод (земля)
SCL Микросхема BME680 предоставляет два интерфейса для получения показаний датчика: SPI и I2C. Этот вывод отвечает за передачу тактового сигнала по последовательному интерфейсу как для I2C, так и для SPI.
SDA При использовании протокола I2C этот вывод работает как SDA (Serial Data pin), а при использовании протокола SPI — как SDI (Serial Data In), также известный как MOSI («Master out Slave in»).
SDO Это вывод SDO (вывод данных ведомого устройства) / MISO (вход ведущего устройства, выход ведомого устройства) для связи по протоколу SPI. Этот вывод используется только для интерфейса SPI.
CS Это контакт выбора микросхемы, используемый в SPI-интерфейсе. Он служит входом для датчика.

Как видим, распиновка у датчика достаточно продуманная.

Контакты I2C ESP32

Мы будем использовать интерфейс I2C для получения показаний датчика BME680 с помощью ESP32 и ESP-IDF. Теперь давайте обсудим контакты I2C ESP32. На приведенной ниже схеме показана распиновка ESP32, где контакты I2C по умолчанию выделены красным цветом. Это контакты I2C по умолчанию модуля ESP32 DEVKIT. Однако, если вы хотите использовать другие контакты GPIO в качестве контактов I2C, вам придется установить их в коде.

Контакты I2C в плате ESP32

Для более подробной информации по этим вопросам можете прочитать статью про использование интерфейса I2C в ESP32 с помощью ESP-IDF.

Подключение датчика BME680 к ESP32

Собранная на макетной плате схема подключения датчика BME680 к ESP32

Для подключения датчика BME680 к плате ESP32 нам потребуются следующие компоненты:

  1. Плата ESP32.
  2. Датчик BME680.
  3. Соединительные провода.
  4. Макетная плата.

Подключение BME680 к плате ESP32 довольно простое, так как оно включает в себя лишь соединение 4 контактов (GND, VCC, SDA и SCL) с ESP32. Необходимо соединить вывод VCC с контактом 3,3 В, заземление с общим заземлением, контакт SCL датчика с контактом SCL платы ESP32, а контакт SDA датчика с контактом SDA платы ESP32.

В ESP32 по умолчанию для вывода SDA используется GPIO21, а для SCL — GPIO22.

Соединения между устройствами указаны в таблице ниже:

Датчик BME680 ESP32
GND GND
VCC 3.3V
SDA GPIO21(I2C SDA)
SCL GPIO22 (I2C SCL)

Схема подключения датчика BME680 к плате ESP32

Публикация показаний BME680 с помощью ESP32 и MQTT

Мы разработаем проект в VS Code с расширением ESP-IDF для измерения температуры окружающей среды, барометрического давления, относительной влажности и содержания летучих органических соединений (ЛОС) или качества воздуха в помещении (IAQ) с помощью датчика окружающей среды BME60 и публикации показаний в темах MQTT.

Этот код считывает показания датчика BME680, устанавливает соединение с MQTT-брокером и публикует показания датчика в MQTT-темах. Мы будем использовать библиотеку BME680 ESP-IDF, предоставленную  UncleRus на GitHub.

Создание примера проекта

Откройте VS Code и перейдите в меню View > Command Palette («Вид» > «Палитра команд»). Введите в строке поиска ESP-IDF: New Project и нажмите Enter.

Укажите название проекта и каталог, а также плату и целевое устройство ESP-IDF. Для платы ESP-IDF мы выбрали опцию custom board ("пользовательская плата"). Для целевого устройства ESP-IDF мы выбрали модуль ESP32. Нажмите кнопку ‘Choose Template’ ("Выбрать шаблон"), чтобы продолжить.

В разделе «Расширение» выберите опцию ESP-IDF:

Выбор опции ESP-IDF в разделе Extension («Расширение»)

На вкладке get-started («Начало работы») мы щелкнем по пункту «sample_project». Затем нажмем ‘Create project using template sample_project’) («Создать проект, используя шаблон sample_project»).

Создание проекта с использованием шаблона sample_project

Вы получите уведомление о создании проекта. Чтобы открыть проект в новом окне, нажмите «Да».

Это откроет проект, который мы создали на вкладке «Проводник». Внутри папки проекта находится несколько папок. Это справедливо для каждого проекта, который вы будете создавать с помощью ESP-IDF Explorer.

Для начала добавим необходимые заголовочные файлы для библиотек BME680, требуемых для этого проекта. Создайте новую папку с именем 'components' и добавьте в неё папки bme680, esp_idf_lib_helpers и i2cdev, скопировав их по ссылке ниже:

Файлы, необходимые для работы с датчиком BME680

Теперь перейдите к файлу main.c. В папке main находится исходный код, то есть файл main.c будет находиться здесь. Перейдите в папку main > main.c и откройте его. Скопируйте приведенный ниже код из этого файла и сохраните его.

Код ESP32 для публикации показаний BME680 с помощью MQTT

Данный код можно также скачать по следующей ссылке.

Как работает код?

Для начала мы подключим необходимые библиотеки, включая драйвер i2c, драйвер gpio, библиотеку BME680, библиотеки FreeRTOS для генерации задержек, esp_wifi.h для включения Wi-Fi-подключения, esp_event.h для мониторинга событий Wi-Fi и MQTT, mqtt_client.h для настройки протокола MQTT для публикации/подписки и esp_log.h в качестве библиотеки для логирования. Библиотека driver/i2c.h позволит ESP32 взаимодействовать с другими устройствами I2C, в нашем случае это датчик BME680.

 

 

 

 

статья в разработке

(Проголосуй первым!)
Загрузка...
1 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *