一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

如何在Micropython下使用ESPNow功能進(jìn)行數(shù)據(jù)傳輸呢?

冬至子 ? 來源:醉里挑燈舞劍 ? 作者:Franze ? 2023-11-08 11:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

ESPNow是一種輕量級(jí)的無線通信協(xié)議,適用于ESP32芯片,它可以實(shí)現(xiàn)低功耗、高效率的設(shè)備間通訊,不需要路由器,也不需要wifi,同時(shí),在使用ESPNow的時(shí)候不影響wifi 和藍(lán)牙。

在文章中,我們將學(xué)習(xí)如何在Micropython環(huán)境下使用ESP32的ESPNow功能進(jìn)行數(shù)據(jù)傳輸。ESPNOW支持一對(duì)一,一對(duì)多,多對(duì)多的各種通訊方式,在這里不做更多的說明。

準(zhǔn)備工作

在開始之前,確保你已經(jīng)做好了以下準(zhǔn)備工作:

1.安裝Micropython固件到ESP32模塊上(1.20.0 以后的版本)。
2.確保你有兩個(gè)或更多的ESP32模塊,它們將用于數(shù)據(jù)通訊(我用的兩塊ESP32-S3進(jìn)行的測(cè)試,實(shí)際ESP8266也是支持的,但是某些函數(shù)略有差異)。

獲取ESP32的MAC地址

ESPNOW發(fā)送數(shù)據(jù)需要知道目標(biāo)ESP32的MAC地址。有兩種簡(jiǎn)單的方法獲取MAC地址,一種是在燒錄完成后可以看到,另一個(gè)是通過程序來獲得

圖片

在上圖中燒錄完成后可以看到AP和STA狀態(tài)下的MAC地址

下面是通過代碼獲取MAC地址的方法:

圖片

獲取到MAC地址后,一切都簡(jiǎn)單了,當(dāng)然,還有一種不獲取MAC地址的方法就是廣播0xFF*6的方式,廢話不多說,直接上代碼

發(fā)送端

import network
import espnow
import time

sta = network.WLAN(network.STA_IF)    # Enable station mode for ESP
sta.active(True)
sta.disconnect()        # Disconnect from last connected WiFi SSID

e = espnow.ESPNow()     # Enable ESP-NOW
e.active(True)

peer1 = b'x34x85x18x90x86x38'   # MAC address of peer1's wifi interface
e.add_peer(peer1)                     # add peer1 (receiver1)
#如果有多個(gè)接收都就在這下面接著增加peer2...

print("Starting...")            # Send to all peers

def main():
    while True:
        e.send(peer1, "這是Slave發(fā)送過來的數(shù)據(jù)", True)     # send commands to pear 1
        time.sleep(2)

if __name__ == "__main__":
    main()

代碼很簡(jiǎn)單,直接官方代碼小改,注意使用時(shí)改MAC地址即可。

#### 接收端的代碼
import network
import espnow
# A WLAN interface must be active to send()/recv()
sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.disconnect()                # Disconnect from last connected WiFi SSID

e = espnow.ESPNow()                  # Enable ESP-NOW
e.active(True)

peer = b'x34x85x18x46x3dx28'   # MAC address of peer's wifi interface
#這個(gè)MAC地址是發(fā)送端的
e.add_peer(peer)                     # Sender's MAC registration

def espnow_rx():
    while True:
        host, msg = e.recv()
        if msg:                          # wait for message
            print(msg)
if __name__ == "__main__":
    espnow_rx()

代碼簡(jiǎn)單,不多贅述,注冊(cè)完設(shè)備后就收發(fā)信息即可。

通過以上步驟,你就可以在Micropython環(huán)境下使用ESPNow進(jìn)行簡(jiǎn)單而高效的數(shù)據(jù)通訊了。記得根據(jù)你的實(shí)際需求調(diào)整代碼和配置信息。

幾個(gè)說明

在Micropython控制硬件主要就分幾步走,首先導(dǎo)入相關(guān)的庫,然后構(gòu)建對(duì)象,接下來定義相關(guān)的函數(shù),最后調(diào)用定義好的函數(shù)。

1.在這里,導(dǎo)入espnow之后,先實(shí)例化一個(gè)對(duì)象并激活。

2.在使用espnow收發(fā)數(shù)據(jù)之前必須先啟用Network.STA_IF或者Network.AP_IF,如果不需要wifi轉(zhuǎn)發(fā)那就不需要連接或者配置

3.ESPNow.send(mac,msg)注意消息發(fā)送消息長(zhǎng)度不大于250bytes,如是長(zhǎng)度大于250bytes時(shí)切包再合包。

4.ESPNow.recv([timeout_ms])接收數(shù)據(jù)

5.ESPNow.any()檢查數(shù)據(jù)是否可用

6.其它函數(shù)簡(jiǎn)說:

ESPNow.set_pmk(pmk) 設(shè)置用于加密本地主密鑰的主密鑰 (PMK) 用于加密消息的密鑰 (LMK)。如果未設(shè)置,則默認(rèn) PMK 為 由底層樂鑫 ESP-NOW 軟件堆棧使用

