CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-org-sintef-jarduino--org-sintef-jarduino

A comprehensive Java library for interfacing with Arduino boards through serial, Bluetooth, and Ethernet connections

Overview
Eval results
Files

serial-communication.mddocs/

Serial Communication

Serial port communication for connecting to Arduino boards over USB or RS-232. The serial module provides cross-platform native library support with automatic port discovery and reliable message framing using start/stop bytes and escape sequences.

Capabilities

Serial Arduino Connection

Main class for serial port communication implementing the observer pattern for asynchronous message handling.

class Serial4JArduino implements JArduinoClientObserver, JArduinoSubject {
    // Message framing constants
    static final byte START_BYTE = 0x12;
    static final byte STOP_BYTE = 0x13;
    static final byte ESCAPE_BYTE = 0x7D;

    // Constructor
    Serial4JArduino(String port);

    // Communication methods
    void receiveMsg(byte[] msg);
    void register(JArduinoObserver observer);
    void unregister(JArduinoObserver observer);
    void close();

    // Static utility methods
    static HashSet<CommPortIdentifier> getAvailableSerialPorts();
    static void registerPort(String port);
    static String selectSerialPort();
    static void main(String[] args);
}

Native Library Utilities

Utility class for managing native serial port libraries across different operating systems.

class NativeLibUtil {
    static void copyFile(InputStream in, String to);
}

Usage Examples

Basic Serial Connection

import org.sintef.jarduino.comm.Serial4JArduino;
import org.sintef.jarduino.observer.JArduinoObserver;
import org.sintef.jarduino.*;

public class SerialExample {
    public static void main(String[] args) {
        // Create serial connection (Windows example)
        Serial4JArduino arduino = new Serial4JArduino("COM3");

        // Register observer for Arduino responses
        arduino.register(new JArduinoObserver() {
            @Override
            public void receiveMsg(byte[] msg) {
                FixedSizePacket packet = JArduinoProtocol.createMessageFromPacket(msg);
                System.out.println("Arduino response: " + packet.toString());
            }
        });

        // Send commands to Arduino
        FixedSizePacket pinMode = JArduinoProtocol.createPinMode(DigitalPin.PIN_13, PinMode.OUTPUT);
        arduino.receiveMsg(pinMode.getPacket());

        FixedSizePacket digitalWrite = JArduinoProtocol.createDigitalWrite(DigitalPin.PIN_13, DigitalState.HIGH);
        arduino.receiveMsg(digitalWrite.getPacket());

        // Clean up
        arduino.close();
    }
}

Automatic Port Discovery

import org.sintef.jarduino.comm.Serial4JArduino;
import java.util.HashSet;
import gnu.io.CommPortIdentifier;

public class PortDiscoveryExample {
    public static void main(String[] args) {
        // Get all available serial ports
        HashSet<CommPortIdentifier> availablePorts = Serial4JArduino.getAvailableSerialPorts();

        System.out.println("Available serial ports:");
        for (CommPortIdentifier port : availablePorts) {
            System.out.println("- " + port.getName());
        }

        // Interactive port selection (opens dialog)
        String selectedPort = Serial4JArduino.selectSerialPort();
        if (selectedPort != null) {
            Serial4JArduino arduino = new Serial4JArduino(selectedPort);
            // ... use arduino connection
        }
    }
}

Custom Port Registration

// Register custom serial port (useful for non-standard ports)
Serial4JArduino.registerPort("/dev/ttyUSB0");  // Linux
Serial4JArduino.registerPort("COM10");         // Windows

// Create connection to registered port
Serial4JArduino arduino = new Serial4JArduino("/dev/ttyUSB0");

Command Line Usage

# Run the serial communication main method
java -cp jarduino-serial.jar org.sintef.jarduino.serial.Serial4JArduino

# The main method provides interactive serial port selection and basic testing

Platform Support

The serial communication module includes native libraries for:

  • Windows: 32-bit and 64-bit support
  • Linux: x86, x64, ARM support
  • Mac OS X: Universal binary support

Native libraries are automatically extracted and loaded at runtime through the NativeLibUtil class.

Message Framing Protocol

Serial communication uses a binary framing protocol for reliable message transmission:

  • START_BYTE (0x12): Marks beginning of message
  • STOP_BYTE (0x13): Marks end of message
  • ESCAPE_BYTE (0x7D): Escapes special bytes in payload

This framing ensures message boundaries are correctly identified even with noisy serial connections or partial reads.

Error Handling

The serial implementation handles common serial communication issues:

  • Port busy/in use: Throws appropriate exceptions
  • Connection lost: Observer pattern allows detection of communication failures
  • Message corruption: Framing protocol enables detection and recovery
  • Cross-platform differences: Native library abstraction handles OS-specific serial behavior

Dependencies

  • RXTX Library: org.kevoree.extra.osgi.rxtx for cross-platform serial port access
  • JArduino Core: org.sintef.jarduino.core for protocol and message classes

Install with Tessl CLI

npx tessl i tessl/maven-org-sintef-jarduino--org-sintef-jarduino

docs

advanced-features.md

bluetooth-communication.md

core-protocol.md

gui-components.md

index.md

message-handling.md

serial-communication.md

tile.json