...
...
...
...
...
...
...
...
Code Examples & Coding Styles
We first show some options and commands
1. Create your devices
Code Block | ||||
---|---|---|---|---|
| ||||
Device led1 = new Device(1, DeviceType.DIGITAL);
Device d2 = new Device(2, DeviceType.ANALOG);
Device d3 = new Sensor(3, DeviceType.DIGITAL);
Device d4 = new Sensor(4, DeviceType.ANALOG); |
The creation of java-side devices is only necessary if you are manipulating instances directly, sometimes it is optional since the framework will load the devices from connection (with the physical module)
Info |
---|
Note that when you instantiate one device it is automatically recognized by OpenDevice ( you do not need to call addDevice ) |
2.Configure Input and output connections
Here's how to use some types of connection to the physical module (like arduino):
Code Block | ||||
---|---|---|---|---|
| ||||
addOutput(Connections.out.usb()); // Connect to first USB port available
addOutput(Connections.out.usb("COM3"));
addOutput(Connections.out.bluetooth()); // Connect to first bluetooth device available
addOutput(Connections.out.bluetooth("00:11:06:14:04:57"));
addOutput(Connections.out.tcp("http://x.x.x.x:8181")); |
...
Code Block | ||||
---|---|---|---|---|
| ||||
// Configure a Rest interface for receiving commands over HTTP
addInput(Connections.in.rest(8181));
// Configure a Websocket and Rest interface
addInput(Connections.in.websocket(8181)); |
3.Now you can play
Code Block | ||||
---|---|---|---|---|
| ||||
while(true){
led1.on();
Thread.sleep(500);
led1.off();
Thread.sleep(500);
} |
3.1 Access the URL in the browser
http://localhost:8181/device/1/value/1 – Device UID:1 ON
http://localhost:8181/device/1/value/0 – Device UID:1 OFF
3.2 With JavaScript / JQuery
Code Block | ||||
---|---|---|---|---|
| ||||
$.get("http://localhost:8181/device/1/value/1");
$.get("http://localhost:8181/device/1/value/0");
// or
var deviceID = 1;
var value = 1; // can be a value of a input or method param
$.get("http://localhost:8181/device/" + deviceID + "/value/" + value, {},function (data) {
// user logic
}); |
4. Device (Arduino/Similar) Side
In the Arduino or similar you must configure the ports that will be used:
Code Block | ||||
---|---|---|---|---|
| ||||
#include <OpenDevice.h>
void setup(){
ODev.enableDebug();
ODev.addDevice(13, Device::DIGITAL); // ID:1
ODev.addDevice(GREEN_LED, Device::DIGITAL); // ID:2
ODev.addDevice(BLUE_LED, Device::DIGITAL); // ID:3
ODev.addSensor(PUSH1, Device::DIGITAL); // ID:4
ODev.addSensor(PUSH2, Device::DIGITAL); // ID:5
ODev.begin(); // by default call Serial.begin() and while(!Serial) on Leonardo
}
void loop(){
ODev.loop();
}
|
Info |
---|
Unlike other tools the OpenDevice commands use the Device ID, this allows more flexibility in the hardware changes without affecting the rest of the application |
Tip |
---|
Some sections of code were omitted for simplification. Do not worry we have examples! See tutorial: A. First Steps with OpenDevice if you're eager to start |
Communications & Protocols
You can communicate with OpenDevice Middleware (Cloud and Local Services) using a variety of protocols:
HTTP (REST)
Sockets/Websocket
MQTT (In progress)
You can communicate with devices using a variety of protocols via:
USB
Ethernet
WiFi
Bluetooth
Overview
Devices: Is an abstraction of a physical device, which may be a lamp, socket, sensor, robot, or even a logical device. These devices are managed and controlled by a hardware like Arduino, Raspberry and others (see list) or can be built in an embedded own equipment, this is the proposal of the internet of things. Communication with other components of the platform is done using a binary protocol that is implemented in firmware written in "C / C ++" and can be ported to other platforms.
Binary Protocol: Used in communication between Device and Middleware/Clients/Device. Can be:
Usb, Ethernet, Wifi, Bluetooth (Called Output Connections)
Clients: Any device that can make HTTP requests: PC, Mobile, Tablet or any device with a browser. According to the "client" you will decide which API to be used. More details are explained in the session: Components > Clients APIs
Clients Protocol: Rest API, WebSocket API, using JSON (Called Input Connections)
Local Server (Middleware): Any computer running JVM: PC, Raspberry, Android(not tested)
Info |
---|
To simplify the documentation and images the term DEVICE will represent the Arduino / Similar |
Requirements
Before using OpenDevice you will need as a minimum a Java Development Kit (JDK) installed version 1.6 or above. Download the appropriate JDK for your operating system, run the installer, and then set up an environment variable called JAVA_HOME pointing to the location of this installation.
Linux, Windows, MacOS
Java Development Kit (JDK) (installed version 1.6 or above)
Java IDE (any one of your choice - if you plan compile the java examples)
Android SDK (if you plan compile the android examples)
Choose the Toolchain/IDE for the Specific hardware platform, example:
...
...
Info |
---|
It is recommended that you have basic knowledge of Java and Arduino. |
Warning |
---|
The core development has been done in Linux, you can see some bugs in other platforms, please help to do testing in another platform |
Installation
The APIs are managed by maven. Most IDEs have with native support for maven, you no need to install it manually.
Create a new maven project using the IDE and add this configuration:
...
language | xml |
---|---|
title | Dependency declaration in Maven’s pom.xml |
...
In this tutorial we will show the steps to use OpenDevice LIBs and easily do communication between a Java application and Arduino.
Info |
---|
This tutorial is focused on creating custom applications, if you just want to connect your device and start controlling it, you can use the server. If you do not know OpenDevice, I recommend reading the overview, to understand the features, capabilities, languages and operating models. |
Hardware
In this first tutorial we will use the Arduino to be the most popular platform.
For this sample you need only a PC and Arduino (or compatible ).
Software
- Java JDK 1.8 (Windows / Ubuntu)
- Eclipse (or similar)
- Arduino IDE
Step 1 - Installing the library in Arduino
You can install through the Library Manager, click to the "Sketch" menu and then Include Library > Manage Libraries.
Find OpenDevice and click <Install>
Install from source
To install the library, you can simply clone the repository: opendevice-lib-arduino
git clone https://github.com/OpenDevice/opendevice-lib-arduino OpenDevice
And put in the "/libraries" folder of the Arduino IDE.
Tip |
---|
Remember that some examples in this library need extra libraries that must be downloaded and enabled in the configuration file: dependencies.h |
Step 2 - Upload example in to Arduino
When you import the library, a menu for OpenDevice will be created in 'examples' menu. Choose UsbConnection example, plug arduino and click in upload !
Step 3 - Create a new Java project with maven
If you already work with maven can skip this part (see the pom.xml example)
The best way to start with Java and Maven is using an IDE like Eclipse or Netbeans, we use Eclipse to be the most practical and does not require installation, simply download and unzip.
3.1 Create a project
1. Click on menu: File > New > Maven Project
If not in the NEW menu, choose Other and browse the list
2. Choose simple project in next step:
3. Set the name and the group
3.2 Add OpenDevice dependency
OpenDevice libraries are managed by maven, he is responsible to download and set up, you simply configure the pom.xml
Code Block | ||||
---|---|---|---|---|
| ||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>opendevice-tutorial</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<opendevice-version>[0.1.3-SNAPSHOT,1.0.0)</opendevice-version>
</properties>
<dependencies>
<dependency>
<groupId>br.com.criativasoft.opendevice</groupId>
<artifactId>opendevice-connection-stream</artifactId>
<version>${opendevice-version}</version>
</dependency>
<dependency>
<groupId>br.com.criativasoft.opendevice</groupId>
<artifactId>opendevice-core</artifactId>
<version>${opendevice-version}</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>oss.sonatype.org</id>
<url>https://oss.sonatype.org/content/repositories/releases</url>
</repository>
<repository>
<id>oss.sonatype.org-snapshot</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>
</repositories>
</project> |
3.3 Create um new Java Class
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
import br.com.criativasoft.opendevice.core.LocalDeviceManager; import br.com.criativasoft.opendevice.core.model.Device; import java.io.IOException; public class Demo extends LocalDeviceManager { public static void main(String[] args) { launch(args); } public void start() throws IOException { Device led = new Device(1, Device.DIGITAL); connect(out.usb()); // Connect to first USB port available while(true){ led.on(); delay(500); |
...
led.off(); |
...
delay(500); |
...
} |
...
Code Block | ||||
---|---|---|---|---|
| ||||
<repositories>
<repository>
<id>oss.sonatype.org</id>
<url>https://oss.sonatype.org/content/repositories/releases</url>
</repository>
<repository>
<id>oss.sonatype.org-snapshot</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>
</repositories> |
Code Block | ||||
---|---|---|---|---|
| ||||
dependencies {
compile('br.com.criativasoft.opendevice:opendevice-core:${opendevice.version}') {
transitive = false
}
} |
- Find in maven central last version and change ${opendevice.version}
Maven Tutorial (optional)
If you are new to maven these tutorials can help you:
Getting started with maven: http://tutorials.jenkov.com/maven/maven-tutorial.html
Get Sources
The source code is hosted on Github, you need install git. Some IDEs comes with it installed.
Alternatively you can download directly, it is more practical but would not recommend it because you can not get the updates.
Clone OpenDevice repository
...
}
} |
Now you must see the LED blinking in the Arduino
Adding Hardware
Now that you have control of the gates of Arduino, you can control various devices such as lamps, fans, coffeemakers, robots, etc. ..
To control this type of device you will need a relay, which is a device capable of controlling high voltages.
Example:
Info |
---|
Some relay modules are active-low, ie they are triggered with a negative pulse, in which case you can configure it like this: ODev.addDevice("light", 9, Device::DIGITAL)->invertedState(); |
Reference: http://openenergymonitor.org/emon/buildingblocks/mains-ac-relay-module
Tutorial: http://www.instructables.com/id/Connecting-a-12V-Relay-to-Arduino/
Info |
---|
In this example we created our own application to connect and manipulate devices directly, this model is very similar to Android development. The OpenDevice project provides a standard server (opendevice-middleware) that contains a dashboard for management, visualization, and storage that you can use and customize to create your project. The examples and code used in this tutorial and others can be found here: |
...
Find folders
OpenDevice/examples
OpenDevice/opendevice-connection/opendevice-connection-samples (low-level samples)
Info |
---|
In the examples of the arduino documentation will be used for demonstration, but not be limited to it. |
Tutorial
To better understand how each example you can refer to the: documentation/tutorials , stating with: First Steps with OpenDevice
Related pages
...
See next step: Adding REST Support
Troubleshooting
If you have a problem, check this guide: Troubleshooting