Raspberry Pi

De LabSud
Aller à : navigation, rechercher

Pré requis :

Ces tutos ont été réalisés sur la distribution Occidentalis 0.2 de Ladyada, disponible sur http://learn.adafruit.com/adafruit-raspberry-pi-educational-linux-distro/occidentalis-v0-dot-2


Tutos

MAJ Du systeme

sudo apt-get update
sudo apt-get upgrade

Configuration raspi-config

sudo raspi-config
  1. > expand rootfs
  2. > Configure keyboard (fr)
  3. > Change pass (labsud)
  4. > Change locale (fr_FR-UTF8, fr par dÈfaut)
  5. > Change timezone (Europe / Paris)
  6. > Memory split: 64K for videocore
  7. > Update (raspi-config)
  8. > Redemarrer raspiconfig et faire eventuellement de l'overclock.
  9. > Redémarrer en quittant raspi-config

Wifi

sudo su
echo 'auto lo
iface lo inet loopback
iface eth0 inet dhcp
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
# Clé pour du wep
   wireless-essid Mon-Reseau-sansfil
   wireless-key E9A1F00B3A66C8BB38C3606517
# ou clé pour du Wpa
   #	wpa-ssid "my-network-ssid"
   #	wpa-psk "my-wifi-password"		
' > /etc/network/interfaces
exit

Carte audio externe en audio par défaut

Mettre une carte audio USB par défaut si elle est présente. Ici c'est une carte fonctionnant avec un driver "snd-usb-audio'.

sed -i -e 's/^options snd-usb-audio index=-2/# options snd-usb-audio index=-2/' /etc/modprobe.d/alsa-base.conf

Une sortie audio de bonne qualité et pas chère : http://www.ebay.fr/sch/i.html?_sacat=0&_from=R40&_nkw=pcm2704&LH_PrefLoc=2&_sop=15

Gestion avancée des services

sudo apt-get install chkconfig

'chkconfig --list' permet ensuite de lister les services actifs au démarrage. On peut aussi activer ou désactiver certains services. Consulter l'aide.


VI avec affichage coloré de la syntaxe en mode texte

sudo apt-get install vim-nox
# activation du syntax coloring
sed -i -e 's/^"syntax on/syntax on/' /etc/vim/vimrc

Support de Flash sous midori

sudo apt-get install browser-plugin-gnash


Installation d'un clavier souris BT

sudo apt-get isntall bluez-compat bluez-utils bluetooth blueman

Appairage du clavier, le rendre détectable en bluetooth (lire la doc...)

sudo hcitool scan

Scanning ... 20:73:AB:25:F1:DC Bluetooth 3.0 Macro Keyboard

sudo hidd --connect 20:73:AB:25:F1:DC

Passe en root

sudo su

Ensuite, pour recoupler régulièrement, et ce même en mode texte.

cat << 'Endofmessage' > /etc/keyboard.sh
#!/bin/bash
address="20:73:AB:25:F1:DC"
while (sleep 1)
do
  connected=`sudo hidd --show` > /dev/null
  if [[ ! $connected =~ .*${address}.* ]] ; then
   sudo hidd --connect ${address} > /dev/null 2>&1
  fi
done
Endofmessage
chmod +x /etc/keyboard.sh

Script de dÈmarrage init.d

cat << 'Endofmessage' > /etc/init.d/keyboard
#!/bin/sh
/etc/keyboard.sh &
exit 0
Endofmessage

Le rendre executable

chmod +x /etc/init.d/keyboard

Démarrage du service par défaut

update-rc.d keyboard defaults

Et quitte le mode su

exit

Autre méthode non testée)‡ voir sur http://www.jamesrobertson.eu/blog/2012/oct/27/pairing-a-bluetooth-device-with-a-r.html

Shairport, permet de transformer la Raspberry en borne AirPlay Apple

Pré requis

sudo aptitude install git libao-dev libssl-dev libcrypt-openssl-rsa-perl libio-socket-inet6-perl libwww-perl avahi-utils
sudo su
git clone https://github.com/njh/perl-net-sdp.git perl-net-sdp
cd perl-net-sdp
perl Build.PL
./Build
./Build test
./Build install
cd ..

