自分専用のソフトウェアなので放置していたら, 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
ラズパイに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番ポートを外部からアクセスできるようにしておく。
|
|
起動
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/ にアクセスすると この通り
tmuxでセッションを残しておくと, ログアウトしてからもサーバーは実行されたままになる。
I2Cアドレス
BME280 breakoutに書かれている通り0x76がBME280で
リモコンいじり放題!!ラズパイ専用 学習リモコン基板で使えるソフトウェア3種詰め合わせ公開 よりダウンロードできるpythonスクリプトのなかにこう
SLAVE_ADDRESS = 0x52
ある通りに0x52がADRSIRです。
iexコンソールから確認するなら
|
|
あっこれは十進法表記だね。
|
|
この通り。
エントリポイント
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の対応ですし)
こんな構造ですわ。うん。