microReticulumTbeam/exercises/202_microReticulum_announce_single/README.md

73 lines
3 KiB
Markdown

# 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:
```text
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:
```bash
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:
```bash
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:
```bash
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:
```text
Local SINGLE destination: 2f6c...
TX ANNOUNCE: Amy
```
After the peer's announce is received, the node prints the learned destination:
```text
RX ANNOUNCE: label=Bob hash=91a4...
```
Once a peer is known, it sends encrypted `DATA` packets to that destination:
```text
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.
![](../../img/20260519_123829_Tue.png)
## 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.