【问题标题】:Programming Metronome Python Script with PubNub for Raspberry Pi使用 PubNub 为 Raspberry Pi 编写节拍器 Python 脚本
【发布时间】:2016-05-29 21:10:33
【问题描述】:

我创建了一个 Android 移动应用程序,它通过 PubNub 发送一个 BPM 变量(0 到 160 之间)。

我的目标是根据 BPM 值让我的 Raspberry Pi (GPIO 18) 上的 LED 在每次节拍时闪烁。正如您在代码中看到的那样。但是,当我启动我的脚本时。似乎什么都没有发生。 LED 保持关闭状态。 当我尝试打印我的变量数据(例如 BPM 值)时 - 看看是否有任何事情发生。我的 Raspberry Pi 上什么也没有弹出

我不知道我的脚本可能缺少什么或错误,因为它也没有给我任何错误消息。 我还验证了我的应用通过 PubNub 发送数据。

到目前为止,这是我的脚本:

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import timeit
from threading import Thread
from pubnub import Pubnub
GPIO.setwarnings(False)


GPIO.setmode(GPIO.BOARD)
GPIO.setup(18, GPIO.OUT)

global BlinkLED = 160   

pubnub = Pubnub(publish_key = 'cencored',
subscribe_key = 'cencored')
channel = 'metronoom' 

def _callback(msg, n):

    def BlinkLED(BPM):
        BeatsPerSecond = BPM / 60
        while true:
            strStatus = "LED is turned on"
            GPIO.output(18,False); time.sleep(BeatsPerSecond)
            GPIO.output(18,True)
            strStatus = "LED is turned off"
            print (strStatus)
    BlinkLED(msg['BPM'])    


def _error(m):
    print(m)

pubnub.subscribe(channels=channel, callback=_callback, error=_error)

【问题讨论】:

    标签: android python raspberry-pi pubnub


    【解决方案1】:

    我找到了解决方案,它现在可以工作了。 我会在这里分享。我仍然有一个问题,它因为“while:True”而陷入循环。一旦新的 BPM 值被发送到 Pi,我就找不到退出循环的方法。所以每次我想获得不同的节奏时,我都必须重新运行脚本。

    #!/usr/bin/python
    import RPi.GPIO as GPIO
    import time
    import timeit
    from pubnub import Pubnub
    
    
    pubnub = Pubnub(publish_key = 'pub-c-b03db6ec-221e-483a-9582-9875ca362260',
    subscribe_key = 'sub-c-13c8a43a-df92-11e5-aff5-02ee2ddab7fe')
    channel = 'metronoom' 
    
    global BPM
    global Divider
    Divider = 60.000000
    Divider2 = 2.000000
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(18, GPIO.OUT)
    def BlinkLED(BPM):  
        while True:
            GPIO.setwarnings(False)
            format(BPM, '.6f')
            GPIO.setmode(GPIO.BCM)
            GPIO.setup(18, GPIO.OUT)
            BeatsPerSecond = Divider / BPM
            Interval = BeatsPerSecond / Divider2
            print(BPM)
            print(BeatsPerSecond)
            GPIO.output(18,True)
            GPIO.output(18,False)
            time.sleep(BeatsPerSecond)
    
    def _callback(msg, n):
        print(msg)
        BlinkLED(msg["BPM"])
    
    def _error(m):
        print(m)
    
    pubnub.subscribe(channels=channel, callback=_callback, error=_error)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 2014-11-07
      • 2023-03-05
      • 2021-10-09
      • 1970-01-01
      相关资源
      最近更新 更多