LoginSignup
9
0

More than 1 year has passed since last update.

2021/12/14(水)の回です。

2022/1/7(金) 19:30 NervesJP #22 新年LT回 開催🎍🎍🎍


はじめに

Elixirを楽しんでいますか:bangbang::bangbang::bangbang:
Nervesを楽しんでいますか:bangbang::bangbang::bangbang:

2021/12/14(水)に、「SORACOM UG x NervesJP #1 ~Hello, world!~」が開催されました。
ありがとうございました。
レポートは前日の13日に書きました。
どのくらいあっているかな?

よげんの書

What's Nerves?

ナウでヤングでcoolなすごいやつ
です。

NervesSORACOMさんのサービスを楽しむ方法

かんたんな順に並べます。

  1. インターネット経由でSORACOM Harvestにデータが入れられるようになりました。」に従ってHTTPSでデータを投げ込む
  2. モバイルWiFiルータにSORACOM Air for セルラーのSIMを差し込んで、NervesアプリからはふつうのWiFi接続と同じ要領でつなぐ
  3. SORACOM Air for セルラーを差し込んだドングルをつかう(Buildrootの知識と覚悟が必要)
  4. SORACOM Arcを利用する(Buildrootの知識と覚悟が必要。私にはできていません:sob:)

インターネット経由でSORACOM Harvestにデータが入れられるようになりました。」に従ってHTTPSでデータを投げ込む

をやってみます。
これは全然知りませんでした。
SORACOM UG x NervesJP #1 ~Hello, world!~」にてお聞きして初めて知りました。
さっそくやってみたらあっけなくできてしまいました:rocket::rocket::rocket:
公式ドキュメントがすばらしいです!!!

このドキュメントの通りにやればできます。

あとは、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では全く異なります。
どう違うのかこの記事では説明いたしますまい。

どうしても気になる方は上記をご確認ください。

結果 :tada::tada::tada::tada::tada:

スクリーンショット 2021-12-15 6.14.49.png

:tada::tada::tada::tada::tada:

てきと〜 にデータを送ってみました :rocket::rocket::rocket:

そもそもNervesをネットワークにつなぐのどうしたらいいのさ〜?

有線

  1. LANケーブルで接続する

Wi-Fi

  1. Nerves Livebookの場合は、https://github.com/livebook-dev/nerves_livebook#fwup を参考にfwupコマンドでmicroSDカードに焼く
  2. 自作のNervesアプリをつくる場合2は、https://github.com/nerves-networking/vintage_net/blob/main/docs/cookbook.md#wifi を参考に接続情報をあらかじめ設定しておいてファームウェアをビルドして、microSDカードに焼く

Wrapping up :lgtm::lgtm::lgtm::lgtm::lgtm:

Nerves meets SORACOM Harvest
できちゃいました:hugging::hugging::hugging:

来年のことを言うと鬼に笑われてしまいますが、2022/1/7(金) 19:30より「NervesJP #22 新年LT回」会を開催します :tada::tada::tada:

2022/1/7(金) 19:30 NervesJP #22 新年LT回 開催🎍🎍🎍


  1. 「動かす」の意。おそらく西日本の方言、たぶん。NervesJPではおなじみ。少し古いオートレースの映像ですが、実況アナウンサーが「針3イゴきます」とはっきり言っています。https://autorace.jp/netstadium/SearchMovie/Movie/iizuka?date=2017-01-04&p=5&race_number=11&pg= 

  2. Nerves これだけおぼえておけばいいっす。これだけです。本当にこれだけです。これだけ覚えればいいんです。 

  3. 大時計の針のこと。針がイゴいてある地点まで到達すると選手はスタートを切って良い発走の合図。針がイゴきはじめると(おそらく)選手は緊張するし、スタートはその後のレース展開に大きく影響するので、車券を握りしめている観客たちがもっとも緊張する瞬間であるため、先の尖った鋭いものを連想させる針は緊張の暗喩としても言い得て妙。  

9
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
0