使用树莓派读取游戏手柄数据
目录
使用树莓派读取游戏手柄数据
使用树莓派读取游戏手柄数据
本教程使用树莓派读取游戏手柄数据,python3版本,可将数据读取为list。
大致思路是使用joystick软件,解析出手柄的数据,保存在文件中,再读文件数据。考虑到sd卡读写次数有限,将上述临时文件放在内存当中。
一、在shell环境下先安装手柄的操作软件
#1.更新包信息
sudo apt-get update
#2.安装手柄软件
sudo apt-get install joystick
二、测试软件是否正常工作
插上手柄,在shell中输入
cat /dev/input/js0 | hexdump
正常应该出现一堆数字,而且数字会随着手柄按键活动变化。
三、增加虚拟硬盘文件
在文件:/etc/fatab末尾增加:
tmpfs /var/jstestRes tmpfs defaults,noatime,nosuid,mode=0777,size=1m 0 0
重启树莓派后检查是否出现文件夹:/var/jstestRes
四、运行python文件:
该文件在子进程中调用文件:/home/pi/app/starter,该地址可自行确定。按照本文目录设定,应该如下:
必须具备starter文件和joyStick.py文件。
文件为脚本:
#!/bin/bash
jstest /dev/input/js0 > /var/jstestRes/res.txt
五、运行:python3 joyStick.py
六、部分代码如下:
初始化:
def __init__(self):
self.process =subprocess.Popen("/home/pi/app/starter", shell=True)
self.f = open('/var/jstestRes/res.txt', 'w+')
time.sleep(0.5)
self.CleanBufFile()
读数据:
def ReadStcick(self):
while True:
self.Buf = self.f.read()
if self.Buf != '':
# print(self.Buf)
print(self.AnsisStickData())
self.CleanBufFile()
得到手柄数据位于list:StickAxes, StickBtn当中
def AnsisStickData(self):
StickAxes = [0, 0, 0, 0, 0, 0]
StickBtn = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
tmp = self.Buf.split("Buttons:")
StickAxesData = tmp[-2]
StickBtnsData = tmp[-1]
StickAxesData = StickAxesData.split("Axes:")[-1]
StickAxesData = StickAxesData.replace(" ","")
for i in range(len(StickAxes)):
StickAxes[i] = self.GetData(StickAxesData, i)
for i in range(len(StickBtn)):
StickBtn[i] = self.GetData(StickBtnsData, i)
return StickAxes, StickBtn
pass
手柄就是普通的usb手柄,我买的时候特意在淘宝上找了一家自称可以兼容树莓派的,实测可用,20一个。链接如下:
https://item.taobao.com/item.htm?spm=a1z09.2.0.0.475b2e8dA84SaS&id=546529614303&_u=82113089bc4
附上代码链接:https://download.csdn.net/download/lianqingde/22031214