0

在 Raspberry Pi 4 中使用 RPi.GPIO 寻求帮助。

我有一个简单的 Greengrass Lambda 函数,它试图使用 RPi.GPIO 模块从电阻式土壤湿度传感器收集数据。我的 Lambda 函数依赖于 RPi.GPIO 模块的 Python3.7 和 0.7.0 版本。我已经使用简化的 Python 脚本验证了 GPIO 模块已安装并在 Greengrass 之外的设备上正常工作。

 import RPi.GPIO as GPIO
 import RPIO
 import time

 channel = 21
 GPIO.setmode(GPIO.BCM)
 GPIO.setup(channel, GPIO.IN)

 def callback(channel):
   if GPIO.input(channel):
     print("No water detected")
   else:
     print("Water detected")

 GPIO.add_event_detect(channel, GPIO.BOTH, bouncetime=300) 
 GPIO.add_event_callback(channel, callback)

 while True:
   time.sleep(1)

Greengrass Lambda 可以通过 IoT 组中定义的本地资源访问本地 /dev/gpiomem 文件系统。我正在使用经典(V1)。

但是,当我尝试部署 Lambda 函数时,出现以下错误:

-lambda_runtime.py:382,由于异常无法初始化Lambda运行时:这个模块只能在树莓派上运行!

我在我的 RPi 上安装了两个版本的 Python(2.7.16 和 3.7.3,Greengrass 运行时使用 3.7)并且已验证两者都具有 RPi.GPIO 模块的 0.7.0 版本。

我的 Lambda 函数显式导入模块

import logging
import platform
import sys
import RPi.GPIO as GPIO
import time

from threading import Timer
import greengrasssdk
   

有没有人遇到过这个问题,你会推荐什么解决方案?

4

2 回答 2

1

在遇到完全相同的问题后我一直在测试

我尝试过的一件事是让 Lambda(容器)在 Lambda 配置中访问 SYS,此时我遇到了另一个与覆盖 fs 问题有关的不同错误。

我发现我在 Greengrass 1.10.1(我运行的是 1.10.0)中遇到了覆盖 fs 问题的修复程序,因此我将 Greengrass(使用 OTA 更新作业)更新到 1.11.3,并在完成 GG 更新所有内容之后再次开始工作:-)

它可能不需要 SYS 访问权限,因为我尚未将其更改回来,看看是否只是需要 Greengrass 更新。

已重新测试并确认它确实需要容器的 /sys 访问权限

对于信息,在提出有关执行通常的 apt-get 更新/升级并确保 RPi.GPIO 是最新的解决方案之前,我尝试了各种方法,但这些都没有任何区别。

于 2021-07-20T15:28:13.597 回答
0

我遇到过同样的问题。问题是 greengrass 用户无权访问 gpio 引脚。

只需将 ggc_user 添加到 gpio 组。您可以通过在 Raspberry Pi 上编辑 /etc/group 来做到这一点:

gpio:x:997:pi,ggc_user
于 2021-08-26T13:50:59.043 回答