3. Lチカにチャレンジ
デバイス設定が完了してElectric Imp本体がインターネットに繋がりました。実際にコードを書いて動かしてみましょう。先ほどのデバイスの登録が完了するとActionsの</>マークがアクティブになるので選択しましょう。

このようなIDEの画面になります。AgentとDeviceのタブに分かれていて、それぞれのコードを記述していきます。

公式サイトのサンプルコードを参考にLチカにチャレンジしてみましょう。Squirrelのimpでの使い方を詳しく調べたい方はドキュメントを参照してください。
サンプルコードを参考に、以下のコードをIDEのDeviceタブにコピー&ペーストします。
// Assign pin9 to a global variable
led <- hardware.pin9;
// Configure LED pin for DIGITAL_OUTPUT, and set initial state to off
led.configure(DIGITAL_OUT, 0);
// Assign a global variable to track current state of LED pin
state <- 0;
// Function to blink LED
function blink() {
// Flip the state variable: 1 -> 0, 0 -> 1
state = (state == 1) ? 0 : 1;
// Set LED pin to new value
led.write(state);
// Schedule the blink function to run again in .5 seconds
imp.wakeup(0.5, blink);
}
// Initial call to the blink function to begin looping
blink();
Checkボタンを押すとコードのsyntaxをチェックしてくれます。

ソースコードの文法にミスがある場合、実行前にエラーが無いかを確認しましょう。
配線してコードの実行
配線をしてコードを実行しましょう。
ブレッドボード、銅線(ジャンパワイヤ)、LEDを用意します。写真を参考に、開発ボードAprilのPin9とGNDをブレッドボードと銅線を利用してLEDに接続しましょう。

準備ができたらBuild and Runボタンを押すとコードが実行されます。

実際の動作はこちらになります。

4. WebからLEDを操作してみよう
セットアップ時に表示されたAgent URLを使って、デバイスを操作することが可能です。最後にIoT開発を体験するためにAgent URLに送られたクエリ文字を処理するAgentをプログラムにして、WebからLEDの制御をしてみましょう。
公式サイトにある図のようにAgentを利用してブラウザでアクセスすることでLEDのON・OFFを切り替えられる仕組みを作ります。

Agentタブに以下のコードを貼り付けます。
// Log the URLs we need
server.log("Turn LED On: " + http.agenturl() + "?led=1");
server.log("Turn LED Off: " + http.agenturl() + "?led=0");
function requestHandler(request, response) {
try {
// Check if the user sent led as a query parameter
if ("led" in request.query) {
// If they did, and led = 1 or 0, set our variable to 1
if (request.query.led == "1" || request.query.led == "0") {
// Convert the led query parameter to a Boolean
local ledState = (request.query.led == "0") ? false : true;
// Send "set.led" message to device, and send ledState as the data
device.send("set.led", ledState);
}
}
// Send a response back to the browser saying everything was OK.
response.send(200, "OK");
} catch (ex) {
response.send(500, "Internal Server Error: " + ex);
}
}
// Register the HTTP handler to begin watching for HTTP requests from your browser
http.onrequest(requestHandler);
またDeviceタブに以下のコードを貼り付けます。
// Assign pin9 to a global variable
led <- hardware.pin9;
// Configure LED pin for DIGITAL_OUTPUT, and set initial state to off
led.configure(DIGITAL_OUT, 0);
function setLedState(state) {
if(state){
led.write(1);
}else{
led.write(0);
}
}
agent.on("set.led", setLedState);
準備ができたらBuild and Runボタンを押し実行しましょう。
Agent URLにアクセスし、https://agent.electricimp.com/xxxxxxxxxx?led=1でアクセスした際にLEDが点灯し、https://agent.electricimp.com/xxxxxxxxxx?led=0でアクセスした際にはLEDが消えることが確認できます。
おわりに
通常のIoT開発ではハードウェア側の環境、Web側の環境をそれぞれ用意する必要がありました。Webからデバイスの制御、デバイスで取得した値へのWebからのアクセスなどは未だに障壁があると言えます。
Electric Impを使うことでそれらを簡潔に行うことが出来るため、まさにIoT開発向けのデバイスと言えるでしょう。気になった方は是非試してみて下さい。
最後になりますが、Electric Impは現時点で技適認可が降りていないため、国内で利用する場合は電波暗室を利用するなど注意をして下さい。また、今回紹介したimp001モジュールは製造終了となっており、日本の技適対応を行う予定は無いそうです。ただ後続製品は販売されていますので今後に期待しましょう。
