如何在 Raspberry PI 4 上 运行 RPI.GPIO AWS Greengrass Core 中的模块

How to run RPI.GPIO module in AWS Greengrass Core on a Raspberry PI 4

寻求帮助使用 RPi.GPIO 和 Raspberry Pi 4.

我有一个简单的 Greengrass Lambda 函数,它试图使用 RPi.GPIO 模块从电阻式土壤湿度传感器收集数据。我的 Lambda 函数依赖于 Python3.7 和 RPi.GPIO 模块的 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)

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

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

-lambda_runtime.py:382,Failed to initialize Lambda runtime due to exception: This module can only be run on a Raspberry Pi!

我在我的树莓派上安装了两个版本的 Python(2.7.16 和 3.7.3,Greengrass 运行时使用 3.7)并且已经验证它们都具有 [=31= 的版本 0.7.0 ]模块。

我的 Lambda 函数显式导入模块

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

from threading import Timer
import greengrasssdk
   

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

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

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

我发现我在 Greengrass 1.10.1(我是 运行 1.10.0)中遇到的覆盖 fs 问题有一个修复程序,所以我随后将 Greengrass(使用 OTA 更新作业)更新到 1.11 .3 完成 GG 更新后,一切又开始工作了:-)

It may not need the SYS access as I have yet to change that back and see if it was just the Greengrass update that was needed.

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

有关信息,在提出围绕执行通常的 apt-get update/upgrade 并确保 RPi.GPIO 是最新的解决方案之前,我尝试了各种方法,但是 none这些有什么不同。

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

只需将 ggc_user 添加到 th gpio 组。您可以通过编辑 Raspberry Pi:

上的 /etc/group 来完成此操作
gpio:x:997:pi,ggc_user