Arduino

Intermediate

LoRa Arduino Tutorial: Two Nesso N1 Boards, Live Signal, No Soldering

Two Arduino Nesso N1 boards talking over LoRa
Build This
Build time

Estimated cost

What You'll Need
  • 2 × Arduino Nesso N1 (ESP32-C6 + SX1262, antenna included)
  • Arduino IDE or PlatformIO

Watch It In Action

Two Arduino Nesso N1 boards talking over LoRa, with live signal quality on screen and not a single wire soldered, because the SX1262 radio and antenna are already onboard.

LoRa is great for long-range, low-power links: remote sensors, field controllers, anything where Wi-Fi quits on you. The N1's SX1262 pushes up to +22 dBm and hears down to –147 dBm.

What we're building

  • The transmitter sends "Hello from Nesso N1" with a packet number every 5 seconds.
  • The receiver shows packet count, status, message, RSSI and SNR on its 1.14-inch display.

What you need

Two boards, Arduino IDE or PlatformIO, and three libraries: M5Unified, Arduino_Nesso_N1 and RadioLib.

Set your frequency first

LoRa frequency depends on your region. I'm on 866.1 MHz. Europe is commonly 868 MHz, North America 915 MHz, and some regions use 433 MHz. Match your local rules.

The radio setup

I use RadioLib with an SX1262 object and pass in the Nesso N1 pin definitions: LORA_CS, LORA_IRQ and LORA_BUSY. Reset is RADIOLIB_NC because it's handled manually.

Transmitter

  1. Power up the LoRa hardware.
  2. Call radio.begin(frequency).
  3. Call radio.setDio2AsRfSwitch(true). Skip this line and you'll transmit into a brick wall.
  4. Send a string packet every 5 seconds.

The screen shows battery percentage, the packet counter, TX status and the last message. After upload, you should see LoRa TX at the top and the count going up.

Receiver

It powers up the same way and must use the exact same frequency. Then it waits for packets with radio.receive(). After reboot it should say LoRa RX and waiting. When a packet lands, it reads:

  • radio.getRSSI(): strength in dBm. Closer to 0 is stronger.
  • radio.getSNR(): signal-to-noise ratio. Higher is cleaner.

Watch both move as you walk the receiver away from the transmitter. That's the fun part.

What didn't work

  • Power pins: I forgot them on first boot, and radio.begin() threw an error code to the screen. Enable LORA_ENABLE, LORA_LNA_ENABLE and LORA_ANTENNA_SWITCH.
  • Frequency: I mismatched it by a hair once, and the receiver sat on "Waiting" forever. No error, no packet. Check this first when it's silent.
  • Antenna: LoRa range depends heavily on antenna quality.

Where this goes

Nail this two-board handshake and you have the base for real field telemetry, like soil sensors and gate controllers. I'm thinking about sensor data over LoRa, acknowledgements, or a real outdoor range test next. Which one do you want?