Shairport

git clone https://github.com/albertz/shairport.git shairport
cd shairport
make
make install
cp shairport.init.sample /etc/init.d/shairport
cd /etc/init.d
chmod a+x shairport

Pour démarrer automatiquement avec le système

update-rc.d shairport defaults

Changer le nom de la borne en AirPi

sed -i -e 's/^NAME=ShairPort/NAME=AirPi/' /etc/init.d/shairport
exit

Webiopi  : manipuler les io par interface web

Source : http://trouch.com/2012/08/21/webiopi-control-your-pis-gpio-with-a-browser/

sudo apt-get install subversion
svn checkout http://webiopi.googlecode.com/svn/trunk/ webiopi-read-only
cd webiopi-read-only
sudo ./setup.sh

Démarrage momentané

sudo /etc/init.d/webiopi start

Ou dÈmarrage permanent

update-rc.d webiopi defaults

Accès à l'interface

# Default user is "webiopi" and password is "raspberry"
# http://192.168.20.9:8000/ en mode normal
# http://192.168.20.9:8000/webiopi/app/expert/ en mode avancé

Application pour jouer pandora : piano-bar

Attention, nécessite de créer d'abord un compte sur Pandora. Pandora est inaccessible d'Europe, aussi faut il utiliser un proxy http basé aux US et le configurer dans le naviateur web (ie firefox) sur votre ordinateur. Ceci se trouve en faisant une recherche google "free proxy US". Puis sous Firefox, faire la création de compte, l'activation (mail) et créer des playlists. Ensuite seulement l'aventure peut commencer sur raspberry

sudo apt-get install pianobar
sudo su

Création du plugin de reformatage de la liste des titres

# Les quotes sur le delimiteur Endofmessage permettent de ne pas traiter les carateres speciaux dans le script
cat << 'Endofmessage' > /usr/local/bin/eventcmd.sh 
#!/bin/bash
while read L; do
       k="`echo "$L" | cut -d '=' -f 1`"
       v="`echo "$L" | cut -d '=' -f 2`"
       export "$k=$v"
done < <(grep -e '^\(title\|artist\|album\|stationName\|pRet\|pRetStr\|wRet\|wRetStr\|songDuration\|songPlayed\|rating\)=' /dev/stdin)

case "$1" in
       songstart)
       echo "$title -- $artist" > $HOME/.config/pianobar/nowplaying
esac
Endofmessage

chmod +x /usr/local/bin/eventcmd.sh
exit

Création de la configuration

mkdir ~/.config
mkdir ~/.config/pianobar

echo '# This is an example configuration file for pianobar. You may remove the # from
# lines you need and copy/move this file to ~/.config/pianobar/config
# See manpage for a description of the config keys
#
# User
user = monmail@domaine.com
password = MonPassword

# Proxy (for those who are not living in the USA)
#control_proxy = http://76.74.219.138:3128/
control_proxy = http://63.141.249.37:8080/

# Keybindings
act_help = ?
act_songlove = +
act_songban = -
act_stationaddmusic = a
act_stationcreate = c
act_stationdelete = d
act_songexplain = e
act_stationaddbygenre = g
act_songinfo = i
act_addshared = j
act_songmove = m
act_songnext = n
act_songpause = p
act_quit = q
act_stationrename = r
act_stationchange = s
act_songtired = t
act_upcoming = u
act_stationselectquickmix = x
act_voldown = (
act_volup = )
 
# Misc
#audio_quality = low
autostart_station = 1228264436040845702
#event_command = /home/pi/.config/pianobar/scripts/eventReciever.py
event_command = /usr/local/bin/eventcmd.sh
fifo = /home/pi/.config/pianobar/ctl
volume = 5
 
tls_fingerprint = 2D0AFDAFA16F4B5C0A43F3CB1D4752F9535507C0
' > ~/.config/pianobar/config


Entrées sorties en I2C

