Как заставить Raspberry Pi автоматически твитить температуру CPU и фото с вебкамеры
Важно: инструкция ориентирована на Raspbian (Raspberry Pi OS). Большая часть команд применима к другим Linux-дистрибутивам, но пути и пакеты могут отличаться.
Что вы получите
- Автоматический бот, публикующий показания температуры CPU и/или фото с вебкамеры.
- Полный рабочий Python-скрипт с загрузкой изображения в твит.
- Инструкции по установке зависимостей и настройке cron.
- Чеклист развертывания, варианты альтернатив, сценарии отладки и примеры ошибок.
Предпосылки (коротко)
- Raspberry Pi с установленной ОС (Raspbian / Raspberry Pi OS).
- Доступ по SSH или локальная клавиатура/монитор.
- Аккаунт в Twitter (для регистрации приложения и получения ключей API).
Ключевые шаги
- Установить Twython (Python-клиент для Twitter) и pygame (для работы с вебкамерой).
- Зарегистрировать приложение в Twitter и получить CONSUMER/ACCESS ключи.
- Написать Python-скрипт, собирающий температуру и снимающий вебкамеру, и отправляющий их в Twitter.
- Настроить 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 и получение ключей
- Перейдите в консоль разработчика Twitter и создайте приложение (создать “App”). Необязательно указывать Callback URL; поле Website можно заполнить любым рабочим URL.
- После создания в разделе “Details” вы увидите Consumer Key и Consumer Secret (API key и API secret).
- Перейдите в “Settings” и измените режим доступа приложения на “Read and Write” (по умолчанию часто стоит “Read only”).
- Нажмите “Create an OAuth access token” внизу страницы Details, чтобы сгенерировать Access Token и Access Token Secret. Скопируйте все четыре значения и сохраните в безопасном месте.
Совет: не публикуйте ключи публично и не выкладывайте репозиторий с полными ключами. Используйте файл конфигурации с ограниченными правами доступа.
Создание проекта и базового скрипта
Создайте каталог проекта и файл скрипта:
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: быстрый план действий
- Обновить систему.
- Установить Python-зависимости.
- Зарегистрировать приложение в Twitter.
- Вставить ключи в скрипт (или использовать файл конфигурации).
- Протестировать запуск вручную.
- Настроить автоматический запуск (cron/systemd).
- Мониторить первые 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
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone