Сделайте Twitter-бота на Raspberry Pi: периодические твиты с температурой и фото

Почему это полезно
Коротко: автоматическая публикация температуры и фото подойдёт для удалённого мониторинга тестовой установки, демонстраций и учебных проектов. Это простой проект, который знакомит с API Twitter, периферией на Pi и планировщиком задач cron.
Ключевые цели:
- Научиться регистрировать приложение в Twitter и использовать OAuth-ключи.
- Снимать температуру CPU и фотографию вебкамой в Python.
- Автоматически публиковать сообщения в Twitter через cron.
Важно: этот пример публикует данные в публичный аккаунт. Не размещайте приватные ключи в общедоступных репозиториях.
Что понадобится
- Raspberry Pi с установленной Linux-системой (Raspbian/raspios или аналог).
- Доступ по SSH или физическая клавиатура/монитор.
- USB-вебкамера, совместимая с V4L2 (/dev/video0).
- Аккаунт Twitter и возможность создать приложение для API.
- Базовые навыки командной строки и Python.
Краткое определение: cron — встроенный планировщик задач в Unix-подобных системах; он выполняет команды по расписанию.
Подготовка: обновление системы и установка зависимостей
Откройте терминал на Pi (локально или по SSH) и выполните обновление пакетов.
sudo apt-get update
sudo apt-get upgradeЗатем установите setuptools, pip и необходимые Python-модули. В примере используем модуль Twython для работы с Twitter и pygame для съёма фото с вебкамеры.
sudo apt-get install python-setuptools
sudo easy_install pip
sudo pip install twython
sudo apt-get install python-pygame python-pygame-cameraПримечание: на некоторых системах pygame и его камера устанавливаются иначе; если у вас Python 3, используйте python3-пакеты и pip3.
Регистрация приложения в Twitter и получение ключей
- Перейдите на страницу разработчиков Twitter и создайте новое приложение. При создании приложения можно оставить поле callback URL пустым; в поле Web-сайт достаточно указать любой URL.
- После создания перейдите в раздел Details — там находятся Consumer Key и Consumer Secret. По умолчанию приложение может быть с правами только для чтения.
- В настройках (Settings) измените Application type на Read and Write, чтобы ваше приложение могло публиковать твиты.
- На вкладке Details нажмите кнопку создания OAuth access token — это сгенерирует Access Token и Access Token Secret, которые понадобятся в скрипте.
Скопируйте четыре ключа/секрета и сохраните их в безопасном месте.
Создаём Python-проект
Сделаем папку для проекта и создадим файл скрипта.
mkdir SillyTweeter
cd SillyTweeter
sudo nano SillyTweeter.pyВставьте в файл основной код. Ниже — полнофункциональный пример, который публикует и температуру CPU, и фотографию. Строки с ключами API должны быть заменены на ваши значения (включая кавычки). Если вы хотите, чтобы текст твита был на русском, оставьте русские строки в status.
#!/usr/bin/env python
import sys
import os
from twython import Twython
import pygame
import pygame.camera
from pygame.locals import *
# Замените звёздочки на ваши ключи
CONSUMER_KEY = '*************YOUR_CONSUMER_KEY*************'
CONSUMER_SECRET = '***********YOUR_CONSUMER_SECRET*************'
ACCESS_KEY = '***********YOUR_ACCESS_TOKEN*************'
ACCESS_SECRET = '***********YOUR_ACCESS_SECRET***************'
# Инициализируем API
api = Twython(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_KEY, ACCESS_SECRET)
# Получаем температуру CPU (для Raspberry Pi)
cmd = '/opt/vc/bin/vcgencmd measure_temp'
try:
line = os.popen(cmd).readline().strip()
temp = line.split('=')[1].split("'")[0]
except Exception as e:
temp = 'unknown'
# Делаем фото с вебкамеры
webcam_filename = 'webcam.jpg'
try:
pygame.init()
pygame.camera.init()
cam = pygame.camera.Camera('/dev/video0', (640, 480))
cam.start()
image = cam.get_image()
pygame.image.save(image, webcam_filename)
cam.stop()
except Exception as e:
webcam_filename = None
# Публикуем твит с фото, если фото получилось
status_text = 'Температура CPU сейчас: ' + temp + " °C"
if webcam_filename:
photo = open(webcam_filename, 'rb')
api.update_status_with_media(media=photo, status=status_text)
photo.close()
else:
api.update_status(status=status_text)Сохраните файл (Ctrl+X, Y, Enter) и сделайте его исполняемым:
sudo chmod +x SillyTweeter.pyТеперь можно протестировать вручную:
python SillyTweeter.pyЕсли всё настроено верно, в ваш аккаунт придёт твит с температурой и фото.
Детали по съёму температуры и фото
- Команда /opt/vc/bin/vcgencmd measure_temp доступна на официальных образах Raspberry Pi OS. На других сборках путь или утилита может отличаться.
- Строка разбора temp = line.split(‘=’)[1].split(“‘“)[0] извлекает число из строки вида “temp=42.0’C”.
- Для старых или нетипичных вебкамер разрешение (640,480) может потребовать изменения. Если камера не поддерживает pygame.camera, используйте fswebcam или raspistill (для Pi Camera).
Альтернативный способ снять фото (без pygame):
sudo apt-get install fswebcam
fswebcam -r 640x480 --no-banner webcam.jpgИ затем в Python открыть webcam.jpg как файл для отправки.
Автоматизация через cron
Чтобы бот публиковал данные регулярно, запланируем задачу в cron.
Откройте crontab для root (чтобы иметь доступ к /opt/vc/bin и к устройствам):
sudo crontab -eДобавьте строку, чтобы запускать скрипт каждый час:
0 * * * * python /home/pi/SillyTweeter/SillyTweeter.pyОбъяснение: выражение 0 запускает задачу в начале каждого часа. Если хотите запускать каждые 60 минут, используйте ту же запись; запись */60 иногда неправильно интерпретируется в разных реализации cron. Для тестирования можно запускать каждую минуту:
* * * * * python /home/pi/SillyTweeter/SillyTweeter.pyБудьте осторожны: частые твиты могут привести к блокировке аккаунта или потере подписчиков.
Отладка и распространённые ошибки
- Ошибка аутентификации при использовании Twython: проверьте, что ключи и секреты корректны и что приложение имеет права Read and Write.
- Ошибка доступа к /dev/video0: убедитесь, что камера подключена и распознана командой ls /dev/video*.
ls /dev/video*- pygame.camera не обнаруживает устройство: попробуйте утилиту fswebcam или проверьте, установлен ли модуль с поддержкой камеры.
- vcgencmd не найден: либо используется неофициальный образ, либо утилита установлена в другом месте; можно считать температуру через /sys/class/thermal/thermal_zone0/temp и делить на 1000, если такое есть.
Пример чтения из /sys:
try:
with open('/sys/class/thermal/thermal_zone0/temp') as f:
raw = f.read().strip()
temp = str(int(raw) / 1000.0)
except Exception:
temp = 'unknown'Безопасность, приватность и правила Twitter
- Никогда не публикуйте свои Consumer/Access ключи в публичных репозиториях. Храните их локально с правами доступа только для владельца.
- Используйте .gitignore, если храните проект в git. Можно вынести ключи в отдельный конфигурационный файл и задать права 600.
- Соблюдайте правила Twitter API: чрезмерный автоматический спам и повторяющийся контент могут привести к ограничению аккаунта.
- Если вы публикуете изображения людей, убедитесь в наличии их согласия — это важно для приватности и соответствия локальным законам.
Альтернативные подходы
- Tweepy вместо Twython: другой популярный клиент для Twitter API, совместимый с Python 3.
- Использовать Raspberry Pi Camera (raspistill) вместо USB-камеры для лучшего качества на Raspberry Pi Camera Module.
- Отправка только данных в закрытую систему мониторинга (InfluxDB, Prometheus) вместо публикации в публичный Twitter.
Мини-методология: что делать при сбое
- Проверить логи cron (обычно /var/log/syslog) на предмет ошибок вызова скрипта.
- Выполнить скрипт вручную от имени пользователя cron, чтобы увидеть сообщения об ошибках.
- Проверить доступность сети и токенов Twitter (тестовый запрос к API для проверки авторизации).
- Пофиксить права доступа к файлам и устройствам (chmod/chown).
Чеклист перед запуском в production
- Создано и сохранено приложение Twitter с правами Read and Write
- Сохранены и защищены четыре ключа API
- Скрипт запускается вручную без ошибок
- Вебкамера распознаётся: ls /dev/video*
- Скрипт добавлен в crontab с нужным расписанием
- Лимиты частоты учтены, контент не нарушает правила платформы
Типичные сценарии, когда это решение не подходит
- Нужен строгий мониторинг и гарантированное хранение логов — лучше использовать специализированное ПО мониторинга.
- Приватные данные или персональные фото — следует избегать публикации в открытые аккаунты.
Краткая инструкция для распространения (соцсеть / анонс)
OG-заголовок: Raspberry Pi: твитим температуру и фото каждый час OG-описание: Небольшой туториал по созданию Twitter-бота на Raspberry Pi — публикует температуру CPU и фото вебки автоматически. Короткий анонс (100–200 слов): Создайте простой Twitter-бот на Raspberry Pi, который ежечасно публикует температуру процессора и снимок с USB-вебкамеры. Полный список шагов: установка Twython и pygame, регистрация приложения в Twitter, написание Python-скрипта и планирование через cron. Подойдёт для демонстраций, обучения и простого удалённого мониторинга.
Глоссарий (1 строка)
- OAuth: протокол авторизации, позволяющий приложениям действовать от имени пользователя без передачи пароля.
Финальное резюме
- Проект прост для повторения: настроили зависимости, получили ключи Twitter, написали скрипт, автоматизировали через cron.
- Обязательно защищайте ключи и учитывайте правила платформы при автоматической публикации.
Покажите результат — расскажите в комментариях, что ваш бот начал твитить!
Image credit: adafruit/flickr
Похожие материалы
Открыть файлы ICA в Windows 10 — инструкция
Удаление личных данных в Microsoft Office
Фриланс облачный инженер: как начать и что знать
Тихая очистка диска в Windows через командную строку
Подготовка к сертификации AWS: план и советы