Raspberry Pi Pico: BME280 — температура, влажность и давление (Arduino IDE)

Начните работу с модулем датчика BME280 и платой Raspberry Pi Pico, программируемой в Arduino IDE, для получения данных о температуре, влажности и давлении. В этом кратком руководстве вы узнаете, как использовать датчик BME280 с платой Raspberry Pi Pico. Мы покажем вам, как подключить датчик, установить необходимые библиотеки и написать простой скетч для отображения показаний датчика.

Raspberry Pi Pico с BME280 — получение температуры, влажности и давления в Arduino IDE

Впервые работаете с Raspberry Pi Pico? Начните с руководства Начало работы с Raspberry Pi Pico.

Предпочитаете программировать Raspberry Pi Pico с помощью прошивки MicroPython? Ознакомьтесь с этим руководством: Raspberry Pi Pico — BME280: температура, влажность и давление (MicroPython).

Raspberry Pi Pico с Arduino IDE

Вам необходимо установить платы Raspberry Pi Pico в Arduino IDE, и вы должны знать, как загружать код на плату. Ознакомьтесь со следующим руководством, если вы ещё этого не сделали:

Знакомство с модулем датчика BME280

Модуль датчика BME280 измеряет барометрическое давление, температуру и влажность. Поскольку давление изменяется в зависимости от высоты, вы также можете оценить высоту над уровнем моря. Существует несколько версий этого модуля, но мы используем ту, которая показана на рисунке ниже.

Датчик BME280 — температура, влажность и давление

Этот датчик взаимодействует по протоколу I2C, поэтому подключение очень простое. Вы можете использовать любые выводы I2C Raspberry Pi Pico для подключения датчика BME280. Мы будем использовать GPIO 4 (SDA) и GPIO 5 (SCL) — подробнее о GPIO Raspberry Pi Pico.

BME280

Raspberry Pi Pico

Vin

3.3V (OUT)

GND

GND

SCL

GPIO 5

SDA

GPIO 4

Необходимые компоненты

Raspberry Pi Pico — необходимые компоненты и подключение к датчику BME280

Для этого проекта вам нужно подключить модуль датчика BME280 к выводам I2C Raspberry Pi Pico. Вот список компонентов, необходимых для этого руководства:

  • Модуль датчика BME280

  • Плата Raspberry Pi Pico

  • Макетная плата

  • Соединительные провода

Подключение BME280 к Raspberry Pi Pico

Подключите BME280 к любой комбинации выводов I2C Pico — мы будем использовать GPIO 4 (SDA) и GPIO 5 (SCL), которые являются выводами I2C по умолчанию для Raspberry Pi при программировании в Arduino IDE.

Схема подключения BME280 к Raspberry Pi Pico

Рекомендуемое чтение: Распиновка Raspberry Pi Pico и Pico W: руководство по GPIO

Установка библиотеки BME280 для Raspberry Pi Pico

Для получения показаний с модуля датчика BME280 мы будем использовать библиотеку Adafruit_BME280. Выполните следующие шаги для установки библиотеки в Arduino IDE:

Откройте Arduino IDE и перейдите в Sketch > Include Library > Manage Libraries. Откроется менеджер библиотек.

Введите «adafruit bme280» в поле поиска и установите библиотеку от Adafruit.

Установка библиотеки BME280 для Raspberry Pi Pico в Arduino IDE

Появится всплывающее окно с предложением установить библиотеку Adafruit Unified Sensor. Установите эту библиотеку. Если всплывающее окно не появилось, вам нужно перейти в Sketch > Include Library > Manage Libraries и ввести «adafruit unified sensor». Прокрутите вниз и установите библиотеку Adafruit Unified Sensor.

BME280: давление, температура и влажность — скетч Arduino

Чтобы показать вам, как считывать температуру, влажность и давление с BME280, мы используем простой скетч, который выводит текущие показания каждую секунду в монитор порта (Serial Monitor).

Скопируйте следующий код в Arduino IDE. Следующий пример адаптирован из одного из примеров, предоставленных библиотекой Adafruit_BME280.

/*********
  Complete project details at https://RandomNerdTutorials.com/raspberry-pi-pico-bme280-arduino/

  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
  Adapted from the Adafruit BME280 examples: https://github.com/adafruit/Adafruit_BME280_Library
*********/

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

/*#include <SPI.h>
#define BME_SCK 18
#define BME_MISO 19
#define BME_MOSI 23
#define BME_CS 5*/

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C (default pins for Raspberry Pi Pico: GPIO 4 (SDA), GPIO 5(SCL)
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

unsigned long delayTime;

void setup() {
  Serial.begin(115200);
  Serial.println("BME280 with Raspberry Pi Pico");

  bool status;

  // default settings
  // (you can also pass in a Wire library object like &Wire2)
  status = bme.begin(0x76);
  if (!status) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }

  delayTime = 1000;

  Serial.println();
}

void loop() {
  printValues();
  delay(delayTime);
}

void printValues() {
  Serial.print("Temperature = ");
  Serial.print(bme.readTemperature());
  Serial.println(" *C");

  // Convert temperature to Fahrenheit
  /*Serial.print("Temperature = ");
  Serial.print(1.8 * bme.readTemperature() + 32);
  Serial.println(" *F");*/

  Serial.print("Pressure = ");
  Serial.print(bme.readPressure() / 100.0F);
  Serial.println(" hPa");

  Serial.print("Approx. Altitude = ");
  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  Serial.println(" m");

  Serial.print("Humidity = ");
  Serial.print(bme.readHumidity());
  Serial.println(" %");

  Serial.println();
}

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

