Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Note

This documentation is a work in progress.

Introduction

A new era is coming, in this new era all the devices are connected, from a coffee maker to your shoe. For this we need to build solutions that bring more benefits to people's lives, and it needs to be easy!

The "OpenDevice" is a open-source platform  written in java (but not limited to it), which to develop cost effective solutions for the "Internet of Things" in an extremely easy way.

 

Philosophy

The philosophy of OpenDevice is making abstraction of communication between software and hardware with the least possible effort

We are working to have the minimal code in device (hardware), we want to reach zero lines of code. But in a way that can also be flexible.

Most of the examples and tutorials are in JAVA, but do not worry, you can program only with HTML / JavaScript (or other languages) if you wish, using the middleware and the cloud api.

 

Panel

On this page:

Table of Contents
maxLevel3

Code Examples & Coding Styles

We first show some options and commands

1. Create your devices 

 

addDevice(
Code Block
languagejava
titleCode: Java Code
side
Device led1 = new Device(1, DeviceType.DIGITAL));
addDevice(
Device d2 = new Device(2, DeviceType.ANALOG));
addDevice(
Device d3 = new Sensor(3, DeviceType.DIGITAL));
addDevice(
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:

Code Block
languagejava
titleCode: Java Codeside
// setup connection with arduino/hardware
addOutput(Connections.out.usb()); // Connect to first USB port available
addOutput(Connections.out.bluetooth("00130314190700:11:06:14:04:57"));
 
addOutput(Connections.out.tcp("http://x.x.x.x:8181"));

 

The Open Device has two built servers, then you do not need a heavy guy like glassfish or jboss to put your network or internet
Code Block
languagejava
titleCode: Java side
// Configure a Rest interface for receiving commands over HTTP
addInput(Connections.in.rest(8181));
 
connect(); // Connects all configured connections// Configure a Websocket and Rest interface
addInput(Connections.in.websocket(8181));

3.Now you can play

Code Block
languagejava
titleCode: Java CodeSide
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
languagejs
titleClient Side
$.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

Code Block
languagecpp
titleC ++ In Arduino / Similar
#include <OpenDevice.h>

DeviceConnection deviceConnection(Serial);

void setup(){
  
  OpenDevice::addDevice(RED_LED, Device::DIGITAL);   // ID:1
  OpenDevice::addDevice(GREEN_LED, Device::DIGITAL); // ID:2
  OpenDevice::addDevice(BLUE_LED, Device::DIGITAL);  // ID:3
  OpenDevice::addSensor(PUSH1, Device::DIGITAL); // ID:4
  OpenDevice::addSensor(PUSH2, Device::DIGITAL); // ID:5
			
  OpenDevice::begin(deviceConnection);			
}
void loop(){
  OpenDevice::loop();
}

Info

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. Can be:

    • Usb, Ethernet, Wifi, Bluetooth

  • 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)

  • 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 calledJAVA_HOME pointing to the location of this installation.

 

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:

Code Block
languagexml
titleDependency declaration in Maven’s pom.xml
 <dependencies>
        <dependency>
            <groupId>br.com.criativasoft.opendevice</groupId>
            <artifactId>opendevice-core</artifactId> 
            <version>[0.1.2-SNAPSHOT,)</version> 
        </dependency>
</dependencies>
  • artifactId: Put the name of the component you need
  • version : Find in maven central last version
  • See full pom.xml sample

Code Block
languagexml
titleMaven Repository (may be necessary)
	<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
languagejs
titleDependency declaration in Gradle’s build.gradle
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:

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

git clone https://github.com/OpenDevice/OpenDevice --depth 1 --depth 1

 

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

Filter by label (Content by label)
showLabelsfalse
spacesDOC
showSpacefalse
sorttitleshowSpacefalse
typepage
labelsdocumentation-space-sample