Как измерять температуру с Raspberry Pi и Sense HAT

О чём эта статья
Эта инструкция показывает, как быстро начать измерять температуру окружающей среды с помощью Raspberry Pi и официальной платы Sense HAT. Вы узнаете, как физически установить плату, настроить систему, считать температуру в Python, показать её на LED‑матрице и дополнительно — как улучшить точность, логировать данные и развернуть решение в «безголовом» режиме.
Что такое Sense HAT?
Sense HAT — официальное расширение (HAT) для Raspberry Pi, разработанное компанией Raspberry Pi. Первоначально создано для экспериментов Astro Pi на Международной космической станции, устройство включает набор датчиков и небольшой 8×8 RGB‑дисплей. Sense HAT совместим с любым Raspberry Pi с 40‑контактным GPIO и обычно используется в образовательных проектах, погодных станциях и прототипах IoT.
Кратко о встроенных функциях (факты):
- Влажность: датчик STMicro HTS221, диапазон 0–100% относительной влажности. Температура измеряется датчиком влажности в диапазоне 0 °C — 65 °C ±2 °C.
- Барометрическое давление: STMicro LPS25HB, диапазон 260–1260 гПа. Температура измеряется в диапазоне 15 °C — 40 °C ±0.5 °C.
- Температура: читается с датчика влажности или датчика давления; можно использовать среднее двух показаний.
- Гироскоп, акселерометр, магнитометр: компоненты IMU LSM9DS1 для ориентации и движения.
- LED‑матрица 8×8 и мини‑джойстик для отображения и простого управления.
Факт‑бокс: ключевые числа
- 8×8 RGB LED для вывода текста/иконок
- Диапазон рабочей температуры датчиков: примерно 0–65 °C (в зависимости от датчика)
- Интерфейс: подключается к 40‑контактному GPIO
Шаг 1: Установка Sense HAT на Raspberry Pi
- Отключите питание Raspberry Pi и отсоедините кабели.
- Если в комплекте есть удлинитель‑хедер (header extender), установите его на Sense HAT. Это облегчает надежное совмещение контактов.
- Аккуратно посадите Sense HAT на 40‑контактный разъём GPIO Raspberry Pi. Убедитесь, что все контакты встали ровно и обе стороны платы соприкасаются.
- По желанию закрепите плату винтами через стойки‑подпорки.
Важно: на Raspberry Pi 400 разъём GPIO расположен сзади в клавиатуре. Sense HAT будет направлен назад — рассмотрите возможность использования гибкого удлинителя GPIO.
Шаг 2: Подготовка Raspberry Pi (ПО и подключение)
По умолчанию Raspberry Pi OS обычно содержит пакет для Sense HAT. Тем не менее проверьте и при необходимости установите пакет:
sudo apt update
sudo apt install sense-hat -yЕсли пакет только что установлен, перезагрузите систему:
sudo rebootРекомендации по подключению и режимам работы:
- Подключите клавиатуру, мышь и монитор при начальной настройке (GUI). Для удалённой работы используйте SSH (headless).
- В headless‑режиме можно редактировать файлы через nano, запускать скрипты в терминале или разворачивать сервисы systemd.
Примечание: библиотека sense‑hat устанавливает Python API для управления сенсорами и LED‑матрицей.
Шаг 3: Программирование на Python
Работать удобно в Thonny IDE (Menu → Programming → Thonny IDE) или в любом текстовом редакторе. Основной объект — класс SenseHat из модуля sense_hat.
Определения:
- SenseHat: класс, предоставляющий методы для чтения датчиков и управления LED‑матрицей.
- show_message(): метод для прокрутки текста по 8×8 RGB‑матрице.
Шаг 4: Снятие показаний температуры (базовый пример)
В Thonny создайте новый файл и вставьте простую программу:
from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
# Получаем температуру (по умолчанию в градусах Цельсия)
temp_c = sense.get_temperature()
print("Температура (C):", temp_c)
# При необходимости переводим в Фаренгейты
temp_f = temp_c * 1.8 + 32
print("Температура (F):", temp_f)
# Округление до одной десятой
print("Температура (C, округл.):", round(temp_c, 1))Пояснения:
- sense.get_temperature() читает значение с встроенного температурного датчика (чаще всего датчика влажности HTS221).
- Датчик может показывать температуру корпуса или быть слегка смещённым из‑за тепла процессора.
Шаг 5: Отображение температуры на LED‑матрице и цикл опроса
Чтобы выводить температуру постоянно и обновлять показания, используйте цикл и show_message(). Вот простой рабочий скрипт, показывающий значение каждые 10 секунд:
from sense_hat import SenseHat
from time import sleep
sense = SenseHat()
sense.clear()
try:
while True:
temp_c = sense.get_temperature()
temp_c = round(temp_c, 1)
message = f"Temp: {temp_c}C"
sense.show_message(message, text_colour=[255, 165, 0], scroll_speed=0.08)
sleep(10)
except KeyboardInterrupt:
sense.clear()Улучшенная версия с усреднением двух источников (влажность + давление) и калибровочным смещением:
from sense_hat import SenseHat
from time import sleep
sense = SenseHat()
sense.clear()
CALIBRATION_OFFSET = -1.5 # Скорректируйте по своей калибровке, °C
try:
while True:
t_humidity = sense.get_temperature()
t_pressure = sense.get_temperature_from_pressure()
temp_c = (t_humidity + t_pressure) / 2 + CALIBRATION_OFFSET
temp_c = round(temp_c, 1)
sense.show_message(f"{temp_c}C", text_colour=[0, 200, 255], scroll_speed=0.06)
sleep(10)
except KeyboardInterrupt:
sense.clear()Логирование в CSV (пример):
from sense_hat import SenseHat
from time import sleep, strftime
sense = SenseHat()
with open('/home/pi/temperature_log.csv', 'a') as f:
f.write('timestamp,temp_c\n') # заголовок при первом запуске
try:
while True:
temp_c = round((sense.get_temperature() + sense.get_temperature_from_pressure()) / 2, 1)
ts = strftime('%Y-%m-%d %H:%M:%S')
with open('/home/pi/temperature_log.csv', 'a') as f:
f.write(f"{ts},{temp_c}\n")
sleep(60)
except KeyboardInterrupt:
sense.clear()Совет: используйте логирование с пометками времени и раз в несколько минут, чтобы собрать пригодный для анализа набор данных.
Советы по калибровке и точности
Важно понимать ограничение: сенсоры на Sense HAT расположены на плате, близко к компонентам Raspberry Pi, поэтому показания могут быть выше фактической температуры воздуха из‑за тепла процессора. Что делать:
- Поднимите плату с помощью стоек/stacking header, чтобы уменьшить теплопередачу.
- Откалибруйте смещение: параллельно измерьте температуру хорошим внешним термометром и вычислите корректировку (offset).
- Используйте усреднение между t_from_humidity и t_from_pressure — это часто снижает шум.
- Для наиболее точных измерений применяйте внешние датчики (см. раздел «Альтернативы»).
Контроль качества: если при сильном ветре показания не меняются, возможно, датчик находится в слое теплого воздуха у корпуса — измените положение.
Режим без монитора (headless) и автозапуск
Для удалённого запуска и непрерывной работы рекомендуется использовать systemd‑сервис.
Пример systemd‑юнита (/etc/systemd/system/sense_temp.service):
[Unit]
Description=Sense HAT temperature logger
After=network.target
[Service]
User=pi
ExecStart=/usr/bin/python3 /home/pi/sense_temp.py
Restart=always
[Install]
WantedBy=multi-user.targetЗагрузите сервис и включите автозапуск:
sudo systemctl daemon-reload
sudo systemctl enable sense_temp.service
sudo systemctl start sense_temp.service
sudo journalctl -u sense_temp.service -fАльтернативы автозапуска: crontab @reboot, screen или tmux для интерактивной сессии.
Альтернативные подходы и когда платформа не подойдёт
Часто Sense HAT удобен для учебных и демонстрационных проектов. Однако есть случаи, когда он не лучший выбор:
- Нужна высокая точность температуры воздуха — предпочтительнее внешние датчики: DS18B20 (1‑проводной), BME280 (температура/влажность/давление) или отдельные промышленные сенсоры.
- Проект работает в агрессивной среде (влага, пыль) — требуется герметичный датчик с IP‑классом защиты.
- Требуется удалённая датчиковая сеть — лучше использовать низкоэнергетичные внешние модули (LoRa, Zigbee).
Когда Sense HAT хорош:
- Быстрая визуализация на LED‑матрице
- Образовательные проекты и прототипы
- Эксперименты с IMU и датчиками окружения
Чек‑лист для разных ролей
Для хоббиста:
- Sense HAT установлен и выровнен
- Пакет sense-hat установлен
- Запущен тестовый скрипт, показания читаются
Для преподавателя/классной комнаты:
- Дети понимают, что такое смещение и калибровка
- Есть пример кода для отображения и сбора данных
- Материалы для обсуждения (погрешности, среднее, логирование)
Для развёртывания в проекте IoT:
- Добавлено логирование с метками времени
- Установлен автозапуск (systemd)
- Продумана стратегия резервного копирования логов
Критерии приёмки
- Скрипт стартует автоматически после перезагрузки.
- Температура читается и логируется не реже одного раза в минуту.
- Показания с LED‑матрицы соответствуют последней записи в логе.
- При выключении/перезапуске — процесс корректно рестартует и матрица очищается.
Безопасность и приватность
Данные о температуре обычно не чувствительны. Однако если вы собираете метки времени и данные в публичные сервисы, убедитесь, что не отправляете в открытый доступ служебную информацию (IP, учётки) вместе с логами. Используйте TLS/HTTPS при облачном экспорте.
Сопутствующие проекты и альтернативы
- DS18B20 — недорогой водонепроницаемый датчик (точность ±0.5 °C). Хорош для наружных измерений.
- BME280 — комбинированный датчик температуры/влажности/давления, часто используется в метеостанциях.
- USB‑термометры — простой вариант для подключения к любому компьютеру.
Советы по выбору: если требуется простота и визуализация на плате — Sense HAT; если требуется точность и внешний монтаж — DS18B20/BME280.
Шаблон: быстрая методология проверки датчика
- Установите Sense HAT и загрузите Raspberry Pi.
- Запустите базовый скрипт чтения температуры и сравните с внешним термометром.
- Рассчитайте среднее смещение: offset = T_ext − T_hat_avg.
- Включите offset в код и перепроверьте.
- Если уровень шума велик, увеличьте период выборки и используйте усреднение нескольких измерений.
Заключение
Sense HAT — удобный инструмент для быстрого старта: он позволяет снимать показания температуры, отображать их на LED‑матрице и интегрировать в небольшие проекты. Для лучших результатов калибруйте и контролируйте положение платы относительно нагревающих компонентов Raspberry Pi. Для профессионального мониторинга рассмотрите внешние специализированные датчики.
Важно: если вам нужна повышенная точность или внешний монтаж, используйте внешние датчики, а Sense HAT — для визуализации и учебных задач.
Краткое резюме:
- Sense HAT даёт быстрый доступ к температуре и другим данным окружения.
- Округляйте и/или усредняйте показания; учитывайте смещение от корпуса.
- Логируйте данные и автоматизируйте запуск через systemd для стабильной работы.
Похожие материалы
Руководство по git log — форматы и фильтры
Как добавить музыку в Google Slides
Закрытые субтитры в видеозвонках — как включить
Как исправить «command not found» в Linux
Верхний и нижний индекс в Google Docs и Slides