ESPNow.add_peer(mac[, lmk][, channel][, ifidx][, encrypt])

ESPNow.add_peer(mac, param=value, …)

添加/注冊(cè)提供的 mac 地址作為對(duì)等方。其他參數(shù)可以 也被指定為位置或關(guān)鍵字參數(shù)(任何設(shè)置為 的參數(shù)都將設(shè)置為其默認(rèn)值)

ESPNow.del_peer(mac) 取消注冊(cè)與提供的 mac 地址關(guān)聯(lián)的對(duì)等方

ESPNow.get_peer(mac) (ESP32 only) 已注冊(cè)的對(duì)等體上轉(zhuǎn)換信息

ESPNow.get_peers() (ESP32 only) 返回所有已注冊(cè)對(duì)等方的“對(duì)等信息”參數(shù)(作為元組 元組)。

ESPNow.peer_count() (ESP32 only) 查看已注冊(cè)對(duì)等方的數(shù)量

ESPNow.mod_peer(mac, lmk, [channel], [ifidx], [encrypt]) (ESP32 only) ESPNow.mod_peer(mac, ‘param’=value, …) (ESP32 only)

修改與提供的 mac 地址關(guān)聯(lián)的對(duì)等方的參數(shù)。參數(shù)可以作為位置或關(guān)鍵字參數(shù)提供 (請(qǐng)參閱)。任何未設(shè)置(或設(shè)置為 )的參數(shù)都將保留該參數(shù)的現(xiàn)有值。

ESPNow.irq(callback) (ESP32 only)

設(shè)置回調(diào)函數(shù),在消息有消息后盡快調(diào)用 從另一個(gè) ESPNow 設(shè)備接收。將調(diào)用回調(diào)函數(shù) 以實(shí)例對(duì)象作為參數(shù)。

為了更可靠的運(yùn)行, 建議在以下情況下讀出盡可能多的可用消息 調(diào)用回調(diào)并將讀取超時(shí)設(shè)置為零,例如:

def recv_cb(e):
    while True:  # Read out all messages waiting in the buffer
        mac, msg = e.irecv(0)  # Don't wait if no messages left
        if mac is None:
            return
        print(mac, msg)
e.irq(recv_cb)

