本研修について mruby 概要 mruby IoT フレームワーク Plato mruby ポーティング mruby ポーティング環境への Plato の適用 2

Similar documents
Mruby基本研修

7th CodeGear Developer Camp

2014 年 11 月 20 日 ET2014 スペシャルセッション C-2 mruby プログラム言語 Ruby による組込みソト開発 九州工業大学田中和明 軽量 Ruby フォーラム Ruby アソシエーション

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

<4D F736F F F696E74202D20834A815B836C838B835C815B835882CC95E082AB95FB F4B2E B8CDD8AB B83685D>

AN1609 GNUコンパイラ導入ガイド

利用者

Visual Studio with Cordova クロスプラットフォーム開発の全貌

S2Pradoの紹介

IntroductionForGR-PEACH.pptx

日本アンドロイドの会 四国支部 Kickoff ミーティング in ABC2009

PNopenseminar_2011_開発stack

Microsoft PowerPoint _2.プログラミングの基礎_final.pptx

多言語ドメイン名の実装 mdnkit 石曽根信 ( 株 ) SRA 2001/12/04 日本語ドメイン名解説 / mdnkit 1 mdnkit 多言語ドメイン名を扱うためのツールキット 正規化 エンコード変換等を提供するライブラリとコマンド 既存アプリケーシ

Microsoft PowerPoint _2.プログラミングの基礎_final

PGRelief C/C++ 強化ポイント説明書

SpeC記述のC記述への変換 (SpecCによるソフトウェア記述の実装記述への変換)

スライド 1

組込みLinuxシステムに関する調査研究

インテル(R) Visual Fortran コンパイラ 10.0

1. 開発ツールの概要 1.1 OSS の開発ツール本書では OSS( オープンソースソフトウェア ) の開発ツールを使用します 一般に OSS は営利企業ではない特定のグループが開発するソフトウェアで ソースコードが公開されており無償で使用できます OSS は誰でも開発に参加できますが 大規模な

appli_HPhi_install

改訂履歴 改訂日付 改訂内容 2014/11/01 初版発行 2017/01/16 Studuino web サイトリニューアルに伴う改訂 2017/04/14 Studuino web サイトリニューアルに伴うアクセス方法の説明変更 2018/01/22 Mac 版インストール手順変更に伴う改訂

「RAD Studio XE5によるマルチ言語/マルチデバイス開発の進め方」

Studuino ライブラリ環境設定Windows編

MP:eMeeting インストールマニュアル Version /06/30 株式会社デジタル ウント メア

TRQerS - Introduction

ユーザーズマニュアル

ArcGIS Runtime SDK for WPF インストールガイド (v10.2.5)

PowerPoint プレゼンテーション

5-3- 基統合開発環境に関する知識 1 独立行政法人情報処理推進機構

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

BricRobo V1.5 インストールマニュアル

memo

7th CodeGear Developer Camp

NEC Express5800 シリーズ COBOL Enterprise Edition クライアントライセンス V1 COBOL Enterprise Edition クライアントライセンス V1 (1 年間保守付き ) COBOL Enterprise Edition クライアントライセンス

PowerPoint Presentation

通信プログラムの試作ーーー UDP を用いたじゃんけんゲームシステム ーーーー裘彬濱 南山大学情報理工学部 ソフトウェア工学科青山研究室

Fortran 勉強会 第 5 回 辻野智紀

メール全文検索アプリケーション Sylph-Searcher のご紹介 SRA OSS, Inc. 日本支社技術部チーフエンジニア Sylpheed 開発者 山本博之 Copyright 2007 SRA OSS, Inc. Japan All right

mruby ( ) mruby (CRuby ) mruby mruby (git, github, fork, pull request) mruby mruby 2

Source Insight

使用する前に

PowerPoint Presentation

PCL6115-EV 取扱説明書

日本アンドロイドの会 四国支部 Kickoff ミーティング in ABC2009

Apache-Tomcat と 冗長な UTF-8 表現 (CVE 検証レポート ) 2008 年 08 月 26 日 Ver. 0.1

V5.0 V4.2 から V5 への 変更点 1.1 版 2010 年 03 月 26 日

PowerPoint プレゼンテーション

Prog1_10th

AquesTalk for WinCE プログラミングガイド

Application Note Application Note No. ESC-APN 文書番号 : ESC-APN Tcl link library インストールガイド はじめに Tcl link library インストールガイド ( 以下 本書 ) では Act

ウェブデザイン技能検定 1 級実技 平成 28 年度 第 4 回 ウェブデザイン技能検定 1 級 実技試験概要 試験にあたっての注意事項 試験者は本試験の留意事項 注意事項に留意して作業を行うこと ペーパー実技試験は 課題 1 から 5 までの 5 課題を 60 分間で行うこと 作業実技試験は 課題

Intel Integrated Performance Premitives 4.1 Linux

ログイン時の ID パスワードは マイページ と同一です インストール前の状態の場合 ログイン後に表示されるページの ライセンス一覧 に該当製品シリアルの表示はされません インストール完了後 ライセンス管理ページご利用シリアルの一覧が表示されます 以上でライセンス管理ページの作成は完了です なお セ

TOPPERS活用アイデア・アプリケーション開発

講習No.9

プログラミング基礎

軽量Rubyのご紹介と 軽量Rubyフォーラムのご案内

PowerPoint プレゼンテーション

NEC COBOL Enterprise Edition Developer クライアントライセンス V2.0 COBOL Enterprise Edition Developer クライアントライセンス V2.0 (1 年間保守付 ) COBOL Enterprise Edition Develo

SOC Report

Studuinoライブラリ環境設定Mac編

Microsoft Word - 13_ver6_Win7SP1.doc

PowerPoint プレゼンテーション

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

Windows Embedded Community Day 第 5 回 - IoT がもたらす新しい社会と変化 - ドライバ開発から Azure 接続まで - Windows Embedded Community Day 株式会社デバイスドライバーズ日高亜友

C C UNIX C ( ) 4 1 HTML 1

Java言語環境Java2SEついて

Maple 12 Windows版シングルユーザ/ネットワークライセンス

文字コード略歴 よこやままさふみ社内勉強会 2012/05/18 文字コード略歴 Powered by Rabbit 2.0.6

Java Bridgeを利用した他言語によるデータロード&プロットデモ

24th Embarcadero Developer Camp

Intel MPI Library Linux

COBOL EE開発環境 ご紹介資料

環境セットアップ

ルネサス半導体セミナースケジュール

スライド 1

C#の基本

AquesTalk Win Manual


目次 1. Serverspec とは 1.1. Serverspecとは 1.2. Serverspecで出来る事 2. セットアップ 2.1. 必要なもの 2.2. インストール 3. デモ 3.1. デモ環境について 3.2. テスト対象サーバーの登録 3.3. サンプルテストの中身 3.4.

第 1 章 : はじめに RogueWave Visualization for C++ の Views5.7 に付属している Views Studio を使い 簡単な GUI アプリケーションの開発手順を紹介します この文書では Windows 8 x64 上で Visual Studio2010

講習No.1

目次 1. はじめに 本書対象者 PALRO のアプリケーションについて Ubuntu 8.04LTS の入手について Linux 上での開発環境の構築 事前準備 Ubuntu のインストール..

Microsoft Word - 15_ver6_WS2008R2SP1.doc

Maple 18 ネットワーク版インストール手順

FUJITSU Cloud Service for OSS 認証サービス サービス仕様書

プログラミング及び演習 第1回 講義概容・実行制御

AquesTalk プログラミングガイド

Microsoft PowerPoint - Session4古賀様.ppt

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

Microsoft Word - 【第5分科会】ConcolicTestingグループ_付録_修正_ doc

PCI-Express ハード IP を使用した DMA の実現 for Cyclone V GT FPGA 開発キット(ソフトウェア編)

Microsoft PowerPoint - 1_コンパイラ入門セミナー.ppt

Fujitsu Standard Tool

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

統合開発環境CubeSuite+ V へのバージョンアップのお知らせ

Transcription:

mruby IoT framework Plato と mruby のポーティング研修テキスト 特定非営利活動法 軽量 Ruby フォーラム 1

本研修について mruby 概要 mruby IoT フレームワーク Plato mruby ポーティング mruby ポーティング環境への Plato の適用 2

mruby 概要 Ruby を省リソース化した mruby の概要 特徴 3

mruby とは 高い生産性で人気の言語 Rubyの軽量版 mruby RAM サイズ 200KB 程度で動作可能 組込み機器にも搭載可能 経済産業省 地域イノベーション創出研究開発事業 の研究成果として2012 年 4 月に mruby を公開 商 利 しやすい MIT ライセンスの OSS http://github.com/mruby/mruby にてソース公開 4

Ruby の高い生産性 ソケット通信の実装例 #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> int main(void) { int sock; int i; struct sockaddr_in svaddr; const char msg[] = "Hello!!"; C 言語 (35 行 ) if ((sock = socket(pf_inet, SOCK_STREAM, IPPROTO_TCP)) < 0) { puts("socket() failed."); return 1; } memset(&svaddr, 0, sizeof(svaddr)); svaddr.sin_family = AF_INET; svaddr.sin_addr.s_addr = inet_addr("192.168.1.1"); svaddr.sin_port = htons(30000); if (connect(sock, (struct sockaddr*)&svaddr, sizeof(svaddr)) < 0) { puts("connect() failed."); exit(2); } for (i=0; i<10; i++) { if (send(sock, msg, strlen(msg), 0)!= strlen(msg)) { puts("send() failed."); exit(3); } } close(sock); return 0; } require 'socket' begin sock = TCPSocket.open("192.168.1.1", 30000) 10.times { sock.write("hello!!") } Ruby sock.close rescue => e (10 行 ) p e end コードが長くなりがち 処理が複雑になりがち 危険なポインタ操作 メンテナンス性が低い 短いコード 簡潔な記述 ポインタ操作なし メンテナンス性が高い 5

mruby の特徴 ISO, JIS 規格のRubyに準ずる言語仕様 本家 Ruby と同様に使える コンパクトな処理系 mruby VM mrubyコンパイラが出 するバイトコードを実 VMさえ動作すればどんな環境でも動作可能 Windows, Mac, Linux, ITRON, Android, ios... C/C++ 言語との高い親和性 組込みシステムの資産が再利 可能 アプリケーションにmrubyを組込み可能 6

補足 : Ruby と mruby インタプリタ言語 Ruby C 言語モジュールの呼び出しが可能 実行時に RubyGems で機能拡張が可能 Integer 同士の演算 Integer Float 同士の演算 Float 非常に大きな整数値は Bignum で扱われる 正規表現を標準装備 ASCII, Shift_JIS, UTF-8など様々な文字コードが利用可能 バイナリ配布 ( ソースコードも入手可 ) mruby インタプリタ言語 / コンパイラ言語 C 言語モジュールの呼び出し C 言語からの呼び出しが可能 ビルド時に mrbgems で機能拡張が可能 mrbgemsとrubygemsとは互換性なし 演算結果が整数値 Integer 演算結果が浮動小数値 Float 非常に大きな整数値は Float で扱われる 正規表現はオプション 複数から選択可能 文字コードは ASCII, UTF-8のみ利用可能 UTF-8はオプション ソースコード配布 容易にカスタマイズ可能 7

mruby を支えるコミュニティ オープンソースコミュニティ 3,700 人超のフォロワーオープンソースとして成 200 人以上のコントリビュータ Creative 7,700 件を超える改良 修正 https://github.com/mruby/mruby (mruby 公開サイト ) Powerful NPO 軽量 Ruby フォーラム ワーキンググループによる活動 セミナー 講演会等での広報活動 福岡県からの支援 http://forum.mruby.org ( 軽量 Ruby フォーラムサイト ) 会員募集中!! 会員企業による商業ベースでの利 推進 実用化 ビジネス利 ノウハウ 8

IoT/M2M 時代の新言語 - mruby ものとインターネット ものとものが繋がる 全てのものがネットワークに繋がっていく 組込み分野もフロンティア領域を重点分野として新しい市場が形成されていく これに対応した組込み開発が必須になっていく 経済産業省組込み開発の今後 資料より 9

Plato - mruby IoT framework - mruby IoT フレームワーク Plato の概要 10

mruby IoT framework Plato Plato (仮) - mruby IoT framework NEDO助成事業 組込みシステムの 効率開発を可能とする開発 フレームワークの研究開発 にて開発中 2017/2 九州工業大学 有明工業高等専門学校 SCSK九州 mrubyによるiot製品開発の効率化 マイコンボードとシームレスに繋がる統合開発環境の提供 組込み向けセキュリティ機能の提供 White-Tiger センサボード Plato IDE 11

Plato で出来ること mruby による IoT 製品開発の効率化 組込み向けデバイスクラスライブラリの提供 BLE WiFi ZigBee など様々な通信方式にも対応 典型的なアプリケーションの雛形を自動生成 (Rails のように ) シミュレータによる PC 上でのシミュレーション 12

Plato で出来ること mruby ボード (enzi) + センサボード (White-Tiger) 汎用 IO デジタル / アナログIO UART I 2 C SPI センサ 温度 湿度 照度 通信デバイス BLE Wi-Fi ZigBee Ethernet ファイルシステム RTC 13

Plato で出来ること Plato IDE Visual Studio Code ベースの開発環境 ( マルチ環境に対応 ) アプリ構成 使用ライブラリを GUI で指定 アプリケーションのコンパイル アプリケーションのシミュレーション実 マイコンへのプログラム書き込み 14

Plato で出来ること セキュリティ機能 Plato Guard IoT 時代に必要となるセキュリティ機能をオプションで提供 認証機能による不正アプリケーション実 の防 ( 外部からの攻撃 乗っ取りから守る ) 暗号化による実 モジュール秘匿化 ( アプリケーション資産の漏洩を防ぐ ) 15

Plato が目指すところ rduino よりも簡単に組込み開発を mruby(ruby) でプログラミングできる 多くのマイコンボードに対応 ( バイトコード互換 ) 必要なデバイスに応じて VM をカスタマイズできる mruby/cにも対応予定 ( サイズ 省電 ) 16

mruby ポーティング マイコンボードへの mruby 適用 17

mruby ポーティング mruby ポーティングのために必要なこと mruby ビルド環境の構築 mruby のクロスビルド ターゲットアプリへの mruby 組込み 18

mruby ビルド環境の構築 mruby ビルド環境の構築 以下の環境を準備する 開発 OS Microsoft Windows Mac これら以外の OSも利 可能であるが 本書ではこれら2つに限定して紹介する 本家 Ruby Cコンパイラ GNU Bison git 19

mruby ビルド環境の構築 本家 Ruby の導入 Windows の場合 下記サイトよりRubyInstallerをダウンロードし 最新版のRuby 環境インストールする (Ruby 2.0 以降を推奨 ) https://rubyinstaller.org/ Macの場合 Mac OS にプリインストールされている Ruby が利 可能 20

mruby ビルド環境の構築 C コンパイラの導入 Windows の場合 Cコンパイラを含むC 言語開発環境をインストールする 利 可能な C 語開発環境の 例 Microsoft Visual Studio gcc (MinGW) gcc (Cygwin) Mac の場合 X Code および Command Line Toolsをインストールする 21

mruby ビルド環境の構築 GNU Bison の導入 Windows の場合 下記サイトよりBisonのインストーラをダウンロードしセットアップする http://gnuwin32.sourceforge.net/packages/bison.htm Mac の場合 以下のコマンドを実 してBisonをインストールする brew install bison 22

mruby ビルド環境の構築 git の導入 Windows の場合 下記サイトよりgit for Windowsのインストーラをダウンロードしセットアップする https://git-for-windows.github.io/ Mac の場合 以下のコマンドを実 してgitをインストールする brew install git 23

