簡體   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