SlideShare a Scribd company logo
Bluetooth通信の
仕組みと活用法紹介
   2012.Aug.5th Takehiko YOSHIDA
                        twitter: @chihayafuru
              URL: http://www.chihayafuru.jp
アジェンダ
通信ハードウェア構成
フロー制御
電文フォーマット
NXTブロック ハードウェア仕様
メインプロセッサ: Atmel 32bit ARM processor
  256KB FLASH / 64KB RAM / 48MHz
サブプロセッサ: Atmel 8bit AVR processor
  4KB FLASH / 512KB RAM / 8MHz
Bluetoothチップ:
   CSR BlueCore 4 v2.0 + EDR System
  シリアルポートプロファイル(SPP)サポート
  内部RAM 47KBytes
  外部FLASH 8MBit
  26MHz
NXT通信 ブロック図
                  PC                                  NXT
          User Program                          User Program
      (Communication Protocol)                   (nxtOSEK)
仮想                                                                     SIO
COM                                                                  (UART)
      Bluetooth
         OS             USB                   USB
      Interface        Driver                Driver
                                                        Bluetooth
      Bluetooth                                          Hardware
        Driver                                            Driver
                                   USB                  (BlueCore)
      Bluetooth
       Dongle                    Bluetooth
オシロスコープによる信号波形観測
最小のシリアル通信配線



データ送信        データ送信


データ受信        データ受信




グラウンド        グラウンド
『フロー制御』
 って何?
無手順(フロー制御なし)

              くそ、自分のペースで
                話しやがって!
 ちゃんと          メモし損ねたけど
メモしろよ!            諦めよ…




    送信ノード   受信ノード
フロー制御あり

              話していいぞ!




送信ノード                   受信ノード
        実は…
ハードウェアフロー制御配線

データ送信      データ送信


データ受信      データ受信


送信要求       送信要求


送信可能       送信可能


グラウンド      グラウンド
NxtLoggerキャプチャ画面

    “DSR”って何?
DCEを中継した通信
データ端末装置                          データ端末装置
  (DTE)                            (DTE)



                CTS / RTS



  DSR / DTR   公衆通信回線網            DSR / DTR




  データ回線終端装置                 データ回線終端装置
      (DCE)                     (DCE)
シリアル通信 I/O名称
短縮名   方向           英語名                   意味


TxD   OUT   Transmit Exchange Data     送信データ

RxD   IN    Receive Exchange Data      受信データ

RTS   OUT      Request To Send         送信要求

CTS   IN        Clear To Send           送信可

DTR   OUT    Data Terminal Ready     データ端末レディ

DSR   IN        Data Set Ready       データ・セット・レディ
NXTハードウェア インターフェース




       引用: LEGO Mindstorms NXT Bluetooth Developer Kit
【PC】H/Wフロー制御コード nxtLogger
                                              LogPort.cs
88.   // シリアルポート番号設定
89.   this.PortName = portName;
90.
91.   // ポートのオープン制御
92.   this.Open();
                                        初期状態は
93.                               false(送信禁止)のため、
94.   // 受信バッファの破棄                    このコードは必須
95.   this.DiscardInBuffer();
96.
97.   // ハードウェアフロー制御
98.   this.DtrEnable = true;
99.   this.RtsEnable = true;
【NXT】H/Wフロー制御コード nxtOSEK
                                                    bt.c
