Raspberry Pi: Датчик температуры, влажности и давления BME280 (Python)
Узнайте, как подключить датчик BME280 к Raspberry Pi для получения показаний температуры, влажности и давления. Вы узнаете, как подключить датчик к плате Raspberry Pi и написать Python-скрипт, который считывает данные с датчика и отображает их в терминале.
В этом руководстве мы рассмотрим следующие темы:
Предварительные требования
Перед тем как продолжить работу с этим руководством, проверьте следующие предварительные требования.
Ознакомьтесь с платой Raspberry Pi — если вы не знакомы с Raspberry Pi, вы можете прочитать наше :doc:`руководство по началу работы с Raspberry Pi </raspberry/rnt/getting-started-with-raspberry-pi/index>`_.
Вы должны знать, как запускать и создавать Python-файлы на вашем Raspberry Pi. Мы предпочитаем программировать Raspberry Pi удалённо через SSH, используя расширение в VS Code. У нас есть подробное руководство по этой теме: :doc:`Программирование Raspberry Pi удалённо с помощью VS Code (Remote-SSH) </raspberry/rnt/raspberry-pi-remote-ssh-vs-code/index>`_.
Знайте, как использовать GPIO Raspberry Pi, чтобы правильно собрать схему. Прочитайте следующее руководство: :doc:`Распиновка Raspberry Pi: Как использовать GPIO Raspberry Pi? </raspberry/rnt/raspberry-pi-pinout-gpios/index>`_
Знакомство с модулем датчика BME280
Модуль датчика BME280 считывает барометрическое давление, температуру и влажность. Поскольку давление изменяется с высотой, вы также можете оценить высоту над уровнем моря. Существует несколько версий этого модуля датчика. Мы используем модуль, показанный на рисунке ниже.
Этот датчик обменивается данными по протоколу I2C, поэтому подключение очень простое. Вы можете использовать стандартные выводы I2C на Raspberry Pi, как показано в следующей таблице:
BME280 |
Raspberry Pi |
|---|---|
Vin |
3.3V |
GND |
GND |
SCL |
GPIO 3 |
SDA |
GPIO 2 |
Узнайте больше о GPIO Raspberry Pi: :doc:`Распиновка Raspberry Pi: Как использовать GPIO Raspberry Pi? </raspberry/rnt/raspberry-pi-pinout-gpios/index>`_
Необходимые компоненты
Вот список компонентов, необходимых для сборки схемы:
Вы можете использовать приведённые выше ссылки или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Включение I2C на Raspberry Pi
По умолчанию связь по I2C не включена. Вам нужно включить её вручную. Откройте окно терминала на вашем Raspberry Pi и введите следующую команду:
sudo raspi-config
Откроется следующее меню. Выберите Interface Options.
Затем выберите пункт I2C.
Наконец, включите I2C, выбрав Yes.
I2C должен быть успешно включён.
После включения I2C перезагрузите Raspberry Pi, выполнив следующую команду:
sudo reboot
Подключение BME280 к Raspberry Pi
Подключите BME280 к стандартным выводам I2C на Raspberry Pi.
BME280 |
Raspberry Pi |
|---|---|
Vin |
3.3V |
GND |
GND |
SCL |
GPIO 3 |
SDA |
GPIO 2 |
Получение I2C-адреса датчика
После подключения датчика к Raspberry Pi давайте проверим, правильно ли подключён датчик, найдя его I2C-адрес.
Откройте окно терминала на вашем Raspberry Pi и выполните следующую команду:
sudo i2cdetect -y 1
Она должна показать I2C-адрес вашего датчика:
Установка библиотеки BME280
Существует несколько библиотек, совместимых с Raspberry Pi, для чтения данных с датчика BME280. Мы будем использовать библиотеку RPi.BME280. Эта библиотека доступна для установки через PIP (менеджер пакетов для пакетов Python).
Сначала установите или обновите pip, выполнив следующую команду:
sudo pip install --upgrade pip
Затем выполните следующую команду для установки библиотеки с помощью pip:
sudo pip install RPI.BME280
Python-код для Raspberry Pi с BME280 (температура, влажность и давление)
Следующий скрипт считывает температуру, влажность и давление с датчика BME280 и выводит показания в оболочку Python. Создайте новый Python-файл с любым именем, например, bme280_basic.py, и скопируйте следующий код.
import time
import smbus2
import bme280
# BME280 sensor address (default address)
address = 0x76
# Initialize I2C bus
bus = smbus2.SMBus(1)
# Load calibration parameters
calibration_params = bme280.load_calibration_params(bus, address)
def celsius_to_fahrenheit(celsius):
return (celsius * 9/5) + 32
while True:
try:
# Read sensor data
data = bme280.sample(bus, address, calibration_params)
# Extract temperature, pressure, and humidity
temperature_celsius = data.temperature
pressure = data.pressure
humidity = data.humidity
# Convert temperature to Fahrenheit
temperature_fahrenheit = celsius_to_fahrenheit(temperature_celsius)
# Print the readings
print("Temperature: {:.2f} °C, {:.2f} °F".format(temperature_celsius, temperature_fahrenheit))
print("Pressure: {:.2f} hPa".format(pressure))
print("Humidity: {:.2f} %".format(humidity))
# Wait for a few seconds before the next reading
time.sleep(2)
except KeyboardInterrupt:
print('Program stopped')
break
except Exception as e:
print('An unexpected error occurred:', str(e))
break
Как работает код
Продолжайте чтение, чтобы узнать, как работает код, или перейдите к разделу Демонстрация.
Импорт необходимых библиотек
Сначала мы импортируем необходимые библиотеки: time, smbus2 и bme280. Модуль time позволяет добавлять задержки в наш код, smbus2 помогает нам взаимодействовать с устройствами I2C, такими как датчик BME280, а bme280 предоставляет функции для удобного взаимодействия с датчиком.
import time
import smbus2
import bme280
Инициализация датчика BME280
Мы устанавливаем адрес датчика BME280 по умолчанию равным 0x 76. Это адрес, по которому датчик обменивается данными через шину I2C (проверьте предыдущий раздел).
# BME280 sensor address (default address)
address = 0x76
Затем мы инициализируем шину I2C с помощью команды smbus2.SMBus(1).
# Initialize I2C bus
bus = smbus2.SMBus(1)
Далее мы инициализируем датчик, указав шину I2C и его I2C-адрес.
# Load calibration parameters
calibration_params = bme280.load_calibration_params(bus, address)
Преобразование Цельсия в Фаренгейт
Мы определяем функцию celsius_to_fahrenheit(celsius), которая преобразует температуру из градусов Цельсия в градусы Фаренгейта. Затем мы можем вызвать эту функцию позже в нашем коде для преобразования температуры.
def celsius_to_fahrenheit(celsius):
return (celsius * 9/5) + 32
Получение показаний датчика
Мы входим в бесконечный цикл с помощью while True для многократного считывания и отображения данных с датчика.
while True:
Мы используем функцию bme280.sample(bus, address, calibration_params) для считывания данных с датчика.
data = bme280.sample(bus, address, calibration_params)
Мы извлекаем температуру, давление и влажность из данных, возвращённых датчиком, и сохраняем каждое показание в переменной: temperature_celsius, pressure и humidity.
# Extract temperature, pressure, and humidity
temperature_celsius = data.temperature
pressure = data.pressure
humidity = data.humidity
Мы преобразуем температуру из Цельсия в Фаренгейт с помощью функции, которую мы создали ранее, и сохраняем результат в переменной temperature_fahrenheit.
# Convert temperature to Fahrenheit
temperature_fahrenheit = celsius_to_fahrenheit(temperature_celsius)
Наконец, мы выводим показания, отформатированные до двух десятичных знаков:
# Print the readings
print("Temperature: {:.2f} °C, {:.2f} °F".format(temperature_celsius, temperature_fahrenheit))
print("Pressure: {:.2f} hPa".format(pressure))
print("Humidity: {:.2f} %".format(humidity))
Новые показания выводятся каждые две секунды. Вы можете изменить время между каждым считыванием, указав другое число в методе sleep().
time.sleep(2)
Обработка прерываний и исключений
Мы используем обработку исключений для перехвата прерываний с клавиатуры (когда пользователь нажимает Ctrl + C) и других исключений. Если это происходит, мы выводим сообщение об ошибке и используем команду break для выхода из цикла.
except KeyboardInterrupt:
print('Program stopped')
break
except Exception as e:
print('An unexpected error occurred:', str(e))
break
Демонстрация
Сохраните ваш Python-файл. Затем запустите его на вашем Raspberry Pi. Выполните следующую команду в каталоге, где находится ваш Python-файл:
python bme280_basic.py
Вы должны получать новые показания температуры, влажности и давления в оболочке Python или в терминале Raspberry Pi каждые три секунды.
Вы можете остановить выполнение программы, нажав CTRL + C.
Заключение
В этом руководстве вы узнали, как подключить датчик температуры, влажности и давления BME280 к Raspberry Pi и как написать Python-программу для получения и отображения показаний. Это один из самых простых примеров для начала работы с датчиком BME280.
Мы надеемся, что это руководство было полезным. Если вы новичок в работе с Raspberry Pi, вы можете начать со следующих руководств:
:doc:`Начало работы с Raspberry Pi </raspberry/rnt/getting-started-with-raspberry-pi/index>`_
:doc:`Распиновка Raspberry Pi </raspberry/rnt/raspberry-pi-pinout-gpios/index>`_
Вы можете посмотреть все наши проекты для Raspberry Pi по следующей ссылке:
Наконец, если вы хотите подключить BME280 к другим микроконтроллерам, у нас есть руководства для ESP32, ESP8266 и Arduino:
Спасибо за чтение.