BluetoothでMbedをコントロール


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

接続テストには、Wiiリモコンを使ってみました。以前にテストはしていたのですが、ホームページに記録したいのと
安いDongle を買ったので再チャレンジです。
iPhoneが、接続できて文字の入出力ができれば良いのにと思いましたがこちらは接続できませんでした。
iPhoneは音声だけなのかな?

Wiiリモコンの情報  http://wiibrew.org/wiki/Wii_Remote

Bluetooth USB Dongle


左は昔から使っていたもので、右は最近買った小さくて安い物です(480円)
http://www.gekiyasunandemoya.com/Pc_Bluetooth.html
どちらも動きました。

プログラム

上下左右のボタンにmbedのLEDをリンクさせてみました。
BlueUSBには説明がないので今回の変更点を記入しておきます。
Wiiリモコンの接続操作は、(1)ボタンと(2)ボタンを同時に押すか、電池の蓋を外して中の赤いボタンを押します。

TestShell.cpp の変更です。

最初の部分に追加
#include <mbed.h> 
DigitalOut myled1(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);
DigitalOut myled4(LED4);

static void OnHidInterrupt(int socket, SocketState state, const u8* data, int len, void* userData)
   {
       HIDBluetooth* t = (HIDBluetooth*)userData;
       if (data)
       {
           if (t->_devClass == WII_REMOTE && data[1] == 0x30)
           {
               printf("================wii====================\n");
               t->Led();
               t->Hid();   // ask for accelerometer
               t->_devClass = 0;
           }
           const u8* d = data;
           switch (d[1])
           {
               case 0x02:
               {
                   int x = (signed char)d[3];
                   int y = (signed char)d[4];
                   printf("Mouse %2X dx:%d dy:%d\n",d[2],x,y);
               }
               break;
               case 0x37: // Accelerometer http://wiki.wiimoteproject.com/Reports
               {
                   int pad = (d[2] & 0x9F) | ((d[3] & 0x9F) << 8);
                   int x = (d[2] & 0x60) >> 5 | d[4] << 2;
                   int y = (d[3] & 0x20) >> 4 | d[5] << 2;
                   int z = (d[3] & 0x40) >> 5 | d[6] << 2;
                   printf("WII %04X %d %d %d\n",pad,x,y,z);
//  ここから追加
                       switch(pad & 0x0F)
                       {
                           case 1:
                               myled1 = 1;
                               break;
                           case 2:
                               myled2 = 1;
                               break;
                           case 4:
                               myled3 = 1;
                               break;
                           case 8:
                               myled4 = 1;
                               break;
                           default  :
                               myled1 = 0;
                               myled2 = 0;
                               myled3 = 0;
                               myled4 = 0;
                       }
//ここまで
               }
               break;
               default:
                   printHex(data,len);
           }
       }
   }

回路図


参考に接続ログ  Tera Term使用 460800bps

BlueUSB
Now get a bunch of usb or bluetooth things and plug them in
USB INIT (Controller is 1396 bytes)
HubStatusChange Hub:0 Port:1 00010101
ResetPort Hub:0 Port:1
HubStatusChange Hub:0 Port:1 00100103
Connect Hub:0 Port:1 full

Class E0 found 0A12:0001

AddEndpoint D:01 A:00 T:00 P:0040 I:00
AddEndpoint D:01 A:81 T:03 P:0010 I:01
AddEndpoint D:01 A:82 T:02 P:0040 I:01
AddEndpoint D:01 A:02 T:02 P:0040 I:01
LoadDevice 1 E0:01:01
1: Bluetooth v2.0
2: Bluetooth V2.0 Dongle
Bluetooth inserted of 1
Inquiry..
Status HCI_OP_INQUIRY OK
CALLBACK_READY
HIDBluetooth 20
Inquiry..
Status HCI_OP_INQUIRY HCI_INVALID_HCI_COMMAND_PARAMETERS

// Wiiリモコン 接続操作

CALLBACK_INQUIRY_RESULT 00:1A:E9:FF:03:48
CALLBACK_INQUIRY_RESULT 00:1A:E9:FF:03:48
CALLBACK_INQUIRY_RESULT 00:1A:E9:FF:03:48
CALLBACK_INQUIRY_RESULT 00:1A:E9:FF:03:48
CALLBACK_INQUIRY_RESULT 00:1A:E9:FF:03:48
Inquiry Complete 1: 01
CALLBACK_INQUIRY_DONE
DEVICE CLASS 3: 04 25 00
Connecting to 00:1A:E9:FF:03:48
Status HCI_OP_CREATE_CONN OK
Connected on 000B
ConnectionComplete 00:1A:E9:FF:03:4810000358 10000290
L2CAPAddr size 8
Socket_Open size 8
OPEN DEVICE CLASS 3: 04 25 00
L2CAP_CONN_RSP Result 1
Connect failed?
L2CAP_CONN_RSP Result 1
Connect failed?
L2CAP_CONN_RSP Result 0
L2CAP_CONN_RSP Result 0
L2CAP_CONF_RSP Result 0
L2CAP_CONF_REQ Result 513
L2CAP_CONF_RSP Result 0
OnHidControl
L2CAP_CONF_REQ Result 513
================wii====================
0000 A1 30 00 00 .0..
OnHidControl
0000 00 .
OnHidControl
0000 00 .
0000 A1 9B 49 80 4A E0 EC 15 00 00 00 00 9C 61 B0 78 ..I.J........a.x
0010 00 00 00 00 00 00 00 .......
WII 0000 520 448 476
WII 0000 519 448 476
WII 0000 520 448 474
WII 0000 520 448 474
WII 0000 519 448 474

ボタンを押したりリモコンを動かすと WII 0000 ~ の数値が変わります

|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|
添付ファイル