使用ESP32实现UDP通信的方法

大家好,我是st。
      前面给大家分享了esp32使用miropython编程环境搭建,今天给大家分享如何使用esp32实现udp通信。
一、前言
esp32本身自带wifi模块,可以连接网络。本文主要是用esp32连接手机热点,利用udp协议将esp32作为服务端,电脑利用网络助手软件作为客户端与esp32通信,从而通过无线通信去控制esp32上的led灯的亮灭。
二、连接网络
mriopython官方文档给出了一些方法和完整的案例,我们先来看看。
下面是官方给出的方法,根据这些方法可以自由处理连接网络的步骤,或者获取需要的信息。
下面是官方给出的一个连接网络的完整案例
解释:wlan.connect(‘ssid’,’key’)中的ssid是需要连接wifi的名字,key是需要连接wifi的密码
以下是我连接我手机wifi热点的函数代码
def do_connect():    wlan=network.wlan(network.sta_if)    wlan.active(true)    if not wlan.isconnected():        print('连接网络...')        #连接wifi        wlan.connect('11', '1234567a')        while not wlan.isconnected():            pass    print(联网成功!)    print('network config:',wlan.ifconfig())  
运行程序后,串口打印出esp32的ip地址,有了这个地址,后面udp客户端就可以往这个ip地址上发送消息了。
三、在esp32端创建udp服务端对象
本次实验udp服务端在esp32上创建,udp客户端用电脑端的网络助手上位机上创建。
代码如下:
def start_udp():    #创建udp套接字    udp_socket=socket.socket(socket.af_inet,socket.sock_dgram)    #绑定一个固定的端口号,0.0.0.0表示绑定所有ip    udp_socket.bind((0.0.0.0,7788))    return udp_socket  
解释:udp_socket=socket.socket(socket.af_inet,socket.sock_dgram)中的socket.af_inet表示用于internet进程间通信,socket.sock_dgram表示用udp协议。如果要用tcp协议则选择socket.stream。7788为端口号,用户可自行分配可用的端口号。
四、处理收到的数据
程序代码如下:
def main(): do_connect() udp_socket=start_udp() led=machine.pin(22,machine.pin.out) while true: #接收数据并拆包 recv_data,sender_info=udp_socket.recvfrom(1024) #打印收到的数据 print({}发送{}.format(sender_info,recv_data)) #取出接收到的数据        recv_data_str=recv_data.decode(utf-8)        if recv_data_str=='led_off':            led.value(1)        elif recv_data_str=='led_on':            led.value(0)  
解释:当客户端发送“led_off”时,熄灭esp32上的led灯,当客户端发送“led_on”时,点亮esp32上的led灯。
五、整体程序代码
代码如下:
import socketimport timeimport networkimport machinedef do_connect(): wlan=network.wlan(network.sta_if) wlan.active(true) if not wlan.isconnected(): print('连接网络...') #连接wifi wlan.connect('11', '1234567a') while not wlan.isconnected(): pass print(联网成功!)    print('network config:',wlan.ifconfig())def start_udp(): #创建udp套接字 udp_socket=socket.socket(socket.af_inet,socket.sock_dgram) #绑定一个固定的端口号 udp_socket.bind((0.0.0.0,7788)) return udp_socketdef main(): do_connect()    udp_socket=start_udp() led=machine.pin(22,machine.pin.out) while true: #接收数据并拆包 recv_data,sender_info=udp_socket.recvfrom(1024) #打印收到的数据 print({}发送{}.format(sender_info,recv_data)) #取出接收到的数据 recv_data_str=recv_data.decode(utf-8) if recv_data_str=='led_off': led.value(1) elif recv_data_str=='led_on': led.value(0)if __name__ == __main__: main()  
运行程序,用电脑上的网络助手创建udp客户端发送消息,esp32串口打印如下
当发送led_off时,esp32上的led灯熄灭,当发送led_on时,esp32上的led灯点亮。


亿旗推出高性能ADI DSP仿真器EBF-ADSP-EMUI
苹果iPad在全球平板市场仍占据着主导地位
受高通骁龙835产能影响, 配置该芯片的小米6又要推迟了
有线路波动保护和耐用的内部功率的电源开关
织物干态落絮测试仪的主要组成部分是怎样的
使用ESP32实现UDP通信的方法
RHA MA750Wireless蓝牙耳机评测
安勤延伸工业级迷你计算机产品线至Intel凌动平台
如何自动识别是NOR flash 浅谈NOR flash工作原理
台积电联华电子部分工厂供水紧张 或影响全球芯片供应
人工智能在网络安全中的四大主流应用
浅谈PSSuniversal 控制器
Vishay发布基于光敏二极管的环境光传感器的视频演示
什么是IEEE
什么是嵌入式软件工程师?需具备哪些能力?
浅析华为最新AI生态与未来趋势
逻辑综合概述和工艺库详解
被动雷达接收机的类型有哪些?
PT100温度传感器与热电偶探头故障原因全面解析
探讨全球工业物联网现状及发展趋势