Archives par étiquette : dongle

BateauRaspberry : un bateau entièrement fait main, piloté par un Pi (màj)

Il y a quelques temps j’ai été contacté par Tim, un lecteur de MagdiBlog, pour son projet de bateau piloté par un Raspberry Pi 🙂

Après plusieurs échanges de mails, et quelques semaines (mois ?) de travail, Tim est arrivé au bout de son projet :

tim_bateau_telecommande_raspberry_piSon projet, très complet, aborde plusieurs problématiques entre la gestion des moteurs et servos moteurs, le pilotage à distance via WiFi, la capture d’image, etc…

Continuer la lecture

4 – Configuration réseau et point d’accès WiFi

MPD est un daemon administré par une application cliente via le réseau. Il nous faut donc créer un réseau WiFi dans la voiture afin de pouvoir piloter MPD grâce à des périphériques divers. Nous n’allons pas poser de routeur wifi sous le siège pour créer un réseau wifi… Nous allons plutôt transformer le Pi en point d’accès WiFi !

Hostapd

Le paramétrage de hostapd se fait grâce au fichier de configuration /etc/hostapd/hostapd.conf.Il n’est pas nécessaire d’avoir un haut niveau de sécurité sur ce réseau WiFi. Aussi, je décide de laisser le réseau WiFi ouvert 🙂 C’est open bar !

Voici ma configuration :

interface=wlan0
ssid=Carpo
channel=1
auth_algs=1
driver=rtl871xdrv
ieee80211n=1
hw_mode=g
device_name=RTL8192CU
manufacturer=Realtek

dnsmasq

J’utilise dnsmasq pour attribuer une adresse IP automatiquement à tous les clients WiFi qui se connectent au Pi. Voici le contenu de mon fichier de configuration /etc/dnsmasq.conf.

interface=wlan0
dhcp-leasefile=/tmp/dnsmasq.leases
dhcp-authoritative
dhcp-option=1,255.255.255.0
dhcp-option=3,192.168.103.1 # default gateway
dhcp-option=6,192.168.103.1 # dns server
dhcp-range=192.168.103.10,192.168.103.99,255.255.255.0,72h

Configuration minimaliste 🙂

Configuration de l’interface réseau

Il convient enfin de configurer l’interface WiFi du Pi avec une adresse IP fixe. Voici le contenu de mon fichier /etc/network/interfaces.

auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet static
        address 192.168.100.31
        netmask 255.255.255.0
        network 192.168.100.0
        broadcast 192.168.100.255
        gateway 192.168.100.1
        dns-nameservers 192.168.100.1

auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
        address 192.168.103.1
        netmask 255.255.255.0
        network 192.168.103.0
        broadcast 192.168.103.255

J’en profite pour configurer l’interface ethernet afin de pouvoir prendre facilement la main sur le Pi en le connectant simplement sur mon LAN.

Initialisation du point d’accès WiFi au démarrage du Pi

Si vous rebootez votre Pi dans l’état, vous constaterez que votre interface WiFi n’a pas d’adresse IP ce qui rend impossible la connexion d’un client WiFi au point d’accès. Il convient donc de créer un petit script d’initialisation, /etc/init.d/ap.sh, qui démarre hostapd et donne une adresse IP statique à l’interface réseau WiFi :

#!/bin/bash

### BEGIN INIT INFO
# Provides:          ap
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Init access point
# Description:       Init access point
### END INIT INFO

service hostapd start
ifconfig wlan0 up
ifconfig wlan0 192.168.103.1

Il suffit ensuite d’ajouter le script au démarrage du Pi grâce à la commande update-rc.d :

cd /etc/init.d
chmod 755 ./ap.sh
update-rc.d ap.sh defaults

Voilà ! A chaque démarrage du Pi, le point d’accès est initialisé et vous pouvez vous y connecter depuis n’importe quel périphérique WiFi 🙂

Liens utiles :

Création d’un hotspot wifi sur votre RPI

3 – Installation du système

raspbian_logo_tinyA nouveau, je choisi Raspbian pour faire tourner mon Raspberry Pi. Téléchargement de la dernière version ici Raspbian “wheezy”, puis installation de la carte SD en suivant le tuto du site elinux.org. On commence à avoir l’habitude, donc je passe rapidement sur ces étapes…

A noter qu’il existe une version dérivée de Raspbian, optimisé pour MPD, mais je préfère conserver une Raspbian standard, et faire la conf moi même.

Raspi-config

Après l’installation de la Raspbian, un passage par raspi-config est indispensable :

