Skip to main content

Overview

The Communication module provides comprehensive protocol implementations for both wired (I2C, Modbus, Serial, SPI) and wireless (LoRa, ESP-NOW) connectivity in embedded systems.

I2C Communication

I2CScanner

Detect and scan I2C devices on the bus.
#define ENABLE_MODULE_I2C_SCANNER
#include "Kinematrix.h"

I2CScanner scanner;
scanner.beginTransmission();
scanner.scanI2CAddress();  // Scans and prints all I2C devices
scanner.endTransmission();
beginTransmission
void
Initialize I2C transmission for scanning
scanI2CAddress
void
Scan and detect all connected I2C devices on the bus
endTransmission
void
Complete I2C transmission

Modbus Protocol

modbusDevice

Industrial communication protocol implementation for RTU and ASCII modes.
#define ENABLE_MODULE_MODBUS_DEVICE
#include "Kinematrix.h"

modbusDevice device;
device.setId(1);  // Set Modbus slave ID
byte id = device.getId();
setId
void
Set the Modbus device ID
getId
byte
Get the current Modbus device ID

Serial Communication

EnhancedSerial

Production-grade serial communication with advanced features including buffering, error handling, and callbacks.
#define ENABLE_MODULE_SERIAL_ENHANCED
#include "Kinematrix.h"

EnhancedSerial serial(512);  // 512-byte buffer
serial.begin(&Serial1, 2000); // 2-second timeout
serial.setEcho(true);

serial.addData(temperature, ';');
serial.addData(humidity, ';');
serial.sendData();
EnhancedSerial
constructor
Create enhanced serial instance
begin
void
Initialize the serial connection
addData
void
Add data to send buffer with separator
sendData
bool
Send accumulated data buffer
sendDataCb
bool
Send data and execute callback on receive
readStringUntil
String
Read string until terminator character
setEcho
void
Enable/disable echo mode for debugging
getLastError
Error
Get the last error code

LoRa Communication

LoRaClass

Long-range wireless communication (up to 10km) for IoT and remote sensing.
#define ENABLE_MODULE_LORA_BASE
#include "Kinematrix.h"

LoRa.setPins(10, 9, 2);  // SS, Reset, DIO0
if (LoRa.begin(915E6)) {  // 915 MHz frequency
  LoRa.setSpreadingFactor(7);
  LoRa.setSignalBandwidth(125E3);
  
  // Send packet
  LoRa.beginPacket();
  LoRa.print("Hello LoRa");
  LoRa.endPacket();
}
begin
int
Initialize LoRa module
beginPacket
int
Start building a packet
endPacket
int
Finish and send the packet
parsePacket
int
Check for incoming packet
setSpreadingFactor
void
Set spreading factor (6-12)
setSignalBandwidth
void
Set signal bandwidth
packetRssi
int
Get RSSI of last received packet
packetSnr
float
Get SNR of last received packet

ESP-NOW

ESPNow

Peer-to-peer mesh networking for ESP32/ESP8266 (no WiFi infrastructure required).
#define ENABLE_MODULE_ESP_NOW
#include "Kinematrix.h"

ESPNow espnow;

void onSend(const uint8_t *mac, esp_now_send_status_t status) {
  Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Success" : "Fail");
}

void onReceive(const uint8_t *mac, const uint8_t *data, int len) {
  Serial.printf("Received %d bytes\n", len);
}

espnow.begin(onSend, onReceive);
espnow.addMacAddress("AA:BB:CC:DD:EE:FF");
espnow.broadcastData((uint8_t*)"Hello", 5);
begin
bool
Initialize ESP-NOW
addMacAddress
void
Add peer device by MAC address
sendData
esp_err_t
Send data to specific peer
broadcastData
bool
Broadcast data to all peers

Protocol Comparison

ProtocolRangeSpeedPowerUse Case
I2C<1m400kHzLowSensors, displays
Serial<100m115200+LowDebug, GPS
Modbus<1000m9600-115200MediumIndustrial control
LoRa10km+0.3-50kbpsLowIoT, remote sensing
ESP-NOW200m1MbpsMediumMesh networks

Platform Support

ESP32

All protocols including WiFi-based

ESP8266

WiFi protocols, basic wired

AVR

Wired protocols, basic LoRa

Build docs developers (and LLMs) love