Продолжайте читать этот раздел, чтобы узнать, как работает код, или перейдите к разделу Демонстрация.

Библиотеки

Код начинается с подключения необходимых библиотек: библиотеки Wire для использования I2C, а также библиотек Adafruit_Sensor и Adafruit_BME280 для взаимодействия с датчиком BME280.

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

Связь по SPI

Поскольку мы будем использовать связь I2C, следующие строки, определяющие выводы SPI, закомментированы:

/*#include <SPI.h>
#define BME_SCK 18
#define BME_MISO 19
#define BME_MOSI 23
#define BME_CS 5*/

Давление на уровне моря

Создаётся переменная с именем SEALEVELPRESSURE_HPA.

#define SEALEVELPRESSURE_HPA (1013.25)

Эта переменная сохраняет давление на уровне моря в гектопаскалях (что эквивалентно миллибарам). Эта переменная используется для оценки высоты при заданном давлении путём сравнения его с давлением на уровне моря. В этом примере используется значение по умолчанию, но для более точных результатов замените его на текущее давление на уровне моря в вашем местоположении.

Связь по I2C

В этом примере по умолчанию используется протокол связи I2C. Как вы можете видеть, вам просто нужно создать объект Adafruit_BME280 с именем bme. Он автоматически будет использовать GPIO 4 как SDA и GPIO 5 как SCL.

Adafruit_BME280 bme; // I2C

setup()

В функции setup() запускается последовательная связь:

Serial.begin(115200);

Следующие строки инициализируют датчик. Наш датчик использует I2C-адрес 0x76. Большинство датчиков BME280 будут использовать этот адрес, но если у вашего другой адрес, обязательно измените его в коде.

status = bme.begin(0x76);
if (!status) {
  Serial.println("Could not find a valid BME280 sensor, check wiring!");
  while (1);
}

Вы можете воспользоваться этим руководством, чтобы найти адрес ваших I2C-устройств: Raspberry Pi Pico: I2C-сканер (Arduino IDE) — поиск адреса I2C-устройств.

Вывод значений температуры, влажности и давления

В функции loop() вызывается функция printValues(), которая считывает значения с BME280 и выводит результаты в монитор порта (Serial Monitor).

void loop() {
  printValues();
  delay(delayTime);
}

Считывание температуры, влажности, давления и оценка высоты выполняются с помощью следующих методов объекта bme:

  • bme.readTemperature() — считывает температуру в градусах Цельсия;

  • bme.readHumidity() — считывает абсолютную влажность;

  • bme.readPressure() — считывает давление в гПа (гектопаскалях = миллибарах);

  • bme.readAltitude(SEALEVELPRESSURE_HPA) — оценивает высоту в метрах на основе давления на уровне моря.

Если вы также хотите отображать температуру в градусах Фаренгейта, вам нужно раскомментировать следующие строки кода:

/*Serial.print("Temperature = ");
Serial.print(1.8 * bme.readTemperature() + 32);
Serial.println(" *F");*/

Загрузка кода на Raspberry Pi Pico

Для загрузки кода на Raspberry Pi Pico плата должна находиться в режиме загрузчика (bootloader).

Если Raspberry Pi в данный момент работает с прошивкой MicroPython, вам нужно вручную перевести его в режим загрузчика. Для этого подключите Raspberry Pi Pico к компьютеру, одновременно удерживая кнопку BOOTSEL.

Режим загрузчика Raspberry Pi Pico

При последующих загрузках через Arduino IDE плата должна автоматически переходить в режим загрузчика без необходимости нажатия кнопки BOOTSEL.

Теперь выберите COM-порт в меню Tools > Port. Может случиться так, что COM-порт будет неактивен (серым цветом). Если это так, не беспокойтесь — порт будет автоматически найден при нажатии кнопки загрузки.

Raspberry Pi Pico — COM-порт не найден в Arduino IDE

Загрузите код.

Кнопка загрузки в Arduino 2.0

Вы должны получить сообщение об успешной загрузке.

Успешная загрузка кода на Raspberry Pi Pico в Arduino IDE

Демонстрация

После загрузки кода на плату Raspberry Pi Pico откройте монитор порта (Serial Monitor) на скорости 115200 бод.

Raspberry Pi Pico — схема с BME280 для измерения температуры, влажности и давления

Новые показания датчика будут отображаться в мониторе порта каждую секунду.

Raspberry Pi Pico с BME280 — демонстрация в Arduino IDE

Устранение неполадок

Ваш BME280 не работает? Это может быть: неправильное подключение, неверный I2C-адрес, сломанный датчик или поддельный датчик BME280.

Заключение

Это руководство представляло собой краткое введение в получение данных о температуре, влажности и давлении с датчика BME280 при использовании Raspberry Pi Pico в Arduino IDE.

Мы надеемся, что это руководство было полезным. У нас есть руководства для других популярных датчиков окружающей среды:

Если вы хотите подключить BME280 к другим микроконтроллерам, у нас есть руководства для ESP32, а также для самой платы Raspberry Pi: