Premiers pas avec BeagleBone Black
Démarrage
Connecter l'USB du BeagleBone Black. Une fois qu'il est visible (comme un disque : /media/BEAGLEBONE), on peut se connecter dessus : http://192.168.7.2
Des que cela fonctionne, on peut y aller par ssh (mot de passe vide)
ssh root@192.168.7.2
Il n'y a pas de mot de passe. Par sécurité, mettre un mot de passe ou déployer une clé publique pour SSH.
Test des GPIO depuis le shell
Test des LED USR0123
cd /sys/class/leds ls _F cd beaglebone\:green\:usr0 ls -F cat trigger echo none > trigger echo oneshot > trigger echo heartbeat > trigger echo 1 > brightness echo 0 > brightness echo timer > trigger echo 100 > delay_on echo 900 > delay_off
Test des GPIO (write)
# attach a LED at gpio1_28 (1*32+28=60) with a 220 ohms resistor cd /sys/class/gpio ls -F echo 60 > export cd gpio60 echo out > direction echo 1 > value cd .. echo 60 > unexport
Test des GPIO (analog read)
TBD
Test des GPIO (digital read) : mettre un bouton en pullup sur 60 9_28 ? (=1*32+28)
#!/bin/sh
#
# Read a GPIO input
# Author : http://wh1t3s.com/2009/05/14/reading-beagleboard-gpio/
GPIO=$1
cleanup() { # Release the GPIO port
echo $GPIO > /sys/class/gpio/unexport
echo ""
echo ""
exit
}
# Open the GPIO port
#
echo "$GPIO" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio${GPIO}/direction
trap cleanup SIGINT # call cleanup on Ctrl-C
THIS_VALUE=`cat /sys/class/gpio/gpio${GPIO}/value`
LAST_VALUE=$THIS_VALUE
NEWLINE=0
# Read forever
while [ "1" = "1" ]; do
# next three lines detect state transition
if [ "$THIS_VALUE" != "$LAST_VALUE" ]; then
EV="|"
else
EV=""
fi
# "^" for high, '_' for low
if [ "1" = "$THIS_VALUE" ]; then
EV="${EV}^"
else
EV="${EV}_"
fi
echo -n $EV
# sleep for a while
sleep 0.05
# wrap line every 72 samples
LAST_VALUE=$THIS_VALUE
THIS_VALUE=`cat /sys/class/gpio/gpio${GPIO}/value`
NEWLINE=`expr $NEWLINE + 1`
if [ "$NEWLINE" = "72" ]; then
echo ""
NEWLINE=0
fi
done
cleanup # call the cleanup routine
chmod 755 ./read_gpio.sh ./read_gpio.sh 60
Ressources
- http://elinux.org/EBC_Exercise_02_Flashing_an_LED
- http://www.armhf.com/index.php/using-beaglebone-black-gpios/
- http://emmanuel.pouly.free.fr/beagle2.html
Test des GPIO en Python
import os import time def test(command): print command os.popen(command) test(“echo 60 > /sys/class/gpio/export”) test(“echo high > /sys/class/gpio/gpio60/direction”) test(“echo 1 > /sys/class/gpio/gpio60/value”) value = 1 for i in range(0,10): if value == 1: value = 0 else: value = 1 test(“echo ” + str(value) + ” > /sys/class/gpio/gpio60/value”) time.sleep(2) test(“echo 60 > /sys/class/gpio/unexport”)
Ressources
Configuration Réseau
Sur le BeagleBone
route add default gw 192.168.7.1
Et mettre un DNS dans /etc/resolv.conf (par exemple : cat /etc/resolv.conf sur le PC, vous prenez la 1ère ligne "nameserver X.X.X.X" et vous la mettez dans /etc/resolv.conf sur le BeagleBone).
Sur le PC qui sert de passerelle (celui où est connecté l'USB) :
sudo iptables --append FORWARD --in-interface eth2 -j ACCEPT sudo iptables --table nat --append POSTROUTING --out-interface eth1 -j MASQUERADE
Note : sur ma machine, eth1 = l'I/F réseau du PC, et eth2 = la connexion filaire via USB (faire "ifconfig -a" pour vérifier, sinon adapter les commandes ci-dessus).
Vérifier que /proc/sys/net/ipv4/ip_forward contient "1" (sinon, echo 1 > /proc/sys/net/ipv4/ip_forward )
Et voilà... Depuis le BeagleBone, je peux faire "ping" vers n'importe quoi.
Node.js
Node.js est installé par défaut. Il sert le serveur web embarqué.
Copier ce code dans un fichier blinking.js pris dans le livre Bad to the Bone: Crafting Electronics Systems with BeagleBone and BeagleBone Black. Ce code utilise la bibliothèque bonescript qui donne accés aux GPIO de la carte.
var b = require('bonescript');
//Old bonescript defines 'bone' globally
var pins = (typeof bone != 'undefined') ? bone : b.bone.pins;
var ledPin = pins.P8_13;
var ledPin2 = pins.USR3;
b.pinMode(ledPin, b.OUTPUT);
b.pinMode(ledPin2, b.OUTPUT);
var state = b.LOW;
b.digitalWrite(ledPin, state);
b.digitalWrite(ledPin2, state);
setInterval(toggle, 1000);
function toggle() {
if(state == b.LOW) state = b.HIGH;
else state = b.LOW;
b.digitalWrite(ledPin, state);
b.digitalWrite(ledPin2, state);
}
node blinkled.js
JDK
Télécharger le JDK d'Oracle : JDK 7 version "Linux ARM v6/v7 Soft Float ABI".
Le copier sur le Beagle via scp; exemple :
scp jdk-7u45-linux-arm-vfp-sflt.tar.gz root@192.168.7.2:/home/root
Décompresser le tar.gz
export PATH=$PATH:/home/root/jdk1.7.0_45/bin export JAVA_HOME=/home/root/jdk1.7.0_45 java -version
Ajouter les 2 exports au .bashrc
OpenHAB
Télécharger OpenHAB
Le copier sur le Beagle via scp; exemple :
scp openhab.tgz root@192.168.7.2:/home/root
Décompresser le tgz
cd openhab bin/start.sh
Naviguer sur http://192.168.7.2:8080/openhab.app?sitemap=demo
Il reste plus qu'à ajouter des règles avec le binding exec pour contrôler les GPIO du Beaglebone.
Liens: