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

Как заставить Raspberry Pi автоматически твитить температуру CPU и фото с вебкамеры

6 min read Raspberry Pi Обновлено 07 Jan 2026
RPi: бот твитов с температурой и фото
RPi: бот твитов с температурой и фото

Иллюстрация Raspberry Pi и логотипа Twitter

Важно: инструкция ориентирована на Raspbian (Raspberry Pi OS). Большая часть команд применима к другим Linux-дистрибутивам, но пути и пакеты могут отличаться.

Что вы получите

  • Автоматический бот, публикующий показания температуры CPU и/или фото с вебкамеры.
  • Полный рабочий Python-скрипт с загрузкой изображения в твит.
  • Инструкции по установке зависимостей и настройке cron.
  • Чеклист развертывания, варианты альтернатив, сценарии отладки и примеры ошибок.

Предпосылки (коротко)

  • Raspberry Pi с установленной ОС (Raspbian / Raspberry Pi OS).
  • Доступ по SSH или локальная клавиатура/монитор.
  • Аккаунт в Twitter (для регистрации приложения и получения ключей API).

Ключевые шаги

  1. Установить Twython (Python-клиент для Twitter) и pygame (для работы с вебкамерой).
  2. Зарегистрировать приложение в Twitter и получить CONSUMER/ACCESS ключи.
  3. Написать Python-скрипт, собирающий температуру и снимающий вебкамеру, и отправляющий их в Twitter.
  4. Настроить cron для автоматического запуска.

Установка Twython и зависимостей

Запустите обновление и установите пакеты:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python-setuptools python-pygame python3-pygame
sudo easy_install pip
sudo pip install twython

Примечание: в современных системах используйте pip3 и python3, если стандартный python указывает на Python 3. Если у вас Python 3 по умолчанию, замените pip на pip3 и исполняемый файл на python3.

Важно: pygame может потребовать дополнительных системных библиотек (alsa, fbdev, SDL). Если установка падает, смотрите вывод apt и установите недостающие пакеты.

Регистрация приложения в Twitter и получение ключей

  1. Перейдите в консоль разработчика Twitter и создайте приложение (создать “App”). Необязательно указывать Callback URL; поле Website можно заполнить любым рабочим URL.

Страница создания нового приложения Twitter с формой

  1. После создания в разделе “Details” вы увидите Consumer Key и Consumer Secret (API key и API secret).

Панель ключей и секретов приложения Twitter

  1. Перейдите в “Settings” и измените режим доступа приложения на “Read and Write” (по умолчанию часто стоит “Read only”).

Настройка доступа приложения Twitter: Read and Write

  1. Нажмите “Create an OAuth access token” внизу страницы Details, чтобы сгенерировать Access Token и Access Token Secret. Скопируйте все четыре значения и сохраните в безопасном месте.

Кнопка создания OAuth access token и параметры на странице приложения Twitter

Совет: не публикуйте ключи публично и не выкладывайте репозиторий с полными ключами. Используйте файл конфигурации с ограниченными правами доступа.

Создание проекта и базового скрипта

Создайте каталог проекта и файл скрипта:

mkdir SillyTweeter
cd SillyTweeter
sudo nano SillyTweeter.py

Вставьте базовый минимальный код (пример из оригинальной инструкции):

#!/usr/bin/env python
import sys
from twython import Twython
CONSUMER_KEY = '*************YOUR DATA*************'
CONSUMER_SECRET = '***********YOUR DATA*************'
ACCESS_KEY = '***********YOUR DATA*************'
ACCESS_SECRET = '***********YOUR DATA***************'

api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)

api.update_status(status=sys.argv[1])

Сделайте файл исполняемым:

sudo chmod +x SillyTweeter.py

Проверка публикации твита вручную:

python SillyTweeter.py 'Hello Everyone, this is my Raspberry Pi tweeting you more nonsense'

Если твит появляется — базовая интеграция с Twitter работает.

Чтение температуры CPU и твит

Добавим чтение температуры CPU. На Raspberry Pi есть утилита vcgencmd в /opt/vc/bin:

import os
cmd = '/opt/vc/bin/vcgencmd measure_temp'
line = os.popen(cmd).readline().strip()
temp = line.split('=')[1].split("'")[0]
api.update_status(status='My current CPU temperature is '+temp+' C')

Объяснение в одну строку: команда читает строку вида “temp=49.8’C” и парсит число 49.8.

Локализация единиц: в сообщении показана температура в градусах Цельсия (C); при желании добавьте “°C” или преобразование в °F.

Съёмка фото с вебкамеры и отправка в твит

Проверьте устройство вебкамеры:

ls /dev/video*

Если видите /dev/video0 — вебкамера подключена. Многие USB-камеры работают без дополнительных драйверов.

Добавим использование pygame.camera для захвата кадра:

import pygame
import pygame.camera
from pygame.locals import *

pygame.init()
pygame.camera.init()
cam = pygame.camera.Camera("/dev/video0",(640,480))
cam.start()
image = cam.get_image()
pygame.image.save(image,'webcam.jpg')

И затем отправим файл в Twitter:

photo = open('webcam.jpg','rb')
api.update_status_with_media(media=photo, status='My RPi be tweeting images now => ')

Совет: вы можете объединить текст с текущей температурой и датой в одном сообщении.

Полный пример: готовый скрипт (объединённый)

Ниже — пример скрипта, который берёт температуру и делает фото, затем постит один твит с фото и подписью. Скопируйте, вставьте ключи и сохраните как SillyTweeter.py.

#!/usr/bin/env python3
import os
import sys
import time
from twython import Twython
import pygame
import pygame.camera

# --- Настройки (вставьте свои ключи) ---
CONSUMER_KEY = 'REPLACE_CONSUMER_KEY'
CONSUMER_SECRET = 'REPLACE_CONSUMER_SECRET'
ACCESS_KEY = 'REPLACE_ACCESS_KEY'
ACCESS_SECRET = 'REPLACE_ACCESS_SECRET'
# ----------------------------------------

api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)

# Получение температуры CPU (Raspberry Pi)
def get_cpu_temp():
    cmd = '/opt/vc/bin/vcgencmd measure_temp'
    try:
        line = os.popen(cmd).readline().strip()
        temp = line.split('=')[1].split("'")[0]
        return temp
    except Exception:
        return None

# Съёмка с вебкамеры
def take_photo(path='webcam.jpg', device='/dev/video0', size=(640,480)):
    try:
        pygame.init()
        pygame.camera.init()
        cam = pygame.camera.Camera(device, size)
        cam.start()
        time.sleep(0.5)  # дать камере фокусироваться
        image = cam.get_image()
        pygame.image.save(image, path)
        cam.stop()
        return path
    except Exception as e:
        return None

if __name__ == '__main__':
    temp = get_cpu_temp()
    photo_path = take_photo()

    if temp and photo_path:
        status = f"RPi CPU: {temp}°C — обновление " + time.strftime('%Y-%m-%d %H:%M')
        with open(photo_path, 'rb') as photo:
            api.update_status_with_media(media=photo, status=status)
    elif temp:
        api.update_status(status=f"RPi CPU: {temp}°C — фото не готово")
    else:
        api.update_status(status=f"RPi status update — {time.strftime('%Y-%m-%d %H:%M')}")

Примечание: используйте python3 для выполнения скрипта.

Автоматизация: запуск по cron

Откройте crontab для root (или для пользователя pi, в зависимости от прав, под которыми работает скрипт):

sudo crontab -e

Добавьте строку для запуска каждый час (правильнее через systemd или пользовательский crontab, если нужны права пользователя):

0 * * * * /usr/bin/python3 /home/pi/SillyTweeter/SillyTweeter.py

Пояснения:

  • 0 * * * * — запуск в начале каждого часа.
  • Укажите полный путь к интерпретатору и скрипту.

Если хотите запускать каждую минуту (экспериментально):

* * * * * /usr/bin/python3 /home/pi/SillyTweeter/SillyTweeter.py

