RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

嵌入式開發(fā)愛好者 ? 來源:嵌入式開發(fā)愛好者 ? 作者:嵌入式開發(fā)愛好者 ? 2022-11-14 10:21 ? 次閱讀

大家好,我是ST。

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

8fcbc438-629c-11ed-8abf-dac502259ad0.png

一、前言

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ò)的步驟,或者獲取需要的信息。

91341f64-629c-11ed-8abf-dac502259ad0.jpg

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

917c9f14-629c-11ed-8abf-dac502259ad0.jpg

解釋: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ā)送消息了。

91a21b90-629c-11ed-8abf-dac502259ad0.jpg

三、在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串口打印如下

91c22f2a-629c-11ed-8abf-dac502259ad0.jpg

當(dāng)發(fā)送led_off時,ESP32上的LED燈熄滅,當(dāng)發(fā)送led_on時,ESP32上的LED燈點(diǎn)亮。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 無線通信
    +關(guān)注

    關(guān)注

    58

    文章

    4564

    瀏覽量

    143496
  • UDP
    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)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    使用ESP32實(shí)現(xiàn)藍(lán)牙通信

    上次給大家分享了如何使用ESP32實(shí)現(xiàn)UDP通信,今天跟大家聊聊如何使用ESP32實(shí)現(xiàn)藍(lán)牙
    發(fā)表于 11-21 09:31 ?1.5w次閱讀

    esp32 udp broadcast丟包怎么避免?

    esp32 udp broadcast 丟包
    發(fā)表于 06-17 06:05

    ESP32 UDP通信客戶端例程以及疑問

    本人在使用ESP32UDP通訊時,不知道怎么發(fā)送廣播包,請問應(yīng)該如何發(fā)送廣播包呢。如下代碼,UDP client通信,當(dāng)ip地址為192.168.1.220時,能夠發(fā)送出去,但換成
    發(fā)表于 12-29 13:44

    如何利用ESP32和Ubuntu搭建UDP通信系統(tǒng)?

    如何利用ESP32和Ubuntu搭建UDP通信系統(tǒng)?
    發(fā)表于 01-20 06:09

    esp32s2 AP模式UDP組網(wǎng)問題求解

    請問各位朋友們,我一塊ESP32s2開AP模式,建立UDP server。讓4塊STA模式的client ESP32連接。主機(jī)有何方法可以區(qū)分這4個從機(jī)。我想通過從機(jī)的AID和IP區(qū)分
    發(fā)表于 02-14 07:07

    一款基于ESP32的對講機(jī)傳輸音頻介紹

    這是一款基于ESP32的對講機(jī)。它使用UDP廣播或ESP-NOW傳輸音頻。
    的頭像 發(fā)表于 04-29 09:04 ?2.6w次閱讀
    一款基于<b class='flag-5'>ESP32</b>的對講機(jī)傳輸音頻介紹

    淺談Zephyr ESP32 wifi如何使用

    和ethernt L2對接,因此在zephyr下只要通過簡單的配置就可以在應(yīng)用層使用socket通過wifi進(jìn)行網(wǎng)絡(luò)通信,而不需要去關(guān)心esp32 wifi驅(qū)動的細(xì)節(jié)。 配置方法 進(jìn)行下面配置后開機(jī)
    的頭像 發(fā)表于 06-01 10:17 ?6843次閱讀

    ESP32 SDIO 使用教程

    ESP32 SDIO 使用教程本文旨在說明如何使用標(biāo)準(zhǔn)的 ESP32-WROOM-32D 開發(fā)板進(jìn)行 SDIO 的通信。本文檔適用于所有需要與 ESP32 SDIO slave
    發(fā)表于 11-23 17:51 ?233次下載
    <b class='flag-5'>ESP32</b> SDIO 使用教程

    ESP32ESP-IDF 教學(xué)(九)—— 串口通信(UART)

    ESP32ESP-IDF 教學(xué)(九)—— 串口通信(UART)文章目錄ESP32ESP-IDF 教學(xué)(九)—— 串口
    發(fā)表于 11-26 13:21 ?44次下載
    <b class='flag-5'>ESP32</b> 之 <b class='flag-5'>ESP</b>-IDF 教學(xué)(九)—— 串口<b class='flag-5'>通信</b>(UART)

    ESP32作為從機(jī)實(shí)現(xiàn)BLE藍(lán)牙功能淺析

    引言去年11月份,自己接到的第一個任務(wù)就是藍(lán)牙,二維碼任務(wù)結(jié)束后自己又開始做這一個任務(wù),由于還沒有定好應(yīng)用場景,自己先根據(jù)自己的理解,介紹一下如何用ESP32實(shí)現(xiàn)BLE藍(lán)牙。開發(fā)環(huán)境本工程將
    發(fā)表于 12-07 13:51 ?16次下載
    <b class='flag-5'>ESP32</b>作為從機(jī)<b class='flag-5'>實(shí)現(xiàn)</b>BLE藍(lán)牙功能淺析

    ESP32學(xué)習(xí)記錄<三>串口通信

    ESP32學(xué)習(xí)記錄串口通信文章目錄ESP32學(xué)習(xí)記錄串口通信前言一、通過串口打印出數(shù)據(jù)1.初始化串口2.打印數(shù)據(jù)二、串口控制LED亮滅1.接收串口發(fā)送的數(shù)據(jù)2.
    發(fā)表于 12-20 19:34 ?17次下載
    <b class='flag-5'>ESP32</b>學(xué)習(xí)記錄<三>串口<b class='flag-5'>通信</b>

    ESP32系列芯片的規(guī)格

    ESP32是一款2.4GHz Wi-Fi和藍(lán)牙組合芯片,采用TSMC超低功耗40nm設(shè)計技術(shù)它旨在實(shí)現(xiàn)最佳功率和射頻性能,顯示出魯棒性、多功能性和靈活性在各種應(yīng)用和電源場景中的可靠性。ESP32系列芯片包括
    發(fā)表于 04-25 16:21 ?7次下載

    使用ESP32連接騰訊云實(shí)現(xiàn)遠(yuǎn)程控制

    上次給大家分享了如何使用ESP32實(shí)現(xiàn)藍(lán)牙通信,今天跟大家聊聊如何使用ESP32連接騰訊云實(shí)現(xiàn)遠(yuǎn)程控制。本次實(shí)驗(yàn)用到MQTT協(xié)議,同樣,我用
    的頭像 發(fā)表于 11-22 09:19 ?3669次閱讀

    基于ESP32+MicroPython實(shí)現(xiàn)聯(lián)網(wǎng)并進(jìn)行UDP通信

    使用 esp32 開發(fā)程序,非常重要的功能就是使用 wifi,下面我們就講一下 esp32 連接 wifi 的方法。
    的頭像 發(fā)表于 06-13 17:05 ?6195次閱讀
    基于<b class='flag-5'>ESP32</b>+MicroPython<b class='flag-5'>實(shí)現(xiàn)</b>聯(lián)網(wǎng)并進(jìn)行<b class='flag-5'>UDP</b><b class='flag-5'>通信</b>

    ESP32ESP32通過Internet進(jìn)行通信

    電子發(fā)燒友網(wǎng)站提供《ESP32ESP32通過Internet進(jìn)行通信.zip》資料免費(fèi)下載
    發(fā)表于 06-15 09:58 ?4次下載
    <b class='flag-5'>ESP32</b>到<b class='flag-5'>ESP32</b>通過Internet進(jìn)行<b class='flag-5'>通信</b>
    RM新时代网站-首页