解决Raspberry PI Zero W中Lua使用lua-periphery与Python中设置的GPIO端口不一致的问题

树莓派实时系统下脚本语言的选择(应当使用Lua而不是Python)中,我们没有使用rpi-gpio,而是使用了lua-periphery来解决Lua语言下操作树莓派GPIO的问题。

当时选择lua-periphery的原因在于rpi-gpioRaspberry PI Zero W中使用的时候会崩溃。这个原因是在于cpuinfo.c这个文件中缺少对于BCM2835这颗新的CPU的判断,只判断了BCM2708估计写这个库的时候,只有BCM2708)。导致RPi_GPIO_Lua_module.c在初始化GPIO的时候抛出了异常。这个已经有人提交了代码合并请求,估计很快会修复。

但是在lua-periphery中,没有对于GPIO进行重新映射,导致跟rpi-gpio以及树莓派自带的Python库在设置GPIO的时候,端口号对应不一致。比如,在Python中设置GPIO 22,执行命令观察ls /sys/class/gpio/,会发现系统创建的是GPIO 25这个对应关系就是通过查表获取的。如下图:

为了应对这种情况,可以用如下的代码进行端口的重新映射,解决上述问题:

上述代码参考RPi_GPIO_Lua_module.c中的逻辑,简单调整而来。

更完善的参考 raspberry-gpio-python 工程里的 c_gpio.c

发布者

发表评论

电子邮件地址不会被公开。 必填项已用*标注