40
2014.03.15 初音玲 LEGO MINDSTORMS EV3 API

LEGO MINDSTORMS EV3 API

Embed Size (px)

DESCRIPTION

LEGO MINDSTORMS EV3 APIであるLego.EV3の使い方をわかりやすく説明します!

Citation preview

Page 1: LEGO MINDSTORMS EV3 API

2014.03.15初音玲

LEGO MINDSTORMS EV3 API

Page 2: LEGO MINDSTORMS EV3 API

自己紹介▷お仕事の略歴

•システム企画

•インフラ構築

•業務アプリ構築

• DB設計、構築、各種支援

▷お仕事外の略歴

• Microsoft MVP for Developer Tools (2008/04-14/03)

• Oracle ACE (2008/04-:日本で2人目)

Page 3: LEGO MINDSTORMS EV3 API

はじめてシリーズ

▷はじめてのVC#2012

Page 4: LEGO MINDSTORMS EV3 API

Kinect本 監修▷本文

•日本語訳

▷サンプル

•ローカライズ済

Page 5: LEGO MINDSTORMS EV3 API

連載中▷

•新型Kinect for Windows v2 Developer Previewプログラミング入門http://www.buildinsider.net/small/kinect2dp/

• Xbox One速報http://www.buildinsider.net/consumer/xboxonekinect/

Page 6: LEGO MINDSTORMS EV3 API

EV3

Page 7: LEGO MINDSTORMS EV3 API

ハードウェア

インテリジェントブロックEV3

モーター モーター

超音波

カラー

ジャイロ

タッチ

Page 8: LEGO MINDSTORMS EV3 API

ソフトウェア

Page 9: LEGO MINDSTORMS EV3 API

EV3とWindows 8.1の接続

Page 10: LEGO MINDSTORMS EV3 API

接続

EV3ソフトウェア

EV3Windows XP

Windows VistaWindows 7Windows 8

Windows 8.1Mac OS 10.6Mac OS 10.7Mac OS 10.8

USB

WiFi

Bluetooth LE

Page 11: LEGO MINDSTORMS EV3 API

プログラミング

EV3ソフトウェア

EV3Windows XP

Windows VistaWindows 7Windows 8

Windows 8.1Mac OS 10.6Mac OS 10.7Mac OS 10.8

USB

WiFi

Bluetooth LE

Page 12: LEGO MINDSTORMS EV3 API

リアルタイム操作

Windowsストアアプリ

EV3

Windows 8.1 WiFi

Bluetooth LE

USB

Page 13: LEGO MINDSTORMS EV3 API

New API

User interface

Fundamentals

Devices Graphics and media Communications and data Services

Geo-location

Proximity

Direct3D Direct2DDirectWrite

PlayTo

Contracts

Bing

AzureMobile

HTML5/CSS XAMLInput Controls

Authentication

Bluetooth

USB

HID WiFi direct

Point of service

3Dprinting

Scanning

WebGL

HTTP

Contacts

Appoint-ments

PDF

Speech synthesis

Diagnostics

Portable

Sensors Playback Capture

Printing

SVGCanvas

Local storage

SMS

StreamsBackground transfer

Syndication

Networking

XML and JSON

Skydrive

Live tiles and toast

Accessibility Data binding

Application services

Threading timers

Memory management

Globalization Cryptography

Xbox Live

NEW

Page 14: LEGO MINDSTORMS EV3 API

プログラムを作ろう

Page 15: LEGO MINDSTORMS EV3 API

変数宣言private RfcommDeviceService DeviceService;private StreamSocket BTPort;private DataWriter BTWriter;private DataReader BTReader;

Page 16: LEGO MINDSTORMS EV3 API

接続public async Task Connect(string portName){

var servicesInfos = await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort));

foreach (var serviceInfo in servicesInfos){

if (serviceInfo.Name == "EV3"){

this.DeviceService = await RfcommDeviceService.FromIdAsync(serviceInfo.Id);break;

}}this.BTPort = new StreamSocket();await BTPort.ConnectAsync(

DeviceService.ConnectionHostName,DeviceService.ConnectionServiceName,SocketProtectionLevel.BluetoothEncryptionAllowNullAuthentication);

this.BTWriter = new DataWriter(BTPort.OutputStream);this.BTReader = new DataReader(BTPort.InputStream);

}

Page 17: LEGO MINDSTORMS EV3 API

コマンド送信Byte[] mergedData = new Byte[header.Length + data.Length];Array.Copy(header, mergedData, header.Length);Array.Copy(data, 0, mergedData, header.Length, data.Length);this.BTWriter.WriteBytes(mergedData);var sendResult = await this.BTWriter.StoreAsync();

Page 18: LEGO MINDSTORMS EV3 API

コマンド送信Byte[] mergedData = new Byte[header.Length + data.Length];Array.Copy(header, mergedData, header.Length);Array.Copy(data, 0, mergedData, header.Length, data.Length);this.BTWriter.WriteBytes(mergedData);var sendResult = await this.BTWriter.StoreAsync();

headerの形式は?

Page 19: LEGO MINDSTORMS EV3 API

コマンド送信Byte[] mergedData = new Byte[header.Length + data.Length];Array.Copy(header, mergedData, header.Length);Array.Copy(data, 0, mergedData, header.Length, data.Length);this.BTWriter.WriteBytes(mergedData);var sendResult = await this.BTWriter.StoreAsync();

headerの形式は?

dataの形式は?

Page 20: LEGO MINDSTORMS EV3 API

コマンド送信Byte[] mergedData = new Byte[header.Length + data.Length];Array.Copy(header, mergedData, header.Length);Array.Copy(data, 0, mergedData, header.Length, data.Length);this.BTWriter.WriteBytes(mergedData);var sendResult = await this.BTWriter.StoreAsync();

headerの形式は?

dataの形式は?

センサーからの受信は?

Page 21: LEGO MINDSTORMS EV3 API

プログラムを作ろう▷Windows 8.1 Windows RumtimeでBT対応

▷RfcommDeviceServiceで接続

▷送受信するデータはバイナリデータ

▷自由にプログラム作るとか正直無理

Page 22: LEGO MINDSTORMS EV3 API

Lego.EV3の紹介

Page 23: LEGO MINDSTORMS EV3 API

http://legoev3.codeplex.com/

2013/11/01版

Page 24: LEGO MINDSTORMS EV3 API

NuGet Lego.EV3

2013/11/06版

Page 25: LEGO MINDSTORMS EV3 API

お勧めはNuGet▷プロジェクトフォルダの下にインストール

Page 26: LEGO MINDSTORMS EV3 API

▷ライブラリの更新通知あり

お勧めはNuGet

Page 27: LEGO MINDSTORMS EV3 API

NuGetパッケージの復元を有効化

Page 28: LEGO MINDSTORMS EV3 API

Lego.EV3の構造

Page 29: LEGO MINDSTORMS EV3 API

Lego.EV3の構造

Windows 8.1

Windows Runtime

Lego.Ev3.WinRT

Lego.Ev3.Core

Windows ストアアプリ

Windows Phone 8

Windows Phone Runtime

Lego.Ev3.Phone

Lego.Ev3.Core

Windows ストアアプリ

Page 30: LEGO MINDSTORMS EV3 API

Lego.EV3を使ったプログラミング

Page 31: LEGO MINDSTORMS EV3 API

変数宣言private RfcommDeviceService DeviceService;private StreamSocket BTPort;private DataWriter BTWriter;private DataReader BTReader;

Page 32: LEGO MINDSTORMS EV3 API

変数宣言 - Lego.EV3private Lego.Ev3.Core.Brick Connecter;

Page 33: LEGO MINDSTORMS EV3 API

接続public async Task Connect(string portName){

var servicesInfos = await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort));

foreach (var serviceInfo in servicesInfos){

if (serviceInfo.Name == "EV3"){

this.DeviceService = await RfcommDeviceService.FromIdAsync(serviceInfo.Id);break;

}}this.BTPort = new StreamSocket();await BTPort.ConnectAsync(

DeviceService.ConnectionHostName,DeviceService.ConnectionServiceName,SocketProtectionLevel.BluetoothEncryptionAllowNullAuthentication);

this.BTWriter = new DataWriter(BTPort.OutputStream);this.BTReader = new DataReader(BTPort.InputStream);

}

Page 34: LEGO MINDSTORMS EV3 API

接続- Lego.EV3this.Connecter = new Lego.Ev3.Core.Brick(

new Lego.Ev3.WinRT.BluetoothCommunication(this.DeviceName));await this.Connecter.ConnectAsync();

▷デバイス名を指定して接続要求し、

▷接続が完了するまで待つ

Page 35: LEGO MINDSTORMS EV3 API

コマンド送信Byte[] mergedData = new Byte[header.Length + data.Length];Array.Copy(header, mergedData, header.Length);Array.Copy(data, 0, mergedData, header.Length, data.Length);this.BTWriter.WriteBytes(mergedData);var sendResult = await this.BTWriter.StoreAsync();

Page 36: LEGO MINDSTORMS EV3 API

コマンド送信- Lego.EV3await this.Connecter.DirectCommand.TurnMotorAtPowerForTimeAsync(

Lego.Ev3.Core.OutputPort.A,50,500,false)

▷Aに接続したモーターに

▷50%のパワーで

▷500msモーターを回す。

▷時間経過後にブレーキかけない。

Page 37: LEGO MINDSTORMS EV3 API

データ受信- Lego.EV3private void Connecter_BrickChanged(

object sender, Lego.Ev3.Core.BrickChangedEventArgs e)

{If (e.Ports[Lego.Ev3.Core.InputPort.One].Type != Lego.Ev3.Core.DeviceType.Empty){

this.SenserConnecters(index).Value =e.Ports[Lego.Ev3.Core.InputPort.One].SIValue;

}}

▷EV3からのデータ受信イベントで

▷1番ポートからのデータが存在すれば

▷その値を取得する

Page 38: LEGO MINDSTORMS EV3 API

▷Leap.EV3.Core

• Brick

• BrickButtons

• Back / Down / Enter / Left / Right / Up

• Port

• Mode / Name / PercentValue / RawValue / SIValue / Type

• Command

• StartMotor / StepMotorAtPower / TimeMoterSync / StopMoter /TurnMotorAtPower / TurnMotorAtPowerForTime / TurnAtSpeed / TurnAtSpeedforTime

• DirectCommand

• ClearUIAsync

• DrawCircleAsync / DrawDottedLineAsync / …

• PlaySoundAsync / PlayToneAsync

• SystemCommand

• CopyFileAsync / DeleteFileAsync / WriteFileAsync

Page 39: LEGO MINDSTORMS EV3 API

Lego.EV3を使えば▷接続が非同期メソッドで簡単になる

▷モーター制御がポート指定で簡単になる

▷センサー値取得がイベントとして簡単になる

▷センサー値取得がポート指定で簡単になる

Page 40: LEGO MINDSTORMS EV3 API

FIN