开发者社区> 技术小胖子> 正文

玩转树莓派——支持PS3手柄

简介:
+关注继续查看

之前写过一篇用树莓派玩模拟器的。通过retropie可以集成不同的模拟器,在树莓派上玩街机、玩红白机、玩PSP都不是问题。

不过我不喜欢让游戏直接接管我的树莓派,毕竟用树莓派还得做正经事对吧。

还好retorpie提供on the top的使用方式,只不过是需要自行运行Shell命令。这里有指导:

https://github.com/retropie/retropie-setup/wiki/Manual-Installation

可以直接通过github拉回来:

    git clone --depth=1 https://github.com/RetroPie/RetroPie-Setup.git 
修改运行权限,然后运行设置脚本

    cd RetroPie-Setup
    chmod +x retropie_setup.sh
    sudo ./retropie_setup.sh

IMG_5273

Retropie官方支持PS3手柄的说明在这:

https://github.com/retropie/retropie-setup/wiki/Setting-up-a-PS3-controller

写的很简单,我拿到手柄照着说明,只要USB线一插上,手柄就震个不停……顿时有点绝望……

用dmesg命令看看,仿品是SHAN WAN做的,必须是咱国内仿的,你懂的。对于这个牌子的克隆货,老外用的也非常多,在github上都有专门的issue和解决……

https://github.com/RetroPie/RetroPie-Setup/issues/1677

问题是,没解决我的问题…

再加上,使用PS3的蓝牙驱动,就不能再使用蓝牙鼠标键盘啥的,很难以接受……难道要再搞一个蓝牙适配器?那和使用XBOX手柄有啥区别……

于是,我打算贴下心,研究使用补丁过的bluez驱动。好在有牛人把东西都折腾好了,我开始了新的冒险~

 

1、抓github上的打过补丁的bluez源码

git clone https://github.com/luetzel/bluez

2、配置检查并编译bluez驱动

cd bluez

./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc \ --localstatedir=/var --enable-sixaxis

make -j3

sudo make install

编译时会需要依存库或者包:

- GCC compiler

- GLib library

- D-Bus library

- udev library (optional)

- readline (command line clients)

我卡在最后一个包,猜了半天库名字,最后发现是libreadline-dev。如果缺少包,直接sudo apt-get install即可。其实在Linux上编译bluez来支持蓝牙的文章也不少,可以参考下。

搞定后用命令:

sudo service bluetooth status

可以查看蓝牙协议栈版本和daemon运行进程。我第一次没成功,是通过蓝牙版本发现的。

3、重启蓝牙服务

这步留到后面蓝牙配对之前也没啥问题。更新蓝牙堆栈之后,可以更新一下daemon。然后重启一下蓝牙服务。当然,你愿意重启树莓派我也没意见。

sudo systemctl daemon-reload

sudo service bluetooth restart 

4、从http://qtsixa.sourceforge.net/下载QtSixA源码并编译

实际只需要utils目录

make

然后找到sixpair,可以把它复制到bluez或者你常用目录下面。

将PS3手柄连接到USB线上,插入树莓派,手柄会抽筋一样不停地震。这也是我最早怀疑手柄是否能工作的原因。不管它,使用sixpair进行配对:

sudo ./sixpair

5、复制固件

因为重新编译安装了蓝牙驱动栈,需要把bcm的固件复制一下:

sudo ln -s /lib/firmware/ /etc/firmware

否则,使用sixpair显示的蓝牙地址不对,变成全是a。 
Current Bluetooth master: aa:aa:aa:aa:aa:aa 
Setting master bd_addr to aa:aa:aa:aa:aa:aa

正常的应该类似以下: 
Current Bluetooth master: b8:27:eb:e5:2f:e1 
Setting master bd_addr to b8:27:eb:e5:2f:e1

6、拔出USB线,手柄会自己连接蓝牙,当只剩下一个LED的时候,手柄就配对成功了。

可以使用蓝牙控制应用看蓝牙连接情况

sudo bluetoothctl 
[NEW] Controller b8:27:eb:e5:2f:e1raspi5 [default] 
[NEW] Device 01:B6:AD:7F:63:25 PLAYSTATION(R)3 Controller 
[NEW] Device 20:73:AB:91:DD:6F Bluetooth V3.0 Keyboard 
[CHG] Device 01:B6:52:85:63:25 Connected: yes

[PLAYSTATION(R)3 Controller]# info 01:B6:AD:7F:63:25 
Device 01:B6:52:85:63:25 
Name: PLAYSTATION(R)3 Controller 
Alias: PLAYSTATION(R)3 Controller 
Class: 0x000540 
Icon: input-keyboard 
Paired: no 
Trusted: yes 
Blocked: no 
Connected: yes 
LegacyPairing: no 
UUID: Human Interface Device... (00001124-0000-1000-8000-00805f9b34fb) 
Modalias: usb:v054Cp0268d0000

显示为Trusted,并且Connected,已经分配了UUID,就意味着手柄已经配对成功了。

 

还可以使用hciconfig来观察HCI扫描和配对的过程。在dmesg里面也能看到设备从USB转到了bluetooth/hci0上。如果什么也没发生,可以尝试增加检测:

sudo modprobe joydev

sudo modprobe uinput

 

整个过程痛苦不堪,我看了200多条英文的帖子,还不算基于这些帖子来做的搜索和查询。现在,拿起你的PS3手柄,在树莓派上玩DOOM吧~






     本文转自HaoHu 51CTO博客,原文链接:http://blog.51cto.com/haohu/1871516,如需转载请自行联系原作者






版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
图像滤镜艺术---保留细节的磨皮滤镜之PS实现
原文:图像滤镜艺术---保留细节的磨皮滤镜之PS实现 目前,对于人物照片磨皮滤镜,相信大家没用过也听过吧,这个滤镜的实现方法是多种多样,有难有简,有好有差,本人经过长时间的总结,得出了一种最简单,效果又不失细节与真实感的方法,对于这个方法,本人将先介绍它的PS实现,在下一篇博客中,我们将具体介绍它的C#代码实现。
1263 0
图像滤镜艺术---PS图层混合模式之明度模式
原文:图像滤镜艺术---PS图层混合模式之明度模式 本文将介绍PS图层混合模式中比较复杂 的“明度”模式的算法原理及代码实现内容。
1273 0
图像滤镜艺术---PS图像转手绘特效实现方案
原文:图像滤镜艺术---PS图像转手绘特效实现方案 手绘效果实现方案 本文介绍一种PS手绘效果的实现方案,PS步骤来自网络,本文介绍代码实现过程。
1155 0
[译] 如何用ps制作火焰字
火焰字教程 原文链接 按着习惯先看一下结果图: 火焰字历来是ps社区中的经典教程之一,我这是它的另外一个版本,主要是利用真实火焰结合ps滤镜技术。准备好了,就让我们开始吧! ctrl + 双击,新建 600 * 400大小的文件,填充黑色背景,使用文字工具(t)输入数字1, 字体下载,并 ctrl + s 保存当前文字,命为“火焰字”。
1150 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载