大家好,我是ST。
前面給大家分享了ESP32使用miropython編程環(huán)境搭建,今天給大家分享如何使用ESP32實(shí)現(xiàn)UDP通信。
一、前言
ESP32本身自帶WIFI模塊,可以連接網(wǎng)絡(luò)。本文主要是用ESP32連接手機(jī)熱點(diǎn),利用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的密碼
以下是我連接我手機(jī)WIFI熱點(diǎn)的函數(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())
運(yùn)行程序后,串口打印出ESP32的IP地址,有了這個地址,后面UDP客戶端就可以往這個IP地址上發(fā)送消息了。
三、在ESP32端創(chuàng)建UDP服務(wù)端對象
本次實(shí)驗(yàn)UDP服務(wù)端在ESP32上創(chuàng)建,UDP客戶端用電腦端的網(wǎng)絡(luò)助手上位機(jī)上創(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進(jìn)程間通信,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)
解釋:當(dāng)客戶端發(fā)送“l(fā)ed_off”時,熄滅ESP32上的LED燈,當(dāng)客戶端發(fā)送“l(fā)ed_on”時,點(diǎn)亮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()
運(yùn)行程序,用電腦上的網(wǎng)絡(luò)助手創(chuàng)建UDP客戶端發(fā)送消息,ESP32串口打印如下
當(dāng)發(fā)送led_off時,ESP32上的LED燈熄滅,當(dāng)發(fā)送led_on時,ESP32上的LED燈點(diǎn)亮。
審核編輯:湯梓紅
-
無線通信
+關(guān)注
關(guān)注
58文章
4564瀏覽量
143496 -
UDP
+關(guān)注
關(guān)注
0文章
325瀏覽量
33931 -
ESP32
+關(guān)注
關(guān)注
18文章
971瀏覽量
17201
原文標(biāo)題:使用ESP32實(shí)現(xiàn)UDP通信的方法
文章出處:【微信號:嵌入式開發(fā)愛好者,微信公眾號:嵌入式開發(fā)愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論