MicroPython,多路复用7段显示,请求,循环问题



我已经尝试了这个项目的许多变体。最终目标是,一个运行Micropython的树莓派Pico W,和一个共同的阴极4位数,7段显示器(不是TM1637类型,这将是最后的手段,但必须有一种方法可以做到这一点,我正试图弄清楚),这将从API收集温度数据,然后将数据多路显示正确,同时继续监控温度值。

问题在于,当我回调urequests.get(temp_url).ujson()再次收集数据时,该命令导致显示暂时变黑,直到该代码块通过,但是我无法想象可以反复获取临时值,这既不会导致多路复用循环停止,也不会更新过去API数据的第一次获取。

这段代码让我很纠结。main函数只是调用连接,并有一些异常代码,其他异常已经被删除,用于诊断。这绝对是一个正在进行的工作,忽略任何缩进问题是由复制和粘贴造成的,并记住这是一个文件,已经改变,改变和调整,试图以不同的方式获得结果,但我所有的尝试似乎都导致同样的问题。

refresh = 0.0025和dig1-4, SegDisplay,都是用于设置数字和输出到可接受引脚以产生数字的代码的一部分。PL1-4只是被用来将温度值分割成多达4个单独的数字,然后用于以刷新速度循环。这部分代码工作得很好,如果我设置了一个静态数字,它工作得很好,但是一旦需要在请求(urequests和ujson作为请求和json)时检查数字,显示器变黑半秒左右,然后每次检查时返回r=requests.get.....

def display():
dig1.value(1)
dig2.value(1)
dig3.value(1)
dig4.value(1)
while True:
value = get_temp()
value = round(value)
value = str(value)
if value == None:
clear()
break
elif len(value)==1:
pl1 = "0"
pl2 = "0"
pl3 = "0"
pl4 = value[0]
dig1.value(1)
dig2.value(1)
dig3.value(1)
dig4.value(1)
SegDisplay(pl4)
dig4.value(0)
sleep(refresh)
dig4.value(1)
elif len(value)==2:
value = get_temp()
print(value)
value = round(value)
value = str(value)
pl1 = "0"
pl2 = "0"
pl3 = value[0]
pl4 = value[1]
dig1.value(1)
dig2.value(1)
dig3.value(1)
dig4.value(1)
SegDisplay(pl3)
dig3.value(0)
sleep(refresh)
dig3.value(1)
SegDisplay(pl4)
dig4.value(0)
sleep(refresh)
dig4.value(1)
elif len(value)==3:
pl1 = "0"
pl2 = value[0]
pl3 = value[1]
pl4 = value[2]
dig1.value(1)
dig2.value(1)
dig3.value(1)
dig4.value(1)
SegDisplay(pl2)
dig2.value(0)
sleep(refresh)
dig2.value(1)
SegDisplay(pl3)
dig3.value(0)
sleep(refresh)
dig3.value(1)
SegDisplay(pl4)
dig4.value(0)
sleep(refresh)
dig4.value(1)
elif len(value)==4:
pl1 = value[0]
pl2 = value[1]
pl3 = value[2]
pl4 = value[3]
SegDisplay(pl1)
dig1.value(0)
sleep(refresh)
dig1.value(1)
SegDisplay(pl2)
dig2.value(0)
sleep(refresh)
dig2.value(1)
SegDisplay(pl3)
dig3.value(0)
sleep(refresh)
dig3.value(1)
SegDisplay(pl4)
dig4.value(0)
sleep(refresh)
dig4.value(1)


def get_temp():
r = requests.get(temp_url).json
temp = r.get('ispoint')
return temp



def connect():
#Connect to WLAN
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while wlan.isconnected() == False:
print('Waiting to connect...')
sleep(1)
ip = wlan.ifconfig()[0]
print(f'Connected on {ip}')
led.value(1)
display() #CALL DISPLAY
return ip

注意事项:这些都是在Micropython上完成的。我找不到任何预构建库的4位数7段显示不是TM1637类型。再一次,这部分似乎工作,只是当我试图调用r=requests.get(temp_url).json(),它停止多路复用循环的瞬间,这显然使显示明显闪烁黑暗。

对不起,这有点令人困惑。只是想看看是否有人有任何想法,我错过了试图得到一个平滑的显示多路复用循环,同时也检查从API在同一循环的温度。

您可以尝试使用uasyncio (https://github.com/peterhinch/micropython-async)。该模块是micropython的标准安装,用于处理此类问题。

最新更新