03-ESP32 WIFI配置与网络调试助手的数据发送与接收

在王铭东老师讲解的视频学习中,第四小节关于WIFI连接遇到一些问题
视频观看连接:https://www.bilibili.com/video/BV1G34y1E7tE/?p=4&vd_source=7eb12985b115d7cf100573bba9a4649f

问题1:按照老师讲解的敲代码之后没有反应

仔细检查了一下,是电脑和ESP32必须连接同一个WIFI,才能成功进行网络串口通信

问题2:连接同一WIFI之后,Thonny软件发送数据,串口调试助手接收不到

原因是本地主机地址和端口号必须一致

ESP32连接WIFI代码:

# 导入网络模块
import network
import time

# 创建 WLAN 对象,用于网络连接
wlan = network.WLAN(network.STA_IF)

# 激活 WLAN 的 STA 模式,STA 模式允许设备作为客户端连接到 Wi-Fi 网络
wlan.active(True)

# 扫描可用的 Wi-Fi 网络,并将结果存储在 networks 变量中
networks = wlan.scan()
# 打印可用的 Wi-Fi 网络列表
print("Available networks:", networks)

# 检查设备是否已经连接到 Wi-Fi 网络
if not wlan.isconnected():
    print("Connecting to network...")
    
    # 尝试连接到指定的 Wi-Fi 网络(替换为实际的 Wi-Fi 名称和密码)
    wlan.connect("2.5G频段WIFI名称", "WIFI密码")
    
    # 等待连接成功,设置超时时间为 10 秒
    timeout = 10  # 设置超时时间(秒)
    while not wlan.isconnected() and timeout > 0:
        print("Waiting for connection...")  # 打印等待连接的消息
        time.sleep(1)  # 每隔 1 秒检查一次连接状态
        timeout -= 1  # 减少超时计时

# 检查连接状态,若成功则打印网络配置信息
if wlan.isconnected():
    print("Connected to network")  # 打印连接成功的消息
    print("Network config:", wlan.ifconfig())  # 打印网络配置,包括 IP 地址等信息
else:
    print("Failed to connect to network")  # 如果连接失败,打印错误信息
   

代码的主要部分说明:

  1. 导入模块:
    • 导入 network 模块以管理网络连接。
    • 导入 time 模块以便在连接过程中使用延时。
  2. WLAN 对象创建:
    • 创建一个 WLAN 对象并设置为 STA 模式,这是设备作为客户端连接 Wi-Fi 网络的模式。
  3. 激活 WLAN:
    • 激活 WLAN STA 模式,使设备能够进行网络连接。
  4. 扫描可用网络:
    • 使用 wlan.scan() 扫描附近的 Wi-Fi 网络,并将结果打印出来,以便用户查看可用的网络。
  5. 连接到 Wi-Fi:
    • 检查设备是否已连接到网络。如果未连接,调用 wlan.connect() 尝试连接到指定的 Wi-Fi 网络,并使用超时机制确保连接过程不会无限期等待。
  6. 检查连接状态:
    • 连接成功后,打印网络配置(如 IP 地址等信息),否则打印连接失败的消息。

效果图如下:
在这里插入图片描述

确保电脑和ESP32连接同一WIFI之后,即可用命令行窗口查看IP地址,然后进行网络通信

cmd窗口查看IP地址的命令是

ipconfig

在这里插入图片描述

代码如下:

# 导入 usocket 模块用于网络通信
import usocket
# 导入网络模块用于Wi-Fi连接
import network
import time

# 定义一个连接函数,用于连接到Wi-Fi网络
def do_connect():
    # 创建 STA 模式的 WLAN 对象
    sta_if = network.WLAN(network.STA_IF)
    
    # 激活 Station 模式,以便设备能够作为客户端连接到网络
    sta_if.active(True)
    
    # 打印网络状态以检查当前状态
    print('Network status before connection:', sta_if.status())
    
    # 检查是否已连接到网络
    if not sta_if.isconnected():
        print('Connecting to network...')
        # 尝试连接到指定的 WiFi 网络
        sta_if.connect('Black-403', 'gongcheng403')
        
        # 等待连接建立,设置超时时间为10秒
        timeout = 10  # 设置超时时间(秒)
        while not sta_if.isconnected() and timeout > 0:
            print('Waiting for connection...')
            time.sleep(1)  # 每隔1秒检查一次连接状态
            timeout -= 1  # 减少超时计时
        
        # 如果连接仍未建立,则输出错误信息
        if not sta_if.isconnected():
            print('Failed to connect to the network.')
            return False  # 返回 False 表示连接失败
    
    # 打印连接成功后的网络配置,包括 IP 地址等信息
    print('Connected to network:', sta_if.ifconfig())
    return True  # 返回 True 表示连接成功

# 开机自动连接 Wi-Fi 网络
if do_connect():
    # 创建 UDP socket,用于发送和接收数据
    s = usocket.socket(usocket.AF_INET, usocket.SOCK_DGRAM)
    
    # 构建服务器的 IP 和端口,确保替换为你的实际服务器 IP 和端口
    addr = usocket.getaddrinfo('192.168.1.104', 32666)[0][-1]
    print('Server address:', addr)  # 打印服务器地址
    
    # 发起请求,发送消息
    print("Sending message: 'esp32 micropython udp'")
    s.sendto(b"esp32 micropython udp", addr)  # 确保发送的数据为字节类型

    # 等待响应
    print("Waiting for response...")
    while True:
        try:
            # 接收数据,最多接收100字节
            data = s.recv(100)
            if data:
                # 如果收到数据,打印接收到的内容
                print('Received data:', str(data, 'utf8'), end='')
            else:
                break  # 如果没有数据,跳出循环
        except OSError as e:
            # 捕获接收数据时的错误
            print("Error receiving data:", e)
            break  # 发生错误时跳出循环

    # 关闭 socket,释放资源
    s.close()
else:
    # 如果无法建立 Wi-Fi 连接,输出提示信息
    print("Could not establish Wi-Fi connection.")

代码的主要部分:

  1. 连接函数 do_connect():
    • 创建 WLAN 对象并激活其 STA 模式。
    • 检查网络状态,若未连接则尝试连接到指定的 Wi-Fi 网络。
    • 通过超时机制确保连接过程不会无限期等待。
  2. UDP Socket 创建与使用:
    • 成功连接后,创建一个 UDP socket,构建服务器的 IP 地址和端口。
    • 发送一条消息并等待响应,直到接收到数据或发生错误。
  3. 异常处理:
    • 在数据接收过程中增加了异常处理,确保程序的健壮性。

现象如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值