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