Raspberry and Arduino

Raspberry als REST-Server für Arduino

Hier sehen Sie im Groben den Kommunikationsablauf bezogen auf das YT-Video in diesem Artikel.

Projektdetails

Für dieses Basisprojekt habe ich den Arduino über einen TTL Pegel-Wandler mit dem Raspberry PI verbunden. Als REST-Server am Raspberry dient  Jetty8.

Die serielle Kommunikation läuft über die "java-simple-serial-connector" Library. Natürlich habe ich zuerst auch "Standard-Library" RX/TX-Lib verwendet. Instabil, kompliziert zu verwenden und Kompatibilitätsprobleme sind die Schlagworte die mir zur RX/TX-Lib einfallen. Nachdem ich die JSSC-Lib gefunden habe, war das Projekt innerhalb weniger Stunden umgeschrieben und seither funktioniert die serielle Kommunikation problemlos.

Auf die Pi4J-Library habe ich verzichtet, da ich den Raspberry praktisch "nur" als Web- und Bluetoothshield für den Arduino verwende. Der Arduino hat definitv seine Stärken im Bereich der Ansteuerung von elektronischen Bauteilen, der Raspberry hat seine Stärken in der Rechenpower und seine Verbindungsmöglichkeiten zur Außenwelt.
Die serielle Schnittstelle ist hier, aus meiner Sicht, eine sehr universelle und flexible Möglichkeit diese beiden Vorzüge zu vereinen. Da die einzige Schnittstelle zwischen diesen beiden Devices die serielle Kommunikation ist, kann natürlich jeder der beiden Kommunikationspartner relativ einfach durch eine andere Hardware ersetzt werden.

Dependencies für dieses Projekt

default - Configuration for default artifacts.

+--- org.slf4j:slf4j-api:1.6.4

+--- org.slf4j:jcl-over-slf4j:1.6.4

| \--- org.slf4j:slf4j-api:1.6.4

+--- org.apache.commons:commons-lang3:3.1

+--- org.apache.commons:commons-email:1.3.1

| +--- javax.mail:mail:1.4.5

| | \--- javax.activation:activation:1.1 -> 1.1.1

| \--- javax.activation:activation:1.1.1

+--- com.google.inject:guice:3.0

| +--- javax.inject:javax.inject:1

| +--- aopalliance:aopalliance:1.0

| \--- org.sonatype.sisu.inject:cglib:2.2.1-v20090111

| \--- asm:asm:3.1

+--- com.google.inject.extensions:guice-servlet:3.0

| \--- com.google.inject:guice:3.0 (*)

+--- at.mikemitterer:mmtools:1.+ -> 1.24.0

| +--- org.slf4j:slf4j-api:1.6.4

| \--- org.apache.commons:commons-lang3:3.1

+--- at.mikemitterer:webapp.base:0.5.1

| +--- commons-collections:commons-collections:3.2.1

| +--- com.sun.jersey:jersey-core:1.12

| +--- org.hibernate:hibernate-validator:5.0.1.Final

| | +--- javax.validation:validation-api:1.1.0.Final

| | +--- org.jboss.logging:jboss-logging:3.1.1.GA

| | \--- com.fasterxml:classmate:0.8.0

| +--- org.apache.httpcomponents:httpclient:4.2.5

| | +--- org.apache.httpcomponents:httpcore:4.2.4

| | +--- commons-logging:commons-logging:1.1.1

| | \--- commons-codec:commons-codec:1.6

| +--- org.apache.velocity:velocity:1.7

| | +--- commons-collections:commons-collections:3.2.1

| | \--- commons-lang:commons-lang:2.4

| +--- mysql:mysql-connector-java:5.1.18

| +--- org.apache.shiro:shiro-guice:1.2.1

| | +--- com.google.guava:guava:r09

| | +--- com.google.inject:guice:3.0 (*)

| | \--- com.google.inject.extensions:guice-multibindings:3.0

| | \--- com.google.inject:guice:3.0 (*)

| +--- org.xerial:sqlite-jdbc:3.7.2

| +--- at.mikemitterer:mmtools:1.19 -> 1.24.0 (*)

| +--- javax.servlet:javax.servlet-api:3.0.1

| +--- com.sun.jersey.contribs:jersey-multipart:1.12

| | \--- org.jvnet:mimepull:1.6

| +--- com.sun.jersey.contribs:jersey-guice:1.12

| | +--- javax.inject:javax.inject:1

| | +--- com.google.inject:guice:3.0 (*)

| | \--- com.google.inject.extensions:guice-servlet:3.0 (*)

| +--- commons-digester:commons-digester:2.1

| | +--- commons-beanutils:commons-beanutils:1.8.3

| | | \--- commons-logging:commons-logging:1.1.1

| | \--- commons-logging:commons-logging:1.1.1

| +--- org.slf4j:slf4j-api:1.6.4

| +--- org.apache.shiro:shiro-core:1.2.1

| | +--- org.slf4j:slf4j-api:1.6.4

| | \--- commons-beanutils:commons-beanutils:1.8.3 (*)

| +--- org.eclipse.jetty.aggregate:jetty-all:8.1.11.v20130520

| | \--- org.eclipse.jetty.orbit:javax.servlet:3.0.0.v201112011016

| +--- org.apache.commons:commons-lang3:3.1

| +--- com.sun.jersey:jersey-server:1.12

| | \--- asm:asm:3.1

| +--- joda-time:joda-time:2.2

| +--- javax.ws.rs:jsr311-api:1.1.1

| +--- org.codehaus.jettison:jettison:1.3.1

| | \--- stax:stax-api:1.0.1

| +--- org.apache.commons:commons-email:1.3.1 (*)

