mraaでintel edisonを遊ぼう
TRANSCRIPT
自己紹介
@a_nakatsugawa
fb.me/moongift
株式会社MOONGIFT 代表取締役
2004年1月よりオープンソース・ソフトウェアを毎日紹介するブログ MOONGIFT を運営。
http://www.moongift.jp/
中津川 篤司
@moongift fb.me/moongift.fan
MRAAって何よ?Intel社が開発しているハードウェアを操作するためのライブラリ(Galileo/Edison)
Intel Edisonはデフォルトでインストール済み
オープンソース・ソフトウェア(MIT License)
Raspberry PI/Bannana Pi/Beaglebone Black対応
C/C++ >>>>>> Python > node.js(JavaScript)
https://github.com/intel-iot-devkit/mraa/
サンプルコード(C++)#include "mraa.hpp"
int main(){ uint16_t adc_value; float adc_value_float; mraa::Aio* a0; a0 = new mraa::Aio(0); if (a0 == NULL) { return MRAA_ERROR_UNSPECIFIED; } for (;;) { adc_value = a0->read(); adc_value_float = a0->readFloat(); fprintf(stdout, "ADC A0 read %X - %d\n", adc_value, adc_value); fprintf(stdout, "ADC A0 read float - %.5f\n", adc_value_float); } return MRAA_SUCCESS; }
サンプルコード(Python)import mraa import time
x = mraa.Gpio(8) x.dir(mraa.DIR_OUT)
while True: x.write(1) time.sleep(0.2) x.write(0) time.sleep(0.2)
サンプルコード(JavaScript)var m = require('mraa'); //require mraa console.log('MRAA Version: ' + m.getVersion());
var myDigitalPin = new m.Gpio(6); myDigitalPin.dir(m.DIR_IN);
periodicActivity(); function periodicActivity() { var myDigitalValue = myDigitalPin.read(); console.log('Gpio is ' + myDigitalValue); setTimeout(periodicActivity,1000); }
ここまでのまとめ
• Intel Edisonは超小型コンピュータ
• MRAAはIntel Edisonをはじめ、IoTデバイスを扱う共通APIライブラリ
• C/C++がベースで、その後Python/JavaScriptに翻訳
• 基本的な使い方はどれも同じ
LittleBits
http://littlebits.cc/
磁石でくっつけるだけの簡単電子おもちゃ
Arduino Kit / Hardware Development Kit / CloudBit で 大人のおもちゃに!
今回のデモをやるためには だいたい200ドル(送料別)
https://youtu.be/YUUsJSDa7PE
アナログ入力を取る
var mraa = require('mraa'); //require mraa
var analogPin0 = new mraa.Aio(0);
value = analogPin0.read(); // 0 ~ 1000
デジタル出力するvar motor = new mraa.Gpio(13); motor.write(0); // 停止 motor.write(1); // 回転
// 2秒後に停止 setTimeout(function () { motor.write(0); }, 2000);
ここまでのまとめMRAAを使えば Intel Edison の操作が簡単にできます(RasPIも)。
MRAAはC/C++、Python、node.jsに対応
操作の手軽さを考えるとArdiuno版も良い
var on = null; var http = require('http'); setInterval(function () { var value = analogPin0.read(); var options = { hostname: "192.168.0.20", path: "/messages", method: "POST" }; var data = {}; console.log("Value", value); if (value > 250) { if (on == null || on == false) { data = '{"format":"raw","freq":38,"data": [6424,3228,873,787,…,8]}’; on = true; console.log("ON"); }else{ return true; } } else {
} else { if (on == null || on == true) { data = ‘{“format”:”raw”,"freq":38, "data":[6424,3228,...,873]}'; on = false; console.log("OFF"); }else{ return true; } } var req = http.request(options, function(res) { var body = ''; res.setEncoding('utf8'); res.on('data', function(chunk) { body += chunk; });
res.on('end', function() { console.log("POSTED"); }); }); req.write(data); req.end(); }, 3000);
ニフティクラウド mobile backend
• アプリ、Webアプリのバックエンド(サーバサイド)をまるっと提供するサービス。いわゆるmBaaS。
• データベースとかファイルストレージ、プッシュ通知とか。
http://mb.cloud.nifty.com/
var NCMB = require('./ncmb-1.2.6.js').NCMB; var app_key = ‘APPLICATION_KEY'; var cli_key = ‘CLIENT_KEY'; NCMB.initialize(app_key, cli_key);
var IRKit = NCMB.Object.extend("IRKit"); var message = ""; setInterval(function () { if (value > 250) { if (on == null || on == false) message = "エアコンをオン"; } else { if (on == null || on == true) message = "エアコンをオフ"; } var obj = new IRKit(); obj.set("action", message); : res.on('end', function() { console.log("POSTED"); obj.save(); });
まとめ• MRAAを使えばIntel Edisonの入力系が簡単に操作できるようになります。
• C/C++/Python/node.js向けがありますがnodeはライブラリも多くなってきたので楽
• センサー系が欲しい場合はLittleBitsいいよ!
• ニフティクラウド mobile backendも一緒にどうぞ!