raspiconfig

  • Expand Filesystem : permet d’étendre la partition racine à la taille de la carte mémoire afin de pouvoir exploiter tout l’espace disponible
  • Internationalisation Options -> Change Keyboard Layout : permet de sélectionner un clavier AZERTY
  • Advanced Options -> Hostname : Ce Pi sera baptisé Carpo 🙂
  • Advanced Options -> Memory Split : permet de définir la mémoire allouée au chipset graphique (n’ayant besoin que d’une interface en ligne de commande, 16Mo suffiront)
  • Advanced Options -> SSH : On active SSH

Installation des paquets

Avant tout, et comme d’habitude, on met à jour l’ensemble des paquets existants :

apt-get update
apt-get upgrade

Une fois l’opération terminée, on installe les paquets nécessaires :

apt-get install vim mpd dnsmasq hostapd
  • vim : Editeur en ligne de commande
  • mdp : Music Player Daemon
  • dnsmasq : serveur DHCP
  • hostapd : permet de créer un point d’accès wifi

ATTENTION : Dans la grosse majorité des cas, le paquet hostapd fonctionnera bien avec votre carte Wifi. Or, mon dongle Wifi NetGear WNA1000M n’est pas supporté par le driver nl80211.

Hostapd pour chipset RTL8188

Il existe une version de hostapd qui supporte le chipsset RTL8188 de mon dongle WiFi. Vous pouvez le télécharger ici : RTL8188-hostapd-1.1.tar

Téléchargez le sur votre Pi, décompressez la tarball, compilez et installez :

tar -xzf ./RTL8188-hostapd-1.1.tar.gz
cd ./RTL8188-hostapd-1.1/hostapd
make
make install

L’installation est relativement longue, mais tout se passe sans problème.

C’est tout pour l’installation 🙂 Il nous reste un peu de configuration à faire, et le tour sera joué 🙂

2 – Le choix du matériel

Raspberry Pi modèle B

205039Plus besoin de se poser la question entre le modèle A ou le modèle B, autant prendre le modèle le plus complet et le plus récent. Le Raspberry Pi Model B rev 2 doté de 512Mo de RAM et d’un port ethernet est désormais disponible chez beaucoup de revendeurs. J’ai trouvé celui-ci chez Amazon.

Commandé sur le site Amazon pour 39 €

Boîtier Adafruit

ID859angle_LRGJe reste très attaché à l’Adafruit Pi Box ! Ce boîtier transparent, livré en « kit », met en valeur la carte et permet de nombreuses personnalisations. Il permet notamment de faire passer une nappe branchée sur le GPIO du Pi grâce à une fente. Vous pouvez également retirer certaines parois pour faciliter l’accès à certaines parties de la carte tout en protégeant l’ensemble.

Commandé sur Amazon pour 10 € (livraison gratuite)

Carte SDHC 32Go

41i-JeRaW6L._SX385_Initialement, je souhaitais prendre une carte SD de 2Go ou 4Go pour l’OS puis stocker les musiques sur un disque dur externe. L’ennui, c’est qu’un disque externe dans une boite à gants de voiture, ça prend de la place, ça chauffe, ça risque de se détériorer, et ça occupe un port USB… Et ça coûte des sous… ‘Fin bref, j’ai rapidement laissé tomber cette option et ai choisi une carte SDHC de 32Go. Vous pouvez évidemment opter pour une carte de 64Go pour un peu plus de 50€.

Commandé sur Amazon pour 17 € (livraison gratuite)

Dongle WiFi USB

144267Il convient de choisir un dongle WiFi USB qui soit compact (inutile de s’encombrer d’une antenne), et surtout, qui supporte le mode « access point » !

Le site elinux.org nous informe que le dongle NetGear WNA1000M est parfaitement supporté par le Pi sans passer par un hub USB alimenté.

Commandé sur Amazon pour 12€

Carte son USB

plantronics_gamecom_777_para_jugones_418x241Je ne m’attends pas à obtenir une qualité de son extra-ordinaire, mais la qualité de la prise jack disponible sur le Pi n’est franchement pas suffisante pour une écoute de musique dans de bonnes conditions. J’ai retrouvé dans mes tiroirs une carte son USB Plantronics qui était fournis avec un casque (le Plantronics GameCom 777). Elle est très compacte, fonctionne très bien sous Raspbian, et m’évite d’en acheter une…

Alimentation

LD0000719626Dans une voiture, les différentes sources d’alimentations (allume-cigare, alimentation de l’autoradio, etc…) fournissent en général un courant en 12V. Nous avons besoin d’un transformateur qui fournis une tension en 5V pour alimenter correctement le Pi. Après avoir cherché des circuits convertisseurs ou régulateurs de tension 12V -> 5V, je me suis réveillé un jour en me disant qu’un chargeur allume-cigare pour smartphone devrait faire l’affaire… Bingo ! Très compact et peu onéreux, on peut en trouver un peu partout…

