我有一个esp - room -32,它快把我逼疯了。我把它连接到WiFi网络上还好,但它再也连接不上了。我没有做任何更改或更新任何东西,但突然它给出了这个错误:
设置开始连接到"我的网络";回溯(最近一次调用):文件的第22行NameError: name 'sta_if'没有定义
当我第一次尝试设置它时,我被这个完全相同的错误所困扰,但它似乎自己消失了,并工作了一段时间。'
import time
import network
ssidRouter = 'my network' #Router name
passwordRouter = 'my password' #Router passsword
def STA_Setup(ssidRouter,passwordRouter):
print("Setup start")
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('connecting to',ssidRouter)
sta_if.active(True)
sta_if.connect(ssidRouter,passwordRouter)
while not sta_if.isconnected():
pass
print('Connected, IP address:', sta_if.ifconfig())
print("Setup End")
try:
STA_Setup(ssidRouter,passwordRouter)
except:
sta_if.disconnect()
'有人知道是什么导致了这种行为吗?
我试过重置它,循环电源,重新启动我的电脑,不同的USB电缆,以确保未损坏的上传,删除和重新上传代码,使用额外的电源,对它大喊大叫,对它说话很好…
sta_if
在STA_Setup()
函数中声明。你试图在函数之外访问它,这就是为什么你得到一个错误。
你可以通过去掉Try/Except来简化事情。如果您想在连接超时时显示错误,那么应该这样做:
from network import WLAN, STA_IF
from time import ticks_ms
AP_NAME = 'myAP'
AP_PASS = 'abc123'
WIFI_TIMEOUT = 60
print('Connecting...')
wlan = WLAN(STA_IF)
wlan.active(True)
wlan.connect(AP_NAME, AP_PASS)
start_time = ticks_ms()
while not wlan.isconnected():
if (ticks_ms() - start_time > WIFI_TIMEOUT * 1000):
break
if (wlan.isconnected()):
print('Connected')
else:
print('Timeout!')
在while循环中,你现在计算秒数,而不仅仅是pass
。如果连接没有在分配的时间内发生,则退出循环。最后检查连接,让您知道它是否成功。