73
201838特定非営利活動法人 軽量Rubyフォーラム SCSK九州 株式会社

Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

2018年3月8日特定非営利活動法人 軽量Rubyフォーラム

SCSK九州 株式会社

Page 2: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

1. mrubyの概要・特徴

2. GR-PEACHでmrubyハンズオン

2Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Page 3: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の
Page 4: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

高い生産性で人気の言語Rubyの軽量版「mruby」

RAM200KB程度で動作

経済産業省「地域イノベーション創出研究開発事業」の

研究成果として2012年4月に

「mruby」を公開

商用利用しやすい

MITライセンスのOSS

Rubyの良さを組込み開発に...

4Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

https://github.com/mruby/mrubyにてソース公開

Page 5: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

require 'socket'

begin

sock = TCPSocket.open("192.168.1.1", 30000)

10.times {

sock.write("Hello!!")

}

sock.close

rescue => e

p e

end

#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!!";

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;

}

• 短いコード• 簡潔な記述• ポインタ操作なし• メンテナンス性が高い

• コードが長くなりがち• 処理が複雑になりがち• 危険なポインタ操作• メンテナンス性が低い

C言語(35行)

Ruby(10行)

高い生産性(例:ソケット通信処理)

5Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Page 6: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

mruby ≒ 軽量Ruby

PC向けの(巨大な)Rubyを軽量化

仮想マシンとコンパイラ

mruby用の仮想マシン(VM)でアプリ(バイトコード)を実行

C言語と相性バツグン

Cモジュールの呼び出し、Cアプリへの組込み

高い拡張性

ライブラリ(mrbgem)で容易にmrubyの機能を拡張

組込み開発に使える新言語「mruby」

6Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Page 7: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

mruby専用のコンパクトな仮想マシン「mruby VM」

バイトコードを実行(スクリプトよりコンパクトに)

軽量化してもRubyであるべき

ISO, JIS規格のRuby(1.9系)に準ずる言語仕様

Ruby 2.0系にも対応中

よりコンパクトに

7Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Page 8: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

環境依存させない

mrubyコアのコードは環境依存部を含まない

VM外部への影響を少なく

• グローバル変数を使用しない

• VM管理情報にmrubyアプリの全情報を格納

• インクリメンタルGCでシステム停止時間を短く

より多くの環境で使えるように

8Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Page 9: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

カスタマイズを容易に

mrbconf.h … 実行環境に合わせて最適化が可能

機能拡張を容易に

build_config.rb … mrubyに組み込む機能を定義

mrbgems … mrubyを拡張するクラスライブラリ

クロス開発を容易に

build_config.rb … クロスビルド方法をスクリプトで記述

toolchain … クロスビルドツールを定義

より使いやすく

9Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Page 10: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

コンパイラ言語

C言語との主従関係

RubyGemsとmrbgems

数値型の扱い

正規表現

扱える文字コード

カスタマイズ

Rubyとの相違点

10Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Page 11: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

Ruby mruby

• Rubyスクリプトのインタプリタ実行。

• mrubyスクリプトのインタプリタ実行。

• mrubyコンパイラでmrubyスクリプトをバイナリに変換。コンパイル結果のバイナリをmruby VMで実行。

コンパイラ言語

11Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Page 12: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

C言語との主従関係

12Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Ruby mruby

• RubyからC言語モジュールの呼び出しが可能( Rubyが主、C言語が従 )

• mrubyからC言語モジュールの呼び出しが可能( mrubyが主、C言語が従 )

• C言語アプリケーションからmrubyの呼び出しが可能( C言語が主、mrubyが従 )

Page 13: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

RubyGemsとmrbgems

13Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Ruby mruby

• Ruby拡張ライブラリフレームワーク(RubyGems)

• C言語またはRubyで機能拡張

• 実行時にライブラリを追加

• mruby拡張ライブラリフレームワーク(mrbgems)

• C言語またはmrubyで機能拡張

• ビルド時にライブラリを追加( 実行時のライブラリ追加はオプション )

Page 14: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

数値型の扱い (1)

14Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Ruby mruby

Numeric+--- Integer 整数型| +--- Fixnum int範囲内の数| +--- Bignum int範囲を超える数+--- Float 浮動小数型

• 演算結果がint型を超える場合はBignumに拡張される。

Numeric+--- Integer 整数型| +--- Fixnum int範囲内の数| Bignum対応なし+--- Float 浮動小数型

• 演算結果がint型を超える場合はFloatに拡張される。(有効桁数が減る)

Page 15: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

数値型の扱い (2)

15Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Ruby mruby

• 演算結果の数値型は演算する値の型 (Integer / Float)によって決定される。

• 演算結果の数値型は演算結果の値によって決定される。

irb(main):001:0> 1 / 2

=> 0

irb(main):002:0> 2 * 2.5

=> 5.0

irb(main):003:0>

> 1 / 2

=> 0.5

> 2 * 2.5

=> 5

>

Page 16: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

正規表現

16Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Ruby mruby

• 正規表現(Regexpクラス)を標準装備

• 正規表現エンジンは固定• 1.9以前 Oniguruma• 2.0以降 Onigumo

• 正規表現はオプション※mrbgemsで提供

• 正規表現エンジンを選択可能

• mruby-onig-regexp• mruby-pcre-regexp• mruby-pure-regexp• mruby-hs-regexp

Page 17: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

扱える文字コード

17Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Ruby mruby

• ASCII• UTF-8• Shift_JIS• EUC-JP• Windows-31J などなど...

• ASCII• UTF-8 (オプション)

Page 18: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

カスタマイズ

18Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Ruby mruby

• 実行環境用のバイナリを配布(ソースコードも入手可能)

• バイナリ提供のためカスタマイズ不能

• ソースコード配布(そのままでは使えない)

• ヘッダファイル、ビルドスクリプト修正によるカスタマイズが可能

Page 19: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

19Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Cコンパイラ・リンカ (gccなど)

GNU Bison

Ruby

git (必須ではないです)

これらがあれば動きます。

実際にやってみます!

mrubyのビルドに必要なもの

Page 20: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

mrubyデモ

20Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Page 21: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

21Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

マイコンでmrubyを動作させるには?

1. mruby開発環境を構築する

2. マイコン向けにmrubyをクロスビルドする

マイコン用のコンパイラ、リンカが必要

mrubyのカスタマイズが必要になるケースも...

3. マイコンアプリからmrubyを呼び出す

mruby VMをリンクして、mruby APIを呼び出す

さらっと書いてますが、2と3はそれなりに骨が折れます。

Page 22: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

22Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

mruby搭載マイコンボード (製品)

EAPL-Trainer mruby enzi

GR-CITRUS

◎ mrubyでGUIが使える△ mrubyのバージョンが古い△ RAM容量が少ない (64KB)

◎ 大容量RAM (1MB)○ Web開発環境△ mrubyバージョンが古い

◎ IDEサポート◎ 安価△ RAM容量が少ない (240KB)

Page 23: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

23Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

市販ボードでmrubyを動かす

Raspberry Pi Arduino

◎ Linuxが動作する△ 起動が遅い△ 消費電力大

◎ IDEサポート× RAM容量が少ない

(Max 96KB)

わざわざmruby使わなくても...

mrubyを載せるには絶望的なスペック

Page 24: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

24Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

市販ボードでmrubyを動かす

GR-PEACH

マイコン: RZ/A1H

Flash ROM: 8MBRAM: 10MB

ペリフェラル:USB, Ethernet, microSDソケット,

UART, GPIO, SPI, I2C, JTAG, ...

※mbed OS対応

mruby載せてみました!

十分なスペック

Page 25: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

25Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

GR-PEACHで動くmruby – “momo-mruby”

GR-PEACH

Page 26: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の
Page 27: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

27Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

GR-PEACH-Fullの外観 リセットボタン

USBポート(電源)

GPIOGPIOVcc, GND, ...

RGB LED

Ethernetポート

Page 28: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

28Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

momo-mrubyの入手方法

1. https://github.com/mimaki/momo-mruby

momo-mrubyソースコード

momo-mrubyのカスタマイズが可能

2. https://github.com/mimaki/momo-mruby-bin

momo-mrubyのファームウェア (バイナリ)

導入が簡単

こちらを使います!

Page 29: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

29Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

momo-mrubyの導入

1. momo-mrubyファームウェアの入手

https://github.com/mimaki/momo-mruby-bin

以下の手順は README_ja.md を参照

2. GR-PEACH起動

3. ファームウェアの書き込み

ファームウェア(momo-mruby.bin)の書き込み完了後は

momo-mruby.binは削除されるため、mbedドライブ上には

表示されません。

Page 30: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

30Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

momo-mrubyの導入

4. mrbc(.exe)のコピー

以下のディレクトリを作成し、momo-mruby-bin/bin に

含まれている mrbc(.exe) をコピーします。

Windowsの場合: C:¥momo

Macの場合: ~/momo

Page 31: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

31Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

ソフトウェアのインストール

1. 必要なソフトウェアの入手

以下のリンクページからダウンロードしてセットアップ

https://goo.gl/3qBFLo ※大/小文字区別あり

ソフトウェア Windows Mac

シリアルポートドライバ 必須 ー

CoolTerm (ターミナルソフト) 推奨 推奨

Visual Studio Code (エディタ) 任意 任意

Page 32: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

32Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

momo-mrubyでLチカ

include Plato # おまじない

led_r = LED.new(GPIO::LED1) # LEDオブジェクト生成

loop {

led_r.toggle # LED ON/OFF切替

Machine.delay(500) # 500ms待つ

}

momo/led.rb

Page 33: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

33Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Lチカアプリケーションの実行

1. mrubyソースコードのコンパイル

Windowsの場合

Macの場合

c:¥>cd ¥momo

c:¥momo>mrbc –o autorun.mrb led.rb

$ cd ~/momo

$ ./mrbc –o autorun.mrb led.rb

Page 34: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

34Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Lチカアプリケーションの実行

2. autorun.mrbをmicroSDにコピー

ルートディレクトリにコピーします。

3. microSDをGR-PEACHに装着

カチッと鳴るまで押し込みます。

抜くときは一度押し込んでロックを

解除してから抜き出します。

Page 35: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

4. USBケーブルを接続

外側のUSBポートにケーブルを接続するとGR-PEACHの電

源が入り、mrubyアプリケーションが実行されます。

35Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Lチカアプリケーションの実行

こちらに接続

LEDが赤色に点滅

Page 36: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

36Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

ターミナルソフト(CoolTerm)の起動

1. GR-PEACHをPCに接続した状態で以下を実行する

Windowsの場合: CoolTermWin¥CoolTerm.exe

Macの場合: CoolTermMac/CoolTerm.app

Page 37: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

37Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

ターミナルソフト(CoolTerm)の起動

2. Optionsから初期設定を行う(初回のみ)

Windowsの場合: COMxMacの場合: usbmodemXXXX

Page 38: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

38Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

momo-mrubyをmirbモードで起動

3. CoolTermのConnectをクリック

4. GR-PEACHのmicroSDカードを抜いてRESETボタンを押下

Page 39: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

39Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

momo-mrubyをmirbモードで起動

実行例:

Page 40: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

40Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

温度センサ ADT7410

アナログ・デバイセズ社製

温度精度: ±0.5℃ -40.0℃〜105℃

分解能: 0.0625℃ (13bitモード)

0.0078℃ (16bitモード)

I2C互換インタフェース

Page 41: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

41Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

ADT7410をGR-PEACHに繋ぐ

回路図

8 7 6 5 4 3 2 1

Page 42: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

42Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

参考:ブレッドボード

ブレッドボードは、赤線で示す穴同士が金属で接続されています。接続されている同士の穴に電子部品の端子を差し込むことで、電流の流れる経路(回路)を作ることができます。

Page 43: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

43Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

参考: GR-PEACHピンマップ

※ルネサスHPより転載

Page 44: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

44Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

ADT7410クラスを作る

class ADT7410

include Plato

def initialize

@i2c = I2C.open(0x48)

end

def read

t = @i2c.read(0x00, 2)

t = (t[0] << 8 | t[1]) >> 3

t -= 8192 if t >= 0x1000

return t / 16.0

end

end

momo/adt7410.rb

Page 45: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

1. コンパイル

2. autorun.mrbをmicroSDにコピー

3. microSDをGR-PEACHに装着

4. GR-PEACHを起動(or RESET)

mirbが起動します。

45Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

ADT7410クラスを使って温度計測

c:¥momo>mrbc –o autorun.mrb adt7410.rb

$ ./mrbc –o autorun.mrb adt7410.rb

Page 46: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

46Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

ADT7410クラスを使って温度計測

実行(mrib)

> adt = ADT7410.new

=> #<ADT7410:0x20054de8 ...

> adt.read

=> 27.8125

> adt.read

=> 28

>

Page 47: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

47Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

ADT7410クラスの解説

class ADT7410 # ADT7410クラスを定義

include Plato # Plato名前空間を利用

def initialize # コンストラクタ(newで呼び出す)

@i2c = I2C.open(0x48) # I2C通信オブジェクトの初期化

end # 0x48はADT7410のデバイスアドレス

def read # readメソッド

t = @i2c.read(0x00, 2) # ADT7410から2バイト読み込む

t = (t[0] << 8 | t[1]) >> 3 # 13bitデータを温度に変換

t -= 8192 if t >= 0x1000 # ※ ADT7410のデータシート参照

return t / 16.0 # 計算結果(摂氏温度)を返す

end

end

momo/adt7410.rb

Page 48: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

48Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLE – Bluetooth Low Energy

Bluetooth 4.0の拡張機能の一つ

2.4GHz帯の電波で最大1Mbpsの通信速度

低電力での通信が可能

Page 49: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

1. BLE Scannerのインストール

お手持ちのスマートフォンにBLE Scannerをインストール

します。

スマートフォンをお持ち出ない方は近くの席の方に見せても

らってください。49Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEを使うための準備

Page 50: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

2. BLE Scannerの起動確認

50Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEを使うための準備

BLEデバイスが一覧表示されます。

Page 51: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

51Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLE通信モジュール RN4020

マイクロチップ社製

Bluetooth v4.1対応

XBeeインタフェース

シリアルインタフェース

技適認証取得済み

Page 52: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

52Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

RN4020をGR-PEACHに繋ぐ

回路図

8 7 6 5 4 3 2 1

Page 53: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

53Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEクラスライブラリ(簡易版)の入手

以下のURLにアクセスし、ble.rbをダウンロードする。

https://goo.gl/nBM2Xj

※ momo/ble.rbとして保存する

Page 54: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

54Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEクラス仕様 (BLE.new)

BLE.new(name)

name: デバイス名

戻り値: BLEオブジェクト

機能概要:BLE(RN4020)を初期化してBLEオブジェクトを

返します。

GATT(Generic ATTribute)プロファイルのバッ

テリーサービスを有効にします。

Page 55: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

55Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

GATTプロファイル

GATT(Generic ATTribute)

BLEにおける標準フォーマット

RN4020がサポートするサービス

デバイス情報

バッテリー

心拍数

体温計

血圧 などなど...

GATT Server

Service

Service宣言attribute

Characteristic

Characteristic宣言attribute

Characteristic Value attribute

Descriptor

Page 56: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

56Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEクラス仕様 (BLE#battery=)

BLE#battery = x

x: バッテリレベル (%)

機能概要:バッテリーレベルを設定します。

Page 57: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

1. コンパイル

2. autorun.mrbをmicroSDにコピー

3. microSDをGR-PEACHに装着

4. GR-PEACHを起動(or RESET)

mirbが起動します。

57Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEクラスを使ってみる

c:¥momo>mrbc –o autorun.mrb ble.rb

$ ./mrbc –o autorun.mrb ble.rb

Page 58: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

58Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEクラスを使ってみる

> ble = BLE.new('BLE_MIMAKI_')

=> #<BLE:0x20054708 ...

> ble.battery=100

=> 100

> ble.battery=90

=> 90

>

分かりやすいユニークな名前を指定してください。

実行例(mrib)

Page 59: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

BLE Scannerでバッテリーサービスを確認する (iOS)

59Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEクラスを使ってみる

バッテリーサービスが表示されます。

ble.battery=xxで値が更新されます。BLEデバイス一覧のから

自分のデバイスを選択しConnectする。

Page 60: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

BLE Scannerでバッテリーサービスを確認する (Android)

60Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEクラスを使ってみる

BLEデバイス一覧から自分のデバイスを選択しCONNECTする。

バッテリーサービスが表示されます。

ble.battery=xx で値が更新されます。Rをタップ: 最新値の更新Nをタップ: 値の自動取得

Page 61: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

61Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEクラス仕様 (BLE#start_custom_service)

ble.start_custom_service(size)

size: カスタムサービスのデータサイズ

戻り値: なし

機能概要:BLE(RN4020)にGATTプロファイルのカスタム

サービス(Private Service)を登録します。

sizeで指定されたバイト数のデータが保持でき

ます。

Page 62: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

62Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEクラス仕様 (BLE#chardata=)

ble.chardata = x

x: カスタムサービスデータに設定する値

戻り値: 設定値

機能概要:BLE(RN4020)にGATTプロファイルのカスタム

サービス(Private Service)に値を設定します。

start_custom_serviceで指定したサイズを超え

るデータは無視されます。

Page 63: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

63Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEクラスを使ってみる

実行例(mrib)

> ble = BLE.new('BLE_MIMAKI_')

=> #<BLE:0x20054708 ...

> ble.start_custom_service(8)

=> ["Reboot", "¥000", "CMD"]

> ble.chardata='Hello'

=> ["Hello"]

>

8バイトデータを登録

Page 64: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

BLE Scannerでカスタムサービスを確認する (iOS)

64Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEクラスを使ってみる

カスタムサービスが表示されます。 ble.chardata=xx

で値が更新されます。

BLEデバイス一覧のから自分のデバイスを選択しConnectする。

Page 65: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

BLE Scannerでカスタムサービスを確認する (Android)

65Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEクラスを使ってみる

BLEデバイス一覧から自分のデバイスを選択しConnectする。

カスタムサービスが表示されます。

ble.chadata=xxで値が更新されます。Rをタップ: 最新値を取得Nをタップ: 値の自動取得

Page 66: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

カスタムサービスが表示されない場合は...

66Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

BLEクラスを使ってみる

バッテリーサービスが表示される場合があります。

以下の操作をお試し下さい。• BLE Scannerのアプリを再起動する• スマートフォンのBluetoothを無効化

して有効に戻す

Page 67: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

67Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

温度をBLEでスマホに通知してみる

温度センサ(ADT7410)で温度を計測し、BLE(RN4020)のカス

タムサービスを使用してスマホに送信する。

Page 68: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

68Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

温度をBLEでスマホに通知してみる

adt = ADT7410.new # 温度センサオブジェクト生成

ble = BLE.new('BLE_MIMAKI_') # BLEオブジェクト生成

ble.start_custom_service(8) # BLEカスタムサービス登録

loop {

temp = adt.read # 温度計測

puts temp # 温度値を表示

ble.chardata = temp # カスタムデータに温度値を設定

Plato::Machine.delay(2000) # 2秒待ち

}

momo/tempble.rb

Page 69: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

1. コンパイル

2. autorun.mrbをmicroSDにコピー

3. microSDをGR-PEACHに装着

4. GR-PEACHを起動(or RESET)

69Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

温度をBLEでスマホに通知してみる

c:¥momo>mrbc –o autorun.mrb adt7410.rb ble.rb

tempble.rb ※1行で入力します

$ ./mrbc –o autorun.mrb adt7410.rb ble.rb

tempble.rb ※1行で入力します

Page 70: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の
Page 71: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

71Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

GR-PEACHで動くmruby – “momo-mruby”

GR-PEACH

https://github.com/mimaki/momo-mrubyhttps://github.com/mimaki/momo-mruby-bin• mruby-1.3.0搭載• mruby IoT framework – Plato 対応

価格 ¥9,690-(秋月電子)

Page 72: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

組込みアプリケーションに組み込める

• C/C++と戦わなくても組込みアプリが作れる

• C/C++モジュールが呼び出せるので安心

• C/C++で苦手な処理はmrubyで書けば簡単に実現

アプリケーションに組み込める

• アプリケーションをmrubyで機能拡張

• アプリケーションをRubyスクリプトで制御したり...

• DSLっぽく使ってアプリの構成を記述したり...

色々なところに組み込める「mruby」

72Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.

Page 73: Mruby基本研修 - 福岡県Ruby・コンテンツビジネス …高い生産性で人気の言語Rubyの軽量版「mruby」 RAM200KB程度で動作 経済産業省「地域イノベーション創出研究開発事業」の

73Copyright(C) 2017-2018 mruby Forum, SCSK KYUSHU CORP.