Подключение датчика BMP180 к ESP32 с помощью ESP-IDF


В этом уроке мы научимся подключать барометрический датчик BMP180 к плате ESP32 с использованием. Сначала мы познакомим вас с датчиком, затем подключим его к нашей плате разработки и запрограммируем для измерения температуры и давления с помощью ESP-IDF. Для демонстрации мы сначала измерим данные с датчика BMP180 и выведем их на консоль ESP-IDF. Затем мы подключим OLED-дисплей SSD1306 к плате ESP32, чтобы также отображать результаты измерений датчика на OLED-дисплее.

Вы можете посмотреть на нашем сайте и другие проекты с использованием датчика BMP180:

Датчик измерения давления BMP180

Датчик BMP180 обычно используется для измерения атмосферного и биометрического давления, хотя он также позволяет измерять температуру и высоту. Он также позволяет измерять давление на уровне моря наряду с реальной высотой. Благодаря высокой точности и экономичности этот барометрический датчик отлично подходит для потребительских приложений, таких как прогнозирование погоды, спортивные устройства, GPS, навигация и т. д. Более того, поскольку датчик BMP180 способен с высокой точностью измерять давление и высоту, он также может использоваться в качестве высотомера.

Давайте обсудим некоторые ключевые особенности датчика BMP180:

  • Датчик BMP180 использует протокол I2C для подключения и связи с микроконтроллерами.
  • Он может работать в диапазоне напряжений от 1,8 до 3,6 В.
  • Он способен измерять атмосферное давление в диапазоне 300-1100 гПа.
  • Обладает низким уровнем шума и низким энергопотреблением. Приблизительно 5 мкА при 1 выборке/с в стандартном режиме.
  • Также может использоваться для измерения температуры.

Распиновка датчика BMP180

Модуль датчика BMP180 имеет компактные размеры и широко представлен на рынке. На рисунке ниже показан типичный модуль датчика BMP180.

Модуль датчика BMP180

Модуль датчика BMP180, который мы будем использовать в этом руководстве, имеет 4 контакта. Два из них — это контакты питания (Vcc и Gnd), а два — контакты связи I2C (SCL и SDA). В таблице ниже приведено краткое описание этих четырех контактов.

Vcc На вывод Vcc подается питание на датчик BMP180. Подключите его к источнику напряжения 3,3-5 В.
GND Это заземляющий контакт, используемый для обеспечения общего заземления.
SCL Это вывод последовательного тактового сигнала, используемый для генерации тактового импульса. Подключите его к выводу SCL микроконтроллера.
SDA Это вывод для передачи последовательных данных, используемый для последовательной связи. Подключите его к выводу SDA микроконтроллера.

Как видите, распиновка датчика BMP180 достаточно стандартная для всех датчиков, работающих по интерфейсу I2C.

Подключение BMP180 к ESP32

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

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

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

BMP180 ESP32
Vcc Контакт VCC будет соединен с контактом 3,3 В платы ESP32.
Gnd Общий провод (земля) с ESP32
SCL GPIO22 — это стандартный вывод SCL для ESP32.
SDA GPIO21 — это стандартный вывод SDA для ESP32.

Подключите датчик BMP180 к плате разработки ESP32, как показано на принципиальной схеме ниже:

Принципиальная схема подключения датчика BMP180 к плате ESP32

Взаимодействие с датчиком BMP180 с помощью ESP-IDF

Мы создадим проект в VS Code с расширением ESP-IDF для отображения данных датчика BMP180, включая температуру, давление и высоту. Код будет считывать данные с датчика и выводить их в терминал ESP-IDF каждую секунду. Мы будем использовать библиотеку BMP180, предоставленную krzychb на 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.

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

  1. bmp180.c
  2. bmp180.h
  3. CMakeLists.txt

bmp180.c

bmp180.h

CMakeLists.txt

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

Код ESP32 для работы с датчиком BMP180

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

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

Начнём с включения всех необходимых библиотек для этого проекта. Это включает в себя библиотеки FreeRTOS для создания задач и генерации задержек, драйвер gpio для настройки контактов I2C GPIO ESP32, esp_log.h в качестве библиотеки для ведения логов и bmp180.h для использования функциональности датчика BMP180.

Этот код использует информационное логирование. Функция логирования принимает два аргумента. Первый аргумент — это тег, а второй — отформатированная строка. Поэтому эта глобальная переменная будет полезна при вызове функций ESP_LOGI(). Здесь «BMP180 I2C Read» — это тег, который будет использоваться при логировании.

В качестве опорного давления мы примем давление на уровне моря.

Далее приведены определения контактов SCL и SDA, которые будут использоваться для связи по протоколу I2C между платой ESP32 и датчиком BMP180. Мы используем контакты I2C по умолчанию, однако вы также можете определить другие контакты GPIO как контакты SDA/SCL.

Внутри функции bmp180_task() мы начнем захватывать показания датчика BMP180 и выводить их на терминал ESP-IDF каждую секунду.

Следующие функции используются для считывания показаний давления, высоты и температуры соответственно.

Если ответ об ошибке ESP не равен ESP_OK, то для данного показания датчика будет выведено сообщение об ошибке.

В противном случае, показания давления, высоты и температуры, а также их единицы измерения будут выводиться на терминал ESP-IDF каждую секунду.

Внутри функции app_main() мы сначала инициализируем датчик BMP180, вызвав функцию bmp180_init() и передав в качестве параметров контакты SDA и SCL. После этого мы проверим результат инициализации датчика. Если инициализация датчика прошла успешно, мы создадим задачу bmp180 с помощью функции xTaskCreate(). В противном случае на терминал будет выведено сообщение об ошибке инициализации BMP180 вместе с кодом ошибки.

Компиляция скетча

Для прошивки микросхемы введите следующую команду в последовательном терминале. Не забудьте заменить COM-порт на тот, через который подключена ваша плата.

После успешной прошивки кода вы сможете наблюдать за показаниями давления, высоты и температуры, обновляющимися в консоли каждую секунду.

Тестирование работы проекта в окне терминала

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

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

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