原文地址
先上兩張照片
八位堂出品的ZERO游戲手柄,只有一個鑰匙扣大小,攜帶非常方便,顏值也是非常高

8Bitdo.jpg
樹莓派3B+,內置藍牙模塊單元,卡片式電腦

Raspberry pi 3B+.jpg
1. 更新樹莓派軟件列表和軟件
$sudo apt-get update && apt-get upgrade -y
2. 樹莓派藍牙連接
(也可以從桌面軟件打開,此處不在介紹,有關此命令的詳細使用方法,也請自行搜索)
在Raspbian中,基本的藍牙操作可以通過bluez中的bluetoothctl命令進行。該命令運行后,將進入到一個新的Shell,可以看到,命令提示符由$變成了#:
$sudo bluetoothctl
查看命令幫助信息
#help
顯示樹莓派上可用的藍牙模塊
#list
打開power
#power on
Changing power on succeed
設置agent
#agent on
Agent registered
設置default agent
#default-agent
Default agent request successful
開始掃描
#scan on
Discovery started
當查看到自己要配對的藍牙設備后,停止掃描
#scan off
Discovery stopped
藍牙配對(換成自己的藍牙設備地址Mac)
#pair XX:XX:XX:XX:XX:XX
Pairing successful
連接藍牙(換成自己的藍牙設備地址Mac)
#connect XX:XX:XX:XX:XX:XX
Connection successful
退出藍牙配置shell
#quit
Agent unregistrted
3. 驗證RPi和手柄之間的通信
$ls /dev/input
event0 js0 mice
輸入一下命令(X填寫自己設備的實際值),按下手柄上的任意一個按鈕,此時界面上應該跟隨自己的按鍵輸出一些亂碼,先不管它,Ctrl+C退出。
$cat /dev/input/eventX
4.使用EVDEV庫測試與開發(fā)樹莓派與游戲手柄之間的藍牙通信
安裝python開發(fā)環(huán)境以及evdev庫
$sudo apt-get install python-dev
$sudo apt-get install python-pip
$sudo pip install evdev
Installing collected packages: evdev
Successfully installed evdev-1.1.2
運行測試程序,根據(jù)提示選擇自己的設備,然后按下不同的按鍵,查看輸出,然后可以根據(jù)time、type、code、value值解析出對應的按鍵和對應的動作,so easy,馬上用你的小手柄去控制其它的外部設備吧,Enjoy it!
$python /usr/local/lib/python2.7/dist-packages/evdev/evtest.py
time 1552112983.06 --------- SYN_REPORT --------
time 1552112983.2 type 3 (EV_ABS), code 1 (ABS_Y), value 127
time 1552112983.2 --------- SYN_REPORT --------
time 1552112983.35 type 3 (EV_ABS), code 1 (ABS_Y), value 0
time 1552112983.35 --------- SYN_REPORT --------
time 1552112983.44 type 3 (EV_ABS), code 1 (ABS_Y), value 127
time 1552112983.44 --------- SYN_REPORT --------
time 1552112983.59 type 3 (EV_ABS), code 1 (ABS_Y), value 0
time 1552112983.59 --------- SYN_REPORT --------
time 1552112983.65 type 3 (EV_ABS), code 1 (ABS_Y), value 127
time 1552112983.65 --------- SYN_REPORT --------
time 1552112983.96 type 3 (EV_ABS), code 1 (ABS_Y), value 255
time 1552112983.96 --------- SYN_REPORT --------
time 1552112984.07 type 3 (EV_ABS), code 1 (ABS_Y), value 127