大家好,我是ST。
前面給大家分享了ESP32使用miropython編程環境搭建,今天給大家分享如何使用ESP32實現UDP通信。
一、前言
ESP32本身自帶WIFI模塊,可以連接網絡。本文主要是用ESP32連接手機熱點,利用UDP協議將ESP32作為服務端,電腦利用網絡助手軟件作為客戶端與ESP32通信,從而通過無線通信去控制ESP32上的LED燈的亮滅。
二、連接網絡
Mriopython官方文檔給出了一些方法和完整的案例,我們先來看看。
下面是官方給出的方法,根據這些方法可以自由處理連接網絡的步驟,或者獲取需要的信息。
下面是官方給出的一個連接網絡的完整案例
解釋:wlan.connect(‘ssid’,’key’)中的ssid是需要連接WIFI的名字,key是需要連接WIFI的密碼
以下是我連接我手機WIFI熱點的函數代碼
defdo_connect(): wlan=network.WLAN(network.STA_IF) wlan.active(True) ifnotwlan.isconnected(): print('連接網絡...') #連接WIFI wlan.connect('11','1234567a') whilenotwlan.isconnected(): pass print("聯網成功!") print('networkconfig:',wlan.ifconfig())
運行程序后,串口打印出ESP32的IP地址,有了這個地址,后面UDP客戶端就可以往這個IP地址上發送消息了。
三、在ESP32端創建UDP服務端對象
本次實驗UDP服務端在ESP32上創建,UDP客戶端用電腦端的網絡助手上位機上創建。
代碼如下:
defstart_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)) returnudp_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") ifrecv_data_str=='led_off': led.value(1) elifrecv_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('networkconfig:',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燈點亮。
審核編輯:湯梓紅
-
無線通信
+關注
關注
58文章
4604瀏覽量
143886 -
UDP
+關注
關注
0文章
327瀏覽量
34043 -
ESP32
+關注
關注
18文章
978瀏覽量
17528
原文標題:使用ESP32實現UDP通信的方法
文章出處:【微信號:嵌入式開發愛好者,微信公眾號:嵌入式開發愛好者】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
ESP32 UDP通信客戶端例程以及疑問
esp32s2 AP模式UDP組網問題求解
淺談Zephyr ESP32 wifi如何使用
ESP32 SDIO 使用教程
![<b class='flag-5'>ESP32</b> SDIO 使用教程](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP32 之 ESP-IDF 教學(九)—— 串口通信(UART)
![<b class='flag-5'>ESP32</b> 之 <b class='flag-5'>ESP</b>-IDF 教學(九)—— 串口<b class='flag-5'>通信</b>(UART)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP32作為從機實現BLE藍牙功能淺析
![<b class='flag-5'>ESP32</b>作為從機<b class='flag-5'>實現</b>BLE藍牙功能淺析](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ESP32學習記錄<三>串口通信
![<b class='flag-5'>ESP32</b>學習記錄<三>串口<b class='flag-5'>通信</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論