Важно: частые твиты могут привести к блокировке аккаунта или оттоку подписчиков. Экономьте лимиты API и уважайте правила Twitter.

Отладка и типичные проблемы

  • Скрипт не публикует твит: проверьте правильность ключей и режим доступа приложения (Read and Write). Посмотрите ошибки в логах / stdout.
  • pygame не может открыть камеру: проверьте, доступно ли /dev/video0 и работает ли камера (команда v4l2-ctl --list-devices из пакета v4l-utils поможет).
  • Ошибка импорта pygame на headless-системе: убедитесь, что установлены зависимые библиотеки и у пользователя есть доступ к видео/аудио устройствам.
  • vcgencmd отсутствует: на некоторых системах (не на official Pi OS) этот бинарник может отсутствовать; используйте cat /sys/class/thermal/thermal_zone0/temp и делите значение на 1000.

Альтернативные подходы

  • Tweepy вместо Twython: более популярная библиотека с большим сообществом.
  • Использовать raspistill / libcamera для захвата изображения (для официальной камеры Raspberry Pi).
  • Отправлять только данные температуры в JSON в собственный сервер и там формировать сообщения — полезно для хранения истории.
  • Вместо cron — systemd timer: более надёжно с логированием и перезапуском.

Модель принятия решения (когда использовать что)

  • Нужен быстрый PoC: используйте Twython + pygame + cron.
  • Требуется масштабируемость и историзация данных: собирайте данные на сервер и публикуйте через API по расписанию.
  • Нужно больше контроля над захватом камеры: используйте libcamera/raspistill (особенно для CSI-камер).

Чеклист развёртывания (роль: хоббист / разработчик)

  • Raspberry Pi с последним обновлением системы
  • Аккаунт в Twitter и созданное приложение с правами Read and Write
  • Установлены twython и pygame
  • Вебкамера видна как /dev/video0
  • Скрипт работает вручную и публикует тестовый твит
  • Cron или systemd timer настроен и запускает скрипт по расписанию
  • Файлы с ключами защищены правами доступа (chmod 600)

Mini-SOP: быстрый план действий

  1. Обновить систему.
  2. Установить Python-зависимости.
  3. Зарегистрировать приложение в Twitter.
  4. Вставить ключи в скрипт (или использовать файл конфигурации).
  5. Протестировать запуск вручную.
  6. Настроить автоматический запуск (cron/systemd).
  7. Мониторить первые 24 часа и проверять логи.

Факто-бокс: ключевые числа

  • Интервалы cron: каждую минуту ( ), каждый час (0 *).
  • Популярные размеры фото: 640×480 — безопасно для большинства USB-камер.
  • Период тестирования: мониторьте 24–72 часа после запуска.

Примечания по безопасности и конфиденциальности

  • Ключи API — секретные: храните в файле с правами 600 и не выкладывайте в публичные репозитории.
  • Если бот публикует фото, подумайте о приватности: случайные кадры могут содержать личные данные.
  • Соответствие правилам Twitter: проверяйте текущие правила автоматизации и ограничения API.

Когда этот подход не годится (примеры)

  • Нужно собирать высокочастотные телеметрические данные — лучше использовать специализированный сервер и базу данных.
  • Нужны защищённые фото-потоки с шифрованием и управлением доступом — размещение прямых твитов не подойдёт.

Короткий словарь (1‑строчный)

  • Twython — Python-клиент для Twitter API.
  • cron — планировщик задач в Unix-подобных системах.
  • vcgencmd — утилита Raspberry Pi для чтения системной информации (включая температуру).

Заключение

Вы теперь располагаете полным планом: от установки до автоматического постинга температуры и фото в Twitter. Начните с ручной проверки, затем переключайтесь на автоматический запуск и наблюдайте поведение бота. Если хотите, можно расширить функциональность (хранение логов, лимитирование твитов, аналитика).

Понравилась инструкция? Поддержите автора — твитом! И расскажите в комментариях, что ваш бот будет твитить.

Image credit: adafruit/flickr

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

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

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство