LEGO MINDSTORMS EV3 API

1,892 views
1,800 views

Published on

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

Published in: Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,892
On SlideShare
0
From Embeds
0
Number of Embeds
195
Actions
Shares
0
Downloads
21
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

LEGO MINDSTORMS EV3 API

  1. 1. 2014.03.15 初音玲 LEGO MINDSTORMS EV3 API
  2. 2. 自己紹介 ▷お仕事の略歴 • システム企画 • インフラ構築 • 業務アプリ構築 • DB設計、構築、各種支援 ▷お仕事外の略歴 • Microsoft MVP for Developer Tools (2008/04-14/03) • Oracle ACE (2008/04-:日本で2人目)
  3. 3. はじめてシリーズ ▷はじめての VC#2012
  4. 4. Kinect本 監修 ▷本文 • 日本語訳 ▷サンプル • ローカライズ済
  5. 5. 連載中 ▷ • 新型Kinect for Windows v2 Developer Preview プログラミング入門 http://www.buildinsider.net/small/kinect2dp/ • Xbox One速報 http://www.buildinsider.net/consumer/xboxonekine ct/
  6. 6. EV3
  7. 7. ハードウェア インテリジェントブロック EV3 モーター モーター 超音波 カラー ジャイロ タッチ
  8. 8. ソフトウェア
  9. 9. EV3とWindows 8.1の接続
  10. 10. 接続 EV3 ソフトウェア EV3 Windows XP Windows Vista Windows 7 Windows 8 Windows 8.1 Mac OS 10.6 Mac OS 10.7 Mac OS 10.8 USB WiFi Bluetooth LE
  11. 11. プログラミング EV3 ソフトウェア EV3 Windows XP Windows Vista Windows 7 Windows 8 Windows 8.1 Mac OS 10.6 Mac OS 10.7 Mac OS 10.8 USB WiFi Bluetooth LE
  12. 12. リアルタイム操作 Windows ストアアプリ EV3 Windows 8.1 WiFi Bluetooth LE USB
  13. 13. New API Userinterface Fundamentals Devices Graphicsandmedia Communicationsanddata Services Geo- location Proximity Direct3D Direct2D Direct Write PlayTo Contracts Bing Azure Mobile HTML5/CSS XAMLInput Controls Authentication Bluetooth USB HID WiFi direct Point of service 3D printing Scanning WebGL HTTP Contacts Appoint- ments PDF Speech synthesis Diagnostics Portable Sensors Playback Capture Printing SVGCanvas Local storage SMS Streams Backgroun dtransfer Syndicatio n Networkin g XML and JSON Skydrive Live tiles and toast Accessibility Databinding Application services Threading timers Memory management Globalization Cryptography Xbox Live NEW
  14. 14. プログラムを作ろう
  15. 15. 変数宣言 private RfcommDeviceService DeviceService; private StreamSocket BTPort; private DataWriter BTWriter; private DataReader BTReader;
  16. 16. 接続 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); }
  17. 17. コマンド送信 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();
  18. 18. コマンド送信 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の形式は?
  19. 19. コマンド送信 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の形式は?
  20. 20. コマンド送信 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の形式は? センサーからの受信は?
  21. 21. プログラムを作ろう ▷Windows 8.1 Windows RumtimeでBT対応 ▷RfcommDeviceServiceで接続 ▷送受信するデータはバイナリデータ ▷自由にプログラム作るとか正直無理
  22. 22. Lego.EV3の紹介
  23. 23. http://legoev3.codeplex.com/ 2013/11/01版
  24. 24. NuGet Lego.EV3 2013/11/06版
  25. 25. お勧めはNuGet ▷プロジェクトフォルダの下にインストール
  26. 26. ▷ライブラリの更新通知あり お勧めはNuGet
  27. 27. NuGetパッケージの復元を有効化
  28. 28. Lego.EV3の構造
  29. 29. 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 ストアアプリ
  30. 30. Lego.EV3を使ったプログラミング
  31. 31. 変数宣言 private RfcommDeviceService DeviceService; private StreamSocket BTPort; private DataWriter BTWriter; private DataReader BTReader;
  32. 32. 変数宣言 - Lego.EV3 private Lego.Ev3.Core.Brick Connecter;
  33. 33. 接続 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); }
  34. 34. 接続- Lego.EV3 this.Connecter = new Lego.Ev3.Core.Brick( new Lego.Ev3.WinRT.BluetoothCommunication(this.DeviceName)); await this.Connecter.ConnectAsync(); ▷デバイス名を指定して接続要求し、 ▷接続が完了するまで待つ
  35. 35. コマンド送信 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();
  36. 36. コマンド送信- Lego.EV3 await this.Connecter.DirectCommand.TurnMotorAtPowerForTimeAsync( Lego.Ev3.Core.OutputPort.A, 50, 500, false) ▷Aに接続したモーターに ▷50%のパワーで ▷500msモーターを回す。 ▷時間経過後にブレーキかけない。
  37. 37. データ受信- Lego.EV3 private 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番ポートからのデータが存在すれば ▷その値を取得する
  38. 38. ▷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
  39. 39. Lego.EV3を使えば ▷接続が非同期メソッドで簡単になる ▷モーター制御がポート指定で簡単になる ▷センサー値取得がイベントとして簡単になる ▷センサー値取得がポート指定で簡単になる
  40. 40. FIN

×