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