Documentation
¶
Overview ¶
Package gobot provides a framework for robotics, physical computing and the internet of things. It is the main point of entry for your Gobot application. A Gobot program is typically composed of one or more robots that makes up a project.
Basic Setup
package main
import (
"fmt"
"time"
"github.com/hybridgroup/gobot"
)
func main() {
gbot := gobot.NewGobot()
robot := gobot.NewRobot("Eve", func() {
gobot.Every(500*time.Millisecond, func() {
fmt.Println("Greeting Human")
})
})
gbot.AddRobot(robot)
gbot.Start()
}
Blinking an LED (Hello Eve!)
package main
import (
"time"
"github.com/hybridgroup/gobot"
"github.com/hybridgroup/gobot/platforms/firmata"
"github.com/hybridgroup/gobot/platforms/gpio"
)
func main() {
gbot := gobot.NewGobot()
firmataAdaptor := firmata.NewFirmataAdaptor("arduino", "/dev/ttyACM0")
led := gpio.NewLedDriver(firmataAdaptor, "led", "13")
work := func() {
gobot.Every(1*time.Second, func() {
led.Toggle()
})
}
robot := gobot.NewRobot("Eve",
[]gobot.Connection{firmataAdaptor},
[]gobot.Device{led},
work,
)
gbot.AddRobot(robot)
gbot.Start()
}
Web Enabled? You bet! Gobot can be configured to expose a restful HTTP interface using the api package. You can define custom commands on your robots, in addition to the built-in device driver commands, and interact with your application as a web service.
package main
import (
"fmt"
"github.com/hybridgroup/gobot"
"github.com/hybridgroup/gobot/api"
)
func main() {
gbot := gobot.NewGobot()
// Starts the API server on default port 3000
api.NewAPI(gbot).Start()
// Accessible via http://localhost:3000/api/commands/say_hello
gbot.AddCommand("say_hello", func(params map[string]interface{}) interface{} {
return "Master says hello!"
})
hello := gbot.AddRobot(gobot.NewRobot("Eve"))
// Accessible via http://localhost:3000/robots/Eve/commands/say_hello
hello.AddCommand("say_hello", func(params map[string]interface{}) interface{} {
return fmt.Sprintf("%v says hello!", hello.Name)
})
gbot.Start()
}
Index ¶
- Variables
- func After(t time.Duration, f func())
- func Every(t time.Duration, f func())
- func FromScale(input, min, max float64) float64
- func On(e *Event, f func(s interface{})) (err error)
- func Once(e *Event, f func(s interface{})) (err error)
- func Publish(e *Event, val interface{}) (err error)
- func Rand(max int) int
- 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 Gobot
- type JSONConnection
- type JSONDevice
- type JSONGobot
- type JSONRobot
- type Pinner
- type Porter
- type Robot
- func (r *Robot) AddConnection(c Connection) Connection
- func (r *Robot) AddDevice(d Device) Device
- 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) Start() (errs []error)
- func (r *Robot) Stop() (errs []error)
- type Robots
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrUnknownEvent is the error resulting if the specified Event does not exist ErrUnknownEvent = errors.New("Event does not exist") )
Functions ¶
func After ¶
After triggers f after t duration.
Example ¶
package main
import (
"fmt"
"time"
"github.com/hybridgroup/gobot"
)
func main() {
gobot.After(1*time.Second, func() {
fmt.Println("Hello")
})
}
func Every ¶
Every triggers f every t time until the end of days. It does not wait for the previous execution of f to finish before it fires the next f.
Example ¶
package main
import (
"fmt"
"time"
"github.com/hybridgroup/gobot"
)
func main() {
gobot.Every(1*time.Second, func() {
fmt.Println("Hello")
})
}
func FromScale ¶
FromScale returns a converted input from min, max to 0.0...1.0.
Example ¶
package main
import (
"fmt"
"github.com/hybridgroup/gobot"
)
func main() {
fmt.Println(gobot.FromScale(5, 0, 10))
}
Output: 0.5
func On ¶
On executes f when e is Published to. Returns ErrUnknownEvent if Event does not exist.
Example ¶
package main
import (
"fmt"
"github.com/hybridgroup/gobot"
)
func main() {
e := gobot.NewEvent()
gobot.On(e, func(s interface{}) {
fmt.Println(s)
})
gobot.Publish(e, 100)
gobot.Publish(e, 200)
}
func Once ¶
Once is similar to On except that it only executes f one time. Returns ErrUnknownEvent if Event does not exist.
Example ¶
package main
import (
"fmt"
"github.com/hybridgroup/gobot"
)
func main() {
e := gobot.NewEvent()
gobot.Once(e, func(s interface{}) {
fmt.Println(s)
fmt.Println("I will no longer respond to events")
})
gobot.Publish(e, 100)
gobot.Publish(e, 200)
}
func Publish ¶
Publish emits val to all subscribers of e. Returns ErrUnknownEvent if Event does not exist.
Example ¶
package main
import (
"github.com/hybridgroup/gobot"
)
func main() {
e := gobot.NewEvent()
gobot.Publish(e, 100)
}
func Rand ¶
Rand returns a positive random int up to max
Example ¶
package main
import (
"fmt"
"github.com/hybridgroup/gobot"
)
func main() {
i := gobot.Rand(100)
fmt.Sprintln("%v is > 0 && < 100", i)
}
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"
"github.com/hybridgroup/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
// 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() (errs []error)
Finalize calls Finalize on each Connection in c
func (*Connections) Start ¶
func (c *Connections) Start() (errs []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
// Start initiates the Driver
Start() []error
// Halt terminates the Driver
Halt() []error
// Connection returns the Connection assiciated with the Driver
Connection() Connection
}
Driver is the interface that describes a driver in gobot
type Event ¶
Event executes the list of Callbacks when Chan is written to.
type Eventer ¶
type Eventer interface {
// Events returns the Event map.
Events() (events map[string]*Event)
// Event returns an Event by name. Returns nil if the Event is not found.
Event(name string) (event *Event)
// AddEvent adds a new Event given a name.
AddEvent(name string)
}
Eventer is the interface which describes behaviour for a Driver or Adaptor which uses events.
type Gobot ¶
Gobot is the main type of your Gobot application and contains a collection of Robots, API commands and Events.
func (*Gobot) AddRobot ¶
AddRobot adds a new robot to the internal collection of robots. Returns the added robot
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 JSONGobot ¶
JSONGobot is a JSON representation of a Gobot.
func NewJSONGobot ¶
NewJSONGobot returns a JSONGobt given a Gobot.
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 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()
Commander
Eventer
// contains filtered or unexported fields
}
Robot is a named entitity that manages a collection of connections and devices. It containes it's own work routine and a collection of custom commands to control a robot remotely via the Gobot api.
func NewRobot ¶
NewRobot returns a new Robot given a name and optionally accepts:
[]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
A name will be automaically generated if no name is supplied.
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.
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. |
|
platforms
|
|
|
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. |
|
beaglebone
Package beaglebone provides the Gobot adaptor for the Beaglebone Black.
|
Package beaglebone provides the Gobot adaptor for the Beaglebone Black. |
|
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. |
|
bebop/client/examples
command
This example will connect to the Bebop and stream it's video to a webpage via ffserver.
|
This example will connect to the Bebop and stream it's video to a webpage via ffserver. |
|
chip
Package chip contains the Gobot adaptor for the CHIP 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 For further information refer to the chip README: https://github.com/hybridgroup/gobot/blob/master/platforms/chip/README.md |
|
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. |
|
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. |
|
firmata/client/examples
command
|
|
|
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. |
|
intel-iot
Package inteliot contains Gobot adaptors for the Intel IoT platforms.
|
Package inteliot contains Gobot adaptors for the Intel IoT platforms. |
|
intel-iot/edison
Package edison contains the Gobot adaptor for the Intel Edison.
|
Package edison contains the Gobot adaptor for the Intel Edison. |
|
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
Packge keyboard contains the Gobot drivers for keyboard support.
|
Packge 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. |
|
mqtt
Package mqtt provides Gobot adaptor for the mqtt message service.
|
Package mqtt provides Gobot adaptor for the mqtt message service. |
|
opencv
Packge opencv contains the Gobot drivers for opencv.
|
Packge opencv contains the Gobot drivers for opencv. |
|
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. |
|
spark
Package spark provides the Gobot adaptor for the Spark Core.
|
Package spark provides the Gobot adaptor for the Spark Core. |
|
sphero
Package sphero provides the Gobot adaptor and driver for the Sphero.
|
Package sphero provides the Gobot adaptor and driver for the Sphero. |
|
Package sysfs provides generic access to linux gpio.
|
Package sysfs provides generic access to linux gpio. |