| +--- com.sun.jersey:jersey-json:1.12

| | +--- org.codehaus.jettison:jettison:1.1 -> 1.3.1 (*)

| | +--- com.sun.xml.bind:jaxb-impl:2.2.3-1

| | | \--- javax.xml.bind:jaxb-api:2.2.2

| | | +--- javax.xml.stream:stax-api:1.0-2

| | | \--- javax.activation:activation:1.1 -> 1.1.1

| | +--- org.codehaus.jackson:jackson-core-asl:1.9.2

| | +--- org.codehaus.jackson:jackson-mapper-asl:1.9.2

| | | \--- org.codehaus.jackson:jackson-core-asl:1.9.2

| | +--- org.codehaus.jackson:jackson-jaxrs:1.9.2

| | | +--- org.codehaus.jackson:jackson-core-asl:1.9.2

| | | \--- org.codehaus.jackson:jackson-mapper-asl:1.9.2 (*)

| | \--- org.codehaus.jackson:jackson-xc:1.9.2

| | +--- org.codehaus.jackson:jackson-core-asl:1.9.2

| | \--- org.codehaus.jackson:jackson-mapper-asl:1.9.2 (*)

| +--- com.sun.jersey:jersey-servlet:1.12

| +--- org.slf4j:jcl-over-slf4j:1.6.4 (*)

| +--- com.google.inject:guice:3.0 (*)

| +--- com.google.inject.extensions:guice-assistedinject:3.0

| | \--- com.google.inject:guice:3.0 (*)

| +--- org.apache.velocity:velocity-tools:2.0

| | +--- commons-beanutils:commons-beanutils:1.7.0 -> 1.8.3 (*)

| | +--- commons-digester:commons-digester:1.8 -> 2.1 (*)

| | +--- commons-chain:commons-chain:1.1

| | | +--- commons-beanutils:commons-beanutils:1.7.0 -> 1.8.3 (*)

| | | +--- commons-digester:commons-digester:1.6 -> 2.1 (*)

| | | \--- commons-logging:commons-logging:1.0.3 -> 1.1.1

| | +--- commons-logging:commons-logging:1.1 -> 1.1.1

| | +--- commons-validator:commons-validator:1.3.1

| | | +--- commons-beanutils:commons-beanutils:1.7.0 -> 1.8.3 (*)

| | | +--- commons-digester:commons-digester:1.6 -> 2.1 (*)

| | | \--- commons-logging:commons-logging:1.0.4 -> 1.1.1

| | +--- dom4j:dom4j:1.1

| | +--- oro:oro:2.0.8

| | +--- sslext:sslext:1.2-0

| | +--- org.apache.struts:struts-core:1.3.8

| | | +--- antlr:antlr:2.7.2

| | | +--- commons-beanutils:commons-beanutils:1.7.0 -> 1.8.3 (*)

| | | +--- commons-chain:commons-chain:1.1 (*)

| | | +--- commons-digester:commons-digester:1.8 -> 2.1 (*)

| | | +--- commons-logging:commons-logging:1.0.4 -> 1.1.1

| | | +--- commons-validator:commons-validator:1.3.1 (*)

| | | \--- oro:oro:2.0.8

| | +--- org.apache.struts:struts-taglib:1.3.8

| | | \--- org.apache.struts:struts-core:1.3.8 (*)

| | +--- org.apache.struts:struts-tiles:1.3.8

| | | \--- org.apache.struts:struts-core:1.3.8 (*)

| | +--- org.apache.velocity:velocity:1.6.2 -> 1.7 (*)

| | \--- commons-collections:commons-collections:3.2 -> 3.2.1

| +--- org.mybatis:mybatis:3.0.6

| +--- org.apache.shiro:shiro-web:1.2.1

| \--- com.google.inject.extensions:guice-servlet:3.0 (*)

+--- at.mikemitterer:jrelais:3.+ -> 3.1

| +--- at.mikemitterer:mmtools:1.+ -> 1.24.0 (*)

| +--- commons-cli:commons-cli:1.2

| +--- jssc:jssc:2.6.0

| +--- org.slf4j:slf4j-api:1.6.4

| +--- com.google.inject:guice:3.0 (*)

| +--- com.google.inject.extensions:guice-assistedinject:3.0 (*)

| \--- org.apache.commons:commons-lang3:3.1

+--- org.eclipse.jetty.aggregate:jetty-all:8.1.11.v20130520 (*)

+--- org.apache.shiro:shiro-core:1.2.1 (*)

+--- org.apache.shiro:shiro-web:1.2.1

+--- org.apache.shiro:shiro-guice:1.2.1 (*)

+--- org.mybatis:mybatis:3.0.6

+--- mysql:mysql-connector-java:5.1.18

+--- org.xerial:sqlite-jdbc:3.7.2

+--- com.sun.jersey:jersey-server:1.12 (*)

+--- com.sun.jersey:jersey-core:1.12

+--- com.sun.jersey:jersey-servlet:1.12

+--- com.sun.jersey.contribs:jersey-guice:1.12 (*)

+--- com.sun.jersey:jersey-json:1.12 (*)

+--- com.sun.jersey.contribs:jersey-multipart:1.12 (*)

+--- javax.ws.rs:jsr311-api:1.1.1

+--- org.codehaus.jettison:jettison:1.3.1 (*)

+--- org.apache.velocity:velocity:1.7 (*)

+--- org.apache.velocity:velocity-tools:2.0 (*)

+--- commons-digester:commons-digester:2.1 (*)

+--- commons-collections:commons-collections:3.2.1

+--- org.hibernate:hibernate-validator:5.0.1.Final (*)

\--- javax.servlet:javax.servlet-api:3.0.1