Raspberry Pi Pico: BME280 — температура, влажность и давление (Arduino IDE)
Начните работу с модулем датчика BME280 и платой Raspberry Pi Pico, программируемой в Arduino IDE, для получения данных о температуре, влажности и давлении. В этом кратком руководстве вы узнаете, как использовать датчик BME280 с платой Raspberry Pi Pico. Мы покажем вам, как подключить датчик, установить необходимые библиотеки и написать простой скетч для отображения показаний датчика.
Впервые работаете с 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 измеряет барометрическое давление, температуру и влажность. Поскольку давление изменяется в зависимости от высоты, вы также можете оценить высоту над уровнем моря. Существует несколько версий этого модуля, но мы используем ту, которая показана на рисунке ниже.
Этот датчик взаимодействует по протоколу 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 |
Необходимые компоненты
Для этого проекта вам нужно подключить модуль датчика 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.
Рекомендуемое чтение: Распиновка 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.
Появится всплывающее окно с предложением установить библиотеку 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.
При последующих загрузках через Arduino IDE плата должна автоматически переходить в режим загрузчика без необходимости нажатия кнопки BOOTSEL.
Теперь выберите COM-порт в меню Tools > Port. Может случиться так, что COM-порт будет неактивен (серым цветом). Если это так, не беспокойтесь — порт будет автоматически найден при нажатии кнопки загрузки.
Загрузите код.
Вы должны получить сообщение об успешной загрузке.
Демонстрация
После загрузки кода на плату Raspberry Pi Pico откройте монитор порта (Serial Monitor) на скорости 115200 бод.
Новые показания датчика будут отображаться в мониторе порта каждую секунду.
Устранение неполадок
Ваш BME280 не работает? Это может быть: неправильное подключение, неверный I2C-адрес, сломанный датчик или поддельный датчик BME280.
Заключение
Это руководство представляло собой краткое введение в получение данных о температуре, влажности и давлении с датчика BME280 при использовании Raspberry Pi Pico в Arduino IDE.
Мы надеемся, что это руководство было полезным. У нас есть руководства для других популярных датчиков окружающей среды:
Если вы хотите подключить BME280 к другим микроконтроллерам, у нас есть руководства для ESP32, а также для самой платы Raspberry Pi:
ESP32 с датчиком BME280 в Arduino IDE
Raspberry Pi Pico: BME280 — температура, влажность и давление (MicroPython)