繁体   English   中英

从 Google Assistant SDK 激活 GPIO 或任何 Python 脚本

[英]Activate GPIO or any Python Script from Google Assistant SDK

昨天我在我的 Raspberry Pi 4 上安装了 Google Assistant SDK,我使用了这个( https://developers.google.com/assistant/sdk/guides/service/python )教程,并想让 GPIO 25 打开并通过 onoff 特征关闭,在本节中解释( https://developers.google.com/assistant/sdk/guides/service/python/extend/handle-device-commands )。

但是他们这样做的方式对我不起作用,当我运行助手并说“打开”时,Gpio 没有任何反应。

当直接运行“pushtotalk.py”时,它会给你一个错误 output 并且它显示设备处理程序没有定义,即使它就在 onoff function 之前。

这是我的代码(来自谷歌):

device_handler = device_helpers.DeviceRequestHandler(device_id)
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT, initial=GPIO.LOW)

device_handler.command('action.devices.commands.OnOff')
def onoff(on):
    if on:
        logging.info('Turning device on')
        GPIO.output(25, 1)
    else:
        logging.info('Turning device off')
        GPIO.output(25, 0)

这是错误:

 Traceback (most recent call last):
  File "pushtotalk.py", line 465, in <module>
    main()
  File "/home/pi/env/lib/python3.7/site-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/home/pi/env/lib/python3.7/site-packages/click/core.py", line 697, in main
    rv = self.invoke(ctx)
  File "/home/pi/env/lib/python3.7/site-packages/click/core.py", line 895, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/pi/env/lib/python3.7/site-packages/click/core.py", line 535, in invoke
    return callback(*args, **kwargs)
  File "pushtotalk.py", line 425, in main
    device_handler.command('action.devices.commands.OnOff')
UnboundLocalError: local variable 'device_handler' referenced before assignment

Python 对缩进级别(不是字符)非常严格。 您的device声明有一个缩进。 使其与device_handler对齐应该可以解决该错误。

device = '3eeb4608-7913-11ea-ad54-dca632812cbd'
device_handler = device_helpers.DeviceRequestHandler(device)
GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT, initial=GPIO.LOW)

device_handler.command('action.devices.commands.OnOff')
def onoff(on):
    if on:
        logging.info('Turning device on')
        GPIO.output(25, 1)
    else:
        logging.info('Turning device off')
        GPIO.output(25, 0)

这种方式现在工作非常稳定并且设备处理程序现在被识别,即使我只更改了 if 语句中的行,显然导入 GPIO 模块存在问题。

 device_handler = device_helpers.DeviceRequestHandler(device_id)

 @device_handler.command('action.devices.commands.OnOff')
 def onoff(on):
     if on:
         logging.info('Turning device on')
         os.system('python <Filename>.py')
     else:
         logging.info('Turning device off')
         os.system('python <filename>.py')

这样,您可以使用 Google 助理轻松激活 Python 脚本,例如。 只需说“打开”即可使用 Raspberry Pi。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM