Installer Linux sur une carte SD pour une RaspberryPi
Largement inspiré de
TropFacile.NeT
Télécharger Linux pour Raspberry Pi
Depuis un ordinateur sous Mac OS X
Télécharger la version de Linux depuis le site de
raspberry.org
Ouvrir le Terminal
Rechercher la carte SD en tapant la commande :
diskutil list
Reprérer la carte SD, il s'agit souvent de disk1 on va noter diskX le X étant à adapter
Démonter la carte avec la commande :
diskutil unmountdisk /dev/diskX
Se placer dans le dossier où a été placé le fichier, avec la commande cd.
Exemple, s'il est dans le bureau :
cd desktop
Saisir la commande suivante (2014-01-07-wheezy-raspbian.img est pour l'exemple, mettre le nom de fichier .img qui correspond, de plus si ça ne fonctionne pas, remplace 2M par 1M ou 1m) :
sudo dd if=2014-01-07-wheezy-raspbian.img of=/dev/diskX bs=2M
Ça peut prendre assez longtemps (5 à 20 min).
Une fois la Raspebrry Pi connectée, le login est pi et le mot de passe est raspberry
Contrôler sa Pi en SSH
Branchez le câble Ethernet.
Dans un premier temps, il faut récupérer l'adresse IP de la RPi en entrant dans le terminal de la RPi la commande :
ifconfig
Dans mon cas j'obtiens :
eth0 Link encap:Ethernet HWaddr b8:27:eb:33:9a:fa
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:107149 errors:0 dropped:0 overruns:0 frame:0
TX packets:89666 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:122494697 (116.8 MiB) TX bytes:9376610 (8.9 MiB)
Dans mon cas, l'adresse IP est donc : addr:192.168.2.1
Banchez l'ordinateur et connectez le au même réseau.
Entrez la commande (avec l'adresse IP correspondante):
ssh pi@192.168.2.1
C'est fait, entrez le mot de passe (raspberry par défaut).
Pour envoyer des données (musiques, films, photos par exemple), on peut utiliser FileZilla (simple et gratuit) :
-> Fichier
-> Gestionnaire de Sites
Cliquez sur "Nouveau Site".
Pour "Hôte", mettez votre adresse IP.
Pour "Protocole", choisissez : SFTP - SSH File Transfer Protocol.
Autre utilité avec du SSH : il existe des applications pour smartphones, ce qui vous permet de contrôler votre Raspberry Pi depuis un téléphone ou une tablette.
Exemple :
WebSSH
Transferer des données en SSH
scp fichier_origine copie_destination
exemple depuis la session sur le mac:
scp ~/Desktop/image.img pi@192.168.14.2:/home/pi/mondossier
Mise à jour du Système
Dans le terminal avec une Raspberry au moins connectée par un câble Ethernet :
sudo apt-get update
sudo apt-get upgrade
Vérifier l'espace disponible :
df -h
Désinstaller un package :
sudo apt-get --purge remove mon_paquet
Télécharger un fichier:
wget urldemonfichier.com
Monter une clé USB
- Insérer la clé
- Retrouver l'adresse de la clé il s'agit de /dev/sdXY X étant une lettre Y (=1 normalement), la partition. Pour le voir, taper :
dmesg
Créer un point de montage :
sudo mkdir /mnt/cle
Monter la clé :
sudo mount /dev/sdXY /mnt/cle
Probablement :
sudo mount /dev/sda1 /mnt/cle
Le contenu de la clé se retrouve dans /mnt/cle. On peut ainsi échanger des fichiers avec la clé via ce dossier.
Démonter la clé :
umount /mnt/cle
Écouter de la musique en console MOC
Installer MOC :
sudo apt-get install moc
Lancer moc :
mocp
Lancer la musique en se déplançant avec les flèches et "entrée". Pour obtenir l'ensemble des commandes, taper "h".
Pour controler le son, on peut également utiliser alsamixer en lançant simplement la commande :
alsamixer
Pour ma part, je n'ai utilisé ce système moins d'une journée et j'ai installé Aiplay pour avoir ma musique directement depuis mon Iphone ou mon Mac.
Tuto très bien expliqué :
Nicolargo (testé et approuvé, pour le son, n'oubliez pas alsamixer).
Transformer sa Raspberry Pi en Routeur
Tout est indiqué sur le site
raspberrypihq, il n'y a qu'à suivre les instructions et ça marche parfaitement (testé et approuvé).
Transformer sa Raspberry Pi en serveur
Pour installer apache, php et MySql :
sudo apt-get install apache2 php5 mysql-server libapache2-mod-php5 php5-mysql
Récupérer l'IP grâce à :
ifconfig
Ensuite, en tapant dans le navigateur (en étant connecté en local) http://votre.ip, vous avez accès à tout ce qui est dans /var/www/
Installation la libaraire pour le port GPIO de la Raspberry en utilisant Python
Vérifiez sur
Google Code qu'il n'y a pas de version plus récente pour ce qui suit et adapter ce qui suit si c'est le cas (nous prenons ici la version 0.4.1).
Téléchargez la librairie sur la raspberry avec la commande :
wget http://raspberry-gpio-python.googlecode.com/files/Rpi.GPIO-0.4.1a.tar.gz
Extraction du contenu de l'archive avec la commande :
tar xvzf Rpi.GPIO-0.4.1a.tar.gz
Aller dans le répertoire ainsi créé :
cd Rpi.GPIO-0.4.1a
Installez la librairie :
sudo python setup.py install
Si ça ne fonctionne pas avec une erreur : "error Python.h, gcc failed exit status 1", entrez la commande :
sudo apt-get install python-dev
Et relancez l'installation de la librairie.
Une fois l'installation terminée, la librairie peut être utilisée en l'important en plaçant au début du code source du programme :
import RPi.GPIO as GPIO
Rappels de Python
Hello, World!
#! /usr/bin/env python
print "Hello, world !"
Toujours commencer un programme avec cette première ligne!
blink.py : Faire clignoter une diode
Téléchargement du code directement
ici .
#! /usr/bin/env python
# -*- coding: latin-1 -*-
#pour que les caractères latins soient compris
#importation de la bibliothèque pour controler le port GPIO
import RPi.GPIO as GPIO
#importation de la gestion du temps
import time
#pour quela numérotation des pin soit la numérotation triviale
GPIO.setmode(GPIO.BOARD)
#la PIN 11 est dorénavant une sortie
GPIO.setup(11, GPIO.OUT)
counter = 1
timeKeeper = 0
while timeKeeper < 20:
#On allume la diode
GPIO.output(11, True)
print "Allumage ", counter
time.sleep(1)
#On éteint la diode
GPIO.output(11, False)
time.sleep(1)
timeKeeper = timeKeeper + 2
counter = counter + 1
print "Au revoir"
exit()
Enregistrer sous blink.py (ou autre chose c'est juste pour l'exemple).
Lancer le programme avec la commande :
sudo python blink.py
Rendre un programme "exécutable"
Dans le dossier où se trouve le code source (on va prendre ici helloworld.py), entrez la commande :
chmod +x helloworld.py
Ainsi pour le lancer, il faut dorénavant simplement entrer :
./helloworld.py
Mais on veut pouvoir lancer le programme peut importe notre place dans l'arborescence, on va donc le déplacer :
sudo cp helloworld.py /usr/local/bin
On peut le renommer
sudo mv /usr/local/bin/helloworld.py /usr/local/bin/helloworld
Maintenant, le programme s'ouvre avec la commande :
helloworld
Utiliser la synthèse vocale de Google sur la Rapsberry Pi
Il faut d'abord installer le serveur (cf :
Configurer sa Pi en serveur).
Installer mpg321:
sudo apt-get install mpg321
Ajoutez l'utilisateur www-data au groupe audio :
sudo adduser www-data audio
Dans un fichier php "speak.php", placé dans le répertoir "/var/www", tapez le code suivant :
<?php
exec('mpg321 "http://translate.google.com/translate_tts?tl=fr&q=Hello%20World"');
?>
Vous pouvez mettre à la place mon interface téléchargeable
ici.
Une fois la RPi connectée à internet, entrez dans le terminal pour lancer la lecture:
sudo php /var/www/speak.php
ou ouvrir dans un navigateur web :
ip.de.votre.raspberry/speak.php
Utiliser le Node.JS pour contrôler le port GPIO
Tout sur les sites :
joshondesign, puis
npmjs
Fonctions et méthodes à connaître
Trier par ordre alphabétique
Nom
|
Description
|
Exemple de syntaxe
|
alert();
|
Affiche le message dans une fenêtre.
|
alert("Hello!");
|
confirm();
|
Demande confirmation et rend un boolean.
|
confirm("Sure ?");
|
prompt();
|
Demande à l'utilisateur une information et la rend sous forme d'une chaîne de caractère.
|
prompt("Login : ");
|
isNaN();
|
Rend true si ce n'est pas un nombre, false sinon.
|
|
getElementById();
|
Rend l'élément dans le document avec l'id en argument
|
document.getElementById('nav');
|
getElementsByTagName();
|
Rend un tableau avec tout les éléments qui ont le même nom de balise que l'argument
|
document.getElementByTagName('a');
|
getElementsByName();
|
Renvoie une liste des éléments portant un nom (attribut name) particulier dans le document HTML.
|
document.getElementsByName(name);
|
getAttribute();
|
Renvoie la valeur d'un attribut donné de l'élément spécifié
|
element.getAttribute(nom_attribut)
|
setAttribute();
|
Ajoute un nouvel attribut ou change la valeur d'un attribut existant pour l'élément spécifié.
|
myLink.setAttribute('href','google.com');
|
className;
|
Cet attribut définit/obtient l'attribut class de l'élément spécifié.
|
myDiv.className = 'corps';
|
innerHTML;
|
Récupère ou définit tout le balisage et le contenu au sein d'un élément donné
|
element.innerHTML;
|
textContent;
|
Définit ou obtient le contenu textuel d'un nœud et de ses descendants.
|
element.textContent;
|
firstChild;
|
Renvoie le premier nœud enfant du nœud courant, ou null s'il n'en a pas.
|
noeud.firstChild;
|
lastChild;
|
Renvoie le dernier élément enfant de l'élément courant.
|
element.lastChild;
|
childNodes;
|
Renvoie une collection de nœuds enfants de l'élément donné.
|
elementDeReference.childNodes;
|
parentNode;
|
Renvoie l'élément parent de l'élément courant.
|
element.parentNode;
|
querySelector();
|
Retourne le premier élément du document (en partant du premier niveau du html et ordonné comme les éléments du document) qui correspond au groupe de sélecteurs passés en paramètre.
|
document.querySelector(sélecteurs);
|
querySelectorAll();
|
|
|
createElement();
|
Crée un élément du type spécifié.
|
document.createElement(tagName);
|
appendChild();
|
Ajoute un nœud à la fin de la liste des enfants d'un nœud parent spécifié. Si le nœud existe déjà, il est retiré de son nœud parent actuel et ajouté au nouveau nœud parent.
|
element.appendChild(enfant);
|
createTextNode();
|
Crée un nouveau nœud de texte.
|
document.createTextNode("texte");
|
shift();
|
Supprime le premier élément du tableau.
|
myArray.shift();
|
pop();
|
Supprime le dernier élément du tableau.
|
myArray.pop();
|
push();
|
Ajoute un ou plusieurs éléments à la fin d'un tableau et retourne la nouvelle taille du tableau.
|
myArray.push(elem1, elem2);
|
split();
|
Sépare une chaîne de caractères dès qu'il y a le caractère en argument et rend chaque morceau de chaîne dans un tableau.
|
myStr.split(" ");
|
join();
|
Réunit tous les éléments d'un tableau dans une chaine de caractères.
|
arr.join(séparateur);
|
toLowerCase();
|
Met la chaîne de caractère en minuscule.
|
myString.toLowerCase();
|
toUpperCase();
|
Met la chaîne de caractère en majuscule.
|
myString.toUpperCase();
|
trim();
|
Sert à supprimer les espaces avant et après une chaîne de caractères.
|
myString.trim();
|
indexOf();
|
Retourne la position du premier caractère trouvé, et s'il n'y en a pas la valeur -1 est retournée.
|
mySting.indexOf('texte');
|
lastIndexOf();
|
Retourne la position du dernier caractère trouvé, et s'il n'y en a pas la valeur -1 est retournée.
|
mySting.lastIndexOf('texte');
|
substring();
|
substring(a, b) permet d'extraire une chaîne à partir de la position a (incluse) jusqu'à la position b (exclue). Si il n'y a pas de deuxième paramètre, la méthode va automatiquement jusqu'en bout de châine.
|
mySting.substring(0,4);
|
substr();
|
substr(a, n) accepte deux paramètres : le premier est la position de début, et le deuxième le nombre de caractères à extraire.
|
mySting.substr(0,4);
|
slice();
|
Une valeur négative est transmise pour la position de fin, slice() va extraire la chaîne jusqu'à la fin, en décomptant le nombre de caractères indiqué.
|
mySting.slice(0,-3);
|
valueOf();
|
Renvoie la valeur primitive de n'importe quel objet.
|
myStr.valueOf();
|
Un premier algorithme simple
Permet d'afficher le "Retour au sommaire" à la fin de chaque bloc :
var divTab = document.getElementsByTagName('div');
for (var i = 0; i < divTab.length; i++){
if (divTab[i].className.toLowerCase() == "corps" && divTab[i].id!="sommaire"){
var br = document.createElement('br');
var retour = document.createElement('a');
retour.href="notes.html"
retour.innerHTML = "Retour au début"
divTab[i].appendChild(br);
divTab[i].appendChild(retour);
}
}
Listes des événements en JavaScript
Nom de l'événement
|
Action pour le déclencher
|
click
|
Cliquer (appuyer puis relâcher) sur l'élément
|
dblclick
|
Double-cliquer sur l'élément
|
mouseover
|
Faire entrer le curseur sur l'élément
|
mouseout
|
Faire sortir le curseur de l'élément
|
mousedown
|
Appuyer (sans relâcher) sur le bouton gauche de la souris sur l'élément
|
mouseup
|
Relâcher le bouton gauche de la souris sur l'élément
|
mousemove
|
Faire déplacer le curseur sur l'élément
|
keydown
|
Appuyer (sans relâcher) sur une touche de clavier sur l'élément
|
keyup
|
Relâcher une touche de clavier sur l'élément
|
keypress
|
Frapper (appuyer puis relâcher) une touche de clavier sur l'élément
|
focus
|
« Cibler » l'élément
|
blur
|
Annuler le « ciblage » de l'élément
|
change
|
Changer la valeur d'un élément spécifique aux formulaires (input, checkbox, etc.)
|
select
|
Sélectionner le contenu d'un champ de texte (input, textarea, etc.)
|
Les événements au travers du DOM
D'après
OpencClassRooms
DOM-0
Exemple :
- On récupère tout d'abord l'élément HTML dont l'ID est clickme
- On accède ensuite à la propriété onclick à laquelle on assigne une fonction anonyme
- Dans cette même fonction, on fait un appel à la fonction alert() avec un texte en paramètre
Cliquez-moi !
var element = document.getElementById('clickme');
element.onclick = function() {
alert("Vous m'avez cliqué !");
};
DOM-2
Cliquez-moi !
var element = document.getElementById('clickME');
element.addEventListener('click', function() {
alert("Vous m'avez cliqué !");
}, false);
Ou encore :
var element = document.getElementById('clickme');
var myFunction = function() {
alert("Vous m'avez cliqué !");
};
element.addEventListener('click', myFunction, false);
Pour supprimer l'événement :
element.removeEventListener('click', myFunction, false); // On supprime l'événement en lui repassant les mêmes paramètres
L'objet Event
Cliquez-moi !
var clickme = document.getElementById('clickME2');
clickme.addEventListener('click', function(e) {
e.target.innerHTML = 'Vous avez cliqué !';
}, false);
Fonction addEvent
Pour simplifier l'ajout d'un événement :
function addEvent(element, event, func) { // Une fonction pour gérer les événements sous tous les navigateurs
if (element.attachEvent) {
element.attachEvent('on' + event, func);
} else {
element.addEventListener(event, func, true);
}
}
Récupérer la position de la souris
var position = document.getElementById('position');
document.addEventListener('mousemove', function(e) {
position.innerHTML = 'Position X : ' + e.clientX + 'px
Position Y : ' + e.clientY + 'px';
}, false);