概要
NervesにPhoenixを入れてウェブチカできたので備忘録です。
- NervesにPhoenixを入れるとNerves起動時にPhoenixも起動します
- ウェブチカとは、とあるURLにアクセスするとNervesにつけているLEDをチカらせることを言ってます
- 前提としてNervesとPhoenixはインストール済みとします
❯ mix nerves.new -v
Nerves Bootstrap v1.8.0
❯ mix phx.new -v
Phoenix v1.5.3
長編になりそうだったので3部作としました(^^ゞ
前回はNerves設定編だったので、今回はいよいよPhoenix設定・確認編です。
Nerves起動時に起動するPhoenixの設定と確認をおこないます。
関連ファイル
mix.exs
lib/
neosapi/
exi.ex
neosapi_web/
controllers/
page_controller.ex
templates/
page/
exineos.html.eex
router.ex
mix.exs
mix.exsファイルのdeps
に以下の行を追記して、ElixirからGPIOの操作をできるようにします。
defp deps do
[
{:circuits_gpio, "~> 0.4"},
]
end
追記した後、mix deps.get
コマンドを実行します。
❯ mix deps.get
lib/neosapi/exi.ex
LEDをチカチカさせたり、オン・オフするモジュールを作成します。
defmodule Exi do
@led_on 1
@led_off 0
def chika(sleep_msec) do
{:ok, gpio} = Circuits.GPIO.open(25, :output)
Circuits.GPIO.write(gpio, @led_on)
:timer.sleep(sleep_msec)
Circuits.GPIO.write(gpio, @led_off)
Circuits.GPIO.close(gpio)
end
def led("on") do
{:ok, gpio} = Circuits.GPIO.open(25, :output)
Circuits.GPIO.write(gpio, @led_on)
Circuits.GPIO.close(gpio)
end
def led("off") do
{:ok, gpio} = Circuits.GPIO.open(25, :output)
Circuits.GPIO.write(gpio, @led_off)
Circuits.GPIO.close(gpio)
end
def led(_) do
nil
end
end
lib/neosapi_web/router.ex
HTTP GETで受け取る設定などをおこないます。
defmodule NeosapiWeb.Router do
scope "/", NeosapiWeb do
get "/exineos/:device/:action", PageController, :exineos # ←この行を追記
end
end
lib/neosapi_web/controllers/page_controller.ex
HTTP GETでアクセスされた場合の処理を記載します。
defmodule NeosapiWeb.PageController do
def exineos(conn, params) do # ←この関数を追加
device = params["device"]
action = params["action"]
led_onoff(device, action)
render(conn, "exineos.html", device: device, action: action)
end
defp led_onoff(_device, action) do # ←この関数も追加
Exi.led(action)
end
end
lib/neosapi_web/templates/page/exineos.html.eex
HTTP GETでアクセスされた場合の画面を作ります。
<h1>Exineos Page</h1>
<p>Exineosのページです</p>
Device => <%= @device %><br />
Action => <%= @action %>
デプロイ
最後に、Nervesプロジェクトのディレクトリに移動してデプロイします。
❯ pwd
/path/to/exineos
❯ cd exineris
❯ mix firmware
❯ ./upload.sh 192.168.5.55
ブラウザでhttp://192.168.5.55/
にアクセスしてPhoenixの画面が表示されたことを確認後、以下のURLでLEDがオン・オフできるかどうかを確認します。
動画
直線距離で18km離れたNervesのLEDをウェブチカできたのTweetはこちら。
#Nerves で #Phoenix 動かしてウェブチカできましたの動画╰( ^o^)╯<直線距離で18km #kochiex pic.twitter.com/ItLyfBFUhq
— にしうちかずま (@nishiuchikazuma) May 26, 2020
まとめ
NervesにPhoenixを入れてHTTPのGETでLEDををウェブチカすることができました\(^o^)/
次はLiveViewで、もにょもにょしたまとめを書こうと思ってます。