NMEA 2000 → Home Assistant with Smart2000 (ESP32 & USB-CAN)

Turn your boat’s NMEA 2000 (CAN bus) into live dashboards, alerts and automations in Home Assistant. This guide covers two integrations you can add via HACS:

  • 🚦 Smart2000 ESP — Wireless bridge using an ESP32 + CAN transceiver (place it near the N2K backbone, stream to your Raspberry Pi over Wi-Fi).
  • 🔌 Smart2000 USB — Hard-wired USB-CAN adapter (plug straight into your Raspberry Pi).

🧰 What you’ll need

  • ✅ Home Assistant running (Raspberry Pi recommended).
  • ✅ HACS installed in Home Assistant.
  • ✅ NMEA 2000 backbone with proper 120 Ω terminators at both ends.
  • For Smart2000 ESP: ESP32 dev board, 3.3 V CAN transceiver module, 12→5 V buck converter (or USB 5 V), a short drop/data cable from the N2K backbone.
  • For Smart2000 USB: Waveshare-style USB-CAN adapter (with optional 120 Ω switch), USB extension (optional).
  • ✅ Basic tools: small screwdriver, multimeter.

🩺 Quick NMEA 2000 health checks

  • ✅ With the backbone powered off, measure resistance between CAN-H (white) and CAN-L (blue) — expect ~60 Ω (two 120 Ω terminators in parallel).
  • ✅ Power the bus and check supply on the red/black pair — typically ~12–13 V.
  • ✅ Typical color code on drop cables: Blue=CAN-L, White=CAN-H, Red=+12 V, Black=Ground, Braid/foil=Shield.

🔧 Smart2000 ESP — wiring the ESP32 + CAN transceiver

  • ✅ ESP32 → transceiver:
    • TX (ESP32) → transceiver TXD (GPIO 18).
    • RX (ESP32) → transceiver RXD (GPIO 19).
    • 3.3 V → transceiver VCC; GND → transceiver GND.
  • ✅ Transceiver → NMEA 2000 drop cable:
    • CAN-H ← White, CAN-L ← Blue.
  • ✅ Power the ESP32 from 5 V (USB or a 12→5 V buck). You can draw 12 V from the N2K power pair if convenient (fuse it), or use ship’s 12 V supply.

⚙️ ESPHome base & YAML add-on

  1. Provision the ESP32 with ESPHome using the normal web tools.
  2. Edit the device YAML and append the Smart2000 ESP block from the Smart Boat Innovations site.
    • Set logger: level to ERROR (INFO is too chatty and can slow the ESP32).
    • Include a Wi-Fi signal sensor to monitor link quality.
    • Confirm CAN pins are GPIO18/GPIO19 (or adjust if you wired differently).
  3. Tip: While compiling/flashing, keep the N2K bus disconnected (or remove the white CAN-H lead) so the transceiver isn’t flooded with traffic.
  4. Validate and wirelessly install the firmware to the ESP32.

🧩 Install the Smart2000 ESP integration (HACS)

  1. HACS → Integrations → ⋮ → Custom repositories → paste the Smart2000 ESP GitHub URL → Category: IntegrationAddDownload.
  2. Restart Home Assistant.
  3. Settings → Devices & Services → Add Integration → search “2000” → Smart2000 ESP.
  4. Enter the exact ESPHome device name (hostname). Submit.
  5. Ensure your N2K network is powered on so entities can be auto-discovered.

👀 What you’ll see

  • ✅ Devices are created per PGN group (e.g., depth, environmental parameters, speed, distance log).
  • ✅ Angles converted to degrees and temperatures to °C/°F for human-readable sensors.
  • ✅ Use Add to dashboard to bulk-add gauges; build automations (TTS/siren) for wind shifts, engine temp rise, depth limits, reefing cues, etc.

🧹 PGN include/exclude

Limit noise by excluding PGNs you don’t need. Example: exclude 128275 (Distance Log) if you don’t plan to use it. You can also delete and re-add the integration after deciding on your include/exclude list for a cleaner device list.

