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 ¶
- func After(t time.Duration, f func())
- func Assert(t *testing.T, a interface{}, b interface{})
- func Every(t time.Duration, f func())
- func FromScale(input, min, max float64) float64
- func NewLoopbackAdaptor(name string) *loopbackAdaptor
- func NewPingDriver(adaptor *loopbackAdaptor, name string) *pingDriver
- func NewTestAdaptor(name string) *testAdaptor
- func NewTestDriver(name string, adaptor *testAdaptor) *testDriver
- func NewTestStruct() *testStruct
- func On(e *Event, f func(s interface{}))
- func Once(e *Event, f func(s interface{}))
- func Publish(e *Event, val interface{})
- func Rand(max int) int
- func Refute(t *testing.T, a interface{}, b interface{})
- func ToScale(input, min, max float64) float64
- func Version() string
- type Adaptor
- type AdaptorInterface
- type Connection
- type Device
- type Driver
- func (d *Driver) Adaptor() AdaptorInterface
- func (d *Driver) AddCommand(name string, f func(map[string]interface{}) interface{})
- func (d *Driver) AddEvent(name string)
- func (d *Driver) Command(name string) func(map[string]interface{}) interface{}
- func (d *Driver) Commands() map[string]func(map[string]interface{}) interface{}
- func (d *Driver) Event(name string) *Event
- func (d *Driver) Events() map[string]*Event
- func (d *Driver) Interval() time.Duration
- func (d *Driver) Name() string
- func (d *Driver) Pin() string
- func (d *Driver) SetInterval(t time.Duration)
- func (d *Driver) SetName(s string)
- func (d *Driver) SetPin(pin string)
- func (d *Driver) ToJSON() *JSONDevice
- func (d *Driver) Type() string
- type DriverInterface
- type Event
- type Gobot
- func (g *Gobot) AddCommand(name string, f func(map[string]interface{}) interface{})
- func (g *Gobot) AddRobot(r *Robot) *Robot
- func (g *Gobot) Command(name string) func(map[string]interface{}) interface{}
- func (g *Gobot) Commands() map[string]func(map[string]interface{}) interface{}
- func (g *Gobot) Robot(name string) *Robot
- func (g *Gobot) Robots() *robots
- func (g *Gobot) Start()
- func (g *Gobot) ToJSON() *JSONGobot
- type JSONConnection
- type JSONDevice
- type JSONGobot
- type JSONRobot
- type NullReadWriteCloser
- type Robot
- func (r *Robot) AddCommand(name string, f func(map[string]interface{}) interface{})
- func (r *Robot) AddConnection(c Connection) Connection
- func (r *Robot) AddDevice(d Device) Device
- func (r *Robot) Command(name string) func(map[string]interface{}) interface{}
- func (r *Robot) Commands() map[string]func(map[string]interface{}) interface{}
- 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()
- func (r *Robot) ToJSON() *JSONRobot
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func After ¶
After triggers f after t duration.
Example ¶
package main import ( "fmt" "github.com/hybridgroup/gobot" "time" ) func main() { gobot.After(1*time.Second, func() { fmt.Println("Hello") }) }
Output:
func Assert ¶
Assert ensures a and b are equal and of the same type, or else it causes a t.Error
Example ¶
package main import ( "github.com/hybridgroup/gobot" "testing" ) func main() { t := &testing.T{} var a int = 100 var b int = 100 gobot.Assert(t, a, b) }
Output:
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" "github.com/hybridgroup/gobot" "time" ) 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" "github.com/hybridgroup/gobot" ) func main() { fmt.Println(gobot.FromScale(5, 0, 10)) }
Output: 0.5
func NewLoopbackAdaptor ¶
func NewLoopbackAdaptor(name string) *loopbackAdaptor
func NewPingDriver ¶
func NewPingDriver(adaptor *loopbackAdaptor, name string) *pingDriver
func NewTestAdaptor ¶
func NewTestAdaptor(name string) *testAdaptor
func NewTestDriver ¶
func NewTestDriver(name string, adaptor *testAdaptor) *testDriver
func NewTestStruct ¶
func NewTestStruct() *testStruct
func On ¶
func On(e *Event, f func(s interface{}))
On executes f when e is Published to.
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) }
Output:
func Once ¶
func Once(e *Event, f func(s interface{}))
Once is similar to On except that it only executes f one time.
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) }
Output:
func Publish ¶
func Publish(e *Event, val interface{})
Publish emits val to all subscribers of e.
Example ¶
package main import ( "github.com/hybridgroup/gobot" ) func main() { e := gobot.NewEvent() gobot.Publish(e, 100) }
Output:
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) }
Output:
func Refute ¶
Refute ensures a and b are not equal, causes a t.Error if they are equal
Example ¶
package main import ( "github.com/hybridgroup/gobot" "testing" ) func main() { t := &testing.T{} var a int = 100 var b int = 200 gobot.Refute(t, a, b) }
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" "github.com/hybridgroup/gobot" ) func main() { fmt.Println(gobot.ToScale(500, 0, 10)) }
Output: 10
Types ¶
type Adaptor ¶
type Adaptor struct {
// contains filtered or unexported fields
}
func NewAdaptor ¶
NewAdaptor returns a new Adaptor given a name, adaptorType and optionally accepts:
string: Port the adaptor connects to
adaptorType is a label used for identification in the api
func (*Adaptor) SetConnected ¶
SetConnected sets adaptor as connected/disconnected
func (*Adaptor) ToJSON ¶
func (a *Adaptor) ToJSON() *JSONConnection
ToJSON returns a json representation of an adaptor
type AdaptorInterface ¶
type AdaptorInterface interface { Finalize() bool Connect() bool Port() string Name() string Type() string Connected() bool SetConnected(bool) SetName(string) SetPort(string) ToJSON() *JSONConnection }
AdaptorInterface defines behaviour expected for a Gobot Adaptor
type Connection ¶
type Connection AdaptorInterface
type Device ¶
type Device DriverInterface
type Driver ¶
type Driver struct {
// contains filtered or unexported fields
}
func NewDriver ¶
NewDriver returns a new Driver given a name, driverType and optionally accepts:
string: Pin the driver connects to AdaptorInterface: Adaptor the driver connects to time.Duration: Interval used internally for polling where applicable
driverType is a label used for identification in the api
func (*Driver) AddCommand ¶
AddCommand links specified command name to `f`
func (*Driver) SetInterval ¶
SetInterval defines driver interval duration.
func (*Driver) ToJSON ¶
func (d *Driver) ToJSON() *JSONDevice
ToJSON returns JSON Driver represnentation including adaptor and commands
type DriverInterface ¶
type DriverInterface interface { Start() bool Halt() bool Adaptor() AdaptorInterface SetInterval(time.Duration) Interval() time.Duration SetName(string) Name() string Pin() string SetPin(string) Command(string) func(map[string]interface{}) interface{} Commands() map[string]func(map[string]interface{}) interface{} AddCommand(string, func(map[string]interface{}) interface{}) Events() map[string]*Event Event(string) *Event AddEvent(string) Type() string ToJSON() *JSONDevice }
DriverInterface defines Driver expected behaviour
type Event ¶
type Event struct { Chan chan interface{} Callbacks []callback }
func NewEvent ¶
func NewEvent() *Event
NewEvent returns a new event which is then ready for publishing and subscribing.
type Gobot ¶
type Gobot struct {
// contains filtered or unexported fields
}
Gobot is a container composed of one or more robots
func (*Gobot) AddCommand ¶
AddCommand creates a new command and adds it to the Gobot. This command will be available via HTTP using '/commands/name'
Example:
gbot.AddCommand( 'rollover', func( params map[string]interface{}) interface{} { fmt.Println( "Rolling over - Stand by...") }) With the api package setup, you can now get your Gobot to rollover using: http://localhost:3000/commands/rollover
func (*Gobot) AddRobot ¶
AddRobot adds a new robot to the internal collection of robots. Returns the added robot
func (*Gobot) Robots ¶
func (g *Gobot) Robots() *robots
Robots returns all robots associated with this Gobot instance.
type JSONConnection ¶
JSONConnection holds a JSON representation of 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 Gobot Device.
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.
type NullReadWriteCloser ¶
type NullReadWriteCloser struct{}
func (NullReadWriteCloser) Close ¶
func (NullReadWriteCloser) Close() error
type Robot ¶
type Robot struct { Name string Work func() // 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
func NewTestRobot ¶
func (*Robot) AddCommand ¶
AddCommand adds a new command to the robot's collection of commands
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 on no connection.
func (*Robot) Connections ¶
func (r *Robot) Connections() *connections
Connections returns all connections associated with this robot.
func (*Robot) Devices ¶
func (r *Robot) Devices() *devices
Devices returns all devices associated with this 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. |
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. |
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. |
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. |
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. |