This Arduino library implements a Local Interconnect Network master node emulation. For an explanation of the LIN bus and protocol e.g. see https://en.wikipedia.org/wiki/Local_Interconnect_Network.
Optionally LIN protocoll via RS485 is supported (see respective examples). In this case Rx-enable (=RE) must be statically enabled to receive LIN echo, and Tx-enable (=DE) is controlled by the Arduino.
The class structure is very flexible and aims at supporting different Serial interfaces and architectures. It can easily be ported to other boards - in which case a pull request is highly appreciated…
For a similar Arduino libary for LIN slave emulation see https://github.com/gicking/LIN_slave_portable_Arduino
The sender state machine relies on reading back its 1-wire echo. If no LIN or K-Line transceiver is used, connect Rx&Tx (only one Tx to avoid damage)
For background operation, the handler() method must be called at least every 500us, especially after initiating a frame. Optionally it can be called from within serialEvent()
For ESP32 and ESP8266, library EspSoftwareSerial must be installed, even if SoftwareSerial is not used in project
An ok in the below test matrix indicates that normal master request frames are sent, slave responses are received and bus disconnection is detected (-> error). Also, code execution starts with only external supple, i.e. USB not connected. No extensive testing of all possible error cases was performed. Please let me know if you experience unexpected errors.

Logic analyzer screenshots of LIN bus, idle pin and error pin levels are stored in folder “./extras/testing/Board”
Have fun!, Georg
v1.9 (2026-02-05)
Ticker examples, due to standard 1ms min. period too longEvent examples, due to serialEvent()offers no benefit and is becoming obsoletev1.8 (2025-10-28)
EspSoftwareSerial in library.propertiesEspSoftwareSerial dependencyTicker.attach() instead of Espressif specific Ticker.attach_us(). Note: ESP8266 has 1ms minimumv1.7 (2025-05-03)
SERIAL_DEBUG to SERIAL_CONSOLE to avoid mixup with (internal) debug outputv1.6 (2025-04-27)
v1.5 (2025-04-26)
v1.4 (2025-01-26)
*Stream in LIN base class by actual serial interface to reduce overheadv1.3 (2024-12-14)
v1.2 (2023-06-02)
v1.1 (2022-12-10)
v1.0 (2022-12-10)