🔌 Smart2000 USB — wiring & adapter setup

  • ✅ On the Waveshare-style USB-CAN adapter, connect only:
    • CAN-H ← White, CAN-L ← Blue.
    Trim/insulate the red/black/shield from the drop cable at the adapter end.
  • ✅ Leave the adapter’s 120 Ω switch off unless you need this device to be an end terminator.
  • ✅ Plug the adapter into a USB 3 (blue) port on the Raspberry Pi (a short USB extension is handy).

💻 One-time Windows configuration (easiest)

  1. Install the vendor driver and utility.
  2. Open the tool, choose the COM port, and set:
    • Frame type: Extended (CAN 2.0B).
    • Bitrate: 250 kbps (NMEA 2000 standard).
  3. Click Set + Start and confirm you see live CAN frames. If you don’t, fix settings/wiring first.
  4. Unplug from Windows and move the adapter to the Raspberry Pi.

🧩 Install the Smart2000 USB integration (HACS)

  1. HACS → Integrations → ⋮ → Custom repositories → add the Smart2000 USB repo → Download.
  2. Restart Home Assistant.
  3. Settings → Devices & Services → Add Integration → search “2000” → Smart2000 USB.
  4. Enter a friendly device name and the serial port (usually /dev/ttyUSB0 or /dev/ttyUSB1). If unsure, run ls -l /dev | grep ttyUSB in the Terminal add-on to see which port appeared.
  5. Set baud to 2,000,000 (the adapter uses a high serial rate to carry CAN traffic reliably).
  6. Submit; the same PGNs/entities should auto-appear, just like with the ESP version.

📊 Dashboards & automations

  • ✅ Use Add to dashboard on each device to seed a panel quickly (depth, wind, temp, speed, etc.).
  • ✅ Automations: TTS or siren for rising engine temps, wind direction changes, shallow water, reef-now cues (sustained wind + sailing angle), and more.

🛠️ Troubleshooting

  • No entities? Ensure the N2K network is powered and talkers are active during first discovery.
  • USB-CAN silent? Re-check Extended frame + 250 kbps in the Windows tool; verify you see traffic there first.
  • ESP32 unstable? Reduce logger to ERROR and improve Wi-Fi RSSI; avoid heavy logging.
  • Bus wiring: 60 Ω across CAN-H/L with power off; one terminator at each backbone end.
  • Too many devices? Use PGN include/exclude to keep HA lean.

💰 Cost notes

  • ✅ ESP32 + CAN transceiver boards are only a few dollars.
  • ✅ USB-CAN adapters are commonly ~$25.

🎬 Video Transcript

Introduction

Hi, I’m Rob from Smart Boat Innovations. Over the last few months I’ve been hard at work coding new NMEA 2000 integrations for our smart-boat setup. NMEA 2000 is a modern CAN-bus–based network—similar to what modern cars use—and it shows up in all sorts of places outside the marine world too. I’ve built two new integrations: a wireless one using an ESP32, called Smart2000 ESP, and a direct cabled one over USB, called Smart2000 USB. With the ESP32 option you can keep the NMEA 2000 backbone a few meters away from your Raspberry Pi and still collect all the instrumentation data wirelessly through a tiny CAN-bus transceiver. It keeps your Pi installation neat and uncluttered. Alternatively, you can use a USB-CAN adapter for a simple cabled connection—those are about twenty-five dollars. Both integrations install via HACS, feature a menu-driven setup, and automatically create Home Assistant entities from incoming NMEA 2000 messages. When you add new devices later, they’ll be discovered automatically. Once the sensors exist in Home Assistant you can build dashboards, monitors and alerts, and—most importantly—powerful automations. I want the system to speak or alarm when engine temperatures climb, wind direction moves outside my limits, or when it’s time to reef based on sailing angle, wind speed and other parameters. In this video I’ll show you how to install, configure and use both integrations.

NMEA 2000 network basics

For the demo I use a small NMEA 2000 backbone: center drop is power, one side is a depth sounder, the other is a data drop. Each backbone end has a 120 Ω terminator. You can buy drops with a connector on one end or bare wires on the other; or cut the plug off and expose the conductors yourself. You should see five conductors: blue (CAN-L), white (CAN-H), red (+12 V), black (ground), and a shield. Before using the cable, test it. With the network powered off, measure resistance between CAN-H and CAN-L—you should get about 60 Ω. If it’s higher, you’re probably missing a terminator; if it’s lower, you may have too many terminators. Then power the network and check the supply—around 13 V is fine. Colors can vary, but the blue/white for CAN and red/black for power is common.

ESP32 + CAN transceiver wiring

Set up an ESP32 in ESPHome with the usual web tools so it’s already provisioned. On a small breakout I connect the CAN transceiver with five short jumper wires: ESP32 TX to pin 18, RX to pin 19, 3.3 V to VCC, and GND to GND. The transceiver’s CAN-H goes to the white wire, and CAN-L to the blue wire from the NMEA 2000 drop. For the demo I power the ESP32 over USB 5 V, but on the boat I use a 12→5 V buck converter wired to the 5 V and GND pins. You can draw 12 V from the NMEA 2000 power pair (fused) or from ship’s power.

Install Smart2000 ESP

In Home Assistant, open ESPHome, edit the device YAML and paste the Smart2000 block from my website. While you do this, keep the NMEA 2000 network disconnected or leave the white CAN-H wire off—the bus chatty traffic can make the ESP32 busy while flashing. In the YAML set the logger level to ERROR, add a Wi-Fi signal sensor (important because there’s a lot of data), and confirm the CAN GPIOs are 18/19. Validate and install wirelessly. Then in HACS add the Smart2000 ESP custom repository (Integration), download it, and restart Home Assistant. Go to Settings → Devices & Services, Add Integration, search for “2000,” and select Smart2000 ESP. Enter the exact ESPHome device name. Make sure the NMEA 2000 network is powered on so discovery can happen.

Testing Smart2000 ESP

You’ll see devices created for each PGN group. On my small bench network I get four PGNs from a depth sensor: distance log, environmental parameters, speed, etc. The integration converts angles from radians to degrees and temperatures from Kelvin to Celsius/Fahrenheit. On a larger real-boat network a friend has 25 devices and 264 entities discovered—wind, depth, heading, speed and more. You can add devices straight to a dashboard for quick gauges. If there are PGNs you don’t want—say distance log (PGN 128275)—use the integration’s Configure dialog to exclude them. Existing entities will go unavailable; once you know the exact include/exclude set you want, you can delete and re-add the integration to clean up the list.

USB-CAN adapter wiring

Next, the Waveshare USB-CAN adapter. It has a USB plug on one end and a detachable terminal block for CAN-H and CAN-L on the other, plus a 120 Ω termination switch and a reset button. For this demo I leave the termination switch off because my backbone already has terminators. Connect the blue wire to CAN-L and white to CAN-H. Trim and insulate the red, black and shield. A short USB extension means I don’t have to plug the adapter directly into the Pi; I use a blue USB 3 port on the Pi. That’s all the hardware you need for a direct Pi-to-N2K link.

Adapter configuration (Windows, one time)

Out of the box the adapter isn’t set for NMEA 2000. On my website under Code → Smart2000 USB I link the driver and a small utility. Install the driver and unzip the tool. In the tool, pick the COM port, set frame type to Extended and bitrate to 250 kbps, click Set and Start. If your wiring and settings are right you’ll see NMEA 2000 frames scrolling. If you don’t see them, the HA integration won’t work—fix it here first. Then unplug from Windows and move it to the Raspberry Pi.

Install Smart2000 USB

Back in Home Assistant, add the Smart2000 USB custom repository in HACS, download it, and restart. Add the integration, give it a friendly name, and select the serial port—typically /dev/ttyUSB0, then /dev/ttyUSB1 if you already have another adapter. If you’re unsure, run a command in the Terminal add-on to list USB serial devices. Set the baud rate to 2,000,000 (it’s a fast serial link that carries CAN traffic), then submit. The same PGNs/entities appear as with the ESP version.

Wrap-up

From here you can attach entities to dashboards and build automations: speech or siren alerts for wind shifts, rising engine temperatures, depth limits, and your own sailing rules. Thanks for watching—if you found this helpful, please like and subscribe for more boating and tech videos.