88. void bt_init(void)
89. {
90. U8 trash;
91. U32 trash2;
92. in_buf_in_ptr = out_buf_ptr = 0;
93. in_buf_idx = 0;
94.
95. *AT91C_PMC_PCER = (1 << AT91C_PERIPHERAL_ID_US1);
96.
97. *AT91C_PIOA_PDR = BT_RX_PIN | BT_TX_PIN |
    BT_SCK_PIN | BT_RTS_PIN | BT_CTS_PIN;
98. *AT91C_PIOA_ASR = BT_RX_PIN | BT_TX_PIN |
    BT_SCK_PIN | BT_RTS_PIN | BT_CTS_PIN;
電文
フォーマット
バイナリダンプ
サンプルコード 電文フォーマット
オフセット

 +0000   0x20   ヘッダー部
 +0001   0x00   (ペイロード長)
 +0002   0x3F
 +0003   0x10   ペイロード部
 途中省略           (データー本体)
 +0033   0x72
電文の生成

送信処理
【NXT】電文生成部コード nxtOSEK
                                                       ecrobot_interface.c
318. U32 ecrobot_send_bt_packet(U8 *buf, U32 bufLen)
319. {
320.     SINT i;

321.     if (bt_status == BT_STREAM && bufLen <= BT_MAX_TX_BUF_SIZE-2)
322.             {
323.             sendBuf[0] = (U8) (bufLen & 0xFF);
324.             sendBuf[1] = (U8) ((bufLen >> 8) & 0xFF);
325.             for(i = 0; i < bufLen; i++)
326.             {
327.                     sendBuf[i+2] = buf[i];
328.             }
329.             bt_write(&sendBuf[0], 0, bufLen+2);
330.             return bufLen;
331.             }
332.             return 0;                       ※ソースコードの一部を省略
333. }
リトル
エンディアン
 って何?
エンディアネスの説明
           10進数: 32

    Int型(2byte)16進数: 0x0020
                    バイト単位に分割
            0x00   0x20
オフセット

 +0000   0x20      +0000   0x00
 +0001   0x00      +0001   0x20
下位バイトマスク処理
  sendBuf[0] = (U8) (bufLen & 0xFF);

             16進数表記         2進数表記

 bufLen       0x1234   0001 0010 0011 0100

   0xFF       0x00FF   0000 0000 1111 1111

sendBuf[0]    0x0034   0000 0000 0011 0100
上位バイトマスク処理
sendBuf[1] = (U8) ((bufLen >> 8) & 0xFF);

             16進数表記         2進数表記

 bufLen       0x1234   0001 0010 0011 0100

bufLen>>8     0x0012   0000 0000 0001 0010

   0xFF       0x00FF   0000 0000 1111 1111

sendBuf[0]    0x0034   0000 0000 0011 0100
上位バイトマスク処理
sendBuf[1] = (U8) ((bufLen >> 8) & 0xFF);

             16進数表記         2進数表記

 bufLen       0x1234   0001 0010 0011 0100

bufLen>>8     0x0012   0000 0000 0001 0010

   0xFF       0x00FF   0000 0000 1111 1111

sendBuf[0]    0x0034   0000 0000 0011 0100
論理シフト(unsigned int)の場合

10進表記           16進数表記         2進数表記

43776            0xAB00   1010 1011 0000 0000

        1/256                        8ビット右シフト


 171             0x00AB   0000 0000 1010 1011
算術シフト(signed int)の場合

10進表記          16進数表記         2進数表記

-21760          0xAB00   1010 1011 0000 0000

       1/256                        8ビット右シフト


 -85            0xFFAB   1111 1111 1010 1011
コンテナ部データ構成
オフセット     データ    オフセット    データ   オフセット   データ    オフセット   データ



  0                8             16             24
                                                       ADC2
  1                9             17             25
        システム時刻           モータ0           モータ2
         (ミリ秒)           カウンタ           カウンタ
  2               10             18             26
                                                       ADC3
  3               11             19             27

  4      データ1     12             20             28
                                        ADC0
  5      データ2     13             21             29
                         モータ1
                                                       I2C
                         カウンタ
  6               14             22             30
        バッテリーレ
                                        ADC1
          ベル
  7               15             23             31
【NXT】コンテナ部生成部コード (nxtOSEK)
                                                                 ecrobot_interface.c
735. void ecrobot_bt_data_logger(S8 data1, S8 data2)
736. {
737.     U8 data_log_buffer[32];

738.     *((U32   *)(&data_log_buffer[0]))    =   (U32)systick_get_ms();
739.     *(( S8   *)(&data_log_buffer[4]))    =    (S8)data1;
740.     *(( S8   *)(&data_log_buffer[5]))    =    (S8)data2;
741.     *((U16   *)(&data_log_buffer[6]))    =   (U16)ecrobot_inputs.battery_state;
742.     *((S32   *)(&data_log_buffer[8]))    =   (S32)nxt_motor_get_count(0);
743.     *((S32   *)(&data_log_buffer[12]))   =   (S32)nxt_motor_get_count(1);
744.     *((S32   *)(&data_log_buffer[16]))   =   (S32)nxt_motor_get_count(2);
745.     *((S16   *)(&data_log_buffer[20]))   =   (S16)sensor_adc(0);
746.     *((S16   *)(&data_log_buffer[22]))   =   (S16)sensor_adc(1);
747.     *((S16   *)(&data_log_buffer[24]))   =   (S16)sensor_adc(2);
748.     *((S16   *)(&data_log_buffer[26]))   =   (S16)sensor_adc(3);
749.     *((S32   *)(&data_log_buffer[28]))   =   (S32)getDistance();
750.
751.     ecrobot_send_bt_packet(data_log_buffer, 32);
752. }
                                  『リトル・エンディアン』前提の移植性の低いコード
電文の解析

受信処理
【PC】コンテナ部解析部コード (nxtLogger)
                                                  LogMessage.cs
248.// パケットをフィールドに変換
249.this.sysTick = BitConverter.ToUInt32(packetPayload, 0);
250.this.dataLeft = (SByte)packetPayload[4];
251.this.dataRight = (SByte)packetPayload[5];
252.this.batt = BitConverter.ToUInt16(packetPayload, 6);
253.this.motorCnt0 = BitConverter.ToInt32(packetPayload, 8);
254.this.motorCnt1 = BitConverter.ToInt32(packetPayload, 12);
255.this.motorCnt2 = BitConverter.ToInt32(packetPayload, 16);
256.this.sensorAdc0 = BitConverter.ToInt16(packetPayload, 20);
257.this.sensorAdc1 = BitConverter.ToInt16(packetPayload, 22);
258.this.sensorAdc2 = BitConverter.ToInt16(packetPayload, 24);
259.this.sensorAdc3 = BitConverter.ToInt16(packetPayload, 26);
260.this.i2c = BitConverter.ToInt32(packetPayload, 28);
BitConverterクラス
• 基本データ型をバイト配列に、バイト配列を基本
  データ型に変換します。
• BitConverter.ToUInt16() unsigned型
• BitConverter.ToUInt16() signed型
• Intel系CPUはリトル・エンディアンのため
  BitConverterクラスもリトル・エンディアンで
  動作します。
• 非Intel系CPU(ビッグ・エンディアン)への移植の
  可能性があるのであれば、
  BitConverter.IsLittleEndianフィールドのTrue/False
  で判定してバイト列を反転しましょう!
Bluetooth通信の留意事項
        • 受信モードから送信モードに切り替わるとき約30ミリ秒の遅れが生じる
        • 大きなデータパケットを受信する場合、ARMプロセッサとの間に短時間の
H/W制約     遅延(small timing difference)が発生する。



        • 電文の途中にで送受信の一時停止が発生する。
        • 電文と電文の間のタイムラグ(休止時間)が短くなる。
 影響


        • 1つの電文を2回以上のデータ受信処理(APIコール)に分割して受信する。
        • 1回のデータ受信処理(API)で2つ以上の電文を受け取ってしまう。
 結果
電文受信 ステートマシン図
        [受信バイト == 開始コード(0x20, 0x00)]




       電文待ち                   電文受信
初期状態


            [受信バイト数 == 電文長]
電文受信 状態遷移表

     イベント              受信バイト
                                      受信バイト数
状態           開始コード                     == 電文長
                               その他
            (0x20, 0x00)


電文待ち         電文受信              電文待ち    電文待ち




電文受信         電文受信              電文受信    電文待ち
【PC】受信バイト列を1バイトに分割するコード
                                        Form1.cs
99. /// <summary>
100. /// (メインスレッドの)ログデータ受信
101. /// </summary>
102. /// <param name="mes">データ</param>
103. private void messegeReceive(Byte[] mes)
104. {
105.     for (int i = 0; i < mes.Length; i++)
106.     {
107.         log.Append(mes[i]);
108.     }     電文の先頭を見つけるために一旦、1バイトずつに分割
109. }            Byte[0]が電文の先頭とは限らない!!!
【PC】状態遷移(分岐)処理
                                                   LogMessage.cs
216.   public void Append(Byte dat)
217.   {
218.       // パケットヘッダー部
219.       if (byteNo < PacketHeaderLen)
220.       {
221.            // 順送りでパケットヘッダー配列へ保存              状態遷移の『電文待ち』
222.            packetHeader[byteNo++] = dat;
223.            // 中略
224.       }
225.       // パケットペイロード(ヘッダーを除いた本体部)
226.       else if (byteNo < PacketLen)
227.       {                                       状態遷移の『電文受信』
228.            // 中略
229.       }
230.       else     // byteNo >= PacketLenは設計の想定外
231.       {                                       状態遷移の設計外
232.            byteNo = 0;
233.       }
234.   }
                                                  ※ソースコードの一部を省略
【PC】電文ヘッダー判定処理
                                                      LogMessage.cs
211.   // 順送りでパケットヘッダー配列へ保存
212.   packetHeader[byteNo++] = dat;
213.
214.   if (byteNo == PacketHeaderLen)
215.   {
216.     // パケットヘッダー(パケットサイズ)のチェック
217.     // NXTから送信されるパケットサイズにはヘッダの2バイト分は含まれない
218.     UInt16 len = BitConverter.ToUInt16(packetHeader, 0);
219.
220.       if (len != PacketPayloadLen)
221.       {
222.         // パケット仕様: ヘッダー = ペイロードサイズ
223.         // 想定したヘッダー値でなければ1バイト分を読み捨てる
224.         packetHeader[0] = packetHeader[1];
225.         byteNo = 1;
226.       }
227.   }
ご静聴ありがとうございます

More Related Content

What's hot

Huaweiparameterstrategy
HuaweiparameterstrategyHuaweiparameterstrategy
Huaweiparameterstrategy
titoe8080
 
Dual transfer mode
Dual transfer modeDual transfer mode
Dual transfer modeMorg
 
From IA-32 to avx-512
From IA-32 to avx-512From IA-32 to avx-512
From IA-32 to avx-512
MITSUNARI Shigeo
 
ZTE BTS Manual
ZTE BTS ManualZTE BTS Manual
ZTE BTS Manual
ibrahimnabil17
 
Android iOS BLE 20180823
Android iOS BLE 20180823Android iOS BLE 20180823
Android iOS BLE 20180823
Tsuyoshi Hyuga
 
Le mappage des canaux lte
Le mappage des canaux lteLe mappage des canaux lte
Le mappage des canaux lte
kawtar dziri
 
Owa330011 bssap protocol analysis issue 1.0
Owa330011 bssap protocol analysis issue 1.0Owa330011 bssap protocol analysis issue 1.0
Owa330011 bssap protocol analysis issue 1.0
Nguon Dung Le
 
4章 Linuxカーネル - 割り込み・例外 4
 4章 Linuxカーネル - 割り込み・例外 4 4章 Linuxカーネル - 割り込み・例外 4
4章 Linuxカーネル - 割り込み・例外 4
mao999
 
STEVEN CIOCCI TIGHT ENDS MANUAL WAGNER
STEVEN CIOCCI TIGHT ENDS MANUAL WAGNERSTEVEN CIOCCI TIGHT ENDS MANUAL WAGNER
STEVEN CIOCCI TIGHT ENDS MANUAL WAGNERSteven Ciocci
 
5G NR System Information
5G NR System Information5G NR System Information
5G NR System Information
PushkarBandi
 
Ericsson SDCCH establishment Issue
Ericsson SDCCH establishment IssueEricsson SDCCH establishment Issue
Ericsson SDCCH establishment Issue
Houssein Abou Chacra
 
Verification engineer performance appraisal
Verification engineer performance appraisalVerification engineer performance appraisal
Verification engineer performance appraisal
jess89058
 
2 g training optimization
2 g training optimization2 g training optimization
2 g training optimization
Ahmed Gad
 
整数列圧縮
整数列圧縮整数列圧縮
整数列圧縮JAVA DM
 
6. Design Planning.pdf
6. Design Planning.pdf6. Design Planning.pdf
6. Design Planning.pdf
Ahmed Abdelazeem
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
 
PCI Express Verification using Reference Modeling
PCI Express Verification using Reference ModelingPCI Express Verification using Reference Modeling
PCI Express Verification using Reference ModelingDVClub
 
STEVEN CIOCCI USA FOOTBALL OFFENSIVE LINE MANUAL
STEVEN CIOCCI USA FOOTBALL OFFENSIVE LINE MANUALSTEVEN CIOCCI USA FOOTBALL OFFENSIVE LINE MANUAL
STEVEN CIOCCI USA FOOTBALL OFFENSIVE LINE MANUALSteven Ciocci
 
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
Kentaro Ebisawa
 

What's hot (20)

Huaweiparameterstrategy
HuaweiparameterstrategyHuaweiparameterstrategy
Huaweiparameterstrategy
 
Dual transfer mode
Dual transfer modeDual transfer mode
Dual transfer mode
 
From IA-32 to avx-512
From IA-32 to avx-512From IA-32 to avx-512
From IA-32 to avx-512
 
ZTE BTS Manual
ZTE BTS ManualZTE BTS Manual
ZTE BTS Manual
 
Android iOS BLE 20180823
Android iOS BLE 20180823Android iOS BLE 20180823
Android iOS BLE 20180823
 
Le mappage des canaux lte
Le mappage des canaux lteLe mappage des canaux lte
Le mappage des canaux lte
 
Owa330011 bssap protocol analysis issue 1.0
Owa330011 bssap protocol analysis issue 1.0Owa330011 bssap protocol analysis issue 1.0
Owa330011 bssap protocol analysis issue 1.0
 
4章 Linuxカーネル - 割り込み・例外 4
 4章 Linuxカーネル - 割り込み・例外 4 4章 Linuxカーネル - 割り込み・例外 4
4章 Linuxカーネル - 割り込み・例外 4
 
STEVEN CIOCCI TIGHT ENDS MANUAL WAGNER
STEVEN CIOCCI TIGHT ENDS MANUAL WAGNERSTEVEN CIOCCI TIGHT ENDS MANUAL WAGNER
STEVEN CIOCCI TIGHT ENDS MANUAL WAGNER
 
5G NR System Information
5G NR System Information5G NR System Information
5G NR System Information
 
Ericsson SDCCH establishment Issue
Ericsson SDCCH establishment IssueEricsson SDCCH establishment Issue
Ericsson SDCCH establishment Issue
 
Verification engineer performance appraisal
Verification engineer performance appraisalVerification engineer performance appraisal
Verification engineer performance appraisal
 
2 g training optimization
2 g training optimization2 g training optimization
2 g training optimization
 
Zte 3g
Zte 3gZte 3g
Zte 3g
 
整数列圧縮
整数列圧縮整数列圧縮
整数列圧縮
 
6. Design Planning.pdf
6. Design Planning.pdf6. Design Planning.pdf
6. Design Planning.pdf
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
PCI Express Verification using Reference Modeling
PCI Express Verification using Reference ModelingPCI Express Verification using Reference Modeling
PCI Express Verification using Reference Modeling
 
STEVEN CIOCCI USA FOOTBALL OFFENSIVE LINE MANUAL
STEVEN CIOCCI USA FOOTBALL OFFENSIVE LINE MANUALSTEVEN CIOCCI USA FOOTBALL OFFENSIVE LINE MANUAL
STEVEN CIOCCI USA FOOTBALL OFFENSIVE LINE MANUAL
 
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
 

Viewers also liked

Qoncept iBeacon / Bluetooth LE
Qoncept iBeacon / Bluetooth LEQoncept iBeacon / Bluetooth LE
Qoncept iBeacon / Bluetooth LE
Qoncept, Inc.
 
Open the door of embedded systems to IoT! mruby on LEGO Mindstorms (R)
Open the door of embedded systems to IoT! mruby on LEGO Mindstorms (R)Open the door of embedded systems to IoT! mruby on LEGO Mindstorms (R)
Open the door of embedded systems to IoT! mruby on LEGO Mindstorms (R)
Takehiko YOSHIDA
 
Tutorial for robot programming with LEGO mindstorms EV3
Tutorial for robot programming with LEGO mindstorms EV3 Tutorial for robot programming with LEGO mindstorms EV3
Tutorial for robot programming with LEGO mindstorms EV3
Hironobu Fujiyoshi
 
iBeacon を利用したサービス開発のポイント
iBeacon を利用したサービス開発のポイントiBeacon を利用したサービス開発のポイント
iBeacon を利用したサービス開発のポイント
daisuke-a-matsui
 
ブレッドボードの使い方と Arduino に簡単な回路をつける例
ブレッドボードの使い方と Arduino に簡単な回路をつける例ブレッドボードの使い方と Arduino に簡単な回路をつける例
ブレッドボードの使い方と Arduino に簡単な回路をつける例
mitunaga
 

Viewers also liked (6)

Qoncept iBeacon / Bluetooth LE
Qoncept iBeacon / Bluetooth LEQoncept iBeacon / Bluetooth LE
Qoncept iBeacon / Bluetooth LE
 
Ibeacon hack4aizu
Ibeacon hack4aizuIbeacon hack4aizu
Ibeacon hack4aizu
 
Open the door of embedded systems to IoT! mruby on LEGO Mindstorms (R)
Open the door of embedded systems to IoT! mruby on LEGO Mindstorms (R)Open the door of embedded systems to IoT! mruby on LEGO Mindstorms (R)
Open the door of embedded systems to IoT! mruby on LEGO Mindstorms (R)
 
Tutorial for robot programming with LEGO mindstorms EV3
Tutorial for robot programming with LEGO mindstorms EV3 Tutorial for robot programming with LEGO mindstorms EV3
Tutorial for robot programming with LEGO mindstorms EV3
 
iBeacon を利用したサービス開発のポイント
iBeacon を利用したサービス開発のポイントiBeacon を利用したサービス開発のポイント
iBeacon を利用したサービス開発のポイント
 
ブレッドボードの使い方と Arduino に簡単な回路をつける例
ブレッドボードの使い方と Arduino に簡単な回路をつける例ブレッドボードの使い方と Arduino に簡単な回路をつける例
ブレッドボードの使い方と Arduino に簡単な回路をつける例
 

Similar to Bluetooth通信の 仕組みと活用法紹介

Windowsのパケットモニタ作成
Windowsのパケットモニタ作成Windowsのパケットモニタ作成
Windowsのパケットモニタ作成
Shinichi Hirauchi
 
RouterBOARD with OpenFlow
RouterBOARD with OpenFlowRouterBOARD with OpenFlow
RouterBOARD with OpenFlow
Toshiki Tsuboi
 
汎用LoRaWANセンサノード LSN50 -V2日本語マニュアル
汎用LoRaWANセンサノード LSN50 -V2日本語マニュアル汎用LoRaWANセンサノード LSN50 -V2日本語マニュアル
汎用LoRaWANセンサノード LSN50 -V2日本語マニュアル
CRI Japan, Inc.
 
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519Yasuhiro Ishii
 
ワイヤレス技術をアタックで検証 by 堀合啓一 - CODE BLUE 2015
ワイヤレス技術をアタックで検証 by 堀合啓一 - CODE BLUE 2015ワイヤレス技術をアタックで検証 by 堀合啓一 - CODE BLUE 2015
ワイヤレス技術をアタックで検証 by 堀合啓一 - CODE BLUE 2015
CODE BLUE
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
あるブートローダの話
あるブートローダの話あるブートローダの話
あるブートローダの話
nullnilaki
 
Flexible 1.36 inch 16*128 SPI SSD1316 Monochrome OLED Screen Module Panel
Flexible 1.36 inch 16*128 SPI SSD1316 Monochrome OLED Screen Module PanelFlexible 1.36 inch 16*128 SPI SSD1316 Monochrome OLED Screen Module Panel
Flexible 1.36 inch 16*128 SPI SSD1316 Monochrome OLED Screen Module Panel
Shawn Lee
 
Interrupts on xv6
Interrupts on xv6Interrupts on xv6
Interrupts on xv6
Takuya ASADA
 
PBL1-v1-008j.pptx
PBL1-v1-008j.pptxPBL1-v1-008j.pptx
PBL1-v1-008j.pptx
NAIST
 
Kiso sekkei 01rev03
Kiso sekkei 01rev03Kiso sekkei 01rev03
Kiso sekkei 01rev03
tetsuya matsuno
 
第1回【CCNA】ネットワーク基礎講座‗なにわTECH道171208
第1回【CCNA】ネットワーク基礎講座‗なにわTECH道171208第1回【CCNA】ネットワーク基礎講座‗なにわTECH道171208
第1回【CCNA】ネットワーク基礎講座‗なにわTECH道171208
Nobuaki Omura
 
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
ryos36
 
Arduino 習作工坊 - Lesson 5 機械之夜
Arduino 習作工坊 - Lesson 5 機械之夜Arduino 習作工坊 - Lesson 5 機械之夜
Arduino 習作工坊 - Lesson 5 機械之夜
CAVEDU Education
 
Delayの等価回路モデル
Delayの等価回路モデルDelayの等価回路モデル
Delayの等価回路モデル
マルツエレック株式会社 marutsuelec
 
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法
LINE Corporation
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64FFRI, Inc.
 
Slide
SlideSlide
M5Stack互換機を作った話
M5Stack互換機を作った話M5Stack互換機を作った話
M5Stack互換機を作った話
Masawo Yamazaki
 
BlueZで遊んでみる - BLE大阪勉強会
BlueZで遊んでみる - BLE大阪勉強会BlueZで遊んでみる - BLE大阪勉強会
BlueZで遊んでみる - BLE大阪勉強会Shinji Kobayashi
 

Similar to Bluetooth通信の 仕組みと活用法紹介 (20)

Windowsのパケットモニタ作成
Windowsのパケットモニタ作成Windowsのパケットモニタ作成
Windowsのパケットモニタ作成
 
RouterBOARD with OpenFlow
RouterBOARD with OpenFlowRouterBOARD with OpenFlow
RouterBOARD with OpenFlow
 
汎用LoRaWANセンサノード LSN50 -V2日本語マニュアル
汎用LoRaWANセンサノード LSN50 -V2日本語マニュアル汎用LoRaWANセンサノード LSN50 -V2日本語マニュアル
汎用LoRaWANセンサノード LSN50 -V2日本語マニュアル
 
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
 
ワイヤレス技術をアタックで検証 by 堀合啓一 - CODE BLUE 2015
ワイヤレス技術をアタックで検証 by 堀合啓一 - CODE BLUE 2015ワイヤレス技術をアタックで検証 by 堀合啓一 - CODE BLUE 2015
ワイヤレス技術をアタックで検証 by 堀合啓一 - CODE BLUE 2015
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
あるブートローダの話
あるブートローダの話あるブートローダの話
あるブートローダの話
 
Flexible 1.36 inch 16*128 SPI SSD1316 Monochrome OLED Screen Module Panel
Flexible 1.36 inch 16*128 SPI SSD1316 Monochrome OLED Screen Module PanelFlexible 1.36 inch 16*128 SPI SSD1316 Monochrome OLED Screen Module Panel
Flexible 1.36 inch 16*128 SPI SSD1316 Monochrome OLED Screen Module Panel
 
Interrupts on xv6
Interrupts on xv6Interrupts on xv6
Interrupts on xv6
 
PBL1-v1-008j.pptx
PBL1-v1-008j.pptxPBL1-v1-008j.pptx
PBL1-v1-008j.pptx
 
Kiso sekkei 01rev03
Kiso sekkei 01rev03Kiso sekkei 01rev03
Kiso sekkei 01rev03
 
第1回【CCNA】ネットワーク基礎講座‗なにわTECH道171208
第1回【CCNA】ネットワーク基礎講座‗なにわTECH道171208第1回【CCNA】ネットワーク基礎講座‗なにわTECH道171208
第1回【CCNA】ネットワーク基礎講座‗なにわTECH道171208
 
Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)Polyphony の行く末(2018/3/3)
Polyphony の行く末(2018/3/3)
 
