Terminology¶
REFERENCE · ABBREVIATIONS · TECHNICAL TERMS
Alphabetical overview of all technical terms and abbreviations used in this documentation.
| Term | Meaning |
|---|---|
| 18650 | Cylindrical lithium-ion cell of 18 by 65 mm; on nodes either a loose cell in a holder or built in |
| 70 cm band | Amateur radio band 430–440 MHz, licence required |
| 868 MHz | ISM band frequency for Europe |
| ACK | Acknowledgement — confirmation that a message has been received |
| ACL | Access Control List — the table of known clients on a repeater, sensor or room server, holding each client's public key and rights. Room for 20 (MAX_CLIENTS) |
| Advert/Beacon | Periodic signal for presence announcement and public key exchange |
| AES | Advanced Encryption Standard — encryption algorithm (128/256-bit) |
| AGC | Automatic Gain Control — the receiver's automatic regulation of its amplification; see set agc.reset.interval in Routing |
| Application | One of the six programs in examples/ that is compiled together with the shared tree into a single firmware file. The application determines which role a node performs |
| Arduino core | Implementation of the Arduino API for one chip family. MeshCore uses four: Arduino-ESP32, Adafruit nRF52, arduino-pico and STM32duino |
| ATT | Attribute Protocol — underlying protocol of GATT in BLE |
| Base section | Section in platformio.ini without an env: prefix. Not built itself but serves as a parent for build targets that inherit from it through extends. MeshCore 03b6ef4 has 108 |
| BBS | Bulletin Board System — a central place where participants leave and collect messages without being present at the same time. The model the Room Server goes back to; the default name of an unconfigured room server is Test BBS |
| BLE | Bluetooth Low Energy — energy-efficient connection between node and smartphone |
| Blocking | A rise in the effective noise floor because a strong signal outside the receiver's own band overloads the receive chain. Specified in ETSI EN 300 220-1 |
| Board class | Class that implements the board contract mesh::MainBoard for one board or one family. MeshCore counts 71: six in src/helpers/ and 65 in variants/ |
| bootloader | Small program that runs first and loads or replaces the actual firmware; determines how a node can be flashed |
| Bridge | Contract for a second transport path alongside LoRa, over which packets can enter and leave a node. MeshCore has two implementations: ESP-NOW and RS232 |
| build flag | Compile option in platformio.ini (-D NAME=value) that decides which code is compiled in |
| build target | One [env:…] section in platformio.ini: the combination of board, role and settings that yields one firmware file. MeshCore counts 507 of them, plus [env:native] for the tests |
| BUSY | Signal line from an SX126x radio to the SoC: active while the chip is processing a command. In MeshCore the build flag P_LORA_BUSY |
| BW | Bandwidth — bandwidth in kHz (125/250/500), narrower = more robust |
| CAD | Channel Activity Detection — function of the LoRa chip that detects whether a LoRa signal is on the channel; see After the pinned commit |
| Callsign | Call sign — unique identification for radio amateurs (e.g. PE1HVH) |
| Cavity filter | Band-pass filter in which every resonator is a quarter-wave line inside a closed metal can, also called a coaxial cavity. The highest Q and the lowest insertion loss of all filter types, but large and heavy |
| CCCD | Client Characteristic Configuration Descriptor — on/off switch for BLE Notify |
| Channel | Shared cryptographic key (PSK) for group communication |
| Chirp | Frequency sweep from low to high (up-chirp) or high to low (down-chirp) |
| app_target_ver | The protocol level an app declares in byte 1 of CMD_DEVICE_QUERY. The firmware keeps it in memory and adapts what it sends back; on disconnect it falls back to 0 |
| CLI | Command Line Interface — the command line of repeater, room server and sensor, on the serial console or remotely; see CLI reference |
| Companion App | Smartphone application to control the MeshCore node |
| Companion protocol | The binary agreement between a companion app and a node: frames of at most 176 bytes over BLE, USB or TCP, with 58 commands, 29 response codes and 17 push codes |
| Component | Delimited part of the logical design with a responsibility of its own, such as radio, board, clock or packet handling. A component is not a file and not a class, but a place in the design |
| Contract | Abstract agreement between two components, expressed in C++ as a class with virtual methods. Whoever satisfies it can replace any other implementation. MeshCore has eight: radio, board, clock, entropy, seen table, packet pool, display and bridge |
| Desensitisation | Loss of receiver sensitivity caused by signals outside its own channel; the result of blocking, intermodulation or coupling |
| Entropy source | The random number generator of a node. MeshCore has two implementations: the noise of the radio receiver (RadioNoiseListener) and the standard generator (StdRNG) |
| Hardware variant | One directory under variants/ holding the pin assignment and settings of a single board. MeshCore counts seventy-nine |
| Implementation | Working realisation of a contract: the class that actually does what the contract promises, and that is replaceable by any other implementation of the same contract |
| Insertion loss | The attenuation a filter or other passive component introduces inside the passband, in dB |
| Interface class | Class that only lays down what an implementation must be able to do, with no working code. Group 1 of the class model; 14 in the shared tree |
| Intermodulation | Mixing products arising when two or more strong signals pass through a non-linear component. The difference between two transmitters can fall inside your own band |
| Implementation class | Class that implements an interface class and is therefore replaceable by any other implementation. Group 2 of the class model; 50 in the shared tree |
| Cortex-M0+/M4/M4F | ARM processor cores. M0+ is the simplest, M4 adds signal-processing instructions, M4F adds a floating-point unit on top |
| CP437 | The character set of the original IBM PC. MeshCore uses one character from it, the full block 0xDB, as a replacement for every non-ASCII character on screen |
| CR | Coding Rate — error correction level (4/5 to 4/8), more = more reliable |
| CSS | Chirp Spread Spectrum — the modulation method LoRa uses |
| dBd | Antenna gain relative to a half-wave dipole. The regulations on 868 MHz count in this. dBd = dBi − 2.15 |
| dBi | Antenna gain relative to an isotropic radiator — the imagined antenna radiating equally in every direction. Datasheets usually use this reference |
| dBm | Decibel-milliwatt — unit for transmit power (14 dBm = 25 mW) |
| debouncing | Suppressing the repeated switching a mechanical button causes on a single press |
| Dechirp | Demodulation by multiplying received chirp with local down-chirp |
depends= |
Line in library.properties by which a library states which other libraries it needs; PlatformIO fetches those automatically |
| Dest hash / Src hash | First byte of the public key of recipient and sender respectively, unencrypted in the packet |
| DFU | Device Firmware Update — updating firmware without a programmer. Over Bluetooth on nRF52, over USB on STM32 |
| Direct routing | Routing along a previously known path; only the repeaters listed in the path forward |
| DM | Direct Message — private message between two nodes, end-to-end encrypted |
| Duty Cycle | Percentage of transmit time allowed (EU: max 1% on 868 MHz) |
| E2E | End-to-End encryption — only sender and receiver can read messages |
| e-ink | Electronic paper; holds its image without power and reads well in daylight, but refreshes slowly |
| EIRP | Effective Isotropic Radiated Power — effective radiated power including antenna |
| Encrypt-then-MAC | Encrypt first, then compute the MAC over the ciphertext |
| e-paper | Display technology holding its image without power. Recognisable in MeshCore by isEink() and by a lower refresh rate |
| exclusion macro | Macro that removes code from the build that would be compiled in without it. RadioLib has twenty-five (RADIOLIB_EXCLUDE_*), littlefs one (LFS_NO_ASSERT), Adafruit SSD1306 one (SSD1306_NO_SPLASH) |
| ERP | Effective Radiated Power — effective radiated power including antenna gain |
| ESP32 | Popular microcontroller from Espressif with WiFi and Bluetooth |
| ESP-IDF | Espressif IoT Development Framework — Espressif's native SDK, on which the Arduino-ESP32 core is built |
| ESP-NOW | Connectionless radio protocol from Espressif between ESP32 chips; in MeshCore available on ESP32 only |
extends |
PlatformIO's inheritance mechanism: a section takes over every option from the named section. Separate from ${section.option}, which splices in text; following only one of the two loses 28 of the 508 build targets |
| FEM | Front-End Module — module with amplifiers and antenna switch between radio chip and antenna |
| FFT | Fast Fourier Transform — algorithm for frequency analysis of dechirped signal |
| Firmware | Software permanently running on the microcontroller of a node |
| First packet wins | With multiple copies of the same flood message the first to arrive is processed; that path is learned, not necessarily the shortest |
| Flashing | Installing or updating firmware on a device |
| Flood | Routing mode in which every repeater forwards the packet and appends its hash to the path |
| framework library | Library shipped inside a platform's framework package, and therefore carrying no author prefix and no version number: SPI, Wire and SubGhz |
| FSPL | Free Space Path Loss — the loss over distance without obstacles. 20·log10(km) + 20·log10(MHz) + 32.44 |
| FIRMWARE_VER_CODE | The protocol level the firmware itself supports, independent of the version number people see. At commit 03b6ef4 it stands at 13. Determines which fields an app may expect in a response |
| Frame | One message on the companion interface: one opcode byte followed by the payload, together at most MAX_FRAME_SIZE (176) bytes. Not to be confused with a LoRa packet, which goes over the air |
| GATT | Generic Attribute Profile — structure for BLE data exchange |
| GNSS | Global Navigation Satellite System — collective name for GPS, Galileo, GLONASS and BeiDou together |
| GODMODE | Build flag RADIOLIB_GODMODE=1 that makes all private and protected members of RadioLib public; MeshCore uses it to reach the module layer directly |
| GPIO | General Purpose Input/Output — connection pins for external devices |
| GPS/GNSS | Global Navigation Satellite System — satellite navigation for location |
| GPX | GPS Exchange Format — XML format for exchanging routes, tracks and waypoints between navigation devices and software |
| HAL | Hardware Abstraction Layer — layer that hides chip-specific registers behind a uniform API |
| HAM | Amateur radio mode — licence required, no encryption permitted |
| Hop | One jump between two nodes in the mesh network |
| I²C | Inter-Integrated Circuit — bus for connecting sensors and displays |
| Coupling point | The place where a concrete class is coupled to a contract. For the radio that is not in the core but in variants/*/target.h, through WRAPPER_CLASS |
| IPEX/U.FL | Small click-on antenna connector for internal antennas |
| ISM band | Industrial, Scientific, Medical — free frequency band, 868 MHz in Europe |
| Keep-alive | Periodic request (0x02) from a client to a server to keep the connection alive. On a room server the confirmation carries the number of waiting posts. Answered direct only, never by flood |
| Key Rotation | Periodic replacement of cryptographic keys for extra security |
| KISS | Keep It Simple, Stupid — a packet radio protocol for passing raw frames between a modem and a computer. Name of one of the six MeshCore roles, which largely bypasses the mesh logic |
lib_deps |
Key in platformio.ini by which a section states which libraries it needs |
| Library Dependency Finder (LDF) | Part of PlatformIO that scans the source code for #include lines and looks for matching libraries, even undeclared ones |
library.json |
Metadata file of a PlatformIO library; the "dependencies" key plays the same role as depends= |
library.properties |
Metadata file of an Arduino library, holding name, version, author and the depends= line |
| Link Budget | Total signal loss a connection can sustain and still be decodable |
| LittleFS | Compact filesystem for microcontrollers, resilient to power loss; used on nRF52, RP2040 and STM32WL |
| LNA | Low Noise Amplifier — amplifier in the receive path, right behind the antenna |
| Logical design | Description of what a system is: components, responsibilities, contracts and data, without pointing at the implementation. Counterpart of the technical design |
| LoRa | Long Range — patented modulation technique for long-range communication |
| LPCOMP | Low-Power Comparator in the nRF52 — can wake the chip from SYSTEMOFF on a voltage change |
| LPP | Low Power Payload — compact binary format for sensor data; MeshCore uses CayenneLPP as the wire format for telemetry |
| LR1110 | Semtech transceiver combining LoRa with GNSS and WiFi scanning for positioning without a separate GPS module |
| MAC (cipher) | Message Authentication Code — HMAC-SHA256 over the ciphertext, truncated to 2 bytes. MeshCore does not use the term MIC |
| Macro | Name that the preprocessor replaces by a value before compiling. In MeshCore, macros carry both on/off choices and class names; see type injection |
| MCU | Microcontroller Unit — the chip the firmware runs on, with processor, memory, flash and the buses the rest of the node hangs off. On the ESP32, nRF52840 and STM32WLE5 that MCU sits inside a SoC; the RP2040 is a bare MCU. Every SoC contains an MCU, not every MCU sits in a SoC |
| Mesh | Network where every device can forward messages to others |
| Meshtastic | Alternative LoRa mesh firmware — not compatible with MeshCore |
| MISO | Master In Slave Out — the SPI line the attached device sends data to the SoC on |
| MIT licence | Open-source licence for free use, modification and distribution |
| Optional build feature | Property that can be on or off independently of the three variation axes: radio class, display class, bridge, sensors, logging. Explains why there are 507 build targets with a role and not 474 |
| MOSI | Master Out Slave In — the SPI line the SoC sends data to the attached device on |
| NMEA | Line-based text format a GNSS receiver sends position, time and satellite count in. One sentence fits in the hundred-byte buffer |
| Node | A device/node in the MeshCore network |
| Node hash | Short form of a node in paths and packets: the first byte of its public key (2 or 3 bytes in the wider path modes). There is no 4-byte Node-ID |
| noise floor | The noise level a receiver has to listen through. MeshCore measures it itself over 64 samples and clamps it at −120 dBm |
| nRF52840 | Nordic microcontroller with ultra-low power consumption and Bluetooth |
| NSS | Chip select of the SPI bus: low while the SoC is addressing this one device. In MeshCore P_LORA_NSS; also called CS |
| Opcode | The first byte of a companion frame, determining how the rest is read. Commands 1-65, response codes 0-28, push codes 0x80-0x90 |
| NUS | Nordic UART Service — BLE service that simulates a serial port |
| OLED | Organic LED — the small self-illuminating screen on many nodes, usually an SSD1306 or SH1106 on the I²C bus |
| opt-in / opt-out | Two opposite conventions for build flags. With opt-in the default state is nothing and a macro adds something (ENV_INCLUDE_BME280); with opt-out the default state is everything and a macro takes something away (RADIOLIB_EXCLUDE_MORSE) |
| OTA | Over-The-Air — wireless firmware update |
| out_path | The learned path to a contact, kept in the contact list. 0xFF (OUT_PATH_UNKNOWN) means no path is known yet |
| Packet pool | Pre-reserved memory for packets, including the inbound and outbound queues. The common programming term is object pool or memory pool. MeshCore has one implementation: StaticPoolPacketManager |
| Path | Sequence of node hashes in a packet: the route travelled for flood, the route to follow for direct |
| PATH packet | Payload type 0x08; reports the travelled path back to the sender. Called a "delivery report" in the FAQ |
| Payload type | 4 bits in the header determining what the payload contains (0x00-0x0F) |
| PHY | Physical Layer — the physical radio layer that converts bits to radio signals |
| PIM | Passive Intermodulation — intermodulation arising in corroding metal junctions outside the equipment and then re-radiated; also known as the rusty bolt effect |
| Platform | In MeshCore: one of the four build targets ESP32_PLATFORM, NRF52_PLATFORM, RP2040_PLATFORM and STM32_PLATFORM. Not the same as a board or a chip |
| Platform family | Set of SoCs sharing the same platform base in platformio.ini, for example ESP32, S3, C3 and C6 under [esp32_base] |
| Platform macro | Build flag marking the platform family: NRF52_PLATFORM, RP2040_PLATFORM, STM32_PLATFORM. ESP32_PLATFORM does exist but is read nowhere — ESP32 code uses the core macro ESP32 |
| PlatformIO environment | One [env:] block in a platformio.ini: the combination of board, role and build flags that yields a single firmware file |
| Post | A message in a Room Server: 151 characters of plain text with a timestamp from the server clock and the first four bytes of the author's public key |
| Power amplifier (PA) | Amplifier stage behind the radio chip that raises the transmit power, for example from 22 to 30 dBm |
| Preamble | Series of identical chirps at the start of each packet for synchronisation |
| Private Key | Secret key — kept private, used to decrypt messages |
| Processing Gain | Signal amplification from spreading over many samples (SF12: ~36 dB) |
| PSK | Pre-Shared Key — pre-shared cryptographic key for channels |
| PSRAM | Pseudo-static RAM — external memory alongside the internal RAM, up to 8 MB on some ESP32 boards |
| Public Key | Public key — freely shareable, used to encrypt messages |
| Quarter-wave resonator | Resonator whose conductor is a quarter wavelength long and shorted at one end; the building block of helical, interdigital, combline and cavity filters. At 869.618 MHz a quarter wavelength is 86.2 mm |
| Region | Named area within which a repeater passes flood traffic. The name yields a key; what travels over the air is a 16-bit transport code |
| Region code | In the UN/LOCODE sense (see Regions: intent and practice): the name of a region, such as nl-ov-zwo. It stays on the node and never goes on air. Not to be confused with the transport code |
| registry | PlatformIO's package index, from which libraries are fetched by name and version |
| Repeater | Node that forwards messages to extend network range |
| RISC-V | Open processor architecture; used in the ESP32-C3 and C6, as opposed to Xtensa in the classic ESP32 and the S3 |
| Role | One of the six applications MeshCore can be: companion radio, repeater, room server, sensor, terminal chat or KISS modem. Fixed at compile time and not changeable afterwards |
| Room Server | Physical node with BBS function for store-and-forward. The queue holds 32 posts, lives in working memory and does not survive a restart |
| Routing | Determining the best route for a message through the network |
| RP2040 | Microcontroller from Raspberry Pi with two Cortex-M0+ cores; the only MeshCore chip without a built-in radio |
| RSSI | Received Signal Strength Indicator — the received signal level in dBm. MeshCore samples it to determine its noise floor |
| RTTTL | Ring Tone Text Transfer Language — Nokia's ringtone format. MeshCore stores its startup and shutdown sound in it |
| SAW | Surface Acoustic Wave — a filter technique in which the signal travels as an acoustic wave across a piezo substrate; steep skirts in a small package, with a limited power range |
| Scheduler | Task planner that decides which work runs when. MeshCore has none: everything runs in a single loop() |
| SCL | Serial Clock — the clock line of the I²C bus (PIN_BOARD_SCL) |
| SCLK | Serial Clock — the clock line of the SPI bus (P_LORA_SCLK). Not to be confused with SCL, the clock line of I²C |
| Scope | The region a sender attaches to a packet, as transport_codes[0] in the header |
| SDA | Serial Data — the data line of the I²C bus (PIN_BOARD_SDA) |
| Seen table | List with which a node checks whether a packet has been received before — technically a duplicate detection table. Without it a packet would keep circulating in a network with several repeaters |
semver caret (^) |
Version specification ^7.6.0: at least 7.6.0, but below the next major version. ~2.0.6 is narrower: below 2.1.0 |
| SF | Spreading Factor — determines range vs speed (SF7–SF12), higher = further |
| Shared tree | src/ and examples/ together: the code that can take part in any build, as opposed to variants/, which is bound to one board. 119 of the 196 classes |
| SIG | Special Interest Group — organisation behind Bluetooth standards |
| SMA | SubMiniature version A — threaded antenna connector |
| SNR | Signal-to-Noise Ratio — ratio of signal to noise in dB |
| SoC | System on Chip — chip combining an MCU, memory and often a radio in one package. The ESP32, nRF52840 and STM32WLE5 are SoCs, the RP2040 is not. The difference from MCU is explained in The Hardware of a Node |
| SoftDevice | Precompiled Bluetooth stack from Nordic that sits alongside the application in an nRF52's flash |
| Source filter | The build_src_filter option in platformio.ini, which decides which source files end up in a build target. In MeshCore it decides which of the six applications is compiled — the target's name says nothing about it |
| Source tree | The layout of the MeshCore source code: eleven core files in src/, a collection of helper classes, six applications in examples/ and seventy-nine variant directories in variants/ |
| SPI | Serial Peripheral Interface — fast bus for LoRa chip and SD card |
| SPIFFS | Simple filesystem for flash memory; used on ESP32 for identity and contacts |
| Push code | An opcode from 0x80 upwards with which the node reports an event unsolicited, such as PUSH_CODE_MSG_WAITING. Never an answer to an outstanding request |
| Standalone | Firmware role for a node with its own display and keyboard, working without a companion app |
| ST-Link | Programming and debug adapter from STMicroelectronics; the usual way to flash an STM32WL |
| Standalone class | Class that is not a contract and implements none either; nothing depends on it and nothing can replace it. Group 3 of the class model; 55 in the shared tree. Not to be confused with the firmware role Standalone |
| STM32WLE5 | SoC from STMicroelectronics with a Cortex-M4 and the LoRa radio (SubGHz) on the same die |
| Store-and-forward | Storing messages until the recipient is reachable |
| SubGHz radio | The radio unit inside the STM32WL; functionally equivalent to an SX126x but without an SPI bus in between |
| SWR | Standing Wave Ratio — the degree to which transmit power is reflected back by the antenna. 1:1 is perfect, infinite is a disconnected antenna |
| SX1262 | Semtech LoRa radio chip — newer, more efficient version |
| SX1276 | Semtech LoRa radio chip — older but still widely used version |
sync_since |
Timestamp indicating how far a client has received a room server's posts. Only moves forward once the confirmation is in |
| Sync Word | Network identifier (2 bytes) to separate different networks |
| SYSTEMOFF | Deepest sleep mode of the nRF52; almost everything off, waking only through specific pins or LPCOMP |
| TCP | Transmission Control Protocol — connection-oriented transport layer. A node with a WiFi build opens a server on port 5000 with it |
| TCXO | Temperature Compensated Crystal Oscillator — clock source holding its frequency across temperature. On an SX126x it is fed by DIO3 |
| Technical design | Description of how a system is realised: classes, files, platform realisation and build chain, with file names and line numbers. Counterpart of the logical design |
| Telemetry | Measurement data from sensors transmitted via the network |
| Text splicing | PlatformIO's second inheritance mechanism: ${section.option} replaces the reference literally with the value of that one option. Unlike extends, which takes over every option |
| Traceability matrix | Table pointing out every part of the logical design in the source tree, with file and line number. Empty rows stay in for parts that deliberately have no realisation |
| transitive dependency | Library that is not declared itself but comes along because another library needs it |
| Transport code | The 16 bits in transport_codes[0]. Not an identifier of a region but an HMAC over payload type and payload, keyed with the region key. It changes with every message; a repeater recognises it by recomputing it, not by looking it up |
| TwoWire | Arduino class for one I²C bus. Wire is the first bus, Wire1 the optional second one for telemetry sensors |
| type injection | Build flag carrying not an on/off value but the name of a class, so that presence and choice sit in one macro: RADIO_CLASS=CustomSX1262, DISPLAY_CLASS, EINK_DISPLAY_MODEL |
| UART | Universal Asynchronous Receiver-Transmitter — serial communication interface |
| UF2 | USB Flashing Format — firmware file you drag onto a USB drive; used by nRF52 and RP2040 |
| USB CDC-ACM | Communications Device Class / Abstract Control Model — the USB class a node uses to present itself to the operating system as a serial port |
| UUID | Universally Unique Identifier — unique identification for BLE services |
| Variability | The degree and manner in which one codebase yields different products. MeshCore varies along three axes — role, platform family and board — plus optional build features, arriving at 508 build targets |
| Variant | Directory under variants/ holding the board-specific configuration: pins, radio type, display and the matching build targets |
| Vendored code | External code kept as a copy in the repository instead of being fetched by the package manager; see vendoring |
| vendoring | Including external code as a copy in your own repo instead of fetching it as a dependency. MeshCore does this in lib/ and arch/. This documentation calls such code vendored |
| Virtual inheritance | C++ construct (virtual public) preventing a class from getting two copies of a base class when that base is reachable along two paths. NRF52BoardDCDC uses it for the 30 board classes below it |
| Web Flasher | Browser tool to install firmware without special software |
| Wrap | Frequency jumps back to the start of the band (0) after reaching the maximum |
| Wrapper | Intermediate layer around an external driver that carries the MeshCore contract. For the radio that is the class in WRAPPER_CLASS, alongside the adapted chip driver in RADIO_CLASS |
| XBM | X BitMap — simple monochrome image format living as a C array in the firmware. drawXbm() puts it on the screen |
| Xtensa | Processor architecture from Cadence; LX6 in the classic ESP32, LX7 in the ESP32-S3 |
| Zero-hop | Direct routing with an empty path: only direct neighbours hear it, nobody forwards it |
Translated from Dutch by Anthropic Claude