廣播消息的方法:
bcast = b'xff' * 6
e.add_peer(bcast)
e.send(bcast, "Hello World!")
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 無線通信
    +關(guān)注

    關(guān)注

    58

    文章

    4755

    瀏覽量

    145238
  • 路由器
    +關(guān)注

    關(guān)注

    22

    文章

    3840

    瀏覽量

    116792
  • 回調(diào)函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    88

    瀏覽量

    11902
  • ESP32
    +關(guān)注

    關(guān)注

    21

    文章

    1020

    瀏覽量

    19310
  • Micropython
    +關(guān)注

    關(guān)注

    0

    文章

    68

    瀏覽量

    5321
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    請(qǐng)問ldc1000在與主機(jī)進(jìn)行數(shù)據(jù)傳輸的過程中,數(shù)據(jù)傳輸速率設(shè)置為多大合適?

    你好,請(qǐng)問ldc1000在與主機(jī)進(jìn)行數(shù)據(jù)傳輸的過程中,數(shù)據(jù)傳輸速率設(shè)置為多大合適(我的差不多1M),但數(shù)據(jù)一直不對(duì)····
    發(fā)表于 01-17 06:37

    怎么用LABVIEW和FPGA控制W5300進(jìn)行數(shù)據(jù)傳輸

    用FPGA 控制W5300(采用的是TCP/IP協(xié)議)進(jìn)行數(shù)據(jù)傳輸,上位機(jī)軟件用LABVIEW做!怎么才能進(jìn)行數(shù)據(jù)傳輸。W5300怎么與LABVIEW進(jìn)行數(shù)據(jù)傳輸!!各位大仙能不能給指明方向!謝謝
    發(fā)表于 12-30 19:29

    請(qǐng)問問手機(jī)與電腦之間在沒有網(wǎng)絡(luò)的情況如何進(jìn)行數(shù)據(jù)傳輸!

    請(qǐng)問問手機(jī)與電腦之間在沒有網(wǎng)絡(luò)的情況如何進(jìn)行數(shù)據(jù)傳輸!
    發(fā)表于 05-31 21:15

    TCP通信,完成了使用WiFi模塊,進(jìn)行數(shù)據(jù)傳輸。功能:包括接收數(shù)據(jù),發(fā)送數(shù)據(jù),發(fā)送文件。

    完成了使用WiFi模塊,進(jìn)行數(shù)據(jù)傳輸。功能:包括接收數(shù)據(jù),發(fā)送數(shù)據(jù),發(fā)送文件。
    發(fā)表于 01-21 20:16

    關(guān)于EDMA PingPong傳輸和并行傳輸,請(qǐng)問對(duì)于PingPong模式的數(shù)據(jù)傳輸,是否只是用一個(gè)channel進(jìn)行數(shù)據(jù)傳輸

    的channel可看做是一個(gè)傳輸事件,用于觸發(fā)一個(gè)EDMA通道進(jìn)行數(shù)據(jù)傳輸。記得Andy在一個(gè)帖子中曾說過,“IPR寄存器是用來記錄產(chǎn)生中斷的EDMA channel源,從低到高每一個(gè)bit依次對(duì)應(yīng)相應(yīng)
    發(fā)表于 06-20 06:05

    用E90-DTU進(jìn)行數(shù)據(jù)傳輸,怎么將數(shù)據(jù)傳到后臺(tái)轉(zhuǎn)化

    用E90-DTU進(jìn)行數(shù)據(jù)傳輸,怎么將數(shù)據(jù)傳到后臺(tái)轉(zhuǎn)化
    發(fā)表于 04-02 16:28

    怎樣利用ESP8266和Stm32F4單片機(jī)進(jìn)行數(shù)據(jù)傳輸

    怎樣利用ESP8266和Stm32F4單片機(jī)進(jìn)行數(shù)據(jù)傳輸?有哪些操作?
    發(fā)表于 10-21 08:55

    如何通過單一數(shù)據(jù)進(jìn)行數(shù)據(jù)傳輸?

    如何通過單一數(shù)據(jù)進(jìn)行數(shù)據(jù)傳輸?
    發(fā)表于 12-02 07:14

    VEML6040顏色傳感器是如何利用I2C總線進(jìn)行數(shù)據(jù)傳輸

    VEML6040是什么?VEML6040顏色傳感器的外圍電路是怎樣的?VEML6040顏色傳感器是如何利用I2C總線進(jìn)行數(shù)據(jù)傳輸?
    發(fā)表于 02-14 06:35

    DMA進(jìn)行數(shù)據(jù)傳輸和CPU進(jìn)行數(shù)據(jù)傳輸的疑問

    原先的總線矩陣+仲裁器結(jié)構(gòu)中的數(shù)據(jù)總線進(jìn)行數(shù)據(jù)傳輸的? 接上一個(gè)問題,如果是的話,那么當(dāng)進(jìn)行DMA數(shù)據(jù)傳輸時(shí),必定是需要占用數(shù)據(jù)總線的,那么
    發(fā)表于 05-25 17:18

    HT56R678使用I2C進(jìn)行數(shù)據(jù)傳輸的方法

    HT56R678使用I2C進(jìn)行數(shù)據(jù)傳輸的方法 HT56R678 內(nèi)建有SIM 功能,其中包括了SPI 和I2C 兩種通信接口,本文以HT56R678 為母體,介紹使用I2C 進(jìn)行數(shù)據(jù)傳輸的方法和注意
    發(fā)表于 03-27 09:25 ?16次下載

    HT56R678使用I2C進(jìn)行數(shù)據(jù)傳輸的方法

    HT56R678使用I2C進(jìn)行數(shù)據(jù)傳輸的方法HT56R678 內(nèi)建有SIM 功能,其中包括了SPI 和I2C 兩種通信接口,本文以HT56R678 為母體,介紹使用I2C 進(jìn)行數(shù)據(jù)傳輸的方法和注意事項(xiàng)。
    發(fā)表于 03-28 22:39 ?7次下載

    無線數(shù)據(jù)傳輸模塊的功能特點(diǎn)

    無線數(shù)據(jù)傳輸模塊主要采用RS485通訊方式,將有線采集端的數(shù)據(jù)傳送到模塊中,再以無線方式進(jìn)行數(shù)據(jù)傳輸,實(shí)現(xiàn)有線設(shè)備和無線設(shè)備之間的數(shù)據(jù)傳輸
    發(fā)表于 07-20 10:21 ?1973次閱讀

    如何實(shí)現(xiàn)Typec手機(jī)在充電的同時(shí)又能進(jìn)行OTG數(shù)據(jù)傳輸方案

    ? Type-C接口的轉(zhuǎn)接器幫你忙,輕松的實(shí)現(xiàn)在快充的過程中,又能實(shí)現(xiàn)數(shù)據(jù)傳輸(OTG)的功能 幫你實(shí)現(xiàn)Type-c手機(jī)充電的同時(shí)又能進(jìn)行數(shù)據(jù)傳輸(OTG)功能 深圳市禾川興科技 ?O
    發(fā)表于 12-22 14:03 ?8343次閱讀
    如何實(shí)現(xiàn)Typec手機(jī)在充電的同時(shí)又<b class='flag-5'>能進(jìn)行</b>OTG<b class='flag-5'>數(shù)據(jù)傳輸</b>方案

    STM32CubeMX-串口開啟DMA進(jìn)行數(shù)據(jù)傳輸

    STM32CubeMX筆記-串口開啟DMA進(jìn)行數(shù)據(jù)傳輸
    發(fā)表于 12-27 18:40 ?7次下載
    STM32CubeMX-串口開啟DMA<b class='flag-5'>進(jìn)行數(shù)據(jù)傳輸</b>