ラズパイとBME280ブレイクアウト基板と赤外線学習リモコン基板を組み合わせて環境測定と家電を操作する。

04 August 2020 — Written by Aki
#ソフトウェア#ハードウェア#赤外線リモコン#Elixir#PureScript

自分専用のソフトウェアなので放置していたら, GitHubより Security alert がやってきたので少々手直しを。
赤外線リモコン信号の解析アプリケーション のラズパイで動いているバックエンド(サーバサイドか?)のお話。
このソフトウェアの使い方はリポジトリを見てもわからないだろうから書いておく。
とはいえこの記事はこの頃を思い出しながら書いてるので再現性に自信がない。

Date: Mon Jan 21 20:54:54 2019 +0900

first commit

GitHubリポジトリ

https://github.com/ak1211/pi_hvac

用意するもの

  • Raspberry Pi (Elixir / Phoenixが動作するラズパイであればいいと思います。)
  • USB電源 (ラズパイ用)
  • SDカード (ラズパイ用)
  • ラズベリー・パイ専用 学習リモコン基板 ASRSIR
  • BME280 breakout
    SwitchScience
    秋月電子通商 通販コード: K-09421
    など
  • ユニバーサル基板 / ラズパイ用プロトタイプ基板など
    SwitchScience
    秋月電子通商 通販コード: P-11073
    など(Zero用でもいいと思います, ラズパイの発熱の影響を避けるためにBME280はワイヤでラズパイから離すので)
  • ラズパイ用スタッキングコネクタ
    SwitchScience
    秋月電子通商 通販コード: C-10702
    など
  • L型ピンヘッダ 2×20
    これを折って使うか 秋月電子通商 通販コード: C-00148
    またはこれを使うか SwitchScience
    またはラズパイ用スタッキングコネクタを2段重ねで使って普通のピンヘッダを使うか
    または直接はんだ付けするか BME280とラズパイとの接続ができればいいので接続は自由です。
  • ワイヤ

ハードウェアの準備

https://github.com/ak1211/pi_hvac/blob/master/devboard.png

回路
回路
BME280
BME280
pin
pin
組み立て1
組み立て1
組み立て2
組み立て2

ラズパイにOSをインストールして, PCからRLoginなどの端末から入れるようにセットアップしておいてください。
以下, Windows 10上のRLoginで作業をします。

Erlang / Elixir をインストール

公式サイトにある情報を参照してください。 https://elixir-lang.jp/install.html#raspberry-pi

あるいはQiitaなどの情報を参考にしてください。

自分はErlang / Elixir 共にソースから入れました。(手順はもう忘れた)

他に

  • postgresql
  • tmux などを入れる。

PureScriptはWindows上でビルドするのでラズパイに入れない。

raspi-config

pi@raspberrypi-3:~/pi_hvac $ sudo raspi-config

raspi-configの Interfacing Optionsで

  • SSH
  • I2C

をEnableに, あと Network Options内のHostnameで適切なホストネームを決めておく。

ファイアウォールの設定

例えばこのように4000番ポートを外部からアクセスできるようにしておく。

pi@raspberrypi-3:~/pi_hvac $ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
4000                       ALLOW       Anywhere                  
22                         ALLOW       Anywhere                  
80                         ALLOW       Anywhere                  
443                        ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443/tcp                    ALLOW       Anywhere                  
4000 (v6)                  ALLOW       Anywhere (v6)             
22 (v6)                    ALLOW       Anywhere (v6)             
80 (v6)                    ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443/tcp (v6)               ALLOW       Anywhere (v6)             

pi@raspberrypi-3:~/pi_hvac $ 

起動

GitHubからcloneして, あとはREADMEの通り

To start your Phoenix server:

  • Install dependencies with mix deps.get
  • Create and migrate your database with mix ecto.setup
  • Start Phoenix endpoint with mix phx.server

Now you can visit localhost:4000 from your browser.

Ready to run in production? Please check our deployment guides.

とはいえREADMEと違って, 自分はこうして起動しているけどなんでもいいんじゃないかな。 pi@raspberrypi-3:~/pi_hvac $ iex -S mix phx.server

Windows 10上のブラウザで http://raspberrypi-3:4000/ にアクセスすると

home
home
この通り

tmuxでセッションを残しておくと, ログアウトしてからもサーバーは実行されたままになる。

I2Cアドレス

setup
setup

BME280 breakoutに書かれている通り0x76がBME280で

リモコンいじり放題!!ラズパイ専用 学習リモコン基板で使えるソフトウェア3種詰め合わせ公開 よりダウンロードできるpythonスクリプトのなかにこう

SLAVE_ADDRESS = 0x52

ある通りに0x52がADRSIRです。

iexコンソールから確認するなら

iex(2)> ElixirALE.I2C.detect_devices("i2c-1")
[0, 1, 2, 3, 4, 5, 6, 7, 82, 118, 124, 125, 126, 127]

あっこれは十進法表記だね。

iex(7)> ElixirALE.I2C.detect_devices("i2c-1") |> Enum.map( &Integer.to_string(&1, 16) )
["0", "1", "2", "3", "4", "5", "6", "7", "52", "76", "7C", "7D", "7E", "7F"]

この通り。

エントリポイント

エントリポイントはこのファイル

17行目, 18行目に書かれた PeriodicalMeasure, ADRSIR が自分の子プロセス。 あとは Phoenix Framework の子プロセスじゃないかな。

ADRSIRドライバ

ADRSIRドライバはこのファイル
ADRSIRハードウエアにI2Cバスを通じて仕様書の規定通りのメッセージを送りあっているプロセスね。

BME280ドライバ

BME280ドライバはこのファイル
SwitchScrienceのwikiに説明がある。
見比べてみて。

定期的に測定を行なうサーバー

定期的に測定を行なうサーバーはこのファイル
エントリポイントのApplication start() で立てられるプロセス。

定期的に測定を行って, データベースに入れる。

REST API

Phoenix Frameworkのルーティングファイル
このあたりのファイルがREST APIのコントローラ

index.html

ブラウザが GET / を送ると
ルーティングファイルのここから
ここに来る
これがブラウザに返されるindex.html
これ以降はPureScriptで書かれたSPAでユーザーと対話しながらREST APIでお互いにメッセージを送りあいながら動作する。
このファイルがフロントエンド側からREST APIを呼ぶ関数のモジュール

それぞれのファイルを見てもらえたら フロントエンド - バックエンド間でお互いにREST APIでやり取りしているメッセージがわかるかと思います。(1:1の対応ですし)

こんな構造ですわ。うん。

© 2020 Built with GatsbyStarter created by panr

このサイトに書かれた内容によって生じた損害等の一切の責任を負いかねますので, 予めご了承ください。