在此树莓派 Wiimote 控制器指南中,我们将引导您完成在树莓派上设置 Wiimote 的过程,并向您展示如何设置 cwiid 和 wminput 。
由于处理蓝牙堆栈,在树莓派上使用 Wiimote 控制器可能很麻烦。当它们通过标准蓝牙运行时,其实际功能并未作为传统的操纵杆像 Xbox 控制器之类的设备和 PlayStation 控制器。
为了以大多数应用程序可以支持的方式支持 Wiimote 控制器的全部功能,我们必须使用两套软件。
这些是 cwiid 和 wminput 。一个充当库,将 Wiimotes 动作解释为操纵杆动作,另一个充当某种驱动程序,该驱动程序创建应用程序可以轻松利用的输入设备。
设备清单
以下是本树莓派 Wiimote 控制器教程中使用的所有点点滴滴。
推荐的
树莓派 2、 3 或 4
Micro SD 卡
电源
Wiimote 控制器
蓝牙适配器 (仅当未使用 Pi 3 或零 W 时)
可选的
- 树莓派外壳
在树莓派上设置 Wiimote
令人遗憾的是,与大多数无线控制器一样,Wiimotes 在直接使用树莓派时无法正常工作。尽管 Wiimote 控制器使用蓝牙,但其大多数功能在标准接口下无法正确使用。
为了避免这种情况,我们可以利用两个不同的软件。我们使用它们,因为它们被广泛接受为简单的解决方案,并且被流行的 [Retropie] 项目使用。
1 现在,在我们开始将 Wiimote 与树莓派结合使用的第一种方法之前,我们必须首先确保所有内容都是最新的。为此,请在树莓派上运行以下命令。
sudo apt-get update
sudo apt-get upgrade-y
sudo apt-get dist-upgrade -y
sudo rpi 更新
2 现在,我们已经更新了树莓派,让我们继续安装本教程所需的一些软件包。
** Python-Cwiid ** 是 libcwiid 的 python 接口。 Libcwiid 是一个库,旨在充当 Wiimote 控制器与 Linux 操作系统之间的桥梁,并将控制器的操作解释为可以通过编程方式理解的内容。
** Wminput ** 是本教程的重要组成部分,它充当 Wiimote 的事件 / 操纵杆 / 鼠标驱动程序,使操作系统能够将其理解为其控制器设备之一。 Wminput 帮助使其与任何支持操纵杆设备的程序兼容。
sudo apt-get install python-cwiid
sudo apt-get install wminput
请注意,如果您使用的是 ** 树莓派 2 或更早版本 **,则可能需要安装蓝牙程序包,我们才能这样做需要在我们的树莓派上运行以下命令。
sudo apt-get install蓝牙
3 现在,我们需要将软件包安装到树莓派上,我们需要设置 udev 规则以允许非 root 用户访问我们的 uinput 设备。 Uinput 是 wminput 在其上创建我们的 Wiimote 的接口。
我们可以通过运行以下命令来创建这些 Wiimote 规则。
sudo vim /etc/udev/rules.d/wiimote.rules
4 在文件中输入以下行。系统启动时将读取此行。
KERNEL =="uinput",MODE ="0666"
5 现在,我们先按 Ctrl + X **,然后再按 Y **,最后按 Enter 键来保存文件。
6 现在,我们重新启动 udev 服务,这样做是为了将其加载到我们在上一步中编写的新规则文件中。为此,我们只需要在树莓派上运行以下命令。
sudo service udev restart
7 现在,在进行深入研究之前,我们应确保蓝牙服务已启动并正在运行,为此,我们可以利用以下命令检查其状态。
sudo systemctl状态蓝牙
如果您在命令行中看到”** Active:活动 (运行中)**”,则可以继续进行本教程的第 8 步。
如果您看到其他任何内容,则可以通过运行以下命令来尝试重新启动蓝牙服务,在某些情况下,它将重新启动它,但在其他情况下,可能会出现实际错误,无法正常工作。 sudo systemctl 启动蓝牙
8 现在我们知道蓝牙服务已启动并正在运行,让我们继续通过创建配置文件来完成 wminput 的设置。此配置文件会将所有 wiimote 按钮与 Linux 中的特定操作 / 事件相关联。
让我们通过运行以下命令来创建所需的配置文件,对于 GUID ,我们将其命名为”** mywminput **”。
sudo vim /home/pi/mywminput
9 在此文件中输入以下行,这为经典控制器 Wiimote 和双节棍控制器提供了基本设置。
#经典控制器
Classic.Dpad.X = ABS_X
Classic.Dpad.Y = ABS_Y
Classic.LStick.X = ABS_HAT0X
Classic.LStick.Y = ABS_HAT0Y
Classic.RStick.X = ABS_HAT1X
Classic.RStick.Y = ABS_HAT1Y
经典 A = BTN_A
经典 B = BTN_B
经典 X = BTN_X
经典.Y = BTN_Y
经典减号= BTN_SELECT
Classic.Plus = BTN_START
Classic.Home = BTN_MODE
经典.L = BTN_TL
经典.R = BTN_TR
经典.ZL = BTN_TL2
经典.ZR = BTN_TR2
#WiiMote
Wiimote.A = BTN_A
Wiimote.B = BTN_B
Wiimote.Dpad.X = ABS_Y
Wiimote.Dpad.Y = -ABS_X
Wiimote.Minus = BTN_SELECT
Wiimote.Plus = BTN_START
Wiimote.Home = BTN_MODE
Wiimote.1 = BTN_X
Wiimote.2 = BTN_Y
#Nunchuk
Nunchuk.C = BTN_C
Nunchuk.Z = BTN_Z
10 下一步是完全可选的,如果您不希望打开任何 Wiimote LED,则可以跳至本树莓派 Wiimote 控制器教程的 ** 步骤 11 **。
另外,如果您想学习如何更好地配置 Wiimote 配置文件,可以查看以下两个有用的文档,第一个是可在配置文件中使用的 Wiimote 按钮和轴的列表,您可以找到以下 Wiimote 按钮和其 Github 上的轴。
另一个是您可以分配给 Wiimote 按钮和轴的可能按钮和轴的列表,如上面的链接中列出的那样,您可以在 [cwiids github 页面上找到此按钮和轴的列表](https://github.com /abstrakraft/cwiid/blob/master/wminput/action_enum.txt)。
如果要设置在建立与 Wiimote 的连接后将启用哪些 LED ,则可以使用以下几行之一进行设置。只需将任何所需的内容添加到 mywminput 配置文件的底部,
Plugin.led.Led1 = 1
#Plugin.led.Led2 = 1
#Plugin.led.Led3 = 1
#Plugin.led.Led4 = 1
11 现在,通过按 Ctrl + X ,然后按 Y ,最后按 Enter **,保存 wminput 配置文件。
12 现在,我们可以继续获取 Wiimote 的所有 MAC 地址,我们将需要这些地址来启动与树莓派的蓝牙设备的连接。
我们可以利用以下命令搜索周围的任何蓝牙设备。
hcitool扫描
启动该工具后,同时按 Wiimote 控制器上的 ** 1 + 2 ** 按钮以开始发现过程。如果您不确定我们指的是什么按钮,请查看下图。
13 您应该在命令行中看到类似以下的内容,这将是 Wiimote 控制器的 MAC 地址,后跟一个标识符。写下您打算使用的每个控制器的 MAC 地址。
正在扫描...
00:24:1E:63:E0:AD Nintendo RVL-CNT-01
14 现在,让我们继续设置脚本,以简化将控制器连接到树莓派的过程。我们将编写一个脚本,以便在启动时对其进行初始化。
我们将逐节解释 bash 脚本的功能,以使您了解所有工作原理。
首先,我们在树莓派上运行以下命令,在主目录中创建一个文件来存储此 bash 脚本。
vim /home/pi/connectwiimote.sh
15 现在,将以下几行添加到我们的 ** connectwiimote.sh ** 文件中。我们将尽力解释一切。首先输入前三行代码。
#!/bin/bash
sleep 1#等待蓝牙服务完全初始化
hcitool开发人员| grep hci>/dev/null
第一行充当标识符,因此操作系统知道使用 **/bin/bash ** 来运行文件。
第二行告诉脚本休眠一秒钟,我们这样做是为了确保在尝试使用蓝牙服务之前,蓝牙服务已完全启动。
第三行使用 ** hcitool ** 来查看是否有可用的蓝牙适配器,如果没有可用的蓝牙适配器,这将停止 wminput 工具的运行。
如果测试$? -eq 0;然后
wminput -d -c/home/pi/mywminput YOUR_MAC_ADDRESS&
其他
第一行只是检查看看我们以前的 hcitool 行是否给了我们一个结果,我们需要知道蓝牙适配器是否可用。我们的下一行是文件中最关键的部分之一。此行初始化 wminput ,开始搜索您的 Wiimote 控制器。
您可以使用多行这些,只需确保在每次出现时都用要连接的 Wiimote 控制器的 MAC 地址替换 ** YOUR \ _MAC \ _ADDRESS **。
第三行是简单的 else 语句,它遵循我们最后的三行代码。
echo "蓝牙适配器不存在!"
1号出口
科幻
最后三行代码非常简单。第一行仅将” 蓝牙适配器不存在!“打印到命令行。当 hcitool 看不到蓝牙适配器时,会出现此消息。
第二行只是阻止脚本进一步执行。
最后,代码的最后一行只是标记 if ,else 语句的结尾。
16 完成所有代码行的编写后,您应该得到类似于下面显示的内容。当然,用您的 MAC 地址代替 ** YOUR \ _MAC \ _ADDRESS **。
#!/bin/bash
sleep 1#等待蓝牙服务完全初始化
hcitool开发人员| grep hci>/dev/null
如果测试$? -eq 0;然后
wminput -d -c/home/pi/mywminput YOUR_MAC_ADDRESS&
其他
echo "不存在蓝牙适配器!"
1号出口
科幻
我们还提供了一个示例,说明您尝试连接多个不同的控制器时文件的外观。您可以在下一页的代码段中看到它。
#!/bin/bash
sleep 1#等待蓝牙服务完全初始化
hcitool开发人员| grep hci>/dev/null
如果测试$? -eq 0;然后
wminput -d -c/home/pi/mywminput YOUR_MAC_ADDRESS&
wminput -d -c/home/pi/mywminput YOUR_MAC_ADDRESS&
wminput -d -c/home/pi/mywminput YOUR_MAC_ADDRESS&
其他
echo "不存在蓝牙适配器!"
1号出口
科幻
17 确定代码正确无误后,请依次按 ** Ctrl + X ,然后按 Y **,最后按 ENTER 键保存文件。
18 现在,在创建脚本后,让我们继续使用 chmod 赋予它 ** 775 权限使其可执行。此行将允许所有者和组具有完全的 read / write / execute ** 权限,但仅授予其他所有人运行脚本的能力。
为此,请在树莓派的命令行上运行以下行。
sudo chmod 775 /home/pi/connectwiimote.sh
19 现在,让我们进入脚本的测试阶段。首先,要做到这一点,我们必须首先启用 uinput 模块。我们可以通过在树莓派上运行以下命令来利用 modprobe 做到这一点。
sudo modprobe uinput
20 现在启用了 uinput 模块,我们终于可以运行脚本来测试它是否真正起作用了。为此,只需运行以下命令。
/home/pi/connectwiimote.sh
在脚本运行时,按 Wiimote 控制器上的 ** 1 + 2 ** 按钮,这将初始化连接。在完全关闭电源或更改为在本教程的步骤 9 中设置的设置之前,它们应该短暂闪烁。
21 现在,我们知道脚本正在运行,让我们继续下一步,那就是使脚本和 uinput 模块在启动时启动,以便您的控制器可以随时连接。
我们将从编辑 **/etc/modules ** 文件开始,以在启动时加载 uinput 。运行以下命令以开始编辑文件。
sudo vim /etc/modules
22 在此文件的下面添加以下行。此行将确保在启动时加载 uinput 。
输入
23 现在,您可以通过按 Ctrl + X ,然后按 Y ,然后最后按 Enter ** 来保存文件。
24 最后,让我们编辑 rc .local 文件,我们将在启动时利用该文件执行 connectwiimote.sh ** 脚本。首先,利用以下命令编辑文件。
sudovim/etc/rc.local
25 现在,在此文件中添加以下行。
找
出口 0
添加以上
sh /home/pi/connectwiimote.sh
26 您现在可以按 Ctrl + X ,然后按 Y ,然后最后按 Enter ** 保存文件。
27 现在,我们必须重新启动树莓派进行测试,以查看脚本是否正确执行。为此,请在树莓派上运行以下命令。
sudo reboot
28 现在,如果按 Wiimote 控制器上的 ** 1 + 2 ** 按钮,它将自动建立成功的连接。如果是这样,则说明您已经完成了将 Wiimote 同步到树莓派的过程。
29 现在,我们应该测试控制器,以确保它实际上工作正常,我们使用了 jstest 工具。要开始使用此功能,请先安装操纵杆程序包,而 Raspbian 的完整安装程序通常包含此程序包,但 lite 版本中未包含该程序包。
通过在其上运行以下命令,将其安装在您的树莓派上。 sudo apt install 操纵杆
30 现在,通过运行以下命令来测试我们的新游戏杆设备,在 jstest 工具中,您应该看到对 Wiimote 进行某些操作后值会发生变化。
sudo jstest /dev/input/js0
有很多原因使您可能希望在树莓派上设置这些控制器。最大的原因之一是您可以在树莓派上玩游戏,但是有很多常规项目可以将它们用作控制器。
希望到本树莓派 Wiimote 指南结束时,您现在已经启动树莓派并与 Wiimotes 成功连接,并可以运行。如果您对本教程有任何反馈或需要帮助,请在下面留言。