ESP-NOW

  • Espressif社の公式サイト https://www.espressif.com/en/solutions/low-power-solutions/esp-now
  • ドキュメント https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_now.html
  • MicroPythonのライブラリのGitHub https://github.com/MinoruInachi/micropython/blob/doc-ja/docs/library/espnow.rst

image.png (50.5 kB)

image.png (32.8 kB)

image.png (43.9 kB)

MicroPythonでの実装

1.20.0 (2023/4/26) までMicroPythonのメインブランチに入っていなかった →公式サイトのリンクではなくGitHubのmicropython-espnow-imagesから専用のファームウェアをダウンロードしていた https://github.com/glenn20/micropython-espnow-images

1.21.0 (2023/10/5) からは公式モジュールとして統合されたhttps://micropython.org/download/ESP32_GENERIC/

通信

送信プログラムの例

import network
import espnow

# A WLAN interface must be active to send()/recv()
sta = network.WLAN(network.STA_IF)  # Or network.AP_IF
sta.active(True)
sta.disconnect()      # For ESP8266

e = espnow.ESPNow()
e.active(True)
peer = b'\xbb\xbb\xbb\xbb\xbb\xbb'   # MAC address of peer's wifi interface
e.add_peer(peer)      # Must add_peer() before send()

e.send(peer, "Starting...")
for i in range(100):
    e.send(peer, str(i)*20, True)
e.send(peer, b'end')
受信プログラムの例
import network
import espnow

# A WLAN interface must be active to send()/recv()
sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.disconnect()   # Because ESP8266 auto-connects to last Access Point

e = espnow.ESPNow()
e.active(True)

while True:
    host, msg = e.recv()
    if msg:             # msg == None if timeout in recv()
        print(host, msg)
        if msg == b'end':
            break

エラーハンドリング

try:
    e.send(peer, 'Hello')
except OSError as err:
    if len(err.args) < 2:
        raise err
    if err.args[1] == 'ESP_ERR_ESPNOW_NOT_INIT':
        e.active(True)
    elif err.args[1] == 'ESP_ERR_ESPNOW_NOT_FOUND':
        e.add_peer(peer)
    elif err.args[1] == 'ESP_ERR_ESPNOW_IF':
        network.WLAN(network.STA_IF).active(True)
    else:
        raise err

論文

  • ESP-NOW Based Decentralized Low Cost Voice Communication Systems For Buildings https://ieeexplore.ieee.org/abstract/document/8921062
  • Design of a Robot to Control Agricultural Soil Conditions using ESP-NOW Protocol https://ieeexplore.ieee.org/abstract/document/9288575
  • Comparative Performance Study of ESP-NOW, Wi-Fi, Bluetooth Protocols based on Range, Transmission Speed, Latency, Energy Usage and Barrier Resistance https://ieeexplore.ieee.org/abstract/document/9573246
  • Design and Development of Wireless Sensor Network based data logger with ESP-NOW protocol https://ieeexplore.ieee.org/abstract/document/9417914
  • Synchronized ESP-NOW for Improved Energy Efficiency https://orbit.dtu.dk/en/publications/synchronized-esp-now-for-improved-energy-efficiency