Le plus compliqué est d’en trouver un qui puisse délivrer un courant d’au moins 1A (La plupart des chargeur allume-cigare que l’on peut trouver dans le commerce ne dépassent pas les 500mA).

J’ai trouvé mon bonheur sur Amazon pour environ 15€

Mise à jour – 30 juillet 2013 :

imageL’immense majorité des chargeurs allume-cigare que l’on trouve dans le commerce ne sont pas blindé contre les variations de tension. C’est déjà problématique pour la durée de vie des batteries de téléphones, mais pour un Pi, c’est encore pire. De plus, lorsque la voiture démarre, la séquence « contact » puis « allumage du moteur » entraine des piques et des chutes de tensions importantes. Le Pi n’étant pas du tout protégé contre ce genre de parasitage et nécessitant une alimentation correctement régulée, j’ai préféré choisir un convertisseur de tension continue stabilisé  KEMO M015N.

  • Tension d’entrée 6-28V (idéal pour les 12V fournis par le circuit électrique de la voiture)
  • Tension de sortie 3-15V (parfait pour les 5V demandé par le Pi)

Il s’agira de faire un branchement parallèle sur le faisceau de l’allume cigare. En effet, c’est un circuit spécifiquement prévu pour tirer du courant et qui est géré par le système d’économie d’énergie qui coupera automatiquement l’alimentation du circuit si il consomme trop de courant sur la batterie lorsque le moteur est éteint. Ce qui nous évitera de mauvaises surprises 😉

Acheté chez Amazon pour moins de 15€

Interface entrée auxiliaire pour mon autoradio d’origine

IMG_4758La majeure partie des autoradios d’aujourd’hui disposent d’une entré auxiliaire. Dans mon cas, ma voiture datant de 2008 et souhaitant conserver l’autoradio d’origine (le très répandu RD4), je n’ai d’autre choix que d’utiliser une interface vendue par PSA pour environ 35€… A savoir qu’il faudra également faire activer une entrée auxiliaire dans un garage afin de pouvoir l’exploiter (Je ferai un article détaillé à ce sujet dans les prochains jours).

Commander dans un garage Citroën pour 35€ sous la référence faisceau auxiliaire autoradio RD4 réf. 9706.AG.

Vous pouvez également le commander ici sur Amazon.

 Note : Il est également possible de bricoler soit même ce faisceau auxiliaire. Voici un exemple de réalisation : http://www.forum-peugeot.com/Forum/forum-peugeot/Electronique-embarquee/Seconde-monte/auxiliaire-entree-maison-sujet_32999_1.htm

8 – La connexion réseau 3G

J’ai reçu ce matin mon dongle 3G Huawei E220 🙂 Je dispose déjà d’une carte SIM Free Mobile avec le forfait à 2€. J’active simplement l’option data à 0,99 €, qui prend effet immédiatement.

Vous pouvez trouver ce dongle 3G notamment sur Amazon ici.

Dongle 3G + SIM Free

Premier test de connexion 3G

Mon Raspberry Pi n’ayant pas encore été livré, je test sur un PC standard sous Linux Mint 14.

Comme prévu, le dongle est immédiatement reconnu par le système :

root@Setebos ~ $ lsusb
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 003 Device 002: ID 24ae:2000
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E230/E270/E870 HSDPA/HSUPA Modem
Bus 001 Device 003: ID 046d:c52f Logitech, Inc. Wireless Mouse M305

Passage par le gestionnaire de connexion réseau, avec une configuration minimaliste pour le réseau de Free :

Configuration réseau Free mobile

La connexion fonctionne immédiatement, et on constate que nous sommes en itinérance sur le réseau d’Orange 🙂

Connection established

Réseau Orange

J’obtiens bien une IP, et je peux surfer 🙂 C’est trop facile !

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:10.137.177.43  P-t-P:10.64.64.64  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:130 (130.0 B)  TX bytes:223 (223.0 B)

Connexion avec le Raspberry Pi

Pi + 3G

Comme précédemment, le dongle 3G est reconnu immédiatement :

root@raspberrypi:~# lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 005: ID 12d1:1003 Huawei Technologies Co., Ltd. E220 HSDPA Modem / E230/E270/E870 HSDPA/HSUPA Modem

Sur le Pi, il faut installer wvdial heureusement disponible dans les dépots de peu 🙂
Il suffit ensuite de lancer un wvdialconfig :

