A Firmata based framework for interacting with Arduinos over serial. This fork is specific to getting bluetooth serial working.
Not all Bluetooth serial devices are equal, you will most likely need to update the firmware on the device. A good tutorial for that lives HERE
You will also want to use this to change the default from 9600 to 115200.
Install the modules needed:
sudo apt-get install bluetooth bluez-utils blueman Pair with the device
Find bluetooth local device
hcitool dev
>Devices:
>hci0 00:1A:7D:DA:71:0BFind devices:
hcitool scan
> Scanning ...
> 20:13:06:04:27:06 itead Pair the device:
sudo bluez-simple-agent hci0 20:13:06:04:27:06Make the device trusted
bluez-test-device trusted 20:13:06:04:27:06 yesTo open the serial connection:
sudo bluez-test-serial 20:13:06:04:27:06 &Need to modify this in the future, as it currently opens the port of only 1000 seconds.
This will print out something like:
> Connected /dev/rfcomm1 to 20:13:06:04:27:06
> Press CTRL-C to disconnect"/dev/rfcomm1" is the port we will use to connect to the arduino. This process need to be running in the back ground, in order for breakfast serial to connect to the port.
Need this for using the bluetooth module
sudo apt-get python-bluezIn order to use BreakfastSerial, you need to have an arduino running the standard firmata.
- Download the Arduino IDE from the arduino website
- OSX
- Linux 32 bit
- Linux 64 bit
- Windows support coming soon.
- Plug in your Arduino or Arduino compatible microcontroller via USB
- Open the Arduino IDE, select: File > Examples > Firmata > StandardFirmata
- Click the "Upload" button.
git clone git://github.com/kymwatts/BreakfastSerial.git && cd BreakfastSerial
python setup.py install
#grab theycallmeswift's pyfimata, for fixed bluetooth connection.
git clone git://github.com/theycallmeswift/pyFirmata.git && cd pyFirmata
python setup.py installThe BreakfastSerial library provides a simple abstraction for a number of common components. Make sure your arduino is plugged in and is running firmata.
If you create a Arduino object without any parameters, it will attempt to auto discover
the serial port that the Arduino is attached to and connect automatically. Optionally,
you can supply the path to a serial port (Ex. "/dev/tty.usbmodem4111").
from BreakfastSerial import Arduino
board = Arduino() # This will autodiscover the deviceTo use the led object, import Led from BreakfastSerial. The constructor takes an
Arduino object and a pin number as its arguments.
from BreakfastSerial import Arduino, Led
from time import sleep
board = Arduino()
pin = 13
led = Led(board, pin)
led.on()
sleep(2)
led.off()You can also use the blink method and pass it a number of milliseconds to automate the blinking process
millis = 200
led.blink(millis)The Button component has a number of helper methods that make it easy to work with buttons.
The constructor takes an Arduino object and a pin number as its arguments.
from BreakfastSerial import Button, Arduino
board = Arduino()
button = Button(board, 8)
def down_cb():
print "button down"
def up_cb():
print "button up"
def hold_cb():
print "button held"
button.down(down_cb)
button.up(up_cb)
button.hold(hold_cb)The down and up functions are just nice wrappers around the underlying event emitter. The Button
component emits the following events:
change- The button value changeddown- The button is pressedup- The button is not being pressedhold- The button was held for at least 1 second
The RGBLed component lets us change the colors of an RGB Led without having to
interact with the three underlying leds.
from BreakfastSerial import Arduino, RGBLed
from time import sleep
board = Arduino()
led = RGBLed(board, { "red": 10, "green": 9, "blue": 8 })
led.red()
sleep(1)
led.green()
sleep(1)
led.blue()
sleep(1)
led.yellow()
sleep(1)
led.cyan()
sleep(1)
led.purple()
sleep(1)
led.white()
sleep(1)
led.off()You can set the brightness of an LED with the brightness function. The LED
must be on a PWM capable pin or it will throw and error. Brightness is
measured on a scale of 0% to 100%.
from BreakfastSerial import Arduino, Led
from time import sleep
board = Arduino()
pin = 9
led = Led(board, pin)
for x in range(0, 100):
led.brightness(x)
sleep(0.01)The Sensor component lets us read in data from a sensor (analog or digital). The constructor takes in
an Arduino object and a pin number.
from BreakfastSerial import Arduino, Sensor
board = Arduino()
sensor = Sensor(board, "A0")
def print_value():
print sensor.value
sensor.change(print_value)The Sensor object has the following properties:
threshold- the amountvaluemust change by to trigger achangeevent (Default:0.01)value- the value of the underlying pin
The change function is just a nice wrapper around the underlying event emitter. The Sensor
component emits the following events:
change- The sensor value change by at least the amount ofthreshold
The Servo component let's us control a servo. The constructor takes in
an Arduino object and a pin number.
from BreakfastSerial import Arduino, Servo
from time import sleep
board = Arduino()
servo = Servo(board, "10")
servo.set_position(180)
sleep(2)
servo.move(-135)
sleep(2)
servo.center()
sleep(2)
servo.reset()The value property of a Servo object is the current position of the servo in degrees
The Motor component let's us control a DC Motor. The constructor takes in
an Arduino object and a pin number. The motor must be on a PWM capable pin.
from BreakfastSerial import Arduino, Motor
from time import sleep
board = Arduino()
motor = Motor(board, 9)
motor.start(80)
sleep(2)
motor.speed = 50
sleep(2)
motor.stop()The speed property is represented in a percentage of max speed. So, speed = 80 is setting the motor to 80% speed. Setting speed equal to 0 is the
same as calling stop().
There are a bunch of examples in the examples/ folder. Additional components
will be added over time, so be sure to check back regularly.