Skip to main content
Kinematrix provides a comprehensive suite of communication protocols for embedded systems, supporting both wired and wireless connectivity across multiple platforms.

Communication Modules

The framework includes 15 communication modules organized into two main categories:

Wired Communication

I2C Systems

I2C scanner, expander, and I/O expansion modules

Modbus Protocol

Industrial RTU/ASCII protocol with master/slave support

Serial Variants

Enhanced, hardware, software, and NMEA serial implementations

SPI Communication

SPI-based serial and dot matrix display control

Wireless Communication

LoRa

Long-range communication with multiple implementations

ESP-NOW

Mesh networking for ESP32/ESP8266 devices

Protocol Comparison

ProtocolRangeSpeedPower UsagePrimary Use Case
I2C<1m400kHzLowSensors, displays, peripheral expansion
SPI<1m10MHz+LowHigh-speed peripherals, displays
Serial<100m115200+ bpsLowDebug, GPS, modems, general communication
Modbus<1000m9600-115200 bpsMediumIndustrial control and monitoring
LoRa10km+0.3-50 kbpsLowIoT, remote sensing, long-range telemetry
ESP-NOW200m1 MbpsMediumMesh networks, peer-to-peer communication

Platform Support

Full Support - All communication protocols available
  • Multiple hardware serial ports
  • WiFi-based protocols (ESP-NOW)
  • Custom GPIO pin mapping
  • LoRa with SPI interface
  • I2C with flexible pin assignment

Module Enable System

All communication modules use conditional compilation for memory optimization:
// Enable specific communication modules
#define ENABLE_MODULE_I2C_SCANNER
#define ENABLE_MODULE_LORA_COM_V2
#define ENABLE_MODULE_MODBUS_SLAVE
#define ENABLE_MODULE_SERIAL_ENHANCED
#define ENABLE_MODULE_ESP_NOW
#include "Kinematrix.h"

Quick Start Examples

I2C Device Scanning

#define ENABLE_MODULE_I2C_SCANNER
#include "Kinematrix.h"

I2CScanner scanner;

void setup() {
  Serial.begin(115200);
  scanner.beginTransmission();
  scanner.scanI2CAddress();
  scanner.endTransmission();
}

void loop() {}

LoRa Communication

#define ENABLE_MODULE_LORA_COM_V2
#include "Kinematrix.h"

LoRaComV2 lora;

void setup() {
  lora.init(915E6);  // 915 MHz frequency
  lora.configure(8, 125E3, 17);  // SF=8, BW=125kHz, Power=17dBm
}

void loop() {
  lora.clearData();
  lora.addData("Temperature");
  lora.addData(25.5);
  lora.sendData();
  delay(5000);
}

Modbus Slave Device

#define ENABLE_MODULE_MODBUS_SLAVE
#include "Kinematrix.h"

modbusSlave slave;
modbusDevice device;

void setup() {
  SoftwareSerial modbusSerial(10, 11);
  slave.setBaud(&modbusSerial, 9600);
  device.setId(1);  // Slave ID
  slave._device = &device;
}

void loop() {
  slave.run();
}

Architecture Patterns

Callback-Driven Communication

Most modules support asynchronous operations with callbacks:
void onDataReceived(const String &data) {
  Serial.println("Received: " + data);
}

// LoRa example
lora.receiveAsync(1000, onDataReceived);

// Serial example
serial.sendDataCb(onDataReceived);

Template-Based Data Handling

Type-agnostic data operations across all modules:
template<typename T>
void addData(T newData, const char* separator = ";") {
  dataSend += String(newData);
  dataSend += separator;
}

// Usage
lora.addData(temperature);    // float
lora.addData("sensor_01");    // string
lora.addData(true);           // bool

Common Features

Most modules implement buffering mechanisms:
  • EnhancedSerial: Circular buffer with overflow protection
  • NemaSerial: Platform-adaptive buffering (64B-512B)
  • LoRaComV2: TX/RX buffers (256 bytes)
  • Modbus: Register banks for data storage
Comprehensive error detection and reporting:
  • EnhancedSerial: Enum-based error codes
  • NemaSerial: CRC validation with ACK/NAK
  • LoRa: Signal quality metrics (RSSI, SNR)
  • Modbus: CRC16 error checking
Unified parsing utilities across modules:
float getData(String data, uint8_t index, char separator[]);
String getStrData(String data, uint8_t index, char separator[]);

Application Examples

Industrial Automation

Use Modbus for PLC communication and sensor monitoring

IoT Sensor Networks

Deploy LoRa for long-range environmental monitoring

Mesh Networking

Implement ESP-NOW for peer-to-peer device communication

Device Expansion

Add I2C/SPI peripherals to extend I/O capabilities

Best Practices

Memory Management: Choose appropriate buffer sizes for your target platform. AVR devices have limited RAM compared to ESP32.
Platform Selection: Use conditional compilation to exclude unused protocols and optimize memory usage.
Testing: Always test communication modules with actual hardware. Loopback testing may not reveal timing or electrical issues.

Next Steps

I2C Expansion

Learn about I2C scanner and expander modules

Modbus Protocol

Implement industrial communication protocols

Serial Variants

Explore different serial implementations

LoRa Communication

Set up long-range wireless communication

Build docs developers (and LLMs) love