Raspberry Pi for IPRUG

Post on 07-May-2015

928 views 1 download

description

A short talk about the Raspberry Pi for the Ipswich Ruby User Group

Transcript of Raspberry Pi for IPRUG

Raspberry Pi

Frank Carver

frankcarver.me

raspberryalphaomega.org.uk

• ARM1176 CPU @700MHz

• Broadcom BCM2835 chipset & GPU

• 512MB* RAM

• USB, Ethernet, 1080p HDMI, audio

• 8 GPIO pins + UART, SPI, 12C

• Storage on SD/SDHC Card

• Linux, RiscOS etc. or “bare metal”

• About £25

Arduino Uno

• ATmega328 CPU @16MHz

• No GPU

• 32K Flash, 2K SRAM, 1K EEPROM

• USB, no network or video

• 14 GPIO pins, 6 analogue inputs

• No storage

• “Bare metal” cross-compile only

• About £18

Cheap Dell PC

• Intel CPU @2.8GHz

• Intel HD GPU

• 2GB RAM

• USB,Ethernet,SATA,HDMI,Wireless,…

• No IO pins

• 500GB hard drive, DVD

• Windows, Linux, etc.

• About £300

Software Development

Bare Metal• Assembler• Cross-compiled C/C+

+ etc.• Hand-built languages

Linux• Pretty much anything• Python• Ruby• Java• perl• PHP• bash• …

So let’s do some Ruby

So let’s do some Ruby

Step 1: installation

So let’s do some Ruby

Step 1: installation

• sudo apt-get install ruby1.9.3

That wasn’t so hard

Ruby talks to hardware

File.open('/sys/class/gpio/export', 'w') { |file| file.write("17") }File.open('/sys/class/gpio/gpio17/direction', 'w') { |file| file.write("out") }File.open('/sys/class/gpio/export', 'w') { |file| file.write("27") }File.open('/sys/class/gpio/gpio27/direction', 'w') { |file| file.write("out") }File.open('/sys/class/gpio/export', 'w') { |file| file.write("22") }File.open('/sys/class/gpio/gpio22/direction', 'w') { |file| file.write("out") }

begin

while true do for r in 0..1 File.open('/sys/class/gpio/gpio17/value', 'w') { |file| file.write("#{r}") } for g in 0..1 File.open('/sys/class/gpio/gpio27/value', 'w') { |file| file.write("#{g}") } for b in 0..1 File.open('/sys/class/gpio/gpio22/value', 'w') { |file| file.write("#{b}") } sleep 1 end end endend

rescue SignalException File.open('/sys/class/gpio/gpio17/value', 'w') { |file| file.write("0") } File.open('/sys/class/gpio/gpio27/value', 'w') { |file| file.write("0") } File.open('/sys/class/gpio/gpio22/value', 'w') { |file| file.write("0") }end

A nicer way

require "pi_piper"

pin_r = PiPiper::Pin.new(:pin => 17, :direction => :out)pin_g = PiPiper::Pin.new(:pin => 27, :direction => :out)pin_b = PiPiper::Pin.new(:pin => 22, :direction => :out)

begin

while true do for r in 0..1 if r==1 ; pin_r.on else pin_r.off end for g in 0..1 if g==1 ; pin_g.on else pin_g.off end for b in 0..1 if b==1 ; pin_b.on else pin_b.off end sleep 1 end end endend

rescue SignalException pin_r.off pin_g.off pin_b.offend

Another way

require "wiringpi"

io = WiringPi::GPIO.new(WPI_MODE_GPIO)

begin

while true do for r in 0..1 io.write(17,r) for g in 0..1 io.write(27,g) for b in 0..1 io.write(22,b) sleep 1 end end endend

rescue SignalException io.write(17,0) io.write(27,0) io.write(22,0)end

Input

require 'pi_piper'include PiPiper

watch :pin => 23 do puts "Pin changed from #{last_value} to #{value}"end

#Or

after :pin => 23, :goes => :high do puts "Button pressed"end

PiPiper.wait

So what makes it special?

Raspberry Pi

is the gateway drug

to microelectronics

More Fun – Ruby USB

• wget http://sourceforge.net/projects/libusb/files/libusb-1.0/libusb-1.0.9/libusb-1.0.9.tar.bz2

• tar xjf libusb-1.0.9.tar.bz2• cd libusb-1.0.9• ./configure• make• sudo make install

• sudo apt-get install libusb-1.0-0-dev• sudo gem install libusb