2021-12-23 关于micropython的ESP32/8266联网的类以及2个特别注意的点的记录

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

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个特殊点,所以更加坚定了我开贴的决心

  1. 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)
  1. 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)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值