root@raspberrypi:~# wvdialconf 
Editing `/etc/wvdial.conf'.

Scanning your serial ports for a modem.

ttyUSB0<*1>: ATQ0 V1 E1 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 Z -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyUSB0<*1>: Modem Identifier: ATI -- Manufacturer: huawei
ttyUSB0<*1>: Speed 9600: AT -- OK
ttyUSB0<*1>: Max speed is 9600; that should be safe.
ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyUSB1<*1>: ATQ0 V1 E1 -- OK
ttyUSB1<*1>: ATQ0 V1 E1 Z -- OK
ttyUSB1<*1>: ATQ0 V1 E1 S0=0 -- OK
ttyUSB1<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK
ttyUSB1<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK
ttyUSB1<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK
ttyUSB1<*1>: Modem Identifier: ATI -- Manufacturer: huawei
ttyUSB1<*1>: Speed 9600: AT -- OK
ttyUSB1<*1>: Max speed is 9600; that should be safe.
ttyUSB1<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK

Found a modem on /dev/ttyUSB0.
Modem configuration written to /etc/wvdial.conf.
ttyUSB0<Info>: Speed 9600; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"
ttyUSB1<Info>: Speed 9600; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0"

Encore une fois, c’est presque trop facile, tout fonctionne du premier coup 🙂 Voici le fichier de config généré. Tout semble en ordre 🙂

root@raspberrypi:~# cat /etc/wvdial.conf
[Dialer Free]
Init2 = ATZ
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2
Init4 = AT+CGDCONT=1,"IP","free"
Stupid mode = 1
Phone = *99#
New PPPD = yes
Check Def Route = 1
Username = free
Password = free

[Dialer pin]
Init1 = AT

[Dialer Defaults]
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = Analog Modem
; Phone = <Target Phone Number>
ISDN = 0
; Username = <Your Login Name>
Init1 = ATZ
; Password = <Your Password>
Modem = /dev/ttyUSB0
Baud = 9600

La connexion se fait en utilisant la commande wvdial free, ce qui fonctionne visiblement très bien 🙂

root@raspberrypi:~# wvdial free
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2
ATQ0 V1 E1 S0=0 &C1 &D2
OK
--> Sending: AT+CGDCONT=1,"IP","free"
AT+CGDCONT=1,"IP","free"
OK
--> Modem initialized.
--> Configuration does not specify a valid login name.
--> Configuration does not specify a valid password.
root@raspberrypi:~# vim /etc/wvdial.conf
root@raspberrypi:~# wvdial free
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ
ATZ
OK
--> Sending: ATZ
ATZ
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2
ATQ0 V1 E1 S0=0 &C1 &D2
OK
--> Sending: AT+CGDCONT=1,"IP","free"
AT+CGDCONT=1,"IP","free"
OK
--> Modem initialized.
--> Sending: ATDT*99#
--> Waiting for carrier.
ATDT*99#
CONNECT
--> Carrier detected.  Starting PPP immediately.
--> Starting pppd at Fri Mar 15 19:58:31 2013
--> Pid of pppd: 2323
--> Using interface ppp0
[...]
--> local  IP address 10.64.148.255
--> remote IP address 10.64.64.64
--> primary   DNS address 212.27.40.240
--> secondary DNS address 212.27.40.24

Connecter mon Raspberry Pi au réseau 3G est pour le moment l’opération la plus simple du projet 🙂

5 – Schéma global et utilisation

Le dispositif au complet se compose de trois éléments :

  • Le système de capture d’image
  • Le circuit de temporisation de l’alimentation
  • Un serveur de monitoring

schéma global Pi TimeLapse

Le système de capture d’image

Composé du Pi, d’une webcam, d’un dongle 3G et d’une batterie 5V, ce système se contente de prendre une photo à chaque démarrage, puis s’éteint immédiatement. Une fois sur trois, il envoi une requête au serveur de monitoring pour signifier que tout va bien 🙂

Le circuit de temporisation de l’alimentation

Ce circuit alimenté par une batterie 12V, pilote un relais électrique permettant de commander l’alimentation du Pi pendant 2 minutes toutes les 10 minutes, de 8h00 à 18h00, du lundi au vendredi.

Un serveur de monitoring

Un script PHP publié par un serveur web Apache permet d’enregistrer les requêtes POST envoyée par le Pi toutes les 30 minutes. Il réceptionne une miniature d’une la dernière photo prise, et enregistre l’heure exacte à laquelle il l’a reçu dans une base de données MySQL. Si tout est ok, il envoi un mail avec la date et la photo miniature, ce qui me permettra d’être continuellement averti du bon fonctionnement du système de capture d’image.

En parallèle, ce serveur web publie une page web, qui liste l’ensemble des miniatures ainsi enregistrées, ce qui permet d’avoir une vue d’ensemble du bon déroulement des choses sur une semaine.

Scénario d’utilisation

  1. Le circuit de tempo alimente le Pi qui boot immédiatement
  2. Une fois démarré, le Pi prend une phot et lance un shutdown
  3. Une fois sur trois (soit toutes les 30 minutes) le Pi envoi une requête sur un serveur de monotoring distant pour dire qu’il est toujours en vie
  4. Le circuit de tempo coupe l’alimentation du Pi après 2 minutes