Micropython学习交流群 学习QQ群:786510434 提供多种固件下载和学习交流。
Micropython-扇贝物联 QQ群:31324057 扇贝物联是一个让你与智能设备沟通更方便的物联网云平台
Micropython学习交流群 学习QQ群:468985481 学习交流ESP8266、ESP32、ESP8285、wifi模块开发交流、物联网。
Micropython老哥俩的IT农场分享QQ群:929132891 为喜欢科创制作的小白们分享一些自制的计算机软硬件免费公益课程,由两位多年从事IT研发的中年大叔发起。
首先,贴出联网的类和使用方法如下:
class Sta():
wlan = None
def __init__(self, wifi_ssid, wifi_pwd):
self.wifi_ssid = wifi_ssid
self.wifi_pwd = wifi_pwd
def connect(self):
network.WLAN(network.AP_IF).active(False) # disable access point
self.wlan = network.WLAN(network.STA_IF)
self.wlan.active(True)
self.wlan.disconnect()
if not self.wlan.isconnected():
self.wlan.connect(self.wifi_ssid, self.wifi_pwd)
def status(self):
if self.wlan.isconnected():
return self.wlan.ifconfig()
else:
return ()
def wait(self):
cnt = 40
while cnt > 0:
print("Waiting ..." )
# con(self.wifi_ssid, self.wifi_pwd) # Connect to an WIFI_SSID
if self.wlan.isconnected():
print("Connected to %s" % self.wifi_ssid)
print('network config:', self.wlan.ifconfig())
cnt = 0
else:
sleep(5)
cnt -= 5
return
def scan(self):
return self.wlan.scan() # Scan for available access points
def CreatNetwork(self):
cnt = 40
ap_if = network.WLAN(network.AP_IF)#AP 模式
ap_if.active(True)
ap_if.config(essid=self.wifi_ssid,password=self.wifi_pwd,authmode=2)
while cnt > 0:
print("Waiting ..." )
# con(self.wifi_ssid, self.wifi_pwd) # Connect to an WIFI_SSID
if ap_if.ifconfig()[0]!='0.0.0.0':
print("start %s" % self.wifi_ssid)
print('network config:',ap_if.ifconfig()[0])
cnt = 0
return ap_if.ifconfig()[0]
else:
sleep(5)
cnt -= 5
if __name__=='__main__': #服务器逻辑入口
#####联网调用
#热点模式
a=Sta('201king','13704677369')
ip=a.CreatNetwork()
port = 9999 #端口号
# WiFi接入模式
# a=Sta('300king','13704677369')
# a.connect()
# a.wait()
以上代码不是什么高级代码,贴在这里就是为了方便,正确用博客代替记忆,所以才把这个单独拆分出来。但是在以上代码中调试时发现了2个特殊点,所以更加坚定了我开贴的决心
ESP32使用8266相同代码开启自定义热点时无法按照配置加载密码,只能建立一个开放的热点,而8266没有这个情况,直接就带密码热点。所以根据查找资料写代码ap_if.config(essid=self.wifi_ssid,password=self.wifi_pwd,authmode=2)主要是最后的authmode=后面的数字0是开放连接,其他都是带各种密码方式的,一般都是选2号密码项。
程序位置如下:
def CreatNetwork(self):
cnt = 40
ap_if = network.WLAN(network.AP_IF)#AP 模式
ap_if.active(True)
ap_if.config(essid=self.wifi_ssid,password=self.wifi_pwd,authmode=2)
ESP32、8266在连接过可以连接的WIFI后,可能会自动联网,也就说你程序配置的网络它可能不连接,而是连接它自己记住的可以连接的WiFi,导致,你会连接到测试WIFI而无法连接到工作目标的WIFI的情况,这种还比较隐不好发现,一般靠比对IP地址段区分,比如我家路由192,168。3.1,其他模块自建热点192.168.4.1,那么如果模块连到我家的路由上IP端就是3.1段的,正确连接自建工作热点就是4.1段的。那么如何避免呢?依靠self.wlan.disconnect(),在连接之前先执行一次断网操作,然后再执行连接就可以有效避免WIFI记忆了,代码位置如下:我只是指出位置,啰嗦就啰嗦吧。
def connect(self):
network.WLAN(network.AP_IF).active(False) # disable access point
self.wlan = network.WLAN(network.STA_IF)
self.wlan.active(True)
self.wlan.disconnect()
if not self.wlan.isconnected():
self.wlan.connect(self.wifi_ssid, self.wifi_pwd)
Copyright © 2014 ESP56.com All Rights Reserved
执行时间: 0.0085129737854004 seconds