mirror of
https://github.com/micropython/micropython.git
synced 2025-09-07 02:10:52 +02:00
Test currently passes. It was added so it can be used to check for regressions when fixing channel selection for AP mode in a follow-up commit. Also add some docs about how channel setting is observed to work for ESP-NOW. This work was funded through GitHub Sponsors. Signed-off-by: Angus Gratton <angus@redyak.com.au>
90 lines
2.1 KiB
Python
90 lines
2.1 KiB
Python
# Test that ESP-NOW picks up the channel configuration for STA
|
|
# mode on ESP32.
|
|
#
|
|
# Note that setting the channel on a peer in ESP-NOW on modern ESP-IDF only
|
|
# checks it against the configured channel, it doesn't ever change the radio
|
|
# channel
|
|
import sys
|
|
import time
|
|
|
|
try:
|
|
import network
|
|
import espnow
|
|
except ImportError:
|
|
print("SKIP")
|
|
raise SystemExit
|
|
|
|
# ESP8266 doesn't support config('channel') on the STA interface,
|
|
# and the channel parameter to add_peer doesn't appear to set the
|
|
# channel either.
|
|
if sys.platform == "esp8266":
|
|
print("SKIP")
|
|
raise SystemExit
|
|
|
|
|
|
timeout_ms = 1000
|
|
default_pmk = b"MicroPyth0nRules"
|
|
|
|
CHANNEL = 3
|
|
WRONG_CHANNEL = 8
|
|
|
|
|
|
def init_sta():
|
|
sta = network.WLAN(network.WLAN.IF_STA)
|
|
e = espnow.ESPNow()
|
|
e.active(True)
|
|
sta.active(True)
|
|
sta.disconnect() # Force AP disconnect for any saved config, important so the channel doesn't change
|
|
sta.config(channel=CHANNEL)
|
|
e.set_pmk(default_pmk)
|
|
return sta, e
|
|
|
|
|
|
# Receiver
|
|
def instance0():
|
|
sta, e = init_sta()
|
|
multitest.globals(PEER=sta.config("mac"))
|
|
multitest.next()
|
|
print(sta.config("channel"))
|
|
while True:
|
|
peer, msg = e.recv(timeout_ms)
|
|
if peer is None:
|
|
print("Timeout")
|
|
break
|
|
print(msg)
|
|
e.active(False)
|
|
|
|
|
|
# Sender
|
|
def instance1():
|
|
sta, e = init_sta()
|
|
multitest.next()
|
|
peer = PEER
|
|
|
|
# both instances set channel via sta.config(), above
|
|
msg = b"sent to right channel 1"
|
|
e.add_peer(peer, channel=CHANNEL)
|
|
for _ in range(3):
|
|
e.send(peer, msg)
|
|
e.del_peer(peer)
|
|
print(sta.config("channel"))
|
|
|
|
sta.config(channel=WRONG_CHANNEL)
|
|
msg = b"sent to wrong channel"
|
|
e.add_peer(peer, channel=WRONG_CHANNEL)
|
|
for _ in range(3):
|
|
e.send(peer, msg)
|
|
e.del_peer(peer)
|
|
print(sta.config("channel"))
|
|
|
|
# switching back to the correct channel should also work
|
|
sta.config(channel=CHANNEL)
|
|
msg = b"sent to right channel 2"
|
|
e.add_peer(peer, channel=CHANNEL)
|
|
for _ in range(3):
|
|
e.send(peer, msg)
|
|
e.del_peer(peer)
|
|
print(sta.config("channel"))
|
|
|
|
e.active(False)
|