microReticulumTbeam/exercises/202_microReticulum_announce_single
2026-05-19 13:22:39 -07:00
..
src Catchup, today has been stampeding horses of productivity 2026-05-19 13:22:39 -07:00
platformio.ini Catchup, today has been stampeding horses of productivity 2026-05-19 13:22:39 -07:00
README.md Catchup, today has been stampeding horses of productivity 2026-05-19 13:22:39 -07:00

Exercise 202: microReticulum announce + SINGLE destination ping-pong

This exercise builds on Exercise 201.

Exercise 201 used a Reticulum PLAIN destination. That proved that Reticulum packets could move over the LoRa interface, but it avoided identity discovery. PLAIN packets are addressed by a shared app/aspect name and are not encrypted to a node identity.

Exercise 202 uses a Reticulum SINGLE destination. Each node creates an identity, announces an inbound destination, learns the other node's announced destination hash and public key, then sends Reticulum DATA packets to that learned destination. This proves the next layer:

Identity -> SINGLE destination -> announce -> peer learns identity/path -> encrypted DATA packet -> local destination callback

This is still not a negotiated Link; that belongs in Exercise 203. SINGLE proves announce/key discovery and destination-addressed packets. A Link adds a negotiated connection on top of an announced SINGLE destination.

Build, upload, and monitor

In one console:

source /home/jlpoole/rnsenv/bin/activate
cd /usr/local/src/microreticulum/microReticulumTbeam
pio run -d exercises/202_microReticulum_announce_single -e amy -t upload --upload-port /dev/ttytAMY && \
pio device monitor -d exercises/202_microReticulum_announce_single -e amy

In another console:

source /home/jlpoole/rnsenv/bin/activate
cd /usr/local/src/microreticulum/microReticulumTbeam
pio run -d exercises/202_microReticulum_announce_single -e bob -t upload --upload-port /dev/ttytBOB && \
pio device monitor -d exercises/202_microReticulum_announce_single -e bob

The platformio.ini also maps each environment to its stable USB symlink, so the shorter form should work once the symlinks exist:

pio run -d exercises/202_microReticulum_announce_single -e amy -t upload
pio device monitor -d exercises/202_microReticulum_announce_single -e amy

Expected output

At startup each node prints its local SINGLE destination hash and periodically announces it:

Local SINGLE destination: 2f6c...
TX ANNOUNCE: Amy

After the peer's announce is received, the node prints the learned destination:

RX ANNOUNCE: label=Bob hash=91a4...

Once a peer is known, it sends encrypted DATA packets to that destination:

TX SINGLE: Amy -> Bob iter=0
RX SINGLE: Bob -> Amy iter=0 | RSSI=-42.0 SNR=9.5

If both nodes only print TX ANNOUNCE, announce reception or validation has not succeeded yet. Confirm both are using the same radio settings and that Exercise 201 works first.

Notes

  • The exercise uses the same T-Beam Supreme LoRa pins and radio settings as Exercises 01 and 201.
  • The identity is generated on each boot. The destination hash can change after reset because the identity changes.
  • App data in the announce carries the human-readable node label, such as Amy or Bob.
  • This exercise intentionally stops before Link establishment. Exercise 203 should use the announced SINGLE destination as the target for a negotiated link.