ラズパイゼロでプチIoT!!イヤホンで作る、LineNotifyと連携したお風呂警報機

スポンサーリンク

2020/8 現在
 Raspbian は buster になってます。
 また、OS書き込みソフトは Raspberry pi imager が使いやすいですよ!!

ようこそお越しくださいました、中の人だよ。今回はぷっこ村からすこし逸れた、時々やるラズパイのお話です。

中の人の友人Y氏が「Raspberry Pi Zero WH」をくれました。超ありがとうなんだぜ!

お礼と言えるほど大した内容ではないのですが、お風呂が溢れないように警告してくれるセンサーを作ってみたいようなので、OSインストールの触りのところから、ラズパイの機能を色々使って「プチIoTお風呂警報機」の作り方を解説してみたいと思います。

尚、簡単さを前面に出しますので、セキュリティ的にアウトな部分が多々あります。今後セキュリティに関しても時々記事を書いていくつもりですが、ご自身でも調べてくださいね。

やってみること、使うもの

Y氏はラズパイ初心者とのことなので、情報提供も兼ねてOSインストールから、

  • Wi-fiを使う
  • SSHを使う
  • gpioを使う
  • pythonを使う
  • Lineと連携してみる

と言った、これぐらいできれば初心者卒業じゃね?くらいの内容を詰め込んでみたいと思います。あと、使うものですが、

  • raspberry pi zero WH
  • 100均とかのイヤホン(できるだけ長い物)
  • ジャンパ―線2本(片方がメス)
  • 100均のバッテリー
ラズパイゼロでプチIoTお風呂警報機を作る1

お風呂警報機でイヤホン?脳筋すぎて遂にとち狂ったかな?とお思いかな?意外と使えるんです。ジャンパー線は100均だと手に入らないので他で調達しましょう。

その他、補助で必要だったりあった方がいいもの

  • はんだごて+熱収縮チューブ or ビニールテープ
  • ワイヤストリッパー
  • テスター
  • miniHDMI → HDMI変換コネクタ(100均にある)
  • microB ←→ USBコネクタ(これも100均にある)
  • USBキーボード(ハードオフで300円くらいであるよ)

前置きが長くなりましたが、それではスタートです。

OSインストール

Raspbian Strech Liteのダウンロード

ラズパイのOSは専用の「Raspbian」を使いましょう。今回はデスクトップとかは要らないので、CUIだけの「Raspbian Strech Lite」を使います。

https://www.raspberrypi.org/downloads/raspbian/

↑に行き、下の方にある。

ラズパイゼロでプチIoTお風呂警報機を作る2

「Raspbian Strech Lite」の「Download ZIP」を選びます。ダウンロードが開始されましたか?では次へ

OSの書き込みに使うbalenaEtcher

OSイメージはまあまあのサイズなので、少々時間がかかります。その間に、microSDにOSを書き込むソフトの用意をしましょう。色々なソフトがありますが「balenaEtcher」が筋力極振りの脳筋亡者でも幸せに使えます。

balenaEtcher - Flash OS images to SD cards & USB drives
A cross-platform tool to flash OS images onto SD cards and USB drives safely and easily. Free and open source for makers around the world.

↑に行き画面下部の緑の部分をクリックして、ご自身の環境にあわせてダウンロードです。

ラズパイゼロでプチIoTお風呂警報機を作る3

ダウウンロードしたexeファイルを実行し、任意の場所にインストールしましょう。

microSDのフォーマット

使用するmicroSDはフォーマットしましょう。こちらは「SD Card Formatter」を使うとよいでせう。

SD Memory Card Formatter for Windows/Mac | SD Association

↑に行きこれまた下の方にある、青いボタンをクリック後、利用規約に同意でダウンロードです。

ラズパイゼロでプチIoTお風呂警報機を作る4

ダウンロードしたzipを解凍するとexeファイルが入ってるので、適当なところにインストールしましょう。

ラズパイゼロでプチIoTお風呂警報機を作る5

使い方もこれまた簡単で、カードを選びフォーマット形式を選択、後はフォーマットボタンを押すだけです。因みにエクスプローラーで右クリックでもフォーマット可能ですので、相性とかで使い分けてね。

OSを書き込め

この辺りまで済ますと、OSイメージのzipもそろそろダウンロードできていますか?解凍して、balenaEtcherも起動してみましょう。

ラズパイゼロでプチIoTお風呂警報機を作る6

見ればわかると思いますが一応説明を。左のネジっぽいマークの所でOSのイメージを選択します。真ん中のハードディスクっぽいマークの所でmicroSDの選択です。Flash!を押すと書き込みが始まります。10分くらい豆腐建築でもして待ちましょう。これでOS書き込みは終了です。お疲れ~

WifiとSSHまで

Wifi接続まで

次はWifiとSSHまでを目指しましょう。

まずはUSBにキーボードを、miniHDMIポートをお手持ちのモニタと繋げて電源を入れます。

