大家好,我是ST。
前面給大家分享了ESP32使用miropython編程環(huán)境搭建,今天給大家分享如何使用ESP32實現(xiàn)UDP通信。

一、前言
ESP32本身自帶WIFI模塊,可以連接網(wǎng)絡(luò)。本文主要是用ESP32連接手機熱點,利用UDP協(xié)議將ESP32作為服務(wù)端,電腦利用網(wǎng)絡(luò)助手軟件作為客戶端與ESP32通信,從而通過無線通信去控制ESP32上的LED燈的亮滅。
二、連接網(wǎng)絡(luò)
Mriopython官方文檔給出了一些方法和完整的案例,我們先來看看。
下面是官方給出的方法,根據(jù)這些方法可以自由處理連接網(wǎng)絡(luò)的步驟,或者獲取需要的信息。

下面是官方給出的一個連接網(wǎng)絡(luò)的完整案例

解釋:wlan.connect(‘ssid’,’key’)中的ssid是需要連接WIFI的名字,key是需要連接WIFI的密碼
以下是我連接我手機WIFI熱點的函數(shù)代碼
defdo_connect(): wlan=network.WLAN(network.STA_IF) wlan.active(True) ifnotwlan.isconnected(): print('連接網(wǎng)絡(luò)...') #連接WIFI wlan.connect('11','1234567a') whilenotwlan.isconnected(): pass print("聯(lián)網(wǎng)成功!") print('networkconfig:',wlan.ifconfig())
運行程序后,串口打印出ESP32的IP地址,有了這個地址,后面UDP客戶端就可以往這個IP地址上發(fā)送消息了。

三、在ESP32端創(chuàng)建UDP服務(wù)端對象
本次實驗UDP服務(wù)端在ESP32上創(chuàng)建,UDP客戶端用電腦端的網(wǎng)絡(luò)助手上位機上創(chuàng)建。
代碼如下:
defstart_udp(): #創(chuàng)建udp套接字 udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #綁定一個固定的端口號,0.0.0.0表示綁定所有IP udp_socket.bind(("0.0.0.0",7788)) returnudp_socket
解釋:udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)中的socket.AF_INET表示用于Internet進程間通信,socket.SOCK_DGRAM表示用UDP協(xié)議。如果要用TCP協(xié)議則選擇socket.STREAM。7788為端口號,用戶可自行分配可用的端口號。
四、處理收到的數(shù)據(jù)
程序代碼如下:
def main():
do_connect()
udp_socket=start_udp()
led=machine.Pin(22,machine.Pin.OUT)
while True:
#接收數(shù)據(jù)并拆包
recv_data,sender_info=udp_socket.recvfrom(1024)
#打印收到的數(shù)據(jù)
print("{}發(fā)送{}".format(sender_info,recv_data))
#取出接收到的數(shù)據(jù)
recv_data_str=recv_data.decode("utf-8")
ifrecv_data_str=='led_off':
led.value(1)
elifrecv_data_str=='led_on':
led.value(0)
解釋:當客戶端發(fā)送“l(fā)ed_off”時,熄滅ESP32上的LED燈,當客戶端發(fā)送“l(fā)ed_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('連接網(wǎng)絡(luò)...')
#連接WIFI
wlan.connect('11', '1234567a')
while not wlan.isconnected():
pass
print("聯(lián)網(wǎng)成功!")
print('networkconfig:',wlan.ifconfig())
def start_udp():
#創(chuàng)建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:
#接收數(shù)據(jù)并拆包
recv_data,sender_info=udp_socket.recvfrom(1024)
#打印收到的數(shù)據(jù)
print("{}發(fā)送{}".format(sender_info,recv_data))
#取出接收到的數(shù)據(jù)
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()
運行程序,用電腦上的網(wǎng)絡(luò)助手創(chuàng)建UDP客戶端發(fā)送消息,ESP32串口打印如下

當發(fā)送led_off時,ESP32上的LED燈熄滅,當發(fā)送led_on時,ESP32上的LED燈點亮。
審核編輯:湯梓紅
-
無線通信
+關(guān)注
關(guān)注
58文章
4869瀏覽量
146513 -
UDP
+關(guān)注
關(guān)注
0文章
331瀏覽量
35238 -
ESP32
+關(guān)注
關(guān)注
24文章
1090瀏覽量
20917
原文標題:使用ESP32實現(xiàn)UDP通信的方法
文章出處:【微信號:嵌入式開發(fā)愛好者,微信公眾號:嵌入式開發(fā)愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
使用ESP32實現(xiàn)藍牙通信
ESP32 UDP通信客戶端例程以及疑問
esp32s2 AP模式UDP組網(wǎng)問題求解
淺談Zephyr ESP32 wifi如何使用
ESP32 SDIO 使用教程
ESP32 之 ESP-IDF 教學(xué)(九)—— 串口通信(UART)
ESP32作為從機實現(xiàn)BLE藍牙功能淺析
ESP32學(xué)習(xí)記錄<三>串口通信
ESP32系列芯片的規(guī)格
使用ESP32連接騰訊云實現(xiàn)遠程控制
基于ESP32+MicroPython實現(xiàn)聯(lián)網(wǎng)并進行UDP通信
ESP32到ESP32通過Internet進行通信

使用ESP32實現(xiàn)UDP通信的方法
評論