Documentation ¶
Overview ¶
Package gobot is the primary entrypoint for Gobot (http://gobot.io), a framework for robotics, physical computing, and the Internet of Things written using the Go programming language .
It provides a simple, yet powerful way to create solutions that incorporate multiple, different hardware devices at the same time.
Classic Gobot ¶
Here is a "Classic Gobot" program that blinks an LED using an Arduino:
package main import ( "time" "gobot.io/x/gobot" "gobot.io/x/gobot/drivers/gpio" "gobot.io/x/gobot/platforms/firmata" ) func main() { firmataAdaptor := firmata.NewAdaptor("/dev/ttyACM0") led := gpio.NewLedDriver(firmataAdaptor, "13") work := func() { gobot.Every(1*time.Second, func() { led.Toggle() }) } robot := gobot.NewRobot("bot", []gobot.Connection{firmataAdaptor}, []gobot.Device{led}, work, ) robot.Start() }
Metal Gobot ¶
You can also use Metal Gobot and pick and choose from the various Gobot packages to control hardware with nothing but pure idiomatic Golang code. For example:
package main import ( "gobot.io/x/gobot/drivers/gpio" "gobot.io/x/gobot/platforms/intel-iot/edison" "time" ) func main() { e := edison.NewAdaptor() e.Connect() led := gpio.NewLedDriver(e, "13") led.Start() for { led.Toggle() time.Sleep(1000 * time.Millisecond) } }
Master Gobot ¶
Finally, you can use Master Gobot to add the complete Gobot API or control swarms of Robots:
package main import ( "fmt" "time" "gobot.io/x/gobot" "gobot.io/x/gobot/api" "gobot.io/x/gobot/platforms/sphero" ) func NewSwarmBot(port string) *gobot.Robot { spheroAdaptor := sphero.NewAdaptor(port) spheroDriver := sphero.NewSpheroDriver(spheroAdaptor) spheroDriver.SetName("Sphero" + port) work := func() { spheroDriver.Stop() spheroDriver.On(sphero.Collision, func(data interface{}) { fmt.Println("Collision Detected!") }) gobot.Every(1*time.Second, func() { spheroDriver.Roll(100, uint16(gobot.Rand(360))) }) gobot.Every(3*time.Second, func() { spheroDriver.SetRGB(uint8(gobot.Rand(255)), uint8(gobot.Rand(255)), uint8(gobot.Rand(255)), ) }) } robot := gobot.NewRobot("sphero", []gobot.Connection{spheroAdaptor}, []gobot.Device{spheroDriver}, work, ) return robot } func main() { master := gobot.NewMaster() api.NewAPI(master).Start() spheros := []string{ "/dev/rfcomm0", "/dev/rfcomm1", "/dev/rfcomm2", "/dev/rfcomm3", } for _, port := range spheros { master.AddRobot(NewSwarmBot(port)) } master.Start() }
Copyright (c) 2013-2018 The Hybrid Group. Licensed under the Apache 2.0 license.
Index ¶
- Constants
- func After(t time.Duration, f func())
- func DefaultName(name string) string
- func Every(t time.Duration, f func()) *time.Ticker
- func FromScale(input, min, max float64) float64
- func Rand(max int) int
- func Rescale(input, fromMin, fromMax, toMin, toMax float64) float64
- func ToScale(input, min, max float64) float64
- func Version() string
- type Adaptor
- type Commander
- type Connection
- type Connections
- type Device
- type Devices
- type Driver
- type Event
- type Eventer
- type JSONConnection
- type JSONDevice
- type JSONMaster
- type JSONRobot
- type Master
- type Pinner
- type Porter
- type Robot
- func (r *Robot) AddConnection(c Connection) Connection
- func (r *Robot) AddDevice(d Device) Device
- func (r *Robot) After(ctx context.Context, d time.Duration, f func()) *RobotWork
- func (r *Robot) Connection(name string) Connection
- func (r *Robot) Connections() *Connections
- func (r *Robot) Device(name string) Device
- func (r *Robot) Devices() *Devices
- func (r *Robot) Every(ctx context.Context, d time.Duration, f func()) *RobotWork
- func (r *Robot) Running() bool
- func (r *Robot) Start(args ...interface{}) (err error)
- func (r *Robot) Stop() error
- func (r *Robot) WorkRegistry() *RobotWorkRegistry
- type RobotWork
- type RobotWorkRegistry
- type Robots
Examples ¶
Constants ¶
const ( EveryWorkKind = "every" AfterWorkKind = "after" )
Variables ¶
This section is empty.
Functions ¶
func After ¶
After triggers f after t duration.
Example ¶
package main import ( "fmt" "time" "gobot.io/x/gobot" ) func main() { gobot.After(1*time.Second, func() { fmt.Println("Hello") }) }
Output:
func DefaultName ¶
DefaultName returns a sensible random default name for a robot, adaptor or driver
func Every ¶
Every triggers f every t time.Duration until the end of days, or when a Stop() is called on the Ticker that is returned by the Every function. It does not wait for the previous execution of f to finish before it fires the next f.
Example ¶
package main import ( "fmt" "time" "gobot.io/x/gobot" ) func main() { gobot.Every(1*time.Second, func() { fmt.Println("Hello") }) }
Output:
func FromScale ¶
FromScale returns a converted input from min, max to 0.0...1.0.
Example ¶
package main import ( "fmt" "gobot.io/x/gobot" ) func main() { fmt.Println(gobot.FromScale(5, 0, 10)) }
Output: 0.5
func Rand ¶
Rand returns a positive random int up to max
Example ¶
package main import ( "fmt" "gobot.io/x/gobot" ) func main() { i := gobot.Rand(100) fmt.Printf("%v is > 0 && < 100", i) }
Output:
func ToScale ¶
ToScale returns a converted input from 0...1 to min...max scale. If input is less than min then ToScale returns min. If input is greater than max then ToScale returns max
Example ¶
package main import ( "fmt" "gobot.io/x/gobot" ) func main() { fmt.Println(gobot.ToScale(500, 0, 10)) }
Output: 10
Types ¶
type Adaptor ¶
type Adaptor interface { // Name returns the label for the Adaptor Name() string // SetName sets the label for the Adaptor SetName(n string) // Connect initiates the Adaptor Connect() error // Finalize terminates the Adaptor Finalize() error }
Adaptor is the interface that describes an adaptor in gobot
type Commander ¶
type Commander interface { // Command returns a command given a name. Returns nil if the command is not found. Command(string) (command func(map[string]interface{}) interface{}) // Commands returns a map of commands. Commands() (commands map[string]func(map[string]interface{}) interface{}) // AddCommand adds a command given a name. AddCommand(name string, command func(map[string]interface{}) interface{}) }
Commander is the interface which describes the behaviour for a Driver or Adaptor which exposes API commands.
type Connections ¶
type Connections []Connection
Connections represents a collection of Connection
func (*Connections) Each ¶
func (c *Connections) Each(f func(Connection))
Each enumerates through the Connections and calls specified callback function.
func (*Connections) Finalize ¶
func (c *Connections) Finalize() (err error)
Finalize calls Finalize on each Connection in c
func (*Connections) Start ¶
func (c *Connections) Start() (err error)
Start calls Connect on each Connection in c
type Devices ¶
type Devices []Device
Devices represents a collection of Device
type Driver ¶
type Driver interface { // Name returns the label for the Driver Name() string // SetName sets the label for the Driver SetName(s string) // Start initiates the Driver Start() error // Halt terminates the Driver Halt() error // Connection returns the Connection associated with the Driver Connection() Connection }
Driver is the interface that describes a driver in gobot
type Event ¶
type Event struct { Name string Data interface{} }
Event represents when something asynchronous happens in a Driver or Adaptor
type Eventer ¶
type Eventer interface { // Events returns the map of valid Event names. Events() (eventnames map[string]string) // Event returns an Event string from map of valid Event names. // Mostly used to validate that an Event name is valid. Event(name string) string // AddEvent registers a new Event name. AddEvent(name string) // DeleteEvent removes a previously registered Event name. DeleteEvent(name string) // Publish new events to any subscriber Publish(name string, data interface{}) // Subscribe to events Subscribe() (events eventChannel) // Unsubscribe from an event channel Unsubscribe(events eventChannel) // Event handler On(name string, f func(s interface{})) (err error) // Event handler, only executes one time Once(name string, f func(s interface{})) (err error) }
Eventer is the interface which describes how a Driver or Adaptor handles events.
type JSONConnection ¶
JSONConnection is a JSON representation of a Connection.
func NewJSONConnection ¶
func NewJSONConnection(connection Connection) *JSONConnection
NewJSONConnection returns a JSONConnection given a Connection.
type JSONDevice ¶
type JSONDevice struct { Name string `json:"name"` Driver string `json:"driver"` Connection string `json:"connection"` Commands []string `json:"commands"` }
JSONDevice is a JSON representation of a Device.
func NewJSONDevice ¶
func NewJSONDevice(device Device) *JSONDevice
NewJSONDevice returns a JSONDevice given a Device.
type JSONMaster ¶
JSONMaster is a JSON representation of a Gobot Master.
func NewJSONMaster ¶
func NewJSONMaster(gobot *Master) *JSONMaster
NewJSONMaster returns a JSONMaster given a Gobot Master.
type JSONRobot ¶
type JSONRobot struct { Name string `json:"name"` Commands []string `json:"commands"` Connections []*JSONConnection `json:"connections"` Devices []*JSONDevice `json:"devices"` }
JSONRobot a JSON representation of a Robot.
func NewJSONRobot ¶
NewJSONRobot returns a JSONRobot given a Robot.
type Master ¶
Master is the main type of your Gobot application and contains a collection of Robots, API commands that apply to the Master, and Events that apply to the Master.
func (*Master) AddRobot ¶
AddRobot adds a new robot to the internal collection of robots. Returns the added robot
type Pinner ¶
type Pinner interface {
Pin() string
}
Pinner is the interface that describes a driver's pin
type Porter ¶
type Porter interface {
Port() string
}
Porter is the interface that describes an adaptor's port
type Robot ¶
type Robot struct { Name string Work func() AutoRun bool WorkEveryWaitGroup *sync.WaitGroup WorkAfterWaitGroup *sync.WaitGroup Commander Eventer // contains filtered or unexported fields }
Robot is a named entity that manages a collection of connections and devices. It contains its own work routine and a collection of custom commands to control a robot remotely via the Gobot api.
func NewRobot ¶
func NewRobot(v ...interface{}) *Robot
NewRobot returns a new Robot. It supports the following optional params:
name: string with the name of the Robot. A name will be automatically generated if no name is supplied. []Connection: Connections which are automatically started and stopped with the robot []Device: Devices which are automatically started and stopped with the robot func(): The work routine the robot will execute once all devices and connections have been initialized and started
func (*Robot) AddConnection ¶
func (r *Robot) AddConnection(c Connection) Connection
AddConnection adds a new connection to the robots collection of connections. Returns the added connection.
func (*Robot) AddDevice ¶
AddDevice adds a new Device to the robots collection of devices. Returns the added device.
func (*Robot) Connection ¶
func (r *Robot) Connection(name string) Connection
Connection returns a connection given a name. Returns nil if the Connection does not exist.
func (*Robot) Connections ¶
func (r *Robot) Connections() *Connections
Connections returns all connections associated with this robot.
func (*Robot) Device ¶
Device returns a device given a name. Returns nil if the Device does not exist.
func (*Robot) WorkRegistry ¶
func (r *Robot) WorkRegistry() *RobotWorkRegistry
WorkRegistry returns the Robot's WorkRegistry
type RobotWork ¶
type RobotWork struct {
// contains filtered or unexported fields
}
RobotWork and the RobotWork registry represent units of executing computation managed at the Robot level. Unlike the utility functions gobot.After and gobot.Every, RobotWork units require a context.Context, and can be cancelled externally by calling code.
Usage:
someWork := myRobot.Every(context.Background(), time.Second * 2, func(){ fmt.Println("Here I am doing work") }) someWork.CallCancelFunc() // Cancel next tick and remove from work registry
goroutines for Every and After are run on their own WaitGroups for synchronization:
someWork2 := myRobot.Every(context.Background(), time.Second * 2, func(){ fmt.Println("Here I am doing more work") }) somework2.CallCancelFunc() // wait for both Every calls to finish robot.WorkEveryWaitGroup().Wait()
func (*RobotWork) CallCancelFunc ¶
func (rw *RobotWork) CallCancelFunc()
CallCancelFunc calls the context.CancelFunc used to cancel the work
func (*RobotWork) CancelFunc ¶
func (rw *RobotWork) CancelFunc() context.CancelFunc
CancelFunc returns the context.CancelFunc used to cancel the work
func (*RobotWork) Duration ¶
Duration returns the timeout until an After fires or the period of an Every
type RobotWorkRegistry ¶
RobotWorkRegistry contains all the work units registered on a Robot
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package api provides a webserver to interact with your Gobot program over the network.
|
Package api provides a webserver to interact with your Gobot program over the network. |
CLI tool for generating new Gobot projects.
|
CLI tool for generating new Gobot projects. |
drivers
|
|
aio
Package aio provides Gobot drivers for Analog Input/Output devices.
|
Package aio provides Gobot drivers for Analog Input/Output devices. |
gpio
Package gpio provides Gobot drivers for General Purpose Input/Output devices.
|
Package gpio provides Gobot drivers for General Purpose Input/Output devices. |
i2c
Package i2c provides Gobot drivers for i2c devices.
|
Package i2c provides Gobot drivers for i2c devices. |
spi
Package spi provides Gobot drivers for spi devices.
|
Package spi provides Gobot drivers for spi devices. |
platforms
|
|
audio
Package audio is based on aplay audio adaptor written by @colemanserious (https://github.com/colemanserious) Package audio is based on aplay audio adaptor written by @colemanserious (https://github.com/colemanserious) Package audio provides the Gobot adaptor for audio.
|
Package audio is based on aplay audio adaptor written by @colemanserious (https://github.com/colemanserious) Package audio is based on aplay audio adaptor written by @colemanserious (https://github.com/colemanserious) Package audio provides the Gobot adaptor for audio. |
beaglebone
Package beaglebone provides the Gobot adaptor for the Beaglebone Black/Green, as well as a separate Adaptor for the PocketBeagle.
|
Package beaglebone provides the Gobot adaptor for the Beaglebone Black/Green, as well as a separate Adaptor for the PocketBeagle. |
ble
Package ble provides the Gobot adaptor for Bluetooth LE.
|
Package ble provides the Gobot adaptor for Bluetooth LE. |
chip
Package chip contains the Gobot adaptor for the CHIP and CHIP Pro For further information refer to the chip README: https://github.com/hybridgroup/gobot/blob/master/platforms/chip/README.md
|
Package chip contains the Gobot adaptor for the CHIP and CHIP Pro For further information refer to the chip README: https://github.com/hybridgroup/gobot/blob/master/platforms/chip/README.md |
dexter
Package dexter contains Gobot drivers for the Dexter Industries robots This package currently supports the following robots: - GoPiGo3 For further information refer to Dexter README: https://gobot.io/x/gobot/blob/master/platforms/dexter/README.md
|
Package dexter contains Gobot drivers for the Dexter Industries robots This package currently supports the following robots: - GoPiGo3 For further information refer to Dexter README: https://gobot.io/x/gobot/blob/master/platforms/dexter/README.md |
dexter/gopigo3
Package gopigo3 is based on https://github.com/DexterInd/GoPiGo3/blob/master/Software/Python/gopigo3.py You will need to run the following commands if using a stock raspbian image before this library will work: sudo curl -kL dexterindustries.com/update_gopigo3 | bash sudo reboot
|
Package gopigo3 is based on https://github.com/DexterInd/GoPiGo3/blob/master/Software/Python/gopigo3.py You will need to run the following commands if using a stock raspbian image before this library will work: sudo curl -kL dexterindustries.com/update_gopigo3 | bash sudo reboot |
digispark
Package digispark provides the Gobot adaptor for the Digispark ATTiny-based USB development board.
|
Package digispark provides the Gobot adaptor for the Digispark ATTiny-based USB development board. |
dji
Package dji contains the Gobot drivers for DJI drones.
|
Package dji contains the Gobot drivers for DJI drones. |
dragonboard
Package dragonboard contains the Gobot adaptor for the DragonBoard 410c For further information refer to the chip README: https://github.com/hybridgroup/gobot/blob/master/platforms/dragonboard/README.md
|
Package dragonboard contains the Gobot adaptor for the DragonBoard 410c For further information refer to the chip README: https://github.com/hybridgroup/gobot/blob/master/platforms/dragonboard/README.md |
firmata
Package firmata provides the Gobot adaptor for microcontrollers that support the Firmata protocol.
|
Package firmata provides the Gobot adaptor for microcontrollers that support the Firmata protocol. |
firmata/client
Package client provies a client for interacting with microcontrollers using the Firmata protocol https://github.com/firmata/protocol.
|
Package client provies a client for interacting with microcontrollers using the Firmata protocol https://github.com/firmata/protocol. |
holystone
Package holystone contains the Gobot drivers for the Holystone drones.
|
Package holystone contains the Gobot drivers for the Holystone drones. |
holystone/hs200
Package hs200 is the Gobot driver for the Holystone HS200 drone.
|
Package hs200 is the Gobot driver for the Holystone HS200 drone. |
intel-iot
Package inteliot contains Gobot adaptors for the Intel IoT platforms.
|
Package inteliot contains Gobot adaptors for the Intel IoT platforms. |
intel-iot/curie
Package curie contains the Gobot driver for the Intel Curie IMU.
|
Package curie contains the Gobot driver for the Intel Curie IMU. |
intel-iot/edison
Package edison contains the Gobot adaptor for the Intel Edison.
|
Package edison contains the Gobot adaptor for the Intel Edison. |
intel-iot/joule
Package joule contains the Gobot adaptor for the Intel Joule.
|
Package joule contains the Gobot adaptor for the Intel Joule. |
joystick
Package joystick provides the Gobot adaptor and drivers for game controllers that are compatible with SDL.
|
Package joystick provides the Gobot adaptor and drivers for game controllers that are compatible with SDL. |
keyboard
Package keyboard contains the Gobot drivers for keyboard support.
|
Package keyboard contains the Gobot drivers for keyboard support. |
leap
Package leap provides the Gobot adaptor and driver for the Leap Motion.
|
Package leap provides the Gobot adaptor and driver for the Leap Motion. |
mavlink
Package mavlink contains the Gobot adaptor and driver for the MAVlink Communication Protocol.
|
Package mavlink contains the Gobot adaptor and driver for the MAVlink Communication Protocol. |
megapi
Package megapi provides the Gobot adaptor for MegaPi.
|
Package megapi provides the Gobot adaptor for MegaPi. |
microbit
Package microbit contains the Gobot drivers for the Microbit.
|
Package microbit contains the Gobot drivers for the Microbit. |
mqtt
Package mqtt provides Gobot adaptor for the mqtt message service.
|
Package mqtt provides Gobot adaptor for the mqtt message service. |
nats
Package nats provides Gobot adaptor for the nats message service.
|
Package nats provides Gobot adaptor for the nats message service. |
neurosky
Package neurosky contains the Gobot adaptor and driver for the Neurosky Mindwave Mobile EEG.
|
Package neurosky contains the Gobot adaptor and driver for the Neurosky Mindwave Mobile EEG. |
opencv
Package opencv contains the Gobot drivers for opencv.
|
Package opencv contains the Gobot drivers for opencv. |
parrot
Package parrot contains Gobot adaptors and drivers for the Parrot drones This package currently supports the following Parrot drones: - Parrot Minidrone - Intel Joule developer kit For further information refer to Parrot README: https://gobot.io/x/gobot/blob/master/platforms/parrot/README.md
|
Package parrot contains Gobot adaptors and drivers for the Parrot drones This package currently supports the following Parrot drones: - Parrot Minidrone - Intel Joule developer kit For further information refer to Parrot README: https://gobot.io/x/gobot/blob/master/platforms/parrot/README.md |
parrot/ardrone
Package ardrone provides the Gobot adaptor and driver for the Parrot Ardrone.
|
Package ardrone provides the Gobot adaptor and driver for the Parrot Ardrone. |
parrot/bebop
Package bebop provides the Gobot adaptor and driver for the Parrot Bebop.
|
Package bebop provides the Gobot adaptor and driver for the Parrot Bebop. |
parrot/minidrone
Package minidrone contains the Gobot driver for the Parrot Minidrone.
|
Package minidrone contains the Gobot driver for the Parrot Minidrone. |
particle
Package particle provides the Gobot adaptor for the Particle Photon and Electron.
|
Package particle provides the Gobot adaptor for the Particle Photon and Electron. |
pebble
Package pebble contains the Gobot adaptor and driver for Pebble smart watch.
|
Package pebble contains the Gobot adaptor and driver for Pebble smart watch. |
raspi
Package raspi contains the Gobot adaptor for the Raspberry Pi.
|
Package raspi contains the Gobot adaptor for the Raspberry Pi. |
sphero
Package sphero provides the Gobot adaptor and driver for the Sphero.
|
Package sphero provides the Gobot adaptor and driver for the Sphero. |
sphero/bb8
Package bb8 contains the Gobot driver for the Sphero BB-8.
|
Package bb8 contains the Gobot driver for the Sphero BB-8. |
sphero/ollie
Package ollie contains the Gobot driver for the Sphero Ollie.
|
Package ollie contains the Gobot driver for the Sphero Ollie. |
sphero/sprkplus
Package sprkplus contains the Gobot driver for the Sphero SPRK+.
|
Package sprkplus contains the Gobot driver for the Sphero SPRK+. |
tinkerboard
Package tinkerboard contains the Gobot adaptor for the ASUS Tinker Board.
|
Package tinkerboard contains the Gobot adaptor for the ASUS Tinker Board. |
upboard
Package upboard contains Gobot adaptors for the Upboard SoC boards.
|
Package upboard contains Gobot adaptors for the Upboard SoC boards. |
upboard/up2
Package up2 contains the Gobot adaptor for the Upboard UP2.
|
Package up2 contains the Gobot adaptor for the Upboard UP2. |
Package sysfs provides generic access to linux gpio.
|
Package sysfs provides generic access to linux gpio. |