Arduino 習作工坊 - Lesson 5 機械之夜
Arduino 習作工坊 - Lesson 5 機械之夜Arduino 習作工坊 - Lesson 5 機械之夜
Arduino 習作工坊 - Lesson 5 機械之夜
 
Delayの等価回路モデル
Delayの等価回路モデルDelayの等価回路モデル
Delayの等価回路モデル
 
[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法[CEDEC2017] LINEゲームのセキュリティ診断手法
[CEDEC2017] LINEゲームのセキュリティ診断手法
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64
 
Slide
SlideSlide
Slide
 
M5Stack互換機を作った話
M5Stack互換機を作った話M5Stack互換機を作った話
M5Stack互換機を作った話
 
BlueZで遊んでみる - BLE大阪勉強会
BlueZで遊んでみる - BLE大阪勉強会BlueZで遊んでみる - BLE大阪勉強会
BlueZで遊んでみる - BLE大阪勉強会
 

More from Takehiko YOSHIDA

かるがもヘルメット/スキースクールIoTシステム
かるがもヘルメット/スキースクールIoTシステムかるがもヘルメット/スキースクールIoTシステム
かるがもヘルメット/スキースクールIoTシステム
Takehiko YOSHIDA
 
RICOH THETAの全天球画像でペーパークラフト作成
RICOH THETAの全天球画像でペーパークラフト作成RICOH THETAの全天球画像でペーパークラフト作成
RICOH THETAの全天球画像でペーパークラフト作成
Takehiko YOSHIDA
 
マイコンロボット実習
マイコンロボット実習マイコンロボット実習
マイコンロボット実習
Takehiko YOSHIDA
 
RICOH THETAの全天球画像でペーパークラフト
RICOH THETAの全天球画像でペーパークラフトRICOH THETAの全天球画像でペーパークラフト
RICOH THETAの全天球画像でペーパークラフト
Takehiko YOSHIDA
 
Mindstorms EV3におけるソフトウェア開発環境 2014年 師走版
Mindstorms EV3におけるソフトウェア開発環境 2014年 師走版Mindstorms EV3におけるソフトウェア開発環境 2014年 師走版
Mindstorms EV3におけるソフトウェア開発環境 2014年 師走版
Takehiko YOSHIDA
 
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
Takehiko YOSHIDA
 
恋するクラウド ~ AWSへ個人ブログをお引っ越し ~
恋するクラウド ~ AWSへ個人ブログをお引っ越し ~恋するクラウド ~ AWSへ個人ブログをお引っ越し ~
恋するクラウド ~ AWSへ個人ブログをお引っ越し ~Takehiko YOSHIDA
 
ロボット組み立てのヒント ハイライト
ロボット組み立てのヒント ハイライトロボット組み立てのヒント ハイライト
ロボット組み立てのヒント ハイライト
Takehiko YOSHIDA
 

More from Takehiko YOSHIDA (8)

かるがもヘルメット/スキースクールIoTシステム
かるがもヘルメット/スキースクールIoTシステムかるがもヘルメット/スキースクールIoTシステム
かるがもヘルメット/スキースクールIoTシステム
 
RICOH THETAの全天球画像でペーパークラフト作成
RICOH THETAの全天球画像でペーパークラフト作成RICOH THETAの全天球画像でペーパークラフト作成
RICOH THETAの全天球画像でペーパークラフト作成
 
マイコンロボット実習
マイコンロボット実習マイコンロボット実習
マイコンロボット実習
 
RICOH THETAの全天球画像でペーパークラフト
RICOH THETAの全天球画像でペーパークラフトRICOH THETAの全天球画像でペーパークラフト
RICOH THETAの全天球画像でペーパークラフト
 
Mindstorms EV3におけるソフトウェア開発環境 2014年 師走版
Mindstorms EV3におけるソフトウェア開発環境 2014年 師走版Mindstorms EV3におけるソフトウェア開発環境 2014年 師走版
Mindstorms EV3におけるソフトウェア開発環境 2014年 師走版
 
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
組込みシステムでIoTへの扉を開こう! mruby on LEGO Mindstorms EV3 (R)
 
恋するクラウド ~ AWSへ個人ブログをお引っ越し ~
恋するクラウド ~ AWSへ個人ブログをお引っ越し ~恋するクラウド ~ AWSへ個人ブログをお引っ越し ~
恋するクラウド ~ AWSへ個人ブログをお引っ越し ~
 
ロボット組み立てのヒント ハイライト
ロボット組み立てのヒント ハイライトロボット組み立てのヒント ハイライト
ロボット組み立てのヒント ハイライト
 

Recently uploaded

【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 

Recently uploaded (16)

【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 

Bluetooth通信の 仕組みと活用法紹介

  • 1. Bluetooth通信の 仕組みと活用法紹介 2012.Aug.5th Takehiko YOSHIDA twitter: @chihayafuru URL: http://www.chihayafuru.jp
  • 3. NXTブロック ハードウェア仕様 メインプロセッサ: Atmel 32bit ARM processor 256KB FLASH / 64KB RAM / 48MHz サブプロセッサ: Atmel 8bit AVR processor 4KB FLASH / 512KB RAM / 8MHz Bluetoothチップ: CSR BlueCore 4 v2.0 + EDR System シリアルポートプロファイル(SPP)サポート 内部RAM 47KBytes 外部FLASH 8MBit 26MHz
  • 4. NXT通信 ブロック図 PC NXT User Program User Program (Communication Protocol) (nxtOSEK) 仮想 SIO COM (UART) Bluetooth OS USB USB Interface Driver Driver Bluetooth Bluetooth Hardware Driver Driver USB (BlueCore) Bluetooth Dongle Bluetooth
  • 6. 最小のシリアル通信配線 データ送信 データ送信 データ受信 データ受信 グラウンド グラウンド
  • 8. 無手順(フロー制御なし) くそ、自分のペースで 話しやがって! ちゃんと メモし損ねたけど メモしろよ! 諦めよ… 送信ノード 受信ノード
  • 9. フロー制御あり 話していいぞ! 送信ノード 受信ノード 実は…
  • 10. ハードウェアフロー制御配線 データ送信 データ送信 データ受信 データ受信 送信要求 送信要求 送信可能 送信可能 グラウンド グラウンド
  • 11. NxtLoggerキャプチャ画面 “DSR”って何?
  • 12. DCEを中継した通信 データ端末装置 データ端末装置 (DTE) (DTE) CTS / RTS DSR / DTR 公衆通信回線網 DSR / DTR データ回線終端装置 データ回線終端装置 (DCE) (DCE)
  • 13. シリアル通信 I/O名称 短縮名 方向 英語名 意味 TxD OUT Transmit Exchange Data 送信データ RxD IN Receive Exchange Data 受信データ RTS OUT Request To Send 送信要求 CTS IN Clear To Send 送信可 DTR OUT Data Terminal Ready データ端末レディ DSR IN Data Set Ready データ・セット・レディ
  • 14. NXTハードウェア インターフェース 引用: LEGO Mindstorms NXT Bluetooth Developer Kit
  • 15. 【PC】H/Wフロー制御コード nxtLogger LogPort.cs 88. // シリアルポート番号設定 89. this.PortName = portName; 90. 91. // ポートのオープン制御 92. this.Open(); 初期状態は 93. false(送信禁止)のため、 94. // 受信バッファの破棄 このコードは必須 95. this.DiscardInBuffer(); 96. 97. // ハードウェアフロー制御 98. this.DtrEnable = true; 99. this.RtsEnable = true;
  • 16. 【NXT】H/Wフロー制御コード nxtOSEK bt.c 88. void bt_init(void) 89. { 90. U8 trash; 91. U32 trash2; 92. in_buf_in_ptr = out_buf_ptr = 0; 93. in_buf_idx = 0; 94. 95. *AT91C_PMC_PCER = (1 << AT91C_PERIPHERAL_ID_US1); 96. 97. *AT91C_PIOA_PDR = BT_RX_PIN | BT_TX_PIN | BT_SCK_PIN | BT_RTS_PIN | BT_CTS_PIN; 98. *AT91C_PIOA_ASR = BT_RX_PIN | BT_TX_PIN | BT_SCK_PIN | BT_RTS_PIN | BT_CTS_PIN;
  • 19. サンプルコード 電文フォーマット オフセット +0000 0x20 ヘッダー部 +0001 0x00 (ペイロード長) +0002 0x3F +0003 0x10 ペイロード部 途中省略 (データー本体) +0033 0x72
  • 21. 【NXT】電文生成部コード nxtOSEK ecrobot_interface.c 318. U32 ecrobot_send_bt_packet(U8 *buf, U32 bufLen) 319. { 320. SINT i; 321. if (bt_status == BT_STREAM && bufLen <= BT_MAX_TX_BUF_SIZE-2) 322. { 323. sendBuf[0] = (U8) (bufLen & 0xFF); 324. sendBuf[1] = (U8) ((bufLen >> 8) & 0xFF); 325. for(i = 0; i < bufLen; i++) 326. { 327. sendBuf[i+2] = buf[i]; 328. } 329. bt_write(&sendBuf[0], 0, bufLen+2); 330. return bufLen; 331. } 332. return 0; ※ソースコードの一部を省略 333. }
  • 23. エンディアネスの説明 10進数: 32 Int型(2byte)16進数: 0x0020 バイト単位に分割 0x00 0x20 オフセット +0000 0x20 +0000 0x00 +0001 0x00 +0001 0x20
  • 24. 下位バイトマスク処理 sendBuf[0] = (U8) (bufLen & 0xFF); 16進数表記 2進数表記 bufLen 0x1234 0001 0010 0011 0100 0xFF 0x00FF 0000 0000 1111 1111 sendBuf[0] 0x0034 0000 0000 0011 0100
  • 25. 上位バイトマスク処理 sendBuf[1] = (U8) ((bufLen >> 8) & 0xFF); 16進数表記 2進数表記 bufLen 0x1234 0001 0010 0011 0100 bufLen>>8 0x0012 0000 0000 0001 0010 0xFF 0x00FF 0000 0000 1111 1111 sendBuf[0] 0x0034 0000 0000 0011 0100
  • 26. 上位バイトマスク処理 sendBuf[1] = (U8) ((bufLen >> 8) & 0xFF); 16進数表記 2進数表記 bufLen 0x1234 0001 0010 0011 0100 bufLen>>8 0x0012 0000 0000 0001 0010 0xFF 0x00FF 0000 0000 1111 1111 sendBuf[0] 0x0034 0000 0000 0011 0100
  • 27. 論理シフト(unsigned int)の場合 10進表記 16進数表記 2進数表記 43776 0xAB00 1010 1011 0000 0000 1/256 8ビット右シフト 171 0x00AB 0000 0000 1010 1011
  • 28. 算術シフト(signed int)の場合 10進表記 16進数表記 2進数表記 -21760 0xAB00 1010 1011 0000 0000 1/256 8ビット右シフト -85 0xFFAB 1111 1111 1010 1011
  • 29.
  • 30. コンテナ部データ構成 オフセット データ オフセット データ オフセット データ オフセット データ 0 8 16 24 ADC2 1 9 17 25 システム時刻 モータ0 モータ2 (ミリ秒) カウンタ カウンタ 2 10 18 26 ADC3 3 11 19 27 4 データ1 12 20 28 ADC0 5 データ2 13 21 29 モータ1 I2C カウンタ 6 14 22 30 バッテリーレ ADC1 ベル 7 15 23 31
  • 31. 【NXT】コンテナ部生成部コード (nxtOSEK) ecrobot_interface.c 735. void ecrobot_bt_data_logger(S8 data1, S8 data2) 736. { 737. U8 data_log_buffer[32]; 738. *((U32 *)(&data_log_buffer[0])) = (U32)systick_get_ms(); 739. *(( S8 *)(&data_log_buffer[4])) = (S8)data1; 740. *(( S8 *)(&data_log_buffer[5])) = (S8)data2; 741. *((U16 *)(&data_log_buffer[6])) = (U16)ecrobot_inputs.battery_state; 742. *((S32 *)(&data_log_buffer[8])) = (S32)nxt_motor_get_count(0); 743. *((S32 *)(&data_log_buffer[12])) = (S32)nxt_motor_get_count(1); 744. *((S32 *)(&data_log_buffer[16])) = (S32)nxt_motor_get_count(2); 745. *((S16 *)(&data_log_buffer[20])) = (S16)sensor_adc(0); 746. *((S16 *)(&data_log_buffer[22])) = (S16)sensor_adc(1); 747. *((S16 *)(&data_log_buffer[24])) = (S16)sensor_adc(2); 748. *((S16 *)(&data_log_buffer[26])) = (S16)sensor_adc(3); 749. *((S32 *)(&data_log_buffer[28])) = (S32)getDistance(); 750. 751. ecrobot_send_bt_packet(data_log_buffer, 32); 752. } 『リトル・エンディアン』前提の移植性の低いコード
  • 33. 【PC】コンテナ部解析部コード (nxtLogger) LogMessage.cs 248.// パケットをフィールドに変換 249.this.sysTick = BitConverter.ToUInt32(packetPayload, 0); 250.this.dataLeft = (SByte)packetPayload[4]; 251.this.dataRight = (SByte)packetPayload[5]; 252.this.batt = BitConverter.ToUInt16(packetPayload, 6); 253.this.motorCnt0 = BitConverter.ToInt32(packetPayload, 8); 254.this.motorCnt1 = BitConverter.ToInt32(packetPayload, 12); 255.this.motorCnt2 = BitConverter.ToInt32(packetPayload, 16); 256.this.sensorAdc0 = BitConverter.ToInt16(packetPayload, 20); 257.this.sensorAdc1 = BitConverter.ToInt16(packetPayload, 22); 258.this.sensorAdc2 = BitConverter.ToInt16(packetPayload, 24); 259.this.sensorAdc3 = BitConverter.ToInt16(packetPayload, 26); 260.this.i2c = BitConverter.ToInt32(packetPayload, 28);
  • 34. BitConverterクラス • 基本データ型をバイト配列に、バイト配列を基本 データ型に変換します。 • BitConverter.ToUInt16() unsigned型 • BitConverter.ToUInt16() signed型 • Intel系CPUはリトル・エンディアンのため BitConverterクラスもリトル・エンディアンで 動作します。 • 非Intel系CPU(ビッグ・エンディアン)への移植の 可能性があるのであれば、 BitConverter.IsLittleEndianフィールドのTrue/False で判定してバイト列を反転しましょう!
  • 35. Bluetooth通信の留意事項 • 受信モードから送信モードに切り替わるとき約30ミリ秒の遅れが生じる • 大きなデータパケットを受信する場合、ARMプロセッサとの間に短時間の H/W制約 遅延(small timing difference)が発生する。 • 電文の途中にで送受信の一時停止が発生する。 • 電文と電文の間のタイムラグ(休止時間)が短くなる。 影響 • 1つの電文を2回以上のデータ受信処理(APIコール)に分割して受信する。 • 1回のデータ受信処理(API)で2つ以上の電文を受け取ってしまう。 結果
  • 36. 電文受信 ステートマシン図 [受信バイト == 開始コード(0x20, 0x00)] 電文待ち 電文受信 初期状態 [受信バイト数 == 電文長]
  • 37. 電文受信 状態遷移表 イベント 受信バイト 受信バイト数 状態 開始コード == 電文長 その他 (0x20, 0x00) 電文待ち 電文受信 電文待ち 電文待ち 電文受信 電文受信 電文受信 電文待ち
  • 38. 【PC】受信バイト列を1バイトに分割するコード Form1.cs 99. /// <summary> 100. /// (メインスレッドの)ログデータ受信 101. /// </summary> 102. /// <param name="mes">データ</param> 103. private void messegeReceive(Byte[] mes) 104. { 105. for (int i = 0; i < mes.Length; i++) 106. { 107. log.Append(mes[i]); 108. } 電文の先頭を見つけるために一旦、1バイトずつに分割 109. } Byte[0]が電文の先頭とは限らない!!!
  • 39. 【PC】状態遷移(分岐)処理 LogMessage.cs 216. public void Append(Byte dat) 217. { 218. // パケットヘッダー部 219. if (byteNo < PacketHeaderLen) 220. { 221. // 順送りでパケットヘッダー配列へ保存 状態遷移の『電文待ち』 222. packetHeader[byteNo++] = dat; 223. // 中略 224. } 225. // パケットペイロード(ヘッダーを除いた本体部) 226. else if (byteNo < PacketLen) 227. { 状態遷移の『電文受信』 228. // 中略 229. } 230. else // byteNo >= PacketLenは設計の想定外 231. { 状態遷移の設計外 232. byteNo = 0; 233. } 234. } ※ソースコードの一部を省略
  • 40. 【PC】電文ヘッダー判定処理 LogMessage.cs 211. // 順送りでパケットヘッダー配列へ保存 212. packetHeader[byteNo++] = dat; 213. 214. if (byteNo == PacketHeaderLen) 215. { 216. // パケットヘッダー(パケットサイズ)のチェック 217. // NXTから送信されるパケットサイズにはヘッダの2バイト分は含まれない 218. UInt16 len = BitConverter.ToUInt16(packetHeader, 0); 219. 220. if (len != PacketPayloadLen) 221. { 222. // パケット仕様: ヘッダー = ペイロードサイズ 223. // 想定したヘッダー値でなければ1バイト分を読み捨てる 224. packetHeader[0] = packetHeader[1]; 225. byteNo = 1; 226. } 227. }