收藏

ESP32连接WIFI

分类: 基础知识篇 >> ESP32网络相关 发布于 2024-05-15 394次阅读0点赞0收藏

1. 设置工作模式

Wi-Fi是基于IEEE 802.11标准的无线网络技术 让联网设备以无线电波的形式,加入采用TCP/IP通信协议的网络

Wi-Fi网络环境通常有两种设备

  • Access Point(AP) 无线接入点,提供无线接入的设备,家里的光猫就是结合WiFi和internet路由功能的AP。AP和AP可以相互连接。
  • Station(STA) 无线终端,连接到AP的装置,手机,电脑等需要联网的设备都是出于STA模式,这个模式不允许其他设备接入。

    2. SSID

    BSSID就是无线路由器的MAC地址(本质是一个MAC地址)
    SSID就是手机上搜索到的wifi名字(本质是一串字符)
    ESSID是一个比较抽象的概念,它实际上就和ssid相同(本质也是一串字符)。如果有好几个无线路由器都叫这个名字,那么我们就相当于把这个ssid扩大了,所以这几个无线路由器共同的这个名字就叫ESSID
    打个比方:
  • SSID就好比是每个连锁店的门口招牌上写的字(例如:阿迪达斯)
  • ESSID就是连锁店的牌子(例如:阿迪达斯)
  • BSSID就是每个连锁店的地址(比如万达广场店,襄阳路店)
  • 连锁店的品牌名与写到招牌上的名就相当于ESSID和SSID

    使用方法:

# 导入 network 模块
import network

# 创建 WIFI 连接对象
wlan = network.WLAN(network.STA_IF)
# 激活 wlan 接口。True 是激活,False 关闭
wlan.active(True)
# 扫描允许访问的 SSID 
wlan.scan()
# 检查设备是否已经连接成功
wlan.isconnected()    
# WIFI 连接,ssid 是账号,password 是密码
wlan.connect('ssid', 'key')
# 获取接口的 mac 地址,也就是物理地址
wlan.config('mac')
# 获取接口的 IP、子网掩码(netmask)、网关(gw)、DNS 地址
wlan.ifconfig()

01. 热点模式

热点模式允许用户将自己的ESP32配置为热点,这让多个 ESP32 芯片之间的无线连接在不借助外部路由器网络的情况下成为可能。

import network

ap = network.WLAN(network.AP_IF) # 创建一个热点
ap.active(True)         # 激活热点
ap.config(essid='ESP32') # 为热点配置essid(即热点名称)

运行之后,我们就可以使用电脑在 WiFi 列表中找到 ESP32 热点。

02. 连接 WiFi

更多的情况下,我们会想要将 ESP32 连接到 WiFi 网络。因此,我们的代码可以这么写:

import time
import network


# 设置路由器 WiFi 账号与密码
ssid = '要连接的 Wifi 名'
password = 'Wifi 密码'

# 创建 WIFI 连接对象
wlan = network.WLAN(network.STA_IF)
# 激活 wlan 接口
wlan.active(True)
# 扫描允许访问的 WiFi
print('扫描周围信号源:', wlan.scan())

print("正在连接 WiFi 中", end="")
# 
wlan.connect(ssid, password)

# 如果一直没有连接成功,则每隔 0.1s 在命令号中打印一个 .
while not wlan.isconnected():
  print(".", end="")
  time.sleep(0.1)

# 连接成功之后,打印出 IP、子网掩码(netmask)、网关(gw)、DNS 地址
print(f"\n{wlan.ifconfig()}")

03. 上电自动连接 WiFi

我们对以上代码稍作改动,将其封装为一个函数,并把 WIFI 名字和密码改为 wifi_connect 的参数,并把代码放置在 MicroPython 设备中的 common 目录下的 wifi.py 中,代码如下

# common/wifi.py
import time
import network


def wifi_connect(ssid, password):
    # 创建 WIFI 连接对象
    wlan = network.WLAN(network.STA_IF)
    # 激活 wlan 接口
    wlan.active(True)

    # 断开之前的链接
    wlan.disconnect()
    # 扫描允许访问的 WiFi
    print('扫描周围信号源:', wlan.scan())

    print("正在连接 WiFi 中", end="")
    # 连接 wifi
    wlan.connect(ssid, password)

    # 如果一直没有连接成功,则每隔 0.1s 在命令号中打印一个 .
    while not wlan.isconnected():
      print(".", end="")
      time.sleep(0.1)

    # 连接成功之后,打印出 IP、子网掩码(netmask)、网关(gw)、DNS 地址
    print(f"\n{wlan.ifconfig()}")

如果我们想要实现他的开机自启动,你需要在 MicroPython 设备的根目录下,创建一个 main.py 文件,并写入以下代码:

# main.py
from common.wifi import wifi_connect

# 连接 wifi
wifi_connect('ssid', 'password')

注意

如果上述代码放到 boot.py 中也是可以执行的。
boot.py 是开机最先执行的文件,最后会由它加载 main.py。
main.py文件开机会被 boot.py 文件引导,可以将自己的代码放在里面。boot.py 文件里面可以声明包含自己要用到的模块,里面可以定制自己开机程序(也就是在运行 main.py 文件前的程序),但是官方建议该文件里面的程序越小越好。

VIP
购买
建议
意见
联系
客服
在线咨询

您可以与在线客服进行沟通获得帮助

工作日:8:00~22:00节假日:9:00~20:00

微信号: mpyos01

Q Q号: 1401211620

免费
福利
0.025222s