LEGO 76112 Batman: App-controlled Batmobile - 自製蝙蝠車搖桿1

LEGO這款積木蝙蝠俠座車,是會動的,而且可以用手機App來控制。


App的名字叫做Lego Powered UP

因為常去的店裡剛好有賣,就買來玩。除了給小朋友組組積木,寓教於樂外,我也用來研究一下,它是怎麼用手機來控制的。直白的說,因為工作的關係,我一看就猜是用BLE來控制的。因為以前就寫過手機App來做過類似的事情。

開箱後,果然看到如下圖的小盒子,除了用來裝電池,還內含一電路板,其上有BLE晶片,可以讓手機連上,還有兩個連接端子,用來連接馬達。



不由分說,立馬用nRF Connect來查看一下:



果然看到一個名字叫做smart hub的裝置,試著連看看,如上圖,連上後發現只有三個服務,前兩個是標準服務UUID 1801 1800沒什麼特別的,倒是第三個服務是一個自訂的服務UUID為000016xxxxxxxxxabcd123, 可讀可寫可通知。

玩了一下Powered Up這支App,發現主要也只是控制兩個馬達的正反轉和轉速而已,因此我猜想可能是透過寫入第三個服務的特徵值來控制。至於是寫入什麼的數值,來傳逹不同的控制意思呢?那就天曉得了?

但是我們還有一個強大的武器可以使用:Sniffer


用這個工具來觀察Powered Up App和 smart hub裝置之間的通訊,可以看到手機這裡對smart hub裝置的第三個服務的特徵值寫入了一個值:0800813211510003
我們把這個數字串,透過nRF Connect寫入第三個服務的特徵值,結果是:smart hub裝的LED燈顏色變了。
所以這串數字就是改變LED燈顏色的神奇咒語:
0800813211510000  不亮

0800813211510001 各種顏色
0800813211510002
0800813211510009

080081321151000A 不亮

如上,這串數字的最後一個數字,由1至9代表不同燈光顏色,其他數字則不亮。

-----------------------------------------------------------------------------------------------

馬達轉速和正反轉的神奇咒語:

08 00 81 01 11 51 00 DA

類似地,最後一個byte用來表示轉速
00 - 7F 正轉 (00, 7F不轉,其他值小的轉速較慢,值大的轉速較快)
80 - FF 反轉 (值小的轉速較快,值大的轉速較慢)

正反轉速度和值的大小相反很奇怪,合理的解釋是:「這個位元組是有號數字,負數以二的補數格式表示。」 也就是:

十六進位  十進位
00                      0
01                      1
...
7F                     127

80                     -128
81                     -127
...
FF                    -1

這樣一來,就合理了。其實速度和數字的絶對值大小成正比,值愈大,速度愈快。而正負號和轉向相關,正的值表示正轉,負的值則為反轉。
另外,由App來看,只看到0-100, 或者到-100,也就是說,似乎大於100,或者小於-100的值都是沒有意義的。實際測試則發現101-126的反應和100似乎是一樣的。-101至-128也有相同的表現。

。。。。。。。。。。。。。。。。。。。

但是上面這個神奇咒語只能控制一個馬達,那另一個馬達怎麼控制呢?
就用下面這個神奇咒語:

08 00 81 00 11 51 00 DA

和上面比較一下,唯一不同的是,由左往右數第4個位元組,一個是01,另一個是00。

好了!這樣一來,我們就可以用任何BLE裝置來控制這台蝙蝠俠座車了。

接下來,有空的話,就可以來自製搖桿取代手機,當做控制器。




留言

這個網誌中的熱門文章

D-BUS學習筆記

關於藍牙裝置找尋(inquiry, scan)兩三事

Cisco Switch學習筆記: EtherChannel