mirror of
https://github.com/lumapu/ahoy.git
synced 2025-05-22 21:36:11 +02:00
Update ahoy.py channel hopping and logging
* Improve channel hopping by rotating rx start channel for each transaction * Set autoack True gives nearly 100% transmission success rate * Cleanup unused lines
This commit is contained in:
parent
5c7168b984
commit
030af13c96
1 changed files with 30 additions and 21 deletions
|
@ -226,35 +226,40 @@ def main_loop():
|
|||
print_addr(dtu_ser)
|
||||
|
||||
ctr = 1
|
||||
last_tx_message = ''
|
||||
|
||||
ts = int(time.time()) # see what happens if we always send one and the same (constant) time!
|
||||
rx_channels = [3,23,61,75]
|
||||
chn_id = 0
|
||||
rx_channel = rx_channels[chn_id]
|
||||
rx_channel_id = 0
|
||||
rx_channel = rx_channels[rx_channel_id]
|
||||
|
||||
tx_channels = [40]
|
||||
tx_channel_id = 0
|
||||
tx_channel = tx_channels[tx_channel_id]
|
||||
|
||||
while True:
|
||||
# Sweep receive start channel
|
||||
rx_channel_id = ctr % len(rx_channels)
|
||||
rx_channel = rx_channels[rx_channel_id]
|
||||
|
||||
radio.setChannel(rx_channel)
|
||||
radio.enableDynamicPayloads()
|
||||
radio.setAutoAck(False)
|
||||
radio.setAutoAck(True)
|
||||
radio.setPALevel(RF24_PA_MAX)
|
||||
radio.setDataRate(RF24_250KBPS)
|
||||
radio.openWritingPipe(ser_to_esb_addr(inv_ser))
|
||||
radio.flush_rx()
|
||||
radio.flush_tx()
|
||||
radio.openReadingPipe(1,ser_to_esb_addr(dtu_ser))
|
||||
#radio.openReadingPipe(1,ser_to_esb_addr(inv_ser))
|
||||
radio.startListening()
|
||||
|
||||
if ctr<3:
|
||||
pass
|
||||
# radio.printPrettyDetails()
|
||||
|
||||
t_end = time.monotonic_ns()+1e9
|
||||
while time.monotonic_ns() < t_end:
|
||||
has_payload, pipe_number = radio.available_pipe()
|
||||
if has_payload:
|
||||
size = radio.getDynamicPayloadSize()
|
||||
payload = radio.read(size)
|
||||
print(last_tx_message, end='')
|
||||
last_tx_message = ''
|
||||
dt = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
|
||||
print(f"{dt} Received {size} bytes on channel {rx_channel} pipe {pipe_number}: " +
|
||||
" ".join([f"{b:02x}" for b in payload]))
|
||||
|
@ -263,27 +268,31 @@ def main_loop():
|
|||
radio.stopListening()
|
||||
radio.setChannel(rx_channel)
|
||||
radio.startListening()
|
||||
chn_id = chn_id + 1
|
||||
if chn_id >= len(rx_channels):
|
||||
chn_id = 0
|
||||
rx_channel = rx_channels[chn_id]
|
||||
rx_channel_id = rx_channel_id + 1
|
||||
if rx_channel_id >= len(rx_channels):
|
||||
rx_channel_id = 0
|
||||
rx_channel = rx_channels[rx_channel_id]
|
||||
time.sleep(0.01)
|
||||
|
||||
tx_channel_id = tx_channel_id + 1
|
||||
if tx_channel_id >= len(tx_channels):
|
||||
tx_channel_id = 0
|
||||
tx_channel = tx_channels[tx_channel_id]
|
||||
|
||||
radio.stopListening() # put radio in TX mode
|
||||
radio.setChannel(40)
|
||||
radio.setChannel(tx_channel)
|
||||
radio.openWritingPipe(ser_to_esb_addr(inv_ser))
|
||||
|
||||
if ctr<3:
|
||||
pass
|
||||
# radio.printPrettyDetails()
|
||||
|
||||
# ts = int(time.time())
|
||||
ts = int(time.time())
|
||||
payload = compose_0x80_msg(src_ser_no=dtu_ser, dst_ser_no=inv_ser, ts=ts)
|
||||
print(f"{ctr:5d}: len={len(payload)} | " + " ".join([f"{b:02x}" for b in payload]),
|
||||
flush=True)
|
||||
dt = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
|
||||
last_tx_message = f"{dt} Transmit {ctr:5d}: channel={tx_channel} len={len(payload)} | " + \
|
||||
" ".join([f"{b:02x}" for b in payload]) + "\n"
|
||||
radio.write(payload) # will always yield 'True' because auto-ack is disabled
|
||||
ctr = ctr + 1
|
||||
|
||||
print(flush=True, end='')
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue