利用ESP32实现UDP通信之经典
大家好,前面给大家分享了ESP32使用miropython编程环境搭建,今天给大家分享如何使用ESP32实现UDP通信
目录
一、前言
ESP32本身自带WIFI模块,可以连接网络。本文主要是用ESP32连接手机热点,利用UDP协议将ESP32作为服务端,电脑利用网络助手软件作为客户端与ESP32通信,从而通过无线通信去控制ESP32上的LED灯的亮灭。
二、连接网络
Mriopython官方文档(链接:http://docs.micropython.org/)给出了一些方法和完整的案例,我们先来看看。
下面是官方给出的方法,根据这些方法可以自由处理连接网络的步骤,或者获取需要的信息。
下面是官方给出的一个连接网络的完整案例
解释: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 socket
import time
import network
import machine
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())
def start_udp():
#创建udp套接字
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#绑定一个固定的端口号
udp_socket.bind(("0.0.0.0",7788))
return udp_socket
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)
if __name__ == "__main__":
main()
运行程序,用电脑上的网络助手创建UDP客户端发送消息,ESP32串口打印如下
当发送led_off时,ESP32上的LED灯熄灭,当发送led_on时,ESP32上的LED灯点亮。
相关文章
- 【敬初学者】Python基础学完了,该怎么知道自己学的怎么样呢?十个经典实战小项目附源码
- 《面试季》经典面试题-数据库篇(二)
- 前端一面经典vue面试题总结
- 企业综合运维监控项目经典案例
- Seq2Seq、SeqGAN、Transformer…你都掌握了吗?一文总结文本生成必备经典模型(一)
- 【CSS】CSS 特性 ⑥ ( CSS 优先级 | 经典权重计算示例 2 )
- Java经典实例:把字符串解析为日期时间详解编程语言
- MySQL入门经典:学习PDF指南(mysql入门经典pdf)
- #新闻拍一拍# 微软逐渐将经典版 Edge 的诸多优秀特性迁移到新版 Edge 浏览器中
- Linux面试题大全:25道经典题目助你面试成功!(linux经典面试题)