2021/12/14(水)の回です。
2022/1/7(金) 19:30 NervesJP #22 新年LT回 開催🎍🎍🎍
はじめに
Elixirを楽しんでいますか
Nervesを楽しんでいますか
2021/12/14(水)に、「SORACOM UG x NervesJP #1 ~Hello, world!~」が開催されました。
ありがとうございました。
レポートは前日の13日に書きました。
どのくらいあっているかな?
よげんの書
What's Nerves?
ナウでヤングでcoolなすごいやつ
です。
NervesでSORACOMさんのサービスを楽しむ方法
かんたんな順に並べます。
- 「インターネット経由でSORACOM Harvestにデータが入れられるようになりました。」に従ってHTTPSでデータを投げ込む
- モバイルWiFiルータにSORACOM Air for セルラーのSIMを差し込んで、NervesアプリからはふつうのWiFi接続と同じ要領でつなぐ
- SORACOM Air for セルラーを差し込んだドングルをつかう(Buildrootの知識と覚悟が必要)
- SORACOM Arcを利用する(Buildrootの知識と覚悟が必要。私にはできていません)
「インターネット経由でSORACOM Harvestにデータが入れられるようになりました。」に従ってHTTPSでデータを投げ込む
をやってみます。
これは全然知りませんでした。
「SORACOM UG x NervesJP #1 ~Hello, world!~」にてお聞きして初めて知りました。
さっそくやってみたらあっけなくできてしまいました
公式ドキュメントがすばらしいです!!!
このドキュメントの通りにやればできます。
あとは、Nervesというよりは、Elixirではどう書くの? という話になります。
以下、一例をお示ししておきます。
Elixirは1.12 or laterを使っている前提です。
curl -X POST --header "x-device-secret: <シークレットキー>" -d "{\"temp\":20}" https://api.soracom.io/v1/devices/<デバイスID>/publish
以下、上記のコマンドをElixirでどう書くかを書いております。
開発マシン上にてイゴかす1
iex
というコマンドでREPLが使えます。
$ iex
IEx
が起動しますので以下のプログラムをペタっと貼り付けて実行してみてください。
Mix.install([{:httpoison, "~> 1.8"}, {:jason, "~> 1.2"}])
device_id = "your deviceId"
url = "https://api.soracom.io/v1/devices/#{device_id}/publish"
json = %{temp: 21} |> Jason.encode!()
secret_key = "your secretKey"
headers = ["Content-Type": "application/json", "x-device-secret": secret_key]
HTTPoison.post!(url, json, headers)
素のNerves Livebook Firmwareにてイゴかす1
を参考にしてセットアップしてください。
動画もあります〜
素のNerves Livebook Firmware 公式イメージには、Elixir界でHexと呼ばれるライブラリをあとからインストールすることはできません。(もちろんファームウェアを自分でビルドすれば予め追加することができます)
さきほどパソコン版の例で利用した、使いやすいHTTPクライアントライブラリであるHTTPoisonが使えません。
そこでErlangのモジュールを利用します。
defmodule MyHttpClient do
@device_id "your deviceId"
@secret_key 'your secretKey'
def post(temperature) do
:inets.start
:ssl.start
url = "https://api.soracom.io/v1/devices/#{@device_id}/publish" |> String.to_charlist()
json = Jason.encode!(%{temp: temperature}) |> String.to_charlist()
request = {url, [{'x-device-secret', @secret_key}], 'application/json', json}
:httpc.request(:post, request, [], [])
end
end
MyHttpClient
を定義しておき、以下のように呼び出すわけです。
MyHttpClient.post(20)
一点注意点です。
"
でくくると文字列、'
でくくるとCharlistsとなり、その意味するところがElixirでは全く異なります。
他の言語では"
は式展開できて、'
では式展開できないという違いがあるのみで、文字列であるということには変わりがないというものが多い気がします。
Elixirでは全く異なります。
どう違うのかこの記事では説明いたしますまい。
どうしても気になる方は上記をご確認ください。
結果
てきと〜 にデータを送ってみました
そもそもNervesをネットワークにつなぐのどうしたらいいのさ〜?
有線
- LANケーブルで接続する
Wi-Fi
-
Nerves Livebookの場合は、https://github.com/livebook-dev/nerves_livebook#fwup を参考に
fwup
コマンドでmicroSDカードに焼く - 自作のNervesアプリをつくる場合3は、https://github.com/nerves-networking/vintage_net/blob/main/docs/cookbook.md#wifi を参考に接続情報をあらかじめ設定しておいてファームウェアをビルドして、microSDカードに焼く
Wrapping up
Nerves meets SORACOM Harvest
できちゃいました
来年のことを言うと鬼に笑われてしまいますが、2022/1/7(金) 19:30より「NervesJP #22 新年LT回」会を開催します
2022/1/7(金) 19:30 NervesJP #22 新年LT回 開催🎍🎍🎍
-
「動かす」の意。おそらく西日本の方言、たぶん。NervesJPではおなじみ。少し古いオートレースの映像ですが、実況アナウンサーが「針2イゴきます」とはっきり言っています。https://autorace.jp/netstadium/SearchMovie/Movie/iizuka?date=2017-01-04&p=5&race_number=11&pg= ↩ ↩2
-
大時計の針のこと。針がイゴいてある地点まで到達すると選手はスタートを切って良い発走の合図。針がイゴきはじめると(おそらく)選手は緊張するし、スタートはその後のレース展開に大きく影響するので、車券を握りしめている観客たちがもっとも緊張する瞬間であるため、先の尖った鋭いものを連想させる針は緊張の暗喩としても言い得て妙。 ↩