1. How to use this document
You will not read this end-to-end. Use it like a dictionary with a learning path on top.
- Day 1 of your co-op: skim sections 2–4 (Prerequisites, Suggested Path, the Practical 20 list at the end of section 5). That alone puts you ahead of most interns.
- When you hit an unfamiliar term in code or a meeting:
Cmd-Fthe term in section 5. Each entry is self-contained. - When you want depth on a topic: follow the 📚 links at the bottom of the section. Those are the canonical, freely available resources — not random blog posts.
- When you're about to wire a part on your bench: jump to the sister Hardware Quick Reference (link in the navbar) and look up the exact part — it cross-links back to the concepts here.
2. Prerequisites
You don't need an EE degree, but the following mental model is assumed throughout this document. If you don't have it, the Practical 20 in section 4 will catch you up over a week.
Math (intuition, not proofs):
- Algebra: solve for an unknown. Why: every circuit calculation is solving V = IR for one of the three.
- Trig: sine, cosine, frequency, phase. Why: AC analysis, audio, filters, control loops.
- Logarithms. Why: decibels, RC time constants, RC filter cutoff math.
Programming (one of these is enough):
- Python — the default for MicroPython on the Pico and ESP32-S3. You should be comfortable with classes, decorators, async, and type hints.
- C / C++ — for ESP-IDF, Arduino, or any low-level work. Pointers, structs,
volatile,static, bit manipulation. - Shell —
cd,ls,grep,|,>,python -m venv,esptool.py.
Tools to install (do this on day 1):
# Thonny (the friendliest MicroPython IDE — recommended for first month)
sudo apt install thonny # or download from thonny.org
# mpremote — the official MicroPython command-line tool
pip install mpremote
# esptool — for flashing ESP32 / ESP32-S3 boards over USB
pip install esptool
# Arduino IDE 2.x — for Arduino C/C++ projects
# Download from arduino.cc
3. Suggested learning path (5 steps)
Do these in order. By the end you will have a working sensor, a working cloud-free dashboard, and a working secure remote-access story — and you will know which protocol to pick for the next one.
Step 1 — Use the protocols you already use, but look at them
Open chrome://net-export (or Firefox dev tools → Network) and watch the HTTP requests your browser makes on a single page load. You will see DNS (UDP 53), TLS (TCP 443), HTTP/2 or HTTP/3, and probably a WebSocket. Read the headers: User-Agent, Set-Cookie, Strict-Transport-Security. Goal: you can name the protocols in the request graph.
Step 2 — Make a sensor talk MQTT
Run Mosquitto on a Pi or in Docker. Run an ESP32 sensor sketch (from the electronics quickref) that publishes a temperature reading to home/lab/temperature every 10 seconds. Subscribe with mosquitto_sub to see the data. Add TLS (mosquitto.conf + a self-signed cert or Let’s Encrypt). Goal: a working pub/sub sensor on your local network, end-to-end TLS.
Step 3 — Add a wire-protocol sensor
Wire an RS-485 Modbus energy meter or a Modbus-enabled solar inverter to an ESP32 with a MAX485 transceiver. Poll it every 5 seconds and republish the values to MQTT. Use the Modbus cheat sheet (section 6.5) for the Python or C code. Goal: a wired industrial sensor is now in the same dashboard as your wireless sensors.
Step 4 — Build a streaming service
Set up RTSP with an IP camera (or your phone as a test). Add an ONVIF-capable NVR like Agent DVR or Frigate. Add a low-latency WebRTC viewer (Janus or LiveKit) so you can view the camera from anywhere with sub-second latency. Compare with HLS for higher-latency but simpler setup. Goal: video streams end-to-end and you understand the trade-offs.
Step 5 — Secure it for the real world
Generate a real PKI with a private CA (use step ca or smallstep). Issue mTLS certs to every device in your MQTT + WebRTC + custom-HTTP stack. Set up OAuth 2.0 + OIDC with Authentik or Keycloak, and have every web UI use it. Add SSH keys everywhere, disable password login, run fail2ban. Goal: no plaintext password or self-signed cert anywhere in your stack.
Optional but recommended: try LoRaWAN with a local gateway (RAK WisGate or Dragino LPS8) and ChirpStack for a sensor a few km away; or try WebRTC SFU (LiveKit or mediasoup) for low-latency multi-party video.
4. The Practical 20 — read these first
If you only read 20 entries in this glossary, read these. They cover ~90% of what you'll see in your first month on a microcontroller project.
Each entry: a one-line definition, then a practical note in italics that says what it means on the bench. Entries marked 🔥 are the practical-20.
A
5 termsAMQP 1.0 (Advanced Message Queuing Protocol)
#AirPlay
#Age Encryption (age-encryption.org)
#age -r age1... secret.txt > secret.age. Smaller, no keyserver, no config files. See also: OpenPGP / GPG (RFC 4880).Active Directory
#B
4 termsBluetooth Mesh 1.1
#Bluetooth LE (BLE 5.4)
#BACnet MS/TP (Building Automation)
#BACnet/IP (port 47808)
#C
5 termsChirpStack
#CAN 2.0B / CAN FD
#CoAP (Constrained Application Protocol)
#Chromecast (Google Cast)
#CalDAV / CardDAV
#D
13 termsDMX512 (Stage Lighting)
#DLNA / uPnP AV
#DDS (Data Distribution Service)
#DASH7 (D7A)
#DLMS / COSEM (Smart Metering)
#DASH (MPEG-DASH)
#DTLS (Datagram TLS, RFC 6347)
#DKIM / SPF / DMARC
#DoH (DNS over HTTPS, RFC 8484)
#DoT (DNS over TLS, port 853)
#DoQ (DNS over QUIC, RFC 9250)
#DNSSEC
#DNP3 (IEEE 1815)
#E
2 termsEtherNet/IP (CIP over TCP/UDP)
#EtherCAT
#G
4 termsGNSS (GPS / Galileo / GLONASS / BeiDou)
#gRPC (gRPC Remote Procedure Call)
#GraphQL Subscriptions (over WebSocket)
#GraphQL (single request/response)
#H
2 termsHLS (HTTP Live Streaming)
#HTTP Webhooks (port 443)
#X-Signature header is the standard pattern). See also: HTTP / HTTPS, Webhook Fan-out Services (Hookdeck / Svix).I
8 termsIPsec (IKEv2 / ESP)
#Iridium / Inmarsat (Satellite IoT)
#IRC (Internet Relay Chat)
#ICE / STUN / TURN
#Icecast / Shoutcast
#IMAP (port 143 / 993)
#IO-Link
#InfluxDB Line Protocol
#measurement,tag=value,tag=value field=value,field=value timestamp. Practical: The default for time-series data (sensor readings, metrics) when the dataset grows past SQLite. Telegraf, the TICK stack, and many IoT gateways speak it. See also: MQTT 3.1.1.J
2 termsJWT (JSON Web Token)
#JMAP (RFC 8620)
#K
3 termsKNX (Building Automation)
#Kafka (Apache Kafka)
#Kerberos
#L
7 termsLoRa (Physical Layer)
#LoRaWAN
#LoRaWAN Gateway
#LoRa Frequency Plans
#LTE / 5G NR (Cellular IoT)
#Let's Encrypt / ACME
#certbot, acme.sh, or your reverse proxy's built-in ACME client (traefik, caddy, nginx-proxy-manager). Renewals are automatic. Watch for: ACME challenges require port 80 (HTTP-01) or DNS-01 (a TXT record on your domain). For a farm with dynamic DNS, DNS-01 is the right one. See also: TLS 1.3 (Transport Layer Security, port 443), DDNS (Dynamic DNS).LDAP / LDAPS (port 389 / 636)
#M
13 termsMatter 1.3
#MQTT 5
#MQTT 3.1.1
#MQTT-SN (MQTT for Sensor Networks)
#Modbus RTU (RS-485)
#Modbus TCP (port 502)
#mbpoll -m tcp -a 1 -r 0x0000 -c 10 inverter.local. See also: Modbus RTU (RS-485).MQTT over QUIC (MQTT 5)
#mDNS / Bonjour / Avahi
#printer.local and raspberrypi.local work on your LAN. Apple uses Bonjour; Linux uses Avahi. Watch for: doesn't cross VLANs without an mDNS reflector. See also: DNS (Domain Name System), SSDP (UPnP).MQTT-TLS (port 8883)
#MQTT Sparkplug B
#Matrix (Matrix.org)
#MJPEG (Motion JPEG)
#mTLS (Mutual TLS)
#N
6 termsNMEA 0183
#$. Examples: $GPGGA (GPS fix), $WIMWV (wind), $SDDBT (depth). Practical: Still found on older marine electronics. New gear uses NMEA 2000 (CAN-based). See also: NMEA 2000.NMEA 2000
#NB-IoT (Narrowband IoT)
#NATS
#home.barn.temperature). Practical: Smaller and faster than MQTT for many use cases. JetStream adds persistence, replay, and exactly-once. See also: MQTT 3.1.1, ZeroMQ (ZMQ, ØMQ), Kafka (Apache Kafka).NTP (Network Time Protocol, port 123)
#ntpq -p (Linux) shows the time sources. See also: PTP (Precision Time Protocol, IEEE 1588).NFS (Network File System, port 2049)
#O
7 termsOpenVPN
#OPC UA (Open Platform Communications Unified Architecture)
#ONVIF (Open Network Video Interface Forum)
#OCSP Stapling
#OpenPGP / GPG (RFC 4880)
#OAuth 2.0
#OIDC (OpenID Connect)
#P
5 termsPKI (Public Key Infrastructure)
#step ca init or mkcert) for LAN devices. Don't use self-signed certs in production; deploy a private CA instead. See also: TLS 1.3 (Transport Layer Security, port 443), mTLS (Mutual TLS), Let's Encrypt / ACME.POP3 (port 110 / 995)
#PTP (Precision Time Protocol, IEEE 1588)
#PROFINET
#Prometheus Remote Write
#Q
1 termQUIC / HTTP/3
#R
8 termsRS-485 / RS-422
#RTK GPS
#RTSP (Real-Time Streaming Protocol)
#vlc rtsp://camera.local:554/stream1. Watch for: many cheap cameras ship with unencrypted RTSP; use a firewall or VLAN to keep it off the public internet. See also: ONVIF (Open Network Video Interface Forum).RTP / RTCP (Real-time Transport Protocol)
#RIST (Reliable Internet Stream Transport)
#RTMP (Real-Time Messaging Protocol)
#RADIUS / TACACS+
#rsync (port 873 over SSH)
#rsync -avz --progress src/ dest/ for one-way sync. Watch for: the trailing slash matters — src/ copies contents; src copies the directory itself. See also: SSH (Secure Shell, port 22).S
19 termsSSDP (UPnP)
#Starlink (Dish-to-Satellite)
#SigFox
#SigV4 / SigV4a (AWS Signing)
#SIM / eSIM (IoT)
#SSE (Server-Sent Events)
#new EventSource(url)). Practical: Simpler than WebSocket when you only need server-to-client. Native auto-reconnect, no protocol overhead. Use for: live dashboards, notification streams, server logs. See also: WebSocket (RFC 6455), HTTP / HTTPS.STOMP (Simple Text Oriented Messaging Protocol)
#SIP (Session Initiation Protocol)
#SRT (Secure Reliable Transport)
#Spotify Connect / Tidal Connect
#SSH (Secure Shell, port 22)
#SFTP (SSH File Transfer Protocol, port 22)
#SCP (Secure Copy)
#scp file.txt user@host:/path/. Practical: Older than SFTP; SFTP is more capable (can list, resume, partial transfer). Use SFTP for new work; SCP is fine for quick one-offs. See also: SFTP (SSH File Transfer Protocol, port 22), SSH (Secure Shell, port 22).S/MIME (Secure/Multipurpose Internet Mail Extensions)
#SAML 2.0
#SASL (Simple Authentication and Security Layer, RFC 4422)
#SMTP (port 25 / 465 / 587)
#SMB / CIFS (Server Message Block, port 445)
#Syncthing
#T
3 termsThe Things Network (TTN)
#Thread 1.3
#TLS 1.3 (Transport Layer Security, port 443)
#U
1 termUPnP IGD (Internet Gateway Device)
#W
12 termsWi-Fi 4 (802.11n)
#Wi-Fi 5 (802.11ac)
#Wi-Fi 6 (802.11ax)
#Wi-Fi 6E (802.11ax, 6 GHz)
#Wi-Fi 7 (802.11be)
#WireGuard
#Wireless M-Bus (wM-Bus)
#WebSocket (RFC 6455)
#WebRTC (Web Real-Time Communication)
#WebP / AVIF / JPEG XL
#WebDAV (Web Distributed Authoring and Versioning, RFC 4918)
#Webhook Fan-out Services (Hookdeck / Svix)
#X
1 termXMPP (Jabber, Extensible Messaging and Presence Protocol)
#Z
3 termsZigbee 3.0
#Z-Wave (800 series)
#ZeroMQ (ZMQ, ØMQ)
#No matches
Try a different term, or press Esc to clear the search.
6. Quick reference tables
6.1 Wireless protocol comparison (the one table you need)
| Protocol | Band | Range | Data rate | Power | Topology | Best for |
|---|---|---|---|---|---|---|
| Wi-Fi 6 (802.11ax) | 2.4 / 5 / 6 GHz | 30–100 m | 1.5 Gbps | high | star | high-bandwidth local: cameras, PCs, TVs |
| Bluetooth LE 5 | 2.4 GHz | 10–50 m | 2 Mbps | very low | p2p / mesh | phone-as-remote, beacons, sensors |
| Zigbee 3.0 | 2.4 GHz | 10–30 m indoor (mesh far) | 250 kbps | very low | mesh | battery sensors, bulbs, switches |
| Thread 1.3 | 2.4 GHz | 10–30 m indoor (mesh far) | 250 kbps | very low | IPv6 mesh | IPv6-native home automation |
| Matter 1.3 | over Wi-Fi / Thread / Ethernet | same as carrier | same | varies | same | cross-ecosystem compat |
| Z-Wave 800 | sub-GHz (908/868 MHz) | 30 m indoor (mesh far) | 100 kbps | very low | mesh | locks, thermostats (less Wi-Fi interference) |
| LoRaWAN | sub-GHz (868/915 MHz) | 2–10 km outdoor | 0.3–50 kbps | ultra-low | star-of-stars | farm sensors, meters, asset tracking |
| NB-IoT / LTE-M | cellular | cellular coverage | 26 kbps / 300 kbps | low | star | truly remote sensors, no local gateway needed |
| Wi-Fi HaLow (802.11ah) | sub-GHz (900 MHz) | 1 km outdoor | ~50 Mbps | low | star | Wi-Fi-native long range, still niche |
| Starlink (consumer) | Ku band | global (LEO) | 50–250 Mbps | high (dish) | star | rural broadband, the default for off-grid in 2026 |
6.2 What protocol for what application?
| Application | Protocol (recommended first choice) | Why |
|---|---|---|
| Soil moisture / tank level sensor on a farm | LoRaWAN | km range, multi-year battery, no Wi-Fi |
| Smart light bulb (home) | Zigbee or Matter-over-Wi-Fi | low power, mesh, works with HomeKit/Google/Alexa |
| Smart door lock | Z-Wave 800 or Thread/Matter | battery, secure, sub-GHz less interference |
| Livestock GPS tracker | NB-IoT (no local gateway needed) or LoRaWAN | cellular coverage or local gateway |
| Outdoor security camera | Wi-Fi (PoE if possible) + ONVIF | bandwidth, RTSP/ONVIF NVR compat |
| Industrial PLC → SCADA | Modbus TCP / OPC UA / EtherNet/IP | standard, deterministic, IT-friendly |
| Marine chartplotter | NMEA 2000 (CAN-based) | boat standard, 250 kbit CAN |
| Boat AIS receiver | AIS (161/162 MHz) | maritime standard, $30 RTL-SDR works |
| Local-only sensor hub (no internet) | MQTT on local broker, Zigbee/Z-Wave to hub | no cloud, Home Assistant |
| Sensor 50 km from the nearest cell tower | Iridium SBD or LoRaWAN with a tall gateway | only options |
| Tractor GPS guidance (cm accuracy) | RTK GPS over LoRa or cellular | precision agriculture |
| Solar inverter monitoring | Modbus RTU (RS-485) or Modbus TCP | industry standard for inverters |
6.3 Wired protocols cheat sheet (for sensors you can’t reach wirelessly)
| Wire | Max length | Speed | Topology | Common uses |
|---|---|---|---|---|
| RS-485 | 1200 m | 10 Mbps | multi-drop, half-duplex | Modbus, DMX, BACnet MS/TP |
| RS-232 | 15 m | 115 kbps | point-to-point | old gear, GPS, some sensors |
| CAN 2.0B | 40 m (at 1 Mbit) | 1 Mbps | multi-drop | cars, NMEA 2000, industrial |
| CAN FD | 40 m | 8 Mbps | multi-drop | modern cars, factory floors |
| Ethernet (Cat5e) | 100 m | 1 Gbps | star (switched) | LAN, PoE cameras, APs |
| Fiber (single-mode) | 40 km+ | 10 / 100 Gbps | point-to-point | site-to-site, ISP backbone |
| DMX512 (RS-485 at 250 kbaud) | 300 m | 250 kbps | daisy-chain | stage lighting |
| NMEA 0183 (RS-422) | 10 m | 4.8 / 38.4 kbps | point-to-point | old marine electronics |
6.4 MQTT topic conventions worth knowing
The convention is to use a hierarchy: <root>/<location>/<device>/<measurement>. Wildcards: + (one level), # (all levels below).
# Examples (Home Assistant style):
home/garage/temperature # state
home/garage/temperature/set # command
home/barn/water_tank/level # state
home/barn/water_tank/level/json # JSON payload
# Wildcards
home/+/temperature # matches any location
home/barn/# # matches anything under barn
# Reserved topics
$SYS/broker/version # broker info
$SYS/clients/connected # who's connected
# Sparkplug B industrial hierarchy:
spBv1.0/group_id/message_type/edge_node_id/device_id
6.5 Modbus cheat sheet (for solar inverters, meters, HVAC)
# Modbus RTU over RS-485 (Python)
from pymodbus.client import ModbusSerialClient
c = ModbusSerialClient(port='/dev/ttyUSB0', baudrate=9600,
parity='N', stopbits=1, bytesize=8)
result = c.read_holding_registers(address=0, count=10, slave=1)
if not result.isError():
print(result.registers) # list of 10 uint16s
# Modbus TCP (Python)
from pymodbus.client import ModbusTcpClient
c = ModbusTcpClient('inverter.local', port=502)
result = c.read_input_registers(address=0, count=10, slave=1)
# Register types
# 0xxxxx = Coils (digital, read/write)
# 1xxxxx = Discrete inputs (digital, read-only)
# 3xxxxx = Input registers (analog, read-only)
# 4xxxxx = Holding registers (analog, read/write)
#
# Function codes
# 01 = read coils
# 02 = read discrete inputs
# 03 = read holding registers
# 04 = read input registers
# 05 = write single coil
# 06 = write single holding register
# 15 = write multiple coils
# 16 = write multiple holding registers
# Polling loop (do not poll faster than 1 Hz on shared bus)
while True:
regs = c.read_input_registers(0, 10, slave=1).registers
voltage = regs[0] / 10.0 # 0.1 V resolution
current = regs[1] / 100.0 # 0.01 A resolution
print(f"{voltage} V, {current} A")
time.sleep(5)
Tip: the vendor’s Modbus register map is gold. Search for “<vendor> <model> modbus register map”.
6.6 When NOT to reach for the cool protocol
- Wire first. A $5 Cat6 cable beats every wireless protocol. Run conduit if it’s a permanent install.
- Pick the boring protocol. If Wi-Fi reaches, use Wi-Fi. If RS-485 works, use RS-485. Don’t add a LoRa gateway because it’s more interesting.
- Don’t run a cloud dependency if you don’t have to. A local MQTT broker + Home Assistant beats Tuya + Alexa for a co-op who wants to learn.
- Avoid vendor-locked ecosystems (Zigbee-only hubs that don’t bridge to MQTT, Tuya-only cloud, proprietary 433 MHz). Open standards survive longer.
- Avoid mixing too many protocols. Three radios in one sensor is more failure modes. Pick the right one.
7. Further reading
Start here (free, high quality):
- 🔥 Home Assistant docs — home-assistant.io
- 🔥 The Things Network LoRaWAN docs — thethingsnetwork.org
- 🔥 ChirpStack LoRaWAN server docs — chirpstack.io
- 🔥 MQTT essentials (HiveMQ) — hivemq.com
- 📚 Computer Networking: A Top-Down Approach (Kurose & Ross) — the textbook
- 📚 Beej’s Guide to Network Programming — beej.us
- 📚 Modbus application protocol spec — modbus.org
- 📚 LoRaWAN 1.1 spec — lora-alliance.org
Hardware communities:
- r/homeassistant, r/LoRa, r/IoT, r/meshtastic, r/Starlink — Reddit
- Home Assistant Community Forum — community.home-assistant.io
- TTN Forum — thethingsnetwork.org/forum
- MikroTik Forum — forum.mikrotik.com
- UniFi Community — community.ui.com
Last updated: July 2026. Maintained as a living document — if a term on your co-op isn't here, add it.