ラズパイZeroWで作る金魚餌やり機へBluetoothボタン制御を追加

ニュース

実際に稼働させている「ラズパイで作った自動餌やり機」のおかげで、時間を気にせず外出できて快適です。こういった実用的な仕組みが簡単に作れるのがラズパイの醍醐味ですね。

はじめてのこの記事をご覧の方は、製作までの記事をご覧ください。

サーボモーターSG90とRaspberry Pi Zero WHで金魚にエサをやる

Raspberry Pi で作った金魚の自動餌やり機をAlexaから声かけでも動作させたい(←失敗)

この仕組みの弱点として、餌の容器の物理的な要因として、餌が少なくなったり、タイミングによってはほとんど餌が出ないということがあります。

一定量を出すのは回転させるだけでは非常に微妙です・・・。

そこで、足りないときも考慮して、任意のタイミングで餌をあげられるよう、外部ボタンからPythonプログラムを動かすオプション機能を付けました。

Bluetoothボタンで餌やり

本当はAlexaに声かけで餌を与えたかったのですが、ちょっとスキルは難しく頓挫しています。

とりあえずボタン制御であげられるように、以前使った100円ショップのBluetoothボタンを活用することにしました。

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です。

\ Raspberry Pi 4はメモリー8GBが最新 /

【セット概要】「データーベース」「Webサーバー」「NAS」「AI処理」「4K画像での2画面処理」などの高負荷がかかる処理を、長時間稼働させるのに必要な負荷テスト行い、当社で厳選した高品質なパーツを組み合わせたセットです。高品質なAnker製USB電源の採用、トラブルの原因になりやすい電源周りをデジタルモニターリングできるをType-Cケーブル、Raspberry財団認定モデル 高速タイプ 100MB/sec 128GB MicroSD、静音FANによる強制冷却など、高負荷運用でも長期に渡る安定稼働が可能です。また単品でご購入いただくよりお得です。

実行する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)   # ファイルのタイムスタンプ更新

参考:https://teratail.com/questions/126369

あとはAlexaに声をかけても餌をあげられるようにスキルの作成をまた調べたいと思います。できたらまたご紹介します。

ラズパイダ

ラズパイダ

学べる楽しむ便利になる。小さいくせにヤケにパワフル。そんなRaspberry Pi をまだ知らない人に伝えたい。様々な場所で利用されているRaspberry Pi を知って「あっ、これもラズパイだっ!」だからラズパイダ!

関連記事

特集記事

コメント

この記事へのコメントはありません。

最近の記事 はじめて向け
  1. Pimoriniからシンプルスーパースリムな「Audio DAC SHIM」

  2. Raspberry Pi OS のバージョンアップ方法とaptについて

  3. 遊び半分、学び半分でRaspberry Piを活用しよう!

  4. Raspberry Pi Imager更新、イメージ選択数を計測のためデータ収集も

  5. 「fre:ac」はラズパイでもmp3やFLACに変換できる無料のオーディオコンバーター

  1. 【初心者向け】Raspberry Pi 4との接続方法(電源、HDMI)

  2. 【初心者向け】はじめてRaspberry Pi OS をダウンロードする人へ

  3. Raspberry Pi OS のインストールは、公式ツール1つだけでOK

おすすめの記事

  1. TwisterOSで懐かしのWindows、最新macOSの見た目でラズパイを使う

  2. NextcloudとRaspberry Pi 3B+で作る自分専用クラウド

  3. 正式にUbuntuがラズパイ4に対応(Ubuntu 20.10)

  4. 期待が高まるWindowsに似ている新しいLinuxのフレーバー「Endless OS」がRaspberry Pi 4用に登場予定

  5. DAZNをラズパイのLibreELECで観る方法

  6. ラズパイ4にも対応している軽量でクールなOS「Manjaro」はアリ

今月の人気記事

  1. 1

    Raspberry Pi で動く様々なOS一覧まとめ13種類!

  2. 2

    ラズパイ4をUSB接続のSSDから起動する方法(USBブート)

  3. 3

    初心者でもラズパイでNASサーバーを作ってみよう!

  4. 4

    Raspberry Pi 4の初期設定2020年版

  5. 5

    Raspbian のWi-Fi設定(Raspberry Pi 初期設定)

  6. 6

    ラズパイ4とOMV5(openmediavault5)で作る自宅NASサーバーの設定方法

  7. 7

    Raspberry Pi 4を起動したのにモニターに画面が映らない対処法

  8. 8

    ラズパイで使うmicroSDカードの選び方

  9. 9

    Raspberry Pi 4のOSをデスクトップPCとして使うためにUbuntuMATEをインストールしてみた

  10. 10

    ラズパイ4はPCライクな性能になったけどPCではないよという話

記事ランキングページ

TOP