Skip to content

Commit

Permalink
bb8: add initial support for Sphero BB-8 platform
Browse files Browse the repository at this point in the history
Signed-off-by: deadprogram <[email protected]>
  • Loading branch information
deadprogram committed Dec 19, 2016
1 parent 80952bf commit 8510bd9
Show file tree
Hide file tree
Showing 9 changed files with 143 additions and 2 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PACKAGES := gobot gobot/api gobot/drivers/gpio gobot/drivers/i2c gobot/platforms/firmata/client gobot/platforms/intel-iot/edison gobot/platforms/intel-iot/joule gobot/platforms/parrot/ardrone gobot/platforms/parrot/bebop gobot/platforms/parrot/minidrone gobot/sysfs $(shell ls ./platforms | sed -e 's/^/gobot\/platforms\//')
PACKAGES := gobot gobot/api gobot/drivers/gpio gobot/drivers/i2c gobot/platforms/firmata/client gobot/platforms/intel-iot/edison gobot/platforms/intel-iot/joule gobot/platforms/parrot/ardrone gobot/platforms/parrot/bebop gobot/platforms/parrot/minidrone gobot/platforms/sphero/ollie gobot/platforms/sphero/bb8 gobot/sysfs $(shell ls ./platforms | sed -e 's/^/gobot\/platforms\//')
.PHONY: test cover robeaux examples

test:
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ Gobot has a extensible system for connecting to hardware devices. The following
- [Pebble](https://www.getpebble.com/) <=> [Package](https://github.com/hybridgroup/gobot/tree/master/platforms/pebble)
- [Raspberry Pi](http://www.raspberrypi.org/) <=> [Package](https://github.com/hybridgroup/gobot/tree/master/platforms/raspi)
- [Sphero](http://www.sphero.com/) <=> [Package](https://github.com/hybridgroup/gobot/tree/master/platforms/sphero)
- [Sphero BB-8](http://www.sphero.com/bb8) <=> [Package](https://github.com/hybridgroup/gobot/tree/master/platforms/sphero/bb8)
- [Sphero Ollie](http://www.sphero.com/) <=> [Package](https://github.com/hybridgroup/gobot/tree/master/platforms/sphero/ollie)

Support for many devices that use General Purpose Input/Output (GPIO) have
Expand Down
2 changes: 1 addition & 1 deletion ci/travis.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash
PACKAGES=('gobot' 'gobot/api' 'gobot/sysfs' 'gobot/drivers/gpio' 'gobot/drivers/i2c' 'gobot/platforms/firmata/client' 'gobot/platforms/intel-iot/edison' 'gobot/platforms/intel-iot/joule' 'gobot/platforms/parrot/ardrone' 'gobot/platforms/parrot/bebop' 'gobot/platforms/parrot/minidrone' 'gobot/platforms/sphero/ollie' $(ls ./platforms | sed -e 's/^/gobot\/platforms\//'))
PACKAGES=('gobot' 'gobot/api' 'gobot/sysfs' 'gobot/drivers/gpio' 'gobot/drivers/i2c' 'gobot/platforms/firmata/client' 'gobot/platforms/intel-iot/edison' 'gobot/platforms/intel-iot/joule' 'gobot/platforms/parrot/ardrone' 'gobot/platforms/parrot/bebop' 'gobot/platforms/parrot/minidrone' 'gobot/platforms/sphero/ollie' 'gobot/platforms/sphero/bb8' $(ls ./platforms | sed -e 's/^/gobot\/platforms\//'))
EXITCODE=0

echo "mode: set" > profile.cov
Expand Down
32 changes: 32 additions & 0 deletions examples/bb8.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package main

import (
"os"
"time"

"gobot.io/x/gobot"
"gobot.io/x/gobot/platforms/ble"
"gobot.io/x/gobot/platforms/sphero/bb8"
)

func main() {
bleAdaptor := ble.NewClientAdaptor(os.Args[1])
bb8 := bb8.NewDriver(bleAdaptor)

work := func() {
gobot.Every(1*time.Second, func() {
r := uint8(gobot.Rand(255))
g := uint8(gobot.Rand(255))
b := uint8(gobot.Rand(255))
bb8.SetRGB(r, g, b)
})
}

robot := gobot.NewRobot("bbBot",
[]gobot.Connection{bleAdaptor},
[]gobot.Device{bb8},
work,
)

robot.Start()
}
13 changes: 13 additions & 0 deletions platforms/sphero/bb8/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Copyright (c) 2014-2016 The Hybrid Group

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
73 changes: 73 additions & 0 deletions platforms/sphero/bb8/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Sphero BB-8

The Sphero BB-8 is a toy robot from Sphero that is controlled using Bluetooth LE. For more information, go to [http://www.sphero.com/bb8](http://www.sphero.com/bb8)

## How to Install
```
go get -d -u gobot.io/x/gobot/... && go install gobot.io/x/gobot/platforms/ble
```

## How to Use
```go
package main

import (
"os"
"time"

"gobot.io/x/gobot"
"gobot.io/x/gobot/platforms/ble"
"gobot.io/x/gobot/platforms/sphero/bb8"
)

func main() {
bleAdaptor := ble.NewClientAdaptor(os.Args[1])
bb8 := bb8.NewDriver(bleAdaptor)

work := func() {
gobot.Every(1*time.Second, func() {
r := uint8(gobot.Rand(255))
g := uint8(gobot.Rand(255))
b := uint8(gobot.Rand(255))
bb8.SetRGB(r, g, b)
})
}

robot := gobot.NewRobot("bb",
[]gobot.Connection{bleAdaptor},
[]gobot.Device{bb8},
work,
)

robot.Start()
}
```

## How to Connect

The Sphero BB-8 is a Bluetooth LE device.

You need to know the BLE ID of the BB-8 you want to connect to. The Gobot BLE client adaptor also lets you connect by friendly name, aka "BB-1247".

### OSX

To run any of the Gobot BLE code you must use the `GODEBUG=cgocheck=0` flag in order to get around some of the issues in the CGo-based implementation.

For example:

GODEBUG=cgocheck=0 go run examples/bb8.go BB-1247

OSX uses its own Bluetooth ID system which is different from the IDs used on Linux. The code calls thru the XPC interfaces provided by OSX, so as a result does not need to run under sudo.

### Ubuntu

On Linux the BLE code will need to run as a root user account. The easiest way to accomplish this is probably to use `go build` to build your program, and then to run the requesting executable using `sudo`.

For example:

go build examples/bb8.go
sudo ./bb8 BB-1247

### Windows

Hopefully coming soon...
10 changes: 10 additions & 0 deletions platforms/sphero/bb8/bb8_driver.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package bb8

import (
"gobot.io/x/gobot/platforms/sphero/ollie"
)

// Driver represents a Sphero BB-8
type Driver struct {
*ollie.Driver
}
5 changes: 5 additions & 0 deletions platforms/sphero/bb8/bb8_driver_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package bb8

import "gobot.io/x/gobot"

var _ gobot.Driver = (*Driver)(nil)
7 changes: 7 additions & 0 deletions platforms/sphero/bb8/doc.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
/*
Package bb8 contains the Gobot driver for the Sphero BB-8.
For more information refer to the BB-8 README:
https://gobot.io/x/gobot/blob/master/platforms/sphero/bb8/README.md
*/
package bb8 // import "gobot.io/x/gobot/platforms/sphero/bb8"

0 comments on commit 8510bd9

Please sign in to comment.