首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NameError在MicroPython中使用time.sleep

NameError在MicroPython中使用time.sleep
EN

Stack Overflow用户
提问于 2018-08-24 14:37:18
回答 1查看 230关注 0票数 0
代码语言:javascript
复制
import time
from umqtt.simple import MQTTClient
from machine import Pin
from dht import DHT22

SERVER = 'X.X.X.X'  # MQTT Server Address (Change to the IP address of your Pi)
CLIENT_ID = 'ESP32_DHT22_Sensor'
TOPIC = b'temp_humidity'
running = True

client = MQTTClient(CLIENT_ID, SERVER)
client.connect()   # Connect to MQTT broker

sensor = DHT22(Pin(15, Pin.IN, Pin.PULL_UP))   # DHT-22 on GPIO 15 (input with internal pull-up resistor)


def run():
    while running:
            try:
                    sensor.measure()   # Poll sensor
                    t = sensor.temperature()
                    h = sensor.humidity()
                    tm = time.localtime(time.time())
                    if isinstance(t, float) and isinstance(h, float) and tm[0] > 2000:  # Confirm sensor results$
                            msg = (b'{0:n},{1:n},{2:n},{3:n},{4:n},{5:3.1f},{6:3.1f}'.format(tm[0], tm[1], tm[2]$
                            client.publish(TOPIC, msg, retain=True)  # Publish sensor data to MQTT topic
                            print(str(msg))
                            print('Sent to ' + SERVER + ' as ' + CLIENT_ID + '. Exiting.')
                            running = False
                    else:
                            print('Invalid sensor readings.')
            except OSError:
                    print('Failed to read sensor.')
            time.sleep(1)

很抱歉导入了整个脚本。因为它很短,我认为能够看到它的所有内容可能是有价值的。我在脚本的顶部导入时间,据我所知,所有变量在使用之前都会被引用。

我想将此脚本作为dht_publish导入,然后运行dht_publish.run()。但是,这会产生以下错误。它在ESP32开发板上的最新MicroPython二进制文件上运行。

代码语言:javascript
复制
 Traceback (most recent call last):
  File <stdin>, line 1, in <module>
  File dht_publish.py, line 33, in run
 NameError: local variable referenced before assignment

如果我注释掉time.sleep(1)行,那么错误就会被标记在前面的行上,这表明错误可能在代码中的其他地方,但我看不到在哪里。在这方面的任何帮助都将非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2018-08-26 05:08:06

如果有人尝试类似的操作并遇到相同的问题,问题是run函数中的running变量正在查找局部变量。在def run():解决问题后,将running变量的定义移到第一行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51998773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档