Гид по технологиям

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

7 min read Raspberry Pi Обновлено 22 Dec 2025
Измерение температуры с Raspberry Pi и Sense HAT
Измерение температуры с Raspberry Pi и Sense HAT

Совместное расположение Sense HAT и термометра на рабочем столе

О чём эта статья

Эта инструкция показывает, как быстро начать измерять температуру окружающей среды с помощью Raspberry Pi и официальной платы Sense HAT. Вы узнаете, как физически установить плату, настроить систему, считать температуру в Python, показать её на LED‑матрице и дополнительно — как улучшить точность, логировать данные и развернуть решение в «безголовом» режиме.

Что такое Sense HAT?

Плата 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

Sense HAT, установленный на плате Raspberry Pi, вид сверху

  1. Отключите питание Raspberry Pi и отсоедините кабели.
  2. Если в комплекте есть удлинитель‑хедер (header extender), установите его на Sense HAT. Это облегчает надежное совмещение контактов.
  3. Аккуратно посадите Sense HAT на 40‑контактный разъём GPIO Raspberry Pi. Убедитесь, что все контакты встали ровно и обе стороны платы соприкасаются.
  4. По желанию закрепите плату винтами через стойки‑подпорки.

Важно: на 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.

Окно Thonny IDE на рабочем столе Raspberry Pi OS

Определения:

  • 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.

Шаблон: быстрая методология проверки датчика

  1. Установите Sense HAT и загрузите Raspberry Pi.
  2. Запустите базовый скрипт чтения температуры и сравните с внешним термометром.
  3. Рассчитайте среднее смещение: offset = T_ext − T_hat_avg.
  4. Включите offset в код и перепроверьте.
  5. Если уровень шума велик, увеличьте период выборки и используйте усреднение нескольких измерений.

Заключение

Sense HAT — удобный инструмент для быстрого старта: он позволяет снимать показания температуры, отображать их на LED‑матрице и интегрировать в небольшие проекты. Для лучших результатов калибруйте и контролируйте положение платы относительно нагревающих компонентов Raspberry Pi. Для профессионального мониторинга рассмотрите внешние специализированные датчики.

Важно: если вам нужна повышенная точность или внешний монтаж, используйте внешние датчики, а Sense HAT — для визуализации и учебных задач.

Краткое резюме:

  • Sense HAT даёт быстрый доступ к температуре и другим данным окружения.
  • Округляйте и/или усредняйте показания; учитывайте смещение от корпуса.
  • Логируйте данные и автоматизируйте запуск через systemd для стабильной работы.

Raspberry Pi Sense HAT отображает температуру на светодиодной матрице

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Руководство по git log — форматы и фильтры
GIT

Руководство по git log — форматы и фильтры

Как добавить музыку в Google Slides
Презентации

Как добавить музыку в Google Slides

Закрытые субтитры в видеозвонках — как включить
Доступность

Закрытые субтитры в видеозвонках — как включить

Как исправить «command not found» в Linux
Linux

Как исправить «command not found» в Linux

Верхний и нижний индекс в Google Docs и Slides
Руководство

Верхний и нижний индекс в Google Docs и Slides

Как печатать с iPhone и iPad — AirPrint и приложения
Инструкции

Как печатать с iPhone и iPad — AirPrint и приложения