ラズパイゼロでプチIoTお風呂警報機を作る7

起動、ログイン後、

sudo raspi-config

と打ち込みましょう。したらばラズパイの設定画面が出ますので、

ラズパイゼロでプチIoTお風呂警報機を作る8

まずは2,Network OptionsをSelectします。

ラズパイゼロでプチIoTお風呂警報機を作る9

次の画面ではN2,Wi-fiをSelect

ラズパイゼロでプチIoTお風呂警報機を作る10

SSIDを入れろと言われますので従ってOk

ラズパイゼロでプチIoTお風呂警報機を作る11

今度はパスワードを入れろと言われるのでこちらも入力してOk。これで次回起動からWifiに繋がるはずです。

同じ要領で、4.Localisation Optionsの中にある、I2,Change Timezone をTokyoにI4,Change Wi-fi CountryをJapanにしておきましょう。

SSH接続まで

このままSSHまで頑張りましょう。

ラズパイゼロでプチIoTお風呂警報機を作る12

設定画面の5,Interfacing Options内の、

ラズパイゼロでプチIoTお風呂警報機を作る13

P2,SSHをSelectして、次の画面でYesを選ぶと、SSH設定が完了です。

ラズパイのIPを固定しとく

SSHしやすいように、ラズパイのIPを固定しておきましょう。ラズパイのIPは「/etc/dhcpcd.conf」に設定が書かれていますので。コマンドラインに

sudo nano /etc/dhcpcd.conf

と入力し、末尾に

interface wlan0
static ip_address=192.168.任意.任意/24
static routers=*ルーターのIP*
static domain_name_servers=*ルーターのIP*

を追記します。この辺は少しIPの知識がいるのでグーグル先生に聞くか、質問してください。「nano」はCtrl+oで保存できます。やり直したいときはCtrl+xでキャンセルできます。これでいったん「sudo reboot」と打ち込み再起動しましょう。再起動後、「ifconfig」でwlan0の項目にさっきのIPが出ていれば、固定IPになっています。

最後に以下のコマンドを順に打ち込みOSを最新にしておきます。

sudo apt update
sudo apt upgrade

多分初めての時はかなり時間がかかりますので、豆腐じゃない建築でもしながら気長に待つか、次の項目に進んでみましょう。
済んだら、もうモニタとキーボードは外してOkです。

SSHはRLogin

SSH接続するソフトは色々ありますがWindowsをお使いなら、おてがるなのは「RLogin」じゃないかなと思います。Githubや窓の社とかで調達しましょう。公式サイトはSSL化されてないのでリンクは貼りません。グーグル先生に「RLogin」で聞いてくだしあ。

ラズパイゼロでプチIoTお風呂警報機を作る14

使い方も簡単です。とりあえず新規で接続情報を入力しましょう。エントリー/コメントの所は接続の名前とか他と区別できるような情報を入れましょう。Server Addressはさっき固定したIPです。User Nameにラズパイのユーザー名Password/phraseにユーザーのパスワードを入れOKでとりあえず登録完了です。ServerSelect画面で接続してみましょう。これでSSHまでいけましたね~。お疲れ様です。

gpioってなんやねん?

ラズパイを弄るまで、gpioなんて言葉を聞いたこともなく、gpioってなんやねん?おいしいの?と思った記憶があります。ぶっちゃけ知らなくても生きていけますが、ラズパイに興味を持ってしまったからには知っときましょう。

まぁ、ラズパイのトゲトゲのところで、40個あり、電気を流して信号を受けたり送ったりできるやつ。ぐらいの認識でいいと思います。さらに言うとレッドストーン的な感じです。

Raspberry Pi GPIO Pinout
The comprehensive add-on boards & GPIO Pinout guide for the Raspberry Pi

詳しくはこちら

ラズパイゼロでプチIoTお風呂警報機を作る15

ご覧の通りピンには物理番号と、役割で決められたGPIO番号の2通りでそれぞれが区別されています。pythonでのプログラムではどちらの方法でピンを操作するか決められますので、とりあえず2通りあることを知っといて、表からどれなのか識別できるようになっときましょう。

物理ピン15と17を使ってみる

今回は物理ピンで15と17を使ってみたいと思います。さっきの表で、物理ピン15はGPIO22、17は3.3V電源ですね。ここからは少し物理世界での準備です。

ラズパイゼロでプチIoTお風呂警報機を作る16

まずはジャンパー線のメスを残した反対側イヤホンの耳の方をちょんぎりましょう

ラズパイゼロでプチIoTお風呂警報機を作る17

剥いたところをよってはんだ付けし、熱収縮チューブで保護しときましょう。これでお手製センサーのでき上がりです。

イヤホンの構造上GND側があるのですが、今回はどちらが電源側でも大丈夫です。気になる方は、テスターでジャックの根元とつながってる方をGND側になるようにしましょう。

ラズパイゼロでプチIoTお風呂警報機を作る18

