Чем занять Raspberry Pi

У многих из нас на полках пылится купленный однажды про запас Raspberry Pi.

Использовать в качестве десктопа или сервера слабый компьютер с очень медленным I/O - удовольствие не из приятных, хотя я и держал его некоторое время как CI сервер, тонкий клиент для RDP и даже запускал на нем полноценную IntelliJ IDEA (спойлер - она работает как часы, но максимально неторопливо).

А вот в качестве базы для мелких датчиков - прекрасно. Пусть Arduino правит бал в числе последователей, доступных плат и модулей. Зато у Rasberry Pi полноценный Linux и много больше мощности, а значит в выборе софта ограничений никаких. Большинство железа прекрасно себя чувствует на обеих платформах.

Датчики для множества простых и занимательных вещей, вроде освещенности, уровня воды, температуры, движения и даже алкоголя продаются в среднем по 150-600 рублей за штуку.

Для себя я собрал домашнюю метеостанцию с интерфейсом в Telegram, получив от этого неожиданно много фана.

Итак, сдуем пыль с малины.

Бот в помощь

Ходить по SSH на домашнюю Linux машину неудобно, небезопасно и требует много лишних телодвижений с сетью.

Бот же - идеальный вариант как для выставления интерфейса, так и для предоставления доступа к железу из закрытого сегмента сети:

Все просто. Одна большая кнопка «Сделать хорошо».

Заходите в гости! У меня дома прямо сейчас: http://telegram.me/i_am_at_home_bot.

Закупаемся

В моем случае используется высокоточный метеодатчик на сенсоре SHT3x-DIS, работающий на шине I²C в сборке от компании Амперка, собранный с удобной разводкой:

Гугление дает варианты покупки этого датчика и в виде голой платы - попрактикуйтесь в пайке ножек, если есть желание.

В варианте Амперки датчик приходит сразу с необходимой проводкой. Ничего, кроме самого датчика, в минимальном варианте покупать не нужно. Но если хочется собрать все аккуратнее, чем ворох проводов и голая плата - докупите Troyka #Структор.

Исходим из того, что Raspberry Pi у нас уже в наличии и на нем установлена Raspbian (полагаю, что и с другими дистрибутивами проблем быть не должно).

Если же Pi нет, но вдруг очень захотелось, можно докинуть в корзину прямо в Амперке:

На Яндекс.Маркете можно собрать необходимое чуть дешевле вместе с более симпатичным оригинальным корпусом и блоком питания, а также взять быструю microSD карту (советую не ниже UHS Speed Class 1).

Важно не сэкономить на блоке питания. Хотя Raspberry Pi может работать и от power bank, и от любой зарядки - при вполне обычных нагрузках ядро начнет регулярно ругаться на undervoltage.

Подключаем датчик

Из обязательной распиновки (и в сборке от Амперки) датчик имеет:

  • питание (04 DC Power 5v),
  • землю (06 Ground),
  • пин ввода/вывода данных (03 SDA),
  • пин тактирования шины (05 SCL).

В стандартной разводке Raspberry Pi датчик получится подключить двумя трехпроводными шлейфами, либо четырьмя одинарными проводами «мама-папа»:

В собранном виде:

Подключаемся к Pi по SSH и включаем шину I²C:

sudo raspi-config
# Далее в интерфейсе:
5 - Interfacing Options - Configure connections to peripherals
P5 I2C - Enable/Disable automatic loading of I2C kernel module 
Would you like the ARM I2C interface to be enabled? - Yes

Проверяем корректность подключения

Копируем скрипт на Pi:

При правильном подключении получаем данные:

➜  python meteoSensor.py 
Temperature in Celsius is : 17.80 C
Temperature in Fahrenheit is : 64.05 F
Relative Humidity is : 27.78 %RH

Создаем Telegram бота

Открываем Telegram и добавляем бота BotFather.

При создании нового бота необходимо выбрать ему имя и адрес, добавить в контакты и сохранить полученный Access Token вида:

111111111:XXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Устанавливаем (или разрабатываем) необходимый софт

Для работы с железом на Raspberry Pi часто используют Python, но под все популярные языки программирования обязательно есть удобная библиотека для работы либо с GPIO конкретно Raspberry Pi, либо для работы с конкретной шиной (нам нужна I²C).

Особо отмечу Control Everything Community - замечательный сборник примеров работы с огромным числом различных чипов, притом сразу на нескольких популярных языках и под большинство популярных платформ помимо Rasbperry Pi.

Я разработал решение на Java с использованием:

Запускаем

1. Бинарник:

  • Загружаем сборку и копируем на Raspberry Pi

  • Устанавливаем Java

    sudo apt-get update
    sudo apt-get install -y galternatives openjdk-8-jdk
    
  • Запускаем, подставив в параметры ранее полученный Access Token бота в Telegram:

    java -jar raspberry-pi-meteo-bot.jar --telegram.bot.token=111111111:XXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
  • Открываем Telegram и наслаждаемся!

2. Из исходников:

  • Копируем репозиторий с GitHub:

    git clone -b sht3x_only https://github.com/axelrodvl/raspberry-pi-meteo-bot.git
    cd raspberry-pi-meteo-bot
    
  • В src/main/resources/application.properties можно при желании сразу вставить нужный telegram.bot.token

  • Собираем, копируем и запускаем:

    mvn clean install
    scp target/raspberry-pi-meteo-bot-0.2.0.jar pi@address:~
    ssh pi@address 'nohup java -jar raspberry-pi-meteo-bot-0.1.0.jar &> meteo-bot.out&'
    
    
     В качестве бонуса - в master ветке репозитория бот расширен поддержкой датчика углекислого газа. 
    
    
    

Погодная станция готова, приятного использования!