73 lines
3 KiB
Markdown
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.
|
|
|
|

|
|
|
|
## 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.
|