URLを入れるだけ!REST APIでNefryを簡単に制御してみよう!
こんにちは、外部ライターのわみ(@wamisnet)と申します。愛知県でネットワークの勉強をしている学生です。2014年ごろから電子工作を始め、FRISKサイズのIoT向けデバイス「Nefry(ねふりー)」を自作しました。
そんな「Nefry」をWeb系のエンジニアでも触れられるように、REST APIでハードウエアをいじれるようにしてみました。C言語を使わずに、JavaScriptやC#から簡単に試せるのでぜひ遊んでみてください。
※Nefry library version 2.2.2以上の場合使用できます。
Nefryとは
「Nefry(ねふりー)」は手軽にIoTに挑戦できるFRISKサイズのデバイスです。Wi-Fiを搭載しておりインターネットに接続しやすいため、接続に時間をとられることなくあなたのアイデア実現に集中できます。日本の技適に通ったESP-WROOM-02を使っています。
また、スマートフォンで使うようなモバイルバッテリーで動作するので、場所を選ばずに使えるという優れものです! Groveセンサー対応しており、はんだ付け不要で楽しめます。(dotstudioのECサイトにて販売中です!!)
LIGブログにいくつか記事を載せていますのでご覧ください。
REST APIとは
REST APIとは、簡単なURLを叩くだけでそこにある情報や資源にアクセスできる仕組みのことです。TwitterのREST APIで例えてみましょう!
Twitterでフォロワーの一覧を取得したい場合はこちらのREST API
- api.twitter.com/1.1/followers/list.json
ツイートを検索したい場合はこちらのREST API
- api.twitter.com/1.1/search/tweets.json
認証情報など必要な引数を渡せばTwitterにアクセスできるのです。URLを見るだけで、何ができるかがわかるのがREST APIのよさの一つだと思います。
そんなREST APIにNefryも対応し、より簡単にいろんなことを試せるようにしてみました。以下で、どんなことができるのかを簡単に紹介します。
NefryのおすすめREST API
今回紹介するのは、今実装されている機能の一部のみです。実装されているすべての機能はこちらのQiitaの記事にまとめていますので興味があればご覧ください。
デフォルトのままのREST APIであると、URLさえわかれば別の人も簡単に制御できてしまうので、基本的にはPasswordをかけて使用してください。(かけ方は後ほど紹介します)
GPIO(入出力ピン)
Nefryについている入出力ピンを制御することができるAPIのまとめです。
入力
Nefryの入力ピンがどうなっているかを取得できます。スイッチや明るさセンサーのような簡単なセンサーを手軽に試すことができます。
デジタル
NefryのD0-D5の入力を取得できます。
項目 | 内容 |
---|---|
URL | /api/1.0/digitalRead |
引数 | pin(範囲:D0-D5) |
具体例 | /api/1.0/digitalRead?pin=D1 |
返り値 | {“mode”:“digitalRead”,“pin”:“D1”,“value”:0} |
pin名と状態がvalueに含まれて返答されます。valueの範囲は0(low)-1(high)となります。 スイッチの状態を取得するのに向いています。
アナログ
NefryのA0の入力を取得できます。
項目 | 内容 |
---|---|
URL | /api/1.0/analogRead |
引数 | なし |
具体例 | /api/1.0/analogRead |
返り値 | {“mode”:“analogRead”,““value”:0} |
状態がvalueに含まれて返答されます。valueの範囲は0-255となります。明るさセンサーを取得するのに向いています。
出力
デジタル
NefryのD0-D5ピンの出力を制御できます。HIGH(3.3v)かLOW(0v)のどちらかを出力します。
項目 | 内容 |
---|---|
URL | /api/1.0/digitalWrite |
引数 | pin(範囲:D0-D5) state(範囲:HIGH(1)-LOW(0)) |
具体例 | /api/1.0/digitalWrite?pin=D1&state=HIGH |
返り値 | {“mode”:“digitalWrite”,“pin”:“D1”,“value”:1} |
pin名と状態がvalueに含まれて返答されます。LEDを点滅させることができます。
アナログ(PWM)
NefryのD0-D5ピンの出力を制御できます。1023(3.3v)から0(0v)の指定された出力します。
項目 | 内容 |
---|---|
URL | /api/1.0/analogWrite |
引数 | pin(範囲:D0-D5) state(範囲:0-1023) |
具体例 | /api/1.0/analogWrite?pin=D1&state=500 |
返り値 | {“mode”:“analogWrite”,“pin”:“D1”,“value”:500} |
pin名と状態がvalueに含まれて返答されます。LEDを徐々に明るくしたり、暗くしたりできます。
Nefry関数
Nefry LED
NefryについているLEDの色を変更することができます。
項目 | 内容 |
---|---|
URL | /api/1.0/NefrysetLed |
引数 | r (範囲:0-255) g (範囲:0-255) b (範囲:0-255) |
具体例 | /api/1.0/NefrysetLed?r=255&g=0&b=0 |
返り値 | {“mode”:“NefrysetLed”,“r”:255,“g”:0,“b”:0} |
設定した値が返答されます。NefryについているLEDを制御することができます。
使い方
NefryでREST APIを使う際には、前もってプログラムを書き込んでおく必要があります。 Nefryにプログラムを書き込む際に必要な環境については、下の記事をご覧ください。
環境ができたところで、Nefryのプログラムを紹介していきます。まずはシンプルなパスワード なし から。
#include <NefryRESTAPI.h>
void setup() {
NefryRESTAPI.begin();//RES TAPIを使うのに必要な初期化をおこないます。
}
void loop() {
}
ものすごくシンプルですね、#include<NefryRESTAPI.h>
こちらでライブラリーを読み込み、NefryRESTAPI.begin();
にてライブラリーを使うのに必要な処理をするための関数を呼び出すだけでREST APIを使用できるようになります。
パスワードをつけてみる
次にパスワード あり のプログラムを紹介します。
※ 現状http通信での通信であるため、セキュリティ的には大変弱いです。あくまでパスワードは誰もが簡単にアクセスできないようにするためのものです。
#include <NefryRESTAPI.h>
void setup() {
NefryRESTAPI.begin();//REST APIを使うのに必要な初期化をおこないます。
NefryRESTAPI.setPassword("Nefry");//接続時にパスワードが必要になります。
}
void loop() {
}
先ほどのプログラムにNefryRESTAPI.setPassword("Nefry");
この一行をプラスするだけです。この場合のパスワードは、Nefry となります。
ダブルクォーテーションの間にパスワードを入力して、Nefryに書き込めば準備完了です! パスワードありはAPIを使用する際にURLにpass=(プログラム内のパスワード)を追記してください。
具体例1: /api/1.0/NefrysetLed?r=255&g=0&b=255&pass=Nefry
具体例2: /api/1.0/analogRead?pass=Nefry
実際に動かしてみる
NefryにRESTAPIぽいものを実装してみた!
— わみ (@wamisnet) 2016年11月11日
APIを叩くとNefryにもともとついているledが青から緑に変化して、そのあとD5ピンに繋がってる赤色のledが点灯します pic.twitter.com/2Pe4yWuF1I
AndroidのchromeでNefryのREST APIを叩いてみました。初めにNefryついているLEDが青から緑になり、次のAPIの指示でD5ピンに接続されているLEDが点灯する流れを撮影しました。
私の環境では、はじめにhttp://192.168.4.1/api/1.0/NefrysetLed?g=255でNefryのLEDの色を変更して、
つぎにhttp://192.168.4.1/api/1.0/digitalWrite?pin=d5&state=highで赤色のLEDを光らせています。URLを送信すると驚くくらい即反応します。
まとめ
ブラウザさえあれば、REST APIで明るさセンサーの値が取れたり、NefryのLEDをいじったりとハードウエアを簡単にいじることができます。また、ArduinoIDEでプログラムが書けなくても手軽に触れるのでちょっと試したいことがあるときなんかにもいいです。
REST APIはJavaScriptやC#から制御できます。既存のものにハードウエアを制御させることもできるのでぜひ遊んでみてください。