Comments
Description
Transcript
オブジェクト通信ボード
最近のデバイスの状況 ・特にプロトタイピング的用途ではエバボードを含め選択肢が広がっている。 ・高性能化に伴いスクリプト系言語の使用が広がっている。 ・無線機能搭載ボードの選択肢が広がっている。 ■総合力が重要 SaaS データマイニング 開発全般 PaaS データベース IaaS モデリング 設計 手法 テスト 手法 セキュリティ ラピッド プロトタイピング PAN ICT WAN クラウド ネット ワーク 無線通信 LAN アナログ 回路 リアルタイムOS リアルタイム OS ディジタル 回路 SoC 信号処理 センサー 組み込み システム ソフトウェア 記述言語 マイクロ コンピュータ 制御理論 アクチュエータ アクチュエー タ 基礎 要素 メカトロ ■最近のマイクロコンピュータ周辺 各種クラウド サービス 近距離通信 Arduino 各種シールド Bluetooth,ZigBee,etc .NET MicroFramwork GIO、通信、 センサ、ドライバ、 etc. BeagleBone 32bit,1GHz 2G/512M ZedBoard Zynq-7000 32bit,700MHz /512M Cortex-A9 RZ ARM11 Cortex-A8 RX600 Cortex-M4 RXcore SmartFusion Cortex-M3 PSoC5 mbed 32bit,96MHz 8M/8M 8bit,16MHz 256k/8k ZPU Cortex-M0,M0+ PSoC4 RLcore AVR PSoC3 8051 CPUコア チップ メイカーズブーム等の 影響(?)で非常に 多様なデバイス、 システムが安価に 利用できるように なった。 RaspberryPi Papilio/ZPU Arduino Android 32bit 32M/512M .NET Gadgeteer 32bit,168MHz 1M/192k Linux 32bit,96MHz 512k/64k GR-SAKURA 32bit,96MHz 1M/128k Electric Imp 32bit, mruby Squirrel IF誌FM3ボード 32bit,144MHz 1M/128k PSoC4 Pioneer Kit 32bit,24MHz 32k/4k ボード eLua PyMite 言語 3 ■マイクロコンピュータの規模での分類 小規模 中規模 linux搭載・クラウド連携 スクリプト系言語の使用 単純なON/OFF処理 アナログ信号の入出力 Arduino AVR Netduino、GR-Peach ARM Cortex-M Native 直接機械語に 翻訳して実行 Virtual machine スクリプトを(中間コードに変換して)直接実行 ネットワークへの接続 画像処理 RaspberryPi ARM Cortex-A C#、Python node.jsなど 非ネイティブ系 言語(Script) の台頭 進む ブラックボックス化 ■オブジェクト指向言語の組み込みデバイスでの使用例 例 C# で記述した .NET MicroFramework によるLED点滅 public class Program { public static void Main() { OutputPort LED0 = new OutputPort(FEZCerberus.Pin.PC4, false); while (true){ LED0.Write(true); Thread.Sleep(500); LED0.Write(false); Thread.Sleep(500); } } } ・タイマなどもnewして仮想的に作ることができる。 機種依存しない抽象的なプログラムを書くことができる。 反面ハードウェアとの関係が分かりにくくなる。 ・ライブラリーでサポートされないハードウェアはどうするか。 5 ■性能比較 最速繰り返し速度比較 ボード名 ArduinoUNO ArigG25 PioneerKit PapilioPro ESP8266 搭載CPU ATmega382P ARM9 PSoC4 ZPU Tencilica L106 搭載CPU クロック 16MHz 400MHz 24MHz 96MHz 80MHz 搭載OS なし Linux なし なし なし 記述言語 Arduino C Python C Arduino Arduino Lua 速度 (周波数) 120kHz 4MHz 450Hz 350kHz 570kHz 1.3MHz 1.7kHz C言語と同じではない。 関数呼び出しの分のオーバーヘッド。 搭載CPUの性能よりも 記述言語による差が大きく表れる。 スクリプト系言語は 非常に遅い。 while(1){ digitalWrite(n,LOW); digitalWrite(n,HIGHT); } 6 ■ポピュラな小中規模ボード ○Arduino 小規模での代表的なシステム。Arduinoは8ビットCPUのAVR ATmegaを使用している。AVR ATmegaの 性能は16MHzクロックであり、プログラムメモリもかなり小さいので単体での使用の場合、性能は限定される。 Arduinoは専用開発ツールを有するがその機能を限定することで導入の敷居を下げ、教育用だけでなくホビーや 異分野の人たちの利用が進んだ。多くのメーカがArduino準拠のCPUボード、周辺ボードを提供している。 ○mbed mbedはARM社がラピッドプロトタイピング用としてボードと開発環境を開発したもの。webコンパイラと豊富なラ イブラリを提供しさらに一般ユーザのWeb上の情報交換の場であるフォーラム等も提供されている。右図はWebコ ンパイラの画面でWebブラウザの中に一般的な統合開発環境が収まっているのがわかる。 ○.NET MicroFramework 搭載ボード .NET Frameworkの組み込み版の.NET MicroFramework が搭載ボード。C言語よりも生産効率がよいと されるC#で記述でき、ガジェッタと呼ばれるCPUや周辺ハードウェアの豊富な製品群が提供される。さらに標準で GUIがサポートとされる。 7 ■小型Linuxボード これまでも小型Linuxボードはあったが、最近のボードは I/O操作のスクリプト言語が用意されている。 リスト LED点滅プログラム(Python) import RPi.GPIO as GPIO import time GPIO.setmode( GPIO.BCM ) GPIO.setup( 25, GPIO.OUT ) while 1: GPIO.output( 25, True ) time.sleep( 1.0 ) GPIO.output( 25, False ) time.sleep( 1.0 ) ○RaspberryPi(写真左) 小型Linuxボードの中では最も普及しているのがRaspberryPiだろう。教育用途色が強く、日本語の文献も多 く存在する。その分、技術的は若干弱いところが指摘されていが、Model B+ 以降は改良されている。使用言語 についてはPythonを中心に使用することを想定している。リスト(右)にLED点滅のPythonプログラムを示す。ハー ドウェアの設定がライブラリでラップされており、簡便な記述で使用可能になっている。 ○BeagleBoneBlack(写真中央) BeagleBoneBlackは大手半導体メーカのTI社が開発した組み込みシステム技術者向けの教育用ボードであ る。RaspberryPiがPythonを主要言語と想定しているようにBeagleBoneBlackはNode.jsの使用を推奨して いる。Cloud9とよばれるNode.jsの統合開発環境やサンプルプログラムが試しやすい形で提供されている。 ○Galileo(写真右) IntelからもGalileoと呼ばれるIoTのソリューションの1つとしてのボードが提供されている。CPUにはx86系チップ が使用されている。新たなアプローチが盛り込まれている。そのうちの1つがArduinoの環境を取り込んだことである。 Galileoで最も注目すべき点はマイクロソフト社のVisualStudioとの親和性である。マイクロソフトのクラウドからデ バイスまでの一貫した開発環境の利用が期待できる。 8 ■安価になったWifi標準搭載のボード 多くのボードは ArduinoIDE が使用できる。開発ツールのデファクトスタンダード(?) ○Arduino YUN ArduinoにLinux部分を追加したボード。ArduinoとLinuxはハード的 にはシリアルで接続されArduinoからはBridgeライブラリを使用して利用 する。LinuxからArduino側を操作することもできる。 ○Netduino 3 WiFi .NET MicroFramework標準搭載のArduino準拠ボード。 そのWiFi搭載版。 ○Intel Edison ArmでなくIntelのCPUを搭載した小型Linuxモジュール。写真はArduinoのインターフェースを実現するためのドータボードの 上に搭載している。右図のようにArduinoIDEからもプログラムできる。 ○ESP8266モジュール 格安WiFi-シリアルブリッジとして注目されているが、小規模な32bitCPUを搭載しており、プログラムすることができる。 9 ArduinoIDEでの開発のための追加ライブラリ等も用意されつつある。 ■Wifi標準搭載のボード比較 同程度の価格であるが構成はかなり異なる。 EPS8266 RaspberryPi Arduino YUN Netduino 3 WiFi Edison Linux OpenWrt - Yocto - Debian Node.js △ - ○ -(Lua) ○ C#/.NET M.F. - ○ - - - CPU(net) MIPS AR9331 ARM Cortex M4 Intel Atom Tensilica L106(IP) ARM11 クロック 400MHz 168MHz 500MHz 80MHz 700MHz RAM 64MB 164KB 1GB(DDR3) 64+96KB 512MB Flash 16MB +SDCard 1408KB 4GB 512KB SDCard CPU(I/O) ATmega32u4 Intel Quark クロック 16MHz 100MHz RAM 2.5KB - Flash 32KB - 1 Model B 10 ■ YUN(雲)従来のArduinoの資産の継承を重視している(?) Arduinoの進化 CPUの強化 32bit化 サブシステムの追加 YUNなど 更に コンパクト、安価な Industrial 101 も発売された。 11 ■ YUN(雲) Linux側はpython2.7が初めから動いている。2行でhttpサーバが構築できる。 サーブするhtmlファイル等はホームディレクトリがデフォルトの場所になる。 12 ■ ESP8266 WiFi-シリアルブリッジとしてだけでなく、 ArduinoIDEやLuaを使ってマイコン として利用できる。 Luaを使ったプログラム例、 今までにない低価格のIoTデバイスが実現できる。 ArduinoIDEで プログラム可能 13 ■Node.js var var var var var var ブラウザからのLED制御(Node.js) http = require('http'); app = http.createServer(handler); sockio = require('socket.io'); io = sockio.listen(app); fs = require('fs'); bb = require('bonescript'); app.listen(8090); bb.pinMode('USR0', 'out'); io.sockets.on('connection', function (socket) { socket.on('led', function (data) { console.log(data); if (data == 'on') bb.digitalWrite('USR0', bb.HIGH); else bb.digitalWrite('USR0', bb.LOW); }); }); <html> <head> <script src = "/socket.io/socket.io.js"></script> <script> var socket = io.connect(); function ledOn(){ socket.emit('led', 'on'); } function ledOff(){ socket.emit('led', 'off'); } </script> </head> <body> <input type="button" name="on" id="onButton" value="on" onClick="ledOn();"> <input type="button" name="off" id="offButton" value="off" onClick="ledOff();"> </body> </html> function handler (req, res) { fs.readFile('sock14.html', function (err, data) { if (err) { res.writeHead(500); res.end('Error loading index.html'); } else{ res.writeHead(200); res.end(data); } }); } 操作側に 専用プログラムを 用意しなくても ブラウザだけで済む。 14