はじめに
以前、2台の MacBook 上の Livebook を接続しました
本記事では MacBook 上の Livebook から Raspberry Pi 上の Livebook に接続します
Raspberry Pi の環境構築
以下の記事の手順で Raspberry Pi 上に Nerves Livebook を立ち上げます
ブラウザで nerves.local
を開き、パスワード nerves
で認証します
MacBook の環境構築
以前の記事と同じ手順ですが、ノード名を IP アドレス付きで起動するようにします
Livebook のコードをクローンする
最新版ではなく、安定稼動するリリース済のバージョンを使用します
git clone -b v0.12.1 https://github.com/livebook-dev/livebook.git
cd livebook
依存モジュールをインストールする
mix deps.get --only prod
ノード名を IP アドレスとして起動する
LIVEBOOK_DISTRIBUTION=name \
LIVEBOOK_NODE="livebook-server@<MacBookのIPアドレス>" \
LIVEBOOK_IP=0.0.0.0 \
MIX_ENV=prod mix phx.server
表示された URL をブラウザで開きます
ノードの接続
MacBook の接続情報を取得する
MacBook 側で新しいノートブックを開き、以下のコードを実行します
{node(), Node.get_cookie()}
実行結果(例)
{:"hb2dbpe2-livebook-server@192.168.40.97", :c_XpnMHCvYnb9NFe4XGWZi_fI_P5fpAgIn6lPuP7n_POU6QIJ2BQXp}
自分のノード名とクッキーが取得できました
Raspberry Pi からの接続
Raspberry Pi 側で新しいノートブックを開き、以下のコードを実行します
{node, coockie} に MacBook 側の接続情報を設定しています
{node, coockie} = {:"hb2dbpe2-livebook-server@192.168.40.97", :c_XpnMHCvYnb9NFe4XGWZi_fI_P5fpAgIn6lPuP7n_POU6QIJ2BQXp}
Node.set_cookie(node, coockie)
Node.connect(node)
うまく接続できれば結果として true
が返ってきます
MacBook から Raspberry Pi 上の処理を実行する
MacBook 側のノートブックで接続ノードを確認します
Node.list(:connected)
実行結果として、以下のように MacBook のノードと Raspberry Pi のノードが取得できます
[:"livebook-server@192.168.40.97", :"livebook@nerves-6b7e.local"]
Raspberry Pi のノード上で処理を実行します
Node.spawn_link(:"livebook@nerves-6b7e.local", fn -> node() |> IO.puts() end)
実行結果として、確かに Raspberry Pi 側のノード名が表示されました
livebook@nerves-6b7e.local
MacBook から Raspberry Pi にLチカさせる
同じように、 MacBook 側のノートブックから Raspberry Pi 側の LED を制御できます
Node.spawn_link(:"livebook@nerves-6b7e.local", fn ->
:green # 色
|> Delux.Effects.blink(3) # 周波数
|> Delux.render()
end)
Nerves 側に渡した関数の中身は以下の記事と同じです
まとめ
MacBook 上の Livebook から Raspberry Pi 上の Livebook に接続し、Lチカさせることができました
実は、逆方向の Raspberry Pi から MacBook に処理を実行させる方はできていません
Nerves Livebook を IPアドレス付きノード名で起動できれば大丈夫だとは思うのですが