物理番号15と17にぶっ刺しましょう。

ラズパイゼロでプチIoTお風呂警報機を作る19

こんな感じになってますか?一応説明ですが、物理番号17で3.3vの電圧が掛かっていて、ジャックの所で止まっています。ジャックが水に浸かることで、通電して物理番号15の所まで電流が流れます。間に抵抗が入っていないので、一見するとショートしそうですが、そこがgpioの面白いところでこの場合は大丈夫なんです。

ただ、つなぎ方はどんなに適当でもオッケーなわけではないので、他の場合はどうなるか調べてみると面白いですよ。

これで、gpioを使ったセンサーの準備はできました。次はお待ちかねのpythonを使う、ちょっとしたプログラミングです。

pythonでgpio制御しようぜ

見出しの通り、pythonでgpioの制御とLineNotifyへの警告文を出してみましょう。

LineNotifyの登録、トークンの発行

まずはLineNotifyの登録をしましょう。

LINE Notify
LINE NotifyはGitHub,IFTTT,MackerelなどのWebサービスからの通知を、LINEで受信することが出来る便利なサービスです。
  1. LINE IDでのログイン後マイページにアクセス
  2. アクセストークンの発行(開発者向け)から「トークンを発行する」をクリック

アクセストークンは後から確認できないようなので、無くさないようにね。最悪、解除して再発行でどうにかなるにはなります。

pythonで制御

めんどくせぇのは嫌いなあなた、トークンの所だけ書き換えて使えばいいようになってます。↓

一応説明しときます。まず、pythonの基本構文はご本で学んでね。自分はこの一冊で大体雰囲気が掴めました。

pythonからgpioを制御するには、RPiと言うライブラリを利用します。きちんとOSのupgradeができていれば入っています。また「requests」はHTTPの機能でAPIに色々させることができます。LineNotifyにメッセージを送るのに使うやつでいいです。

17行目で物理番号でgpioにアクセスすると宣言し、18行目で15番を入力にしプルアップ抵抗を0vに固定しています。

20行目からが処理に関してです。wait_for_edge()メソッドは第一引数で指定したピンにかかる電圧が、第二引数で指定した挙動になるまで待機してくれます。第二引数に

  • GPIO.RISING(立ち上がりエッジ)
  • GPIO.FALLING(立ち下がりエッジ)
  • GPIO.BOTH(立ち上がりか立ち下がり)

のどれかを指定します。今回は15番ピンが0v→3.3vになったら反応してほしいので、GPIO.RISINGを指定しています。

21行目からですが、イヤホンジャックが浸かると警告をラインに発し、15秒後と30秒後に更に警告を発したのちに勝手に電源を落とします。画像を送ったり、条件分岐で1回ごとに警告文を変えたりできますので、好きなように弄ってみてください。

8と26行目はデバッグ用なので消しても大丈夫です。

わからないところは聞いてくださいな(・∀・)ノ

SSHでラズパイの好きな場所に入れておきましょう。

テストから自動起動まで

じゃあ、テストしてみましょう。

ラズパイゼロでプチIoTお風呂警報機を作る20

水を張ったコップに浸けてみます。

ラズパイゼロでプチIoTお風呂警報機を作る21

来とる!ビンビン来とるで!

問題なく動作するので、今度は電源を入れたときに勝手にpythonのプログラムが起動するようにしましょう。

ラズパイにSSH接続して

sudo nano /etc/crontab

と打ち込みます。末尾に

@reboot pi /usr/bin/python3 絶対パス/waterlevel_alarm.py

と追加すれば、次回から勝手に警報機が起動するはずです。

まとめ的なやつ

結構駆け足でしたが、どうにかなりましたか?

原理は簡単で安価ですが、あれこれとラズパイの機能を使ってますので、初心者脱却にはいい教材になってると思います。応用も効きますしね。

100均のバッテリーは当たりハズレがあるので、電源が取れそうならアダプターの方がいいです。これも100均にありますので試してみてね。

何度も書きましたが、わかりにくいところはご質問ください。おかしいところもご指摘ください。

それではお疲れさまでした~(・∀・)ノシ

コメント

  1. ぼのぼの大好き より:

    ラズベリーパイ4を何の目的もないのに、
    買っちゃいました。

    まずはこのホームページを見ながらOSの
    インストールとpythonの勉強をしてみます。

    元ファームウェアのSEをやっていたので、
    アセンブラ(8086系)とC言語のみ、
    かつ20年前の知識しかないですけど。。。
    最初は適当に遊んでみます。

    • Minecrafterししゃも より:

      ぼのぼの大好き様
      こんなへなちょこサイトを見て挑戦してみて下さるなんて感激です。
      ラズパイ仲間が増えるのはホントに嬉しいです。

      pythonは大体のことをいい感じに処理してくれるのでとても使い易いと思います。
      ラズパイは遊びながらなので習得も楽しくできる思います。
      お互い楽しみましょう。