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

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

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

first commit

GitHubリポジトリ

https://github.com/ak1211/pi_hvac

用意するもの

ハードウェアの準備

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

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

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

Erlang / Elixir をインストール

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

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

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

他に

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

raspi-config

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

raspi-configの Interfacing Optionsで

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

ファイアウォールの設定

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

PLAINTEXT
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
この通り

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

I2Cアドレス

setup

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

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

SLAVE_ADDRESS = 0x52

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

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

PLAINTEXT
iex(2)> ElixirALE.I2C.detect_devices("i2c-1")
[0, 1, 2, 3, 4, 5, 6, 7, 82, 118, 124, 125, 126, 127]
クリックして展開し、詳細を表示

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

PLAINTEXT
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の対応ですし)

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

著作権表示

著者: Akihiro Yamamoto

リンク: https://ak1211.com/posts/7600/

ライセンス: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Please attribute the source, use non-commercially, and maintain the same license.

コメント

検索を開始

キーワードを入力して記事を検索

↑↓
ESC
⌘K ショートカット