mruby ビルド環境の構築 mruby のビルド 1. mruby ソースコードの入手とビルド以下のコマンドを実 し mrubyソースコードを入手し ビルドする cd < 任意のディレクトリ > git clone https://github.com/mruby/mruby cd mruby make 2. 以下のコマンドを実 し mruby のバージョン情報が表示されれば正しくビルドされている cd bin./mruby --version (Windows の場合は./ は不要 ) 24

mruby のクロスビルド mruby クロスビルドで必要な作業 ターゲットボード用ツールチェインの入手 ビルドスクリプトの記述 25

mruby のクロスビルド ターゲットボード用ツールチェインの入手 ターゲットボード向けのソフトウェア開発に必要なツールチェイン ( コンパイラ リンカなどのセット ) をセットアップする 例えば ARMプロセッサ であれば以下のツールチェインが利 可能 GNU ARM Embedded Toolchain https://launchpad.net/gcc-arm-embedded 26

mruby のクロスビルド ビルドスクリプトの記述 mruby のビルド構成はビルドスクリプト (build_config.rb) に記述されている ターゲットボード向けにクロスビルドするには build_config.rbにクロスビルド用の記述を追加する必要がある build_config.rb の概要 MRuby::Build.new do conf end MRuby::Build.new('host-debug') do conf end MRuby::Build.new( test') do conf end MRuby::Build.new( bench') do conf end MRuby::CrossBuild.new('hoge') do conf end ホスト ( 開発環境 ) 用のビルド構成 build/host デバッガ unit テスト ベンチマーク用のビルド構成 build/host-debug build/test build/bench 追加するターゲット用のクロスビルド構成 build/ ターゲット名 27

mruby のクロスビルド ビルドスクリプトの記述 build_config.rb に追加するクロスビルド の記述例を以下に す MRuby::CrossBuild.new('hoge') do conf toolchain :gcc conf.linker.flags << -m32 conf.cc do cc cc.command = 'arm-none-eabi-gcc' cc.flags = [] cc.flags << '-mcpu=cortex-m4 cc.flags << '-std=gnu99 cc.flgas << -mfpu=fpv4-sp-d16 mfloat-abi=soft # 省略 end conf.bins = [] conf.gem :core => 'mruby-print' conf.gem :git => https://github.com/mattn/mruby-json.git' # 省略 end リンカオプション コンパイラオプション 使用する mrbgems( ライブラリ ) 使用するツールチェインの定義は tasks/toolchain 内に定義することで再利 が可能となる 詳細は mrubyのドキュメントを参照のこと 28

mruby のクロスビルド クロスビルド実 build_config.rb へのクロスビルド定義の追加が終わったら mruby をリビルドすることでmrubyのクロスビルドが実施される cd mruby make clean all ターゲット名を hoge とした場合は クロスビルドによって 以下の mruby スタティックライブラリが生成される mruby/build/hoge/lib/libmruby.a 29

mruby のクロスビルド ターゲットアプリへの mruby 組込み クロスビルドで作成した libmruby.a をターゲットアプリケーションにスタティックリンクすることで ターゲットアプリケーションにmrubyを組み込むことができる ターゲットアプリケーションからmrubyを呼び出すためには mruby の C API を使用する ターゲットアプリケーションからのmrubyの呼び出し例を以下に す 30

mruby のクロスビルド ターゲットアプリへの mruby 組込み ターゲットアプリ (main.c) と C 言語側から呼び出す mruby アプリ (app.rb) の例を以下に す main.c #include mruby.h #include mruby/irep.h #include <stdio.h> void main(void) { extern uint8_t appbin[]; mrb_state *mrb = mrb_open(); mrb_value v; } v = mrb_load_irep(mrb, appbin); puts(mrb_string_value_cstr(mrb, v)); mrb_close(mrb); mruby VMの初期化 mruby アプリケーションの実行 mruby VM の終了 app.rb Hello, mruby! 31

mruby のクロスビルド ターゲットアプリへの mruby 組込み 以下のコマンドで mruby アプリケーションをコンパイルする mrbc Bappbin o app.c app.rb main.c 上記コンパイル結果(app.c) をコンパイルし 前述の libmruby.a と共にリンクすることで mruby を追加したターゲットアプリケーションが完成する ターゲットボード上で実 し ターミナルソフトなどで Hello, mruby! の表示を確認することで mruby の動作を確認できる 32

mruby ポーティング環境への Plato適用 マイコンボード向け Plato カスタマイズ 33

mruby ポーティング環境への Plato 適用 Plato のボード対応に必要なこと mruby IoT framework Plato を新たなターゲットボードに対応させるためには以下が必要となる Plato IDE へのターゲットボード登録 デバイス I/F 層ライブラリの実装 34

mruby ポーティング環境への Plato 適用 Plato IDE へのターゲットボード登録 Plato IDE にターゲットボードを追加するには 以下の情報が必要となる ターゲットボード名 ターゲットボード ID ターゲットボード IDはライブラリの識別 としても使 されるため 一意な名称を指定する必要がある 35

mruby ポーティング環境への Plato 適用 デバイス I/F 層ライブラリの実装 Plato が提供するライブラリ群は mruby ライブラリ (mrbgems) 形式で実装されている Plato 提供ライブラリ群のうち デバイスI/F 層のライブラリは動作環境毎に提供される ターゲットボードを追加する場合には ターゲットボードのデバイス I/F 層ライブラリを実装 提供する必要がある 提供するライブラリは以下の命名規則に従う必要がある mruby-plato-xxxxx-< デバイス ID> Plato アプリケーションでライブラリ mruby-plato-xxxxx を使用する場合に デバイスIDを名称に付加したターゲットボード用のライブラリ mruby-plato-xxxxx-< デバイスID> が自動的に追加登録される 36

mruby ポーティング環境への Plato 適用 デバイス I/F 層ライブラリの実装 参考までに enzi ボード用に提供されているデバイス I/F 層ライブラリの一覧を示す ライブラリ mruby-plato-analogio-enzi mruby-plato-digitalio-enzi mruby-plato-gpio-enzi mruby-plato-i2c-enzi mruby-plato-machine-enzi mruby-plato-serial-enzi mruby-plato-spi-enzi 内容アナログI/Oライブラリデジタル I/O ライブラリ GPIOライブラリ I 2 Cライブラリマシンライブラリ (delay 等 ) 必須シリアル (UART) I/Fライブラリ SPIライブラリ これらのうちマシンライブラリは必須であるが それ以外は必要に応じて実装すれば良い 37

mruby ポーティング環境への Plato 適用 デバイス I/F 層ライブラリの Plato への登録 作成したデバイスI/F 層ライブラリをPlatoに登録するには ライブラリリストファイルを作成する必要がある ライブラリリストファイルは以下に示すような JSON 形式で記述し ファイル名を mgem-< デバイスID>.lst とする必要がある ライブラリリストファイルの例 (mgem-hoge.lst) { mrbgems: [ { name : mruby-plato-machine-hoge, descriptrion : PlatoHoge::Machine class, author : mruby developers, license: MIT, repository : https://github.com/hoge/mruby-plato-machine-hoge, dependencies : [ { name : mruby-plato-machine } ] ]} 38

mruby & Plato まとめ 39

Plato に出来ること mruby アプリケーションが簡単に作れる アプリケーションの形式 使用するライブラリ等を詳細に設定可能 ビルド プログラム転送可能な IDE IoT サービスとの連携 シミュレーション実 40

まとめ 組込みで使える新言語 mruby Ruby らしさはそのままに軽量化 色々なところに組み込める C/C++ と戦わなくても組込みアプリが作れる mruby IoT フレームワーク Plato 簡単に素早くアプリ作成 アイデアさえあればアプリ開発可能 IoT/M2M のプロトタイピングが可能 41

http://plato.click おつかれさまでした 42