Pimatic Plugin for Johnny Five, a Robotics and IoT programming framework - http://johnny-five.io
Pimatic Plugin for Johnny Five, a Robotics and IoT programming framework.
Thanks to Johnny Five, you can easily integrate a wide range of sensors and actuators attached to
For Arduino, the universal Firmata library is used which implements a protocol for the
communication with host computer. Thus, there is no need to modify the Arduino sketch when new sensors or actuators
are connected to your Arduino. Johnny Five also supports a variety of I2C and
1-Wire devices.
Support for ESP8266 is experimental at the moment as it requires the
“esp” development branch of Firmata.
This version supports the following devices
The OLED and LCD display devices are incomplete and, thus, should not be used.
They won’t do anything useful anyway.
Board-support has been tested with “arduino”, “raspi-io”, “particle-io”, “etherport” and “expander” board types.
Support for “etherport-client” and “esp8266” is experimental.
If you like this plugin, please consider ★ starring
the project on github. Contributions to the project are welcome. You can simply fork the project and create a pull request with
your contribution to start with.
The plugin currently supports Arduino, Raspberry Pi boards, and tethering. More boards can be
added on request. The Johnny Five project provides a detailed
list of supported platforms with
detailed information on supported features and how to set up the board.
You can load the plugin by editing your config.json
to include the following
in the plugins
section. You need to configure the boards you wish to use to control
your devices. Generally, a board is a control system as part of pimatic to drive the
hardware board you use, for example,
The following configuration is an example for pimatic with an Arduino Nano
connected via USB on ttyUSB1 and an Expander connected to the Arduino:
{
"plugin": "johnny-five",
"boards": [
{
"id": "1",
"boardType": "arduino",
"port": "/dev/ttyUSB1",
"baudrate": 57600
},
{
"id": "2",
"boardType": "raspi-io"
},
{
"id": "3",
"boardType": "expander",
"port": "1",
"controller": "MCP23017"
}
]
}
The plugin has the following configuration properties:
Property | Default | Type | Description |
---|---|---|---|
debug | false | Boolean | Provide additional debug output if true |
boards | - | Array | An Array of board configuration objects |
The configuration for a board is an object comprising the following properties.
Property | Default | Type | Description |
---|---|---|---|
id | - | String | Unique identifier used as a reference by a device configuration |
boardType | “arduino” | String | The type of board, see supported types below |
port | - | String | Path or name of device port |
token | - | String | Particle token. Only required for particle-io board type |
deviceId | - | String | Particle device id. Only required for particle-io board type |
controller | - | String | Expander controller type (see below). Only required for expander board type |
address | - | String | Expander I2C address for expander board type or IP address/hostname for esp8266 or etherport-client board type |
Supported boardTypes
Supported Expander controller
types:
The address
needs only to be set if an I2C address other than the default
address is used.
Controller | Address Range | Default |
---|---|---|
“MCP23017” | “0x20”-“0x27” | “0x20” |
“MCP23008” | “0x20”-“0x27” | “0x20” |
“PCF8574” | “0x20”-“0x27” | “0x20” |
“PCF8574A” | “0x38”-“0x3F” | “0x38” |
“PCF8575” | “0x20”-“0x27” | “0x20” |
“PCF8591” | “0x48”-“0x4F” | “0x48” |
“PCA9685” | “0x40”-“0x4F” | “0x40” |
“GROVEPI” | “0x04” | “0x04” |
“CD74HC4067” | “0x0A”-“0x0D” | “0x0A” |
Devices must be added manually to the device section of your pimatic config. For pin assignment conventions
see the document on pin naming.
JohnnyFiveSwitch
is based on the PowerSwitch device class. You need to provide
the address of the output pin
. The device is mapped to a JF “digital output” Pin.
{
"id": "jf-do-1",
"class": "JohnnyFiveSwitch",
"name": "Digital Output (pin 13)",
"pin": "13",
"boardId": "1"
}
It has the following configuration properties:
Property | Default | Type | Description |
---|---|---|---|
pin | String | Pin address of the digital output | |
boardId | - | String | Id of the board to be used |
The Digital Output Device exhibits the following attributes:
Property | Unit | Type | Acronym | Description |
---|---|---|---|---|
state | - | Boolean | - | Switch State, true is on, false is off |
The following predicates and actions are supported:
JohnnyFivePwmOutput
is based on the DimmerActuator device class. You need to provide
the address of the output pin
. The device is mapped to a JF Led.
{
"id": "jf-pwm-1",
"class": "JohnnyFivePwmOutput",
"name": "Digital PWM Output (pin 3)",
"pin": "3",
"boardId": "1"
}
It has the following configuration properties:
Property | Default | Type | Description |
---|---|---|---|
pin | String | Pin address of the (PWM capable) digital output | |
boardId | - | String | Id of the board to be used |
The Digital Output Device exhibits the following attributes:
Property | Unit | Type | Acronym | Description |
---|---|---|---|---|
state | - | Boolean | - | Switch State, true is on, false is off |
dimlevel | % | Number | - | A percentage value of the PWM duty cycle |
The following predicates and actions are supported:
JohnnyFiveRgbLed
is based on the DimmerActuator device class. You need to provide
the address of the output pins
for red, green, and blue. The property isAnode
is
used to specify whether the LED has common anode or cathode.
The device is mapped to a JF Led.RGB.
{
"id": "jf-pwm-1",
"class": "JohnnyFiveRgbLed",
"name": "RGB LED",
"boardId": "2",
"pins": {
"red": "GPIO16",
"green": "GPIO20",
"blue": "GPIO21"
},
"isAnode": true,
}
It has the following configuration properties:
Property | Default | Type | Description |
---|---|---|---|
pins | Object | The pins assigned to the RGB LED, defined by an object with the following properties. | |
pins.red | String | The pin for red | |
pins.green | String | The pin for green | |
pins.blue | String | The pin for blue | |
isAnode | false | Boolean | If set to true the LED is a common anode LED. Defaults to false, indicating a common cathode LED |
boardId | - | String | Id of the board to be used |
The Digital Output Device exhibits the following attributes:
Property | Unit | Type | Acronym | Description |
---|---|---|---|---|
state | - | Boolean | - | Switch State, true is on, false is off |
dimlevel | % | Number | - | A percentage value of the PWM duty cycle |
color | - | String | RGB | A 6-digit RGB hex string starting with, or a CSS color name, or a variable reference |
The following predicates and actions are supported:
JohnnyFivePresenceSensor
is a digital input device based on the PresenceSensor
device class. You need
to provide the address of the input pin
and the boardId
.
{
"id": "jf-cs-1",
"class": "JohnnyFiveContactSensor",
"name": "Digital Input (pin 4)",
"pin": "4",
"boardId": "1"
}
It has the following configuration properties:
Property | Default | Type | Description |
---|---|---|---|
pin | - | String | Pin address of the digital output |
boardId | - | String | Id of the board to be used |
invert | false | Boolean | If true, invert the presence sensor state |
The presence sensor exhibits the following attributes:
Property | Unit | Type | Acronym | Description |
---|---|---|---|---|
presence | - | Boolean | - | Presence State, true is present, false is absent |
The following predicates are supported:
JohnnyFiveContactSensor
is a digital input device based on the ContactSensor
device class. You need
to provide the address of the input pin
.
{
"id": "jf-cs-1",
"class": "JohnnyFiveContactSensor",
"name": "Digital Input (pin 4)",
"pin": "4",
"boardId": "1"
}
It has the following configuration properties:
Property | Default | Type | Description |
---|---|---|---|
pin | String | Pin address of the digital output | |
boardId | - | String | Id of the board to be used |
invert | false | Boolean | If true, invert the contact sensor state |
The presence sensor exhibits the following attributes:
Property | Unit | Type | Acronym | Description |
---|---|---|---|---|
contact | - | Boolean | - | Contact State, true is opened, false is closed |
The following predicates are supported:
The Button Device is a digital input device based on the ContactSensor device class. You need
to provide the address of the input pin
.
{
"id": "jf-b-1",
"class": "JohnnyFiveButton",
"name": "Button (pin 2)",
"pin": "2",
"boardId": "1"
}
The Button Device has the following configuration properties:
Property | Default | Type | Description |
---|---|---|---|
pin | - | String | Pin address of the digital output |
boardId | - | String | Id of the board to be used |
pullUp | false | Boolean | If true, activate the internal pull-up. As a result, a high signal will be read if push-button is open |
invert | false | Boolean | If true, invert the button state |
holdTime | 500 | Number | Time in milliseconds that the button must be held until triggering an event |
controller | “” | String | Controller interface type if an EVshield is used. Supports ‘EVS_EV3’ and ‘EVS_NXT’ shields |
For wiring examples, see:
The following predicates are supported:
The Relay Device represents a single digital Relay attached to the physical board. You need
to provide the address of the output pin
controlling the relay.
{
"id": "jf-r-1",
"name": "Johnny Five Relay",
"class": "JohnnyFiveRelay",
"boardId": "1",
"pin": "12",
"type": "NO"
}
The Relay Device supports two wiring options:
For wiring examples, see:
The Relay Device has the following configuration properties:
Property | Default | Type | Description |
---|---|---|---|
pin | - | String | Pin address of the digital output |
boardId | - | String | Id of the board to be used |
type | “NO” | String | Whether the relay is wired to be normally open (“NO”), or normally closed (“NC”) if pin output is LOW |
The Temperature Sensor is an input device based on the TemperatureSensor device class. It currently
supports 4,7k NTC thermistors (“TINKERKIT”), various I2C sensors, and the DS18B20 1Wire sensor.
Depending on type of sensor different properties are required.
{
"id": "jf-t-1",
"name": "Johnny Five Temperature",
"class": "JohnnyFiveTemperature",
"boardId": "1",
"controller": "SI7020",
"address": "0x40",
"temperatureOffset": -1
},
{
"id": "jf-t-2",
"name": "Johnny Five Temperature 2",
"class": "JohnnyFiveTemperature",
"boardId": "1",
"pin": "A0",
"controller": "TINKERKIT",
"offset": -2.75,
"units": "metric"
}
The Temperature Sensor has the following configuration properties:
Property | Default | Type | Description | |
---|---|---|---|---|
controller | “TINKERKIT” | String | Controller interface type to be used, one of TINKERKIT, LM35, TMP36, DS18B20, MPU6050, GROVE, BMP180, MPL115A2, MPL3115A2, HTU21D, SI7020 | |
pin | “” | String | The pin address. Required if controller is TINKERKIT, optional otherwise | |
address | “” | String | If controller is an I2C device and address is not provided the device-specfic default address applies | |
boardId | - | String | Id of the board to be used | |
interval | 10 | Number | The time interval in seconds at which the sensor will be read | |
units | “metric” | String | Defines whether metric, imperial, or standard units shall be used | |
offset | 0 | Number | A positive or negative offset value to adjust a deviation of the temperature sensor | |
controller | “” | String | Controller interface type if an EVshield is used. Supports ‘EVS_EV3’ and ‘EVS_NXT’ shields |
address:
description: “””
The I2C address. If controller is an I2C device and address is not provided the device-specfic
default address applies.
“””
type: “string”
required: false
For wiring examples, see:
See Release History.
The ‘johnny-five-icon’ files have been created with Inkscape using artwork
by Mike Sgier published as part of the Johnny Five project.
Copyright (c) 2012, 2013, 2014 Rick Waldron waldron.rick@gmail.com
Copyright (c) 2014, 2015, 2016 The Johnny-Five Authors
MIT-License: https://github.com/rwaldron/johnny-five/blob/master/LICENSE-MIT
Copyright (c) 2015-2017, Marcus Wittig and contributors. All rights reserved.