Micropython学习交流群 学习QQ群:786510434 提供多种固件下载和学习交流。

Micropython-扇贝物联 QQ群:31324057 扇贝物联是一个让你与智能设备沟通更方便的物联网云平台

Micropython学习交流群 学习QQ群:468985481 学习交流ESP8266、ESP32、ESP8285、wifi模块开发交流、物联网。

Micropython老哥俩的IT农场分享QQ群:929132891 为喜欢科创制作的小白们分享一些自制的计算机软硬件免费公益课程,由两位多年从事IT研发的中年大叔发起。

Micropython ESP频道

micropython esp32 esp8266 联网类


首先,贴出联网的类和使用方法如下:

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.011373996734619 seconds