Apache Camel Integration with Ardulink

The ardulink-camel module integrates Ardulink-2 with Apache Camel, enabling enterprise integration patterns with Arduino devices.

What It Does

ardulink-camel provides a Camel component that lets you:

  • Use Arduino pins as Camel message endpoints
  • Route Arduino events to/from other systems (JMS, HTTP, files, etc.)
  • Apply Camel’s enterprise integration patterns to Arduino communication
  • Bridge Arduino with enterprise service buses (ESB)

Basic Setup

Maven Dependency

<dependency>
    <groupId>org.ardulink</groupId>
    <artifactId>ardulink-camel</artifactId>
    <version>2.3.1</version>
</dependency>

Simple Route

import org.apache.camel.CamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;

public class ArdulinkCamelExample {
    public static void main(String[] args) throws Exception {
        CamelContext context = new DefaultCamelContext();

        context.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                // Listen on digital pins D8-D12 and log the ALP protocol message on state changes
                from("ardulink:serial?port=/dev/ttyACM0&listen=D8,D9,D10,D11,D12")
                    .log("Received: ${body}");

                // Blink pin 13: HIGH then LOW every 500ms using ALP protocol
                from("timer:blink?period=500")
                    .setBody(constant("alp://ppp/D13/1"))
                    .to("ardulink:serial?port=/dev/ttyACM0")
                    .delay(500)
                    .setBody(constant("alp://ppp/D13/0"))
                    .to("ardulink:serial?port=/dev/ttyACM0");
            }
        });

        context.start();
        Thread.currentThread().join();
        context.stop();
    }
}

Integration Patterns

Bridge with Message Queue

Forward Arduino sensor data to a JMS/ActiveMQ queue:

from("ardulink:serial?port=/dev/ttyACM0")
    .convertBodyTo(String.class)
    .to("activemq:queue:sensor.readings");

HTTP Webhook

Forward Arduino events to an HTTP endpoint:

from("ardulink:serial?port=/dev/ttyACM0")
    .setHeader(Exchange.HTTP_METHOD, constant("POST"))
    .setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
    .to("http://myserver.com/api/arduino/event");

Filter and Transform

Process specific ALP messages or values:

from("ardulink:serial?port=/dev/ttyACM0")
    .filter(body().contains("A0"))
    .log("Analog reading message: ${body}")
    .to("mailto:alerts@example.com?subject=Sensor+Alert");

MQTT Bridge via Camel

from("ardulink:serial?port=/dev/ttyACM0")
    .to("paho:arduino/messages?brokerUrl=tcp://localhost:1883");

from("paho:commands?brokerUrl=tcp://localhost:1883")
    .to("ardulink:serial?port=/dev/ttyACM0");

Use Cases

  • Enterprise integration — Connect Arduino to existing Camel-based middleware
  • IoT gateways — Bridge local Arduino networks to cloud services
  • Data pipelines — Route sensor data through ETL processes
  • Monitoring — Forward Arduino events to monitoring systems
  • Complex event processing — Apply CEP rules to Arduino data streams

Next Steps