Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。
実際に稼働させている「ラズパイで作った自動餌やり機」のおかげで、時間を気にせず外出できて快適です。こういった実用的な仕組みが簡単に作れるのがラズパイの醍醐味ですね。
はじめてのこの記事をご覧の方は、製作までの記事をご覧ください。
投稿が見つかりません。
Raspberry Pi で作った金魚の自動餌やり機をAlexaから声かけでも動作させたい(←失敗)
この仕組みの弱点として、餌の容器の物理的な要因として、餌が少なくなったり、タイミングによってはほとんど餌が出ないということがあります。
一定量を出すのは回転させるだけでは非常に微妙です・・・。
そこで、足りないときも考慮して、任意のタイミングで餌をあげられるよう、外部ボタンからPythonプログラムを動かすオプション機能を付けました。
Bluetoothボタンで餌やり
本当はAlexaに声かけで餌を与えたかったのですが、ちょっとスキルは難しく頓挫しています。
とりあえずボタン制御であげられるように、以前使った100円ショップのBluetoothボタンを活用することにしました。

これなら簡単にボタンを押したトリガーでプログラムを走らせられます。
ただ、何度も押して大量の餌が出ても困るので、そこは制御出来るように考えました。
早速、Bluetoothボタンの下準備をしていきます。
Raspberry Pi とBluetoothボタンの連携
過去の記事、Speaker pHATと連携した「Speaker pHAT 単体で音楽再生+Bluetoothボタン制御」でBluetoothボタンとのペアリング、そしてKeyイベントの制御を「Bluetoothボタンで動作と合成音声の再生」と同じように作業していきます。
ペアリング
前回の記事ではBluetooth関連のライブラリ関連のインストールをしています。恐らく新しいRaspbianでは既にいくつか入っていると思いますが、一応員インストールしておきます。
sudo apt-get install bluez bluetooth libbluetooth-dev build-essential
ボタン制御する「bluebutton」のプログラムだけは必要です。ペアリングする前にインストールしておきましょう。
sudo apt-get install ruby
sudo gem install bluebutton
対話型のBluetoothコントロール設定へ入ります。すべてコマンドです。(SSH経由でもOKです)
sudo bluetoothctl
すると、プロンプトが[bluetooth]$に変わります。次からはそのプロンプトへ入力するコマンドです。
Bluetoothボタンのスイッチをオンにしてからスキャンします。
[bluetooth]$ scan on
ダラダラと検出されてきます。その中で、Shutter3という文字列を発見したら、MACアドレスをコピペしておいてください。
[NEW] Device FF:FF:3F:F6:48:42 AB Shutter3
この場合、MACアドレスは「FF:FF:3F:F6:48:42」ですね。MACアドレスをコピペしておきます。次からはペアリングさせます。
コネクト=接続して、pair=ペアリングさせ、そしてTrust=信頼させます。
これを順番におこなってください。
connect FF:FF:3F:F6:48:42
pair FF:FF:3F:F6:48:42
trust FF:FF:3F:F6:48:42
コネクトした後はプロプトが[AB Shutter3 ]#へ変わると思いますが正常です。そのまま次のpairを続けてください。
最終的には以下のようになって進んでいればOKです。
[bluetooth]$ connect FF:FF:3F:F6:48:42
[AB Shutter3 ]$ pair FF:FF:3F:F6:48:42
[CHG] Device FF:FF:3F:F6:48:42 Paired: yes
Pairing successful
[AB Shutter3 ]$ trust FF:FF:3F:F6:48:42
[CHG] Device FF:FF:3F:F6:48:42 Trusted: yes
[AB Shutter3 ]$ quit
最後はquitまたはexitで抜けます。
[AB Shutter3 ]# info
Device FF:FF:3F:F6:48:42 (public)
Name: AB Shutter3
Alias: AB Shutter3
Paired: yes
Trusted: yes
Blocked: no
Connected: yes
LegacyPairing: no
UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb)
UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
UUID: Device Information (0000180a-0000-1000-8000-00805f9b34fb)
UUID: Battery Service (0000180f-0000-1000-8000-00805f9b34fb)
UUID: Human Interface Device (00001812-0000-1000-8000-00805f9b34fb)
Modalias: usb:v248Ap8266d0001
設定する
bluebuttonの設定ファイルを作成します。
sudo nano ~/.config/bluebutton
中身はキーを押した時の検知とそのボタンを離したときの検知、そしてその長押し版の計4つです。
keyup=echo UP
keydown=echo down
longup=echo LONG UP
longdown=echo LONG DOWN
初期状態(デフォルト)でもターミナルにup、downの文字を表示させるように設定されていますので、まずはこのまま動かしてみましょう。
sudo bluebutton -c ~/.config/bluebutton
ターミナル画面にUPとかdownとか出ればOKです。
■Pi 5は8GBモデルがオススメ
実行するPythonプログラムを指定
取りあえずボタン1回だけで餌をやりたいので、間違って押しても良いように長押しに指定します。
longupに指定してみます。長押しして、指を離した時に動作させます。
keyup=echo UP
keydown=echo down
longup=echo LONG UP && python ~/sg90/sg90.py
longdown=echo LONG DOWN
前回までに作ったsg90.pyを起動するようにしました。
動かないと思ったら
- ペアリングしたのにボタンを押しても何も起きない・・・。
- 設定をみても合っているのにできない・・・。
- そもそも接続もペアリングもできない・・・。
ハッキリ言って、AB Shutter3、100円ショップのBluetoothボタンが壊れていることも考えられます。なんせチープですからね。
最初にボタン電池(CR2032)の交換をおすすめします。
ボタンが動作しているのかevtestで確認してみる
evtestというプログラムでボタンを押した時のイベントが拾えているか確認することができます。
sudo apt-get install evtest
sudo evtest
すると、イベントを取る番号を聞かれます。
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: AB Shutter3 Consumer Control
/dev/input/event1: AB Shutter3 Keyboard
Select the device event number [0-1]:
この場合だと0ですね。そしてボタンを押すと押したことが取得できているのか確認できます。
イベントを取る番号の選択まで行かない場合は、電池が無いのかも知れません。交換後に試しましょう。
電池も新しく、イベント番号も指定したのに、何も起きない場合は、恐らく本体が壊れています・・・。その個体ごと変更してみることしかありませんね。(私も1つは壊れていました・・・。)
今後
これで長押しすれば餌を任意のタイミングであげることが可能になりました。
何度もあげると金魚さんの健康にも悪いので、Pythonプログラム側に最後にあげた時間から何分以下なら動かさないという処理を付けると良いかも知れません。
ググってみたところ、ファイルのタイムスタンプから判別する方法が簡単そうでした。
import os
import time
前回時刻(ファイルのタイムスタンプ取得)
lt = os.path.getmtime('previous_date.csv')
現時刻
dt = time.time()
現時刻 - 前回時刻を比較
if ( dt - lt ) > 90 * 60 :
print("xxx")
os.utime('previous_date.csv', None) # ファイルのタイムスタンプ更新
あとはAlexaに声をかけても餌をあげられるようにスキルの作成をまた調べたいと思います。できたらまたご紹介します。



