LEGO 76112 Batman Part II - 自製蝙蝠車搖桿2

之前的文章提到積木蝙蝠俠座車是用手機的BLE藍牙連線來控制的。如果想要改成用joystick摇桿來操作的話,也是可以做的哦!

第1步:
  這個我們之前已經完成了,就是先了解手機是如何透過BLE來下指令給蝙蝠車。詳見之前文章,簡單回顧一下,目前我找出了3個指令:
指令1:控制LED燈的顏色,但因為組起來後被積木有點擋住,所以變不同的顏色其實看不出太好的效果。
0800813211510000  不亮
0800813211510001 各種顏色

0800813211510009

指令2:控制左邊輪子的轉速
08 00 81 01 11 51 00 DA

指令3:控制右邊輪子的轉速
08 00 81 00 11 51 00 DA


第2步:
  準備一個BLE藍牙晶片,我想使用Nordic nRF52840 Dongle,因為只要$10美金,而且板子很小就一個随身碟的大小。要在這個平台上寫BLE藍牙有許多選擇,目前看來還是使用Micropython之類的比較簡單。我前一篇文章有提到如何把Micropython環境燒錄到板子上。只是目前先用nRF52840-DK, 還沒有去試燒錄到nRF52840 Dongle!一旦環境準備好,就可以開始寫程式了。

動手寫程式之前,先來看一個example code, 這支是由Micropython之父Damien George寫的哦!
接著我會用到這支範例程式的39 - 70行。打開你的终端機軟體,連上板子後,複製貼上剛剛說的39 - 70行,然後:

>>> dev = find_device_by_name("Smart Hub")
>>> dev
ScanEntry
>>> p = Peripheral()
>>> p.connect(dev.addr())
>>> p.getServices()
[Service(handle: 0x01), Service(handle: 0x05), Service(handle: 0x0c)]
>>> s = p.getServices()
>>> s
[Service(handle: 0x01), Service(handle: 0x05), Service(handle: 0x0c)]
>>> s1 = s[2]
>>> char_1 = s1.getCharacteristics()[0]
>>> char_1.write(bytearray([0x08,0x00,0x81,0x32,0x11,0x51,0x00,0x06]))
>>> char_1.write(bytearray([0x08,0x00,0x81,0x32,0x11,0x51,0x00,0x01]))
>>> char_1.write(bytearray([0x08,0x00,0x81,0x01,0x11,0x51,0x00,0xda]))
>>> char_1.write(bytearray([0x08,0x00,0x81,0x01,0x11,0x51,0x00,0x00]))
>>> char_1.write(bytearray([0x08,0x00,0x81,0x00,0x11,0x51,0x00,0xda]))
>>> char_1.write(bytearray([0x08,0x00,0x81,0x00,0x11,0x51,0x00,0x00]))

最後6行就是對蝙蝠車下指令,對照到第1步裡說的3個指令來看:

指令1:控制LED燈的顏色
0800813211510001
char_1.write(bytearray([0x08,0x00,0x81,0x32,0x11,0x51,0x00,0x01]))

指令2:控制左邊輪子的轉速
08 00 81 01 11 51 00 DA
char_1.write(bytearray([0x08,0x00,0x81,0x01,0x11,0x51,0x00,0xda]))

指令3:控制右邊輪子的轉速
08 00 81 00 11 51 00 DA
char_1.write(bytearray([0x08,0x00,0x81,0x00,0x11,0x51,0x00,0xda]))


第3步:
  接著就要去買摇桿回來玩了,摇桿其實也只是電位計,程式寫法其實在Damien George寫的example code裡也有。等我買摇桿試了後,再來報告了。


下一篇:自製蝙蝠車搖桿3

留言

這個網誌中的熱門文章

D-BUS學習筆記

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

Cisco Switch學習筆記: EtherChannel