mirror of
https://github.com/micropython/micropython.git
synced 2026-01-07 12:40:15 +01:00
tests/multi_espnow: Add channel setting test, add some docs.
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>
This commit is contained in:
committed by
Angus Gratton
parent
78d017fc4e
commit
7647c828de
89
tests/multi_espnow/70_channel.py
Normal file
89
tests/multi_espnow/70_channel.py
Normal file
@@ -0,0 +1,89 @@
|
||||
# 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)
|
||||
13
tests/multi_espnow/70_channel.py.exp
Normal file
13
tests/multi_espnow/70_channel.py.exp
Normal file
@@ -0,0 +1,13 @@
|
||||
--- instance0 ---
|
||||
3
|
||||
b'sent to right channel 1'
|
||||
b'sent to right channel 1'
|
||||
b'sent to right channel 1'
|
||||
b'sent to right channel 2'
|
||||
b'sent to right channel 2'
|
||||
b'sent to right channel 2'
|
||||
Timeout
|
||||
--- instance1 ---
|
||||
3
|
||||
8
|
||||
3
|
||||
Reference in New Issue
Block a user