# pas necessaire sous Occidentalis, car deja installe
sudo apt-get install i2c-tools
# afin de pouvoir dialoguer avec l'I2C sans etre root
sudo adduser pi i2c
# Se delogger et se relogger pour activer le réglage précédent
# Liste les periphs i2c détectés
i2cdetect -y 1

Petit essai avec i2C io expander 23917 avec une led sur PA0

Connexion sur breadboard

  1. Broche 9 to Vcc (eg. 5V de la raspberry, ou une source de tension externe jusqu'a 5.5V)
  2. Broche 10 ‡ la masse
  3. Broche 12 to SCL0/1 on the Pi
  4. Broche 13 to SDA0/1 on the Pi
  5. Broche 15,16,17 ‡ la masse (selectionne l'adresse I2C en 0X20)
  6. Broche 18 au Vcc (allume l'expandeur)
  7. Broche 21 > 28 GPA0 > GPA7
  8. Broche 1 > 8 GPB0 > GPB7
  9. Broche 20 INTA
  10. Broche 19 INTB

Il est egalement possible de faire de mÍme avec Slice Of Pi, petite carte avec un 23017. Attention, l'exemple ci dessous est pour une carte modele B V2, ou le port I2C est le 2e (port 1) Sur le modele B V1, c'est le 1er port (port 0) qui est route sur le connecteur. C'est le parametre y qui selectionne le numero du port (0 ou 1)

cat <<"Endofmessage" > led.sh
#!/bin/bash
i2cset -y 1 0x20 0x00 0x00
COUNTER=20
until [ $COUNTER -lt 10 ]; do
i2cset -y 1 0x20 0x12 0x01
sleep 0.1
i2cset -y 1 0x20 0x12 0x00
sleep 0.1
let COUNTER-=1
done
Endofmessage
chmod +x led.sh

Chenillard à led i2C io expander 23917 avec 16 leds sur PA0-7 PB0-7

http://www.skpang.co.uk/blog/archives/454

cat <<"Endofmessage" > ledchaser.sh
#! /usr/bin/python

# A simple Python command line tool to control an MCP23017 I2C IO Expander
# By Nathan Chantrell http://nathan.chantrell.net
# GNU GPL V3 

# SK Pang Electronics June 2012

import smbus
import sys
import getopt
import time 
bus = smbus.SMBus(1) # port 1....

address = 0x20 # I2C address of MCP23017
bus.write_byte_data(0x20,0x00,0x00) # Set all of bank A to outputs 
bus.write_byte_data(0x20,0x01,0x00) # Set all of bank B to outputs 



def set_led(data,bank):
  if bank == 1:
   bus.write_byte_data(address,0x12,data)
  else:
   bus.write_byte_data(address,0x13,data)
  return

# Handle the command line arguments
def main():
   a = 0
delay = 0.05   
while True:

# Move led left  
   for x in range(0,8):
     a = 1 << x
     set_led(a,0)
     time.sleep(delay)
   set_led(0,0)
   for x in range(0,8):
     a = 1 << x
     set_led(a,1)
     time.sleep(delay)
   set_led(0,1)  
 
# Move led right 
   for x in range(7,-1,-1):
     a = 1 << x
     set_led(a,1)
     time.sleep(delay)
   set_led(0,1)
 
   for x in range(7,-1,-1):
     a = 1 << x
     set_led(a,0)
     time.sleep(delay)
   set_led(0,0)
   
  
if __name__ == "__main__":
   main()
Endofmessage
chmod +x ledchaser.sh


LCD sur io expander

Pour le cablage, voir http://raspberrypi.stackexchange.com/questions/1661/how-can-i-connect-a-hd44780-based-lcd

sudo apt-get install python-pip
sudo pip install pytz
cat <<"Endofmessage" > lcd.py
#!/usr/bin/env python
"""World Clock Demo
   It should be fairly obvious how to change this code to work for other timezones"""
import time

class LCD_23017(object):
   # Timing constants
   E_PULSE = 0.00005
   E_DELAY = 0.00005
   def __init__(self, bus, addr, port, rs, en):
       self.bus = bus
       self.addr = addr
       self.rs = rs
       self.en = en

       self.DIRECTION = 0x00 if port == 'A' else 0x01
       self.DATA = 0x12 if port == 'A' else 0x13

       self.bus.write_byte_data(addr, self.DIRECTION, 0x00)

   def lcd_byte(self, data, rs):
       rs <<= self.rs
       en = 1 << self.en
       for nybble in (data&0xf0, data<<4):
           self.bus.write_byte_data(self.addr, self.DATA, nybble | rs)
           time.sleep(self.E_DELAY)
           self.bus.write_byte_data(self.addr, self.DATA, nybble | rs | en)
           time.sleep(self.E_PULSE)
           self.bus.write_byte_data(self.addr, self.DATA, nybble | rs)


class HD47780(object):
   LCD_CHR = True
   LCD_CMD = False
   # Base addresses for lines on a 20x4 display
   LCD_BASE = 0x80, 0xC0, 0x94, 0xD4

   def __init__(self, driver, rows=2, width=16):
       self.rows = rows
       self.width = width
       self.driver = driver
       self.lcd_init()

   def lcd_init(self):
       # Initialise display
       lcd_byte = self.driver.lcd_byte
       for i in 0x33, 0x32, 0x28, 0x0C, 0x06, 0x01:
           lcd_byte(i, self.LCD_CMD)

   def lcd_string(self, message, line=0):
       # Send string to display
       lcd_byte = self.driver.lcd_byte
       lcd_byte(self.LCD_BASE[line], self.LCD_CMD)
       for i in bytearray(message.ljust(self.width)):
           lcd_byte(i, self.LCD_CHR)


def test_i2c():
   from datetime import datetime
   import pytz
   import smbus

   I2C_PORT = 1
   I2C_ADDR = 0x20

   driver1 = LCD_23017(bus=smbus.SMBus(I2C_PORT), addr=I2C_ADDR, port='B', rs=0, en=1)
   driver2 = LCD_23017(bus=smbus.SMBus(I2C_PORT), addr=I2C_ADDR, port='B', rs=0, en=2)
   driver3 = LCD_23017(bus=smbus.SMBus(I2C_PORT), addr=I2C_ADDR, port='B', rs=0, en=3)

   lcd1 = HD47780(driver=driver1, rows=2, width=16)
   lcd2 = HD47780(driver=driver2, rows=2, width=16)
   lcd3 = HD47780(driver=driver3, rows=2, width=16)
   lcd1.lcd_string("    New York")
   lcd2.lcd_string("     London")
   lcd3.lcd_string("    Melbourne")
   new_york_tz = pytz.timezone("America/New_York")
   london_tz = pytz.timezone("Europe/London")
   melbourne_tz = pytz.timezone("Australia/Melbourne")
   while True:
       time.sleep(1-time.time()%1)  # Wait until the next second
       lcd1.lcd_string(datetime.now(new_york_tz).ctime()[3:], line=1)
       lcd2.lcd_string(datetime.now(london_tz).ctime()[3:], line=1)
       lcd3.lcd_string(datetime.now(melbourne_tz).ctime()[3:], line=1)

def main():
    test_i2c()

if __name__ == "__main__":
    main()
Endofmessage
chmod +x lcd.py


Carte d'interface Velleman K8055

sudo apt-get install libusb-dev swig python-dev
wget http://prdownloads.sourceforge.net/libk8055/libk8055.0.4.1.tar.gz
tar xvfz libk8055.0.4.1.tar.gz
cd src
sed -i -e 's/^PREFIX = ?\/usr\/local/PREFIX = \/usr\/local/' Makefile
sudo make all
sudo make install
make pylib
sudo make pyinstall

Faire en sorte que le user pi puisse utiliser la carte sans etre root

sudo cp velleman.rules /etc/udev/rules.d
sudo groupadd k8055
sudo adduser pi k8055

Tests (rebooter d'abord...)

cd src
k8055 -p:0 -d:147 -a1:25 -a2:203
cd pyk8055
python k8055test.py
python k8055testm.py

Domotique Heyu

wget http://heyu.org/download/heyu-2.10.tar.gz
tar xf heyu-2.10.tar.gz
cd heyu-2.10
sh ./Configure
make

Brancher le port série......vers l'interface CM11 ou CM15L

sudo make install

#
# I did not find a Heyu configuration file.
# Where would you like the sample Heyu configuration file installed?
#   1. In directory /home/pi/.heyu/
#   2. In subdirectory .heyu/ under a different user home directory
#   3. In directory /etc/heyu  (for system-wide access)
#   4. No thanks, I'll take care of it myself
# Choice [1, 2, 3, 4] ? 3
#
# Creating directory /etc/heyu with permissions rwxrwxrwx.
# Adjust ownership and permissions as required.
# The sample configuration file will be installed as /etc/heyu/x10.conf
#
# I will add the TTY port for your CM11 to the config file
# Specify /dev/ttyS0, /dev/ttyS1, etc., or the word dummy
# To which port is the CM11 attached? /dev/ttyUSB0
#
cd  ..

Domus link interface web heyu

wget http://domuslink.googlecode.com/files/domus.Link2.1.2.tar.gz
tar xvfz domus.Link2.1.2.tar.gz
sudo apt-get install apache2 php5
sudo mv domus.Link/* /var/www
sudo rm -f /var/www.index.html
chmod 777 /var/www/config.php /var/www/db/

Se connecter sous http://raspberrypi/. Le mot de passe par défaut de l'admin est 1234

Désactivation des services inutiles (au moins par défaut)

sudo chkconfig  apache2 off
sudo chkconfig  cups off
sudo chkconfig  saned  off
sudo chkconfig  rsync  off

Annoncer les services par Avahi

Pré requis: installer Avahi

sudo apt-get install libnss-mdns


Pour ssh :

sudo cat <<"Endofmessage" > /etc/avahi/services/ssh.service
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h</name>
  <service>
    <type>_ssh._tcp</type>
    <port>22</port>
    <txt-record>u=pi</txt-record>
  </service>
</service-group>
Endofmessage

Pour vnc (http://4dc5.com/2012/06/12/setting-up-vnc-on-raspberry-pi-for-mac-access/ ):

sudo cat <<"Endofmessage" > /etc/avahi/services/rfb.service
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">%h</name>
  <service>
    <type>_rfb._tcp</type>
    <port>5901</port>
  </service>
</service-group>
Endofmessage

Pour apache:

<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h HTTP</name>
<service>
<type>_http._tcp</type>
<port>80</port>
</service>
</service-group>

Pour sftp

sudo cat <<"Endofmessage" > /etc/avahi/services/ssh-ftp.service
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">Secure FTP sur %h</name>
  <service>
    <type>_sftp-ssh._tcp</type>
    <port>22</port>
    <txt-record>u=pi</txt-record>
 </service>
</service-group>
Endofmessage

Installation de Pure Data sur Raspberry PI

Post d'origine http://log.liminastudio.com/writing/tutorials/how-to-build-pd-extended-on-the-raspberry-pi. Toutefois il y a un pb, ce paquet est conçu pour une architecture arm sans coprocesseur arithmetique. Une autre version adaptée pour notre architecture est dispo ici: http://insidetheseboxes.wordpress.com/2012/10/07/pd-extended-in-raspbian-wheezy-armhf/ .

sudo apt-get install rsync autoconf libfftw3-dev liblua5.1-0-dev swig libvorbis-dev ladspa-sdk libspeex-dev libmp3lame-dev lua5.1
wget wget https://dl.dropbox.com/u/22733340/Pd-0.43.1-extended-20120723.deb
sudo dpkg -i Pd-0.43.1-extended-20120723.deb


Tests

wget http://log.liminastudio.com/wp-content/uploads/2012/06/testPatchExtended.pd_.zip
unzip testPatchExtended.pd_.zip
pd-extended -nogui -noadc -alsa testPatchExtended.pd

Serveur de fichiers HFS (mac) et serveur de sauvegarde time machine

http://www.macg.co/unes/voir/132032/macberry-pi-configurer-un-raspberry-pi-et-l-utiliser-comme-serveur-time-machine/2