python - 如何在 Raspberry PI 4 上的 AWS Greengrass Core 中运行 RPI.GPIO 模块
问题描述
在 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
有没有人遇到过这个问题,你会推荐什么解决方案?
解决方案
在遇到完全相同的问题后我一直在测试
我尝试过的一件事是让 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 是最新的解决方案之前,我尝试了各种方法,但这些都没有任何区别。
推荐阅读
- php - Docker PHP 7.3 包具有未满足的依赖项
- css - angular.json 中的 Angular Styles 数组被 configuraion Styles Array 覆盖
- android - 不再支持目标选项 1.5。使用 1.6 或更高版本
- php - Unicode 上标仅适用于前几位数字
- ios - iOS Flutter App:如何管理启用/禁用屏幕截图
- javascript - CSS 正确定位搜索菜单
- python - APIError(code=-1100): 在参数'symbol'中发现非法字符;合法范围是 '^[A-Z0-9-_.]{1,20}$'
- javascript - 如何限制输入字段中某些字符的数量?
- powershell - Powershell 调用响应 Where 子句
- r - 使用 ggplot2 将平均值添加到 R 中的分组箱形图