Blinking the BeagleBone's heartbeat LED using the iPhone
I've been having a great back-and-forth on Twitter with David House while hacking away with this project, who is working away as I type to get this working on the Raspberry Pi. It's been a lot of fun.
If you want to replicate this on the BeagleBone you should first download and build the PeerTalk library, and then build and deploy the iOS and OSX example applications and get that up and running.
Then connect up and boot your BeagleBone. You'll need to power the board using a mains adapter as when you're compiling things it's possible you'll be drawing enough amperage that you're computer will turn off the USB port to protect itself, and as a result power down your BeagleBone. I had this happen to me a couple of times before I finally dug a mains adapter out of my office drawer. However since you're powering the board from the mains you'll also have to connect an Ethernet cable so that you can ssh root@beaglebone.local and log into the board over the network.
1. Go ahead and login to your BeagleBone as root.
2. Download, build and install libusb. Version 1.0.9 builds, links and installs okay.
3. Download, build and install cmake, which you'll need to build usbmuxd later. You'll need to grab the latest Git nightly checkout as older release versions don't build, having problems with the stock libbz2 compression on the BeagleBone.
4. We also need libplist, however this is available as part of the package management system on Ångström Linux, so all you need to do to install this is type opkg install libplist-dev at the prompt.
5. Download, build and install usbmuxd. Version 1.0.8 builds, links and installs okay, although you may beed to use ccmake and configure by hand, rather than using cmake, as it can't seem to find the libusb include files that got installed into /usr/local.
6. Create a usbmux user
groupadd -r usbmux -g 114
useradd -r -g usbmux -d / -s /sbin/nologin -c "usbmux user" -u 114 usbmux
7. As the BeagleBoard doesn't have syslog turned on by default, and you'll need it for debugging, turn on syslogd from the relevant script in /etc/init.d.
8. Run up the usbmux deamon, by typing usbmuxd -v -v at the prompt.
9. Plug your iPhone into the (host side) USB on your BeagleBoard, you should see some debug scrolling by in /var/log/messages.
10. Download David House's peertalk-python and its dependances.
11. On your iPhone start the PeerTalk client for iOS.
12. Start the python client on the BeagleBone by typing python ./peertalk.py at the prompt.
Type in a message at the prompt, and you should see something like this...
From there it's pretty trivial to replicate my "Hello World" example, just by hacking around with David's code and toggling the heartbeat LED when the BeagleBone receives any messages.
Which gets you to this point...
Which is pretty much where I've reached right now. Next steps is a proper application on the iOS end of things with more generic control of the BeagleBone's header pins, and a more flexible Python backend on the BeagleBone itself...
Update: David House has managed to get everything up and working on the Raspberry Pi. The only changes from the above is that you should grab libplist using apt-get rather than opkg, and since you won't be logged in as root you should remember to sudo usbmuxd -v -v when you start the USB daemon. Apart from that, you should be good to go...
David House (@davidahouse)
25/08/2012 20:22
Video of iPhone controlling LED on Raspberry Pi.
Then connect up and boot your BeagleBone. You'll need to power the board using a mains adapter as when you're compiling things it's possible you'll be drawing enough amperage that you're computer will turn off the USB port to protect itself, and as a result power down your BeagleBone. I had this happen to me a couple of times before I finally dug a mains adapter out of my office drawer. However since you're powering the board from the mains you'll also have to connect an Ethernet cable so that you can ssh root@beaglebone.local and log into the board over the network.
1. Go ahead and login to your BeagleBone as root.
2. Download, build and install libusb. Version 1.0.9 builds, links and installs okay.
3. Download, build and install cmake, which you'll need to build usbmuxd later. You'll need to grab the latest Git nightly checkout as older release versions don't build, having problems with the stock libbz2 compression on the BeagleBone.
4. We also need libplist, however this is available as part of the package management system on Ångström Linux, so all you need to do to install this is type opkg install libplist-dev at the prompt.
5. Download, build and install usbmuxd. Version 1.0.8 builds, links and installs okay, although you may beed to use ccmake and configure by hand, rather than using cmake, as it can't seem to find the libusb include files that got installed into /usr/local.
6. Create a usbmux user
groupadd -r usbmux -g 114
useradd -r -g usbmux -d / -s /sbin/nologin -c "usbmux user" -u 114 usbmux
7. As the BeagleBoard doesn't have syslog turned on by default, and you'll need it for debugging, turn on syslogd from the relevant script in /etc/init.d.
8. Run up the usbmux deamon, by typing usbmuxd -v -v at the prompt.
9. Plug your iPhone into the (host side) USB on your BeagleBoard, you should see some debug scrolling by in /var/log/messages.
10. Download David House's peertalk-python and its dependances.
11. On your iPhone start the PeerTalk client for iOS.
12. Start the python client on the BeagleBone by typing python ./peertalk.py at the prompt.
Type in a message at the prompt, and you should see something like this...
Bi-directional communication between the iPhone and the BeagleBone via USB |
def run(self):
framestructure = struct.Struct("! I I I I")
ledOn ='echo 1 > /sys/class/leds/beaglebone::usr0/brightness'
ledOff ='echo 0 > /sys/class/leds/beaglebone::usr0/brightness'
i = 0
while self._running:
try:
msg = self._psock.recv(16)
if len(msg) > 0:
frame = framestructure.unpack(msg)
size = frame[3]
msgdata = self._psock.recv(size)
print "Received: %s" % msgdata
if i == 0:
os.system(ledOn)
i = 1
else:
os.system(ledOff)
i = 0
except:
pass
Which gets you to this point...
Toggling the BeagleBone heartbeat LED with my iPhone over USB. |
Update: David House has managed to get everything up and working on the Raspberry Pi. The only changes from the above is that you should grab libplist using apt-get rather than opkg, and since you won't be logged in as root you should remember to sudo usbmuxd -v -v when you start the USB daemon. Apart from that, you should be good to go...

25/08/2012 20:22
Video of iPhone controlling LED on Raspberry Pi.
Controlling a LED connected to a GPIO pin on the Raspberry Pi with an iPhone |
Monday 8th October 2012
Hoxton Hotel, London
Early Bird Price: £499 (until 1st Sept.)
Normal Price: £699
Save 10% with code BEAGLE10
Update: David House has just updated his Github repository with a better description of what he did to get the iPhone to control the Raspberry Pi's GPIO pins.
Update: David House has just updated his Github repository with a better description of what he did to get the iPhone to control the Raspberry Pi's GPIO pins.
![]() 26/08/2012 13:40 @aallan I just updated my github repo with a better description with attributions. Had a blast working with you...
|