Je me suis lancé sur une configuration Raspberry + DVAP en y ajoutant un afficheur et des boutons poussoirs que j’ai trouvé chez Go Tronic
Le Raspberry utilise une clef wifi pour l’accès à un réseau dont voici pour l’installation:
sudo nano /etc/network/interfaces
1er Cas: si vous avez qu’1 seul réseau Wifi
remplacer:
allow-hotplug wlan0 iface wlan0 inet manual wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
par:
auto wlan0 allow-hotplug wlan0 iface wlan0 inet dhcp wpa-scan-ssid 1 wpa-ap-scan 1 wpa-key-mgmt WPA-PSK wpa-proto RSN WPA wpa-pairwise CCMP TKIP wpa-group CCMP TKIP wpa-ssid "My Secret SSID" wpa-psk "My SSID PSK"
puis pour vérifier la connexion faire:
sudo ifdown wlan0 sudo ifup wlan0
2eme cas: Si vous souhaitez enregistrer plusieurs réseaux Wifi, dans ce cas, voici la procédure:
sudo nano /etc/network/interfaces
remplacer:
allow-hotplug wlan0 iface wlan0 inet manual wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
par:
allow-hotplug wlan0 auto wlan0 iface wlan0 inet dhcp pre-up wpa_supplicant -Dwext -i wlan0 -c /etc/wpa_supplicant.conf -B
puis il faut créer le fichier de configuration
sudo nano /etc/wpa_supplicant.conf
Y ajouter les lignes suivantes:
ctrl_interface=/var/run/wpa_supplicant #ap_scan=2 network={ ssid="Nom du 1er reseau" scan_ssid=1 proto=WPA RSN key_mgmt=WPA-PSK pairwise=CCMP TKIP group=CCMP TKIP psk="Mot de Passe du 1er reseau" } network={ ssid="Nom du 2eme Reseau" scan_ssid=1 proto=WPA RSN key_mgmt=WPA-PSK pairwise=CCMP TKIP group=CCMP TKIP psk="Mot de Passe du 2eme Reseau" }
Pour l’installation des logiciels pour la gestion de l’afficheur:
Attention avec les derniers firmwares, vous devez activer l’I2C avec raspi-config
Menu Avanced Options Menu I2C Would you like the ARM I2C interface to be enabled? => Oui Would you like the I2C kernel module to be loaded by default? => Oui
sudo nano /etc/modules
Ajouter si ce n’est pas présent:
i2c-bcm2708 i2c-dev
puis faire:
sudo apt-get install python-smbus sudo apt-get install i2c-tools sudo apt-get install git git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
Ces 2 dernières lignes sont peut être nécessaires pour le bon fonctionnement:
sudo apt-get install python-dev sudo apt-get install python-rpi.gpio
Utilisant le logiciel G4KLX pour le HotSpot, j’ai développé un petit programme en Python pour la gestion de l’afficheur.
Celui ci affiche l’état de la connexion du HotSpot et le dernier indicatif qui a appelé.
Un appui simultané sur les Boutons Poussoirs « Select » et « Right » permet de faire un halt
Un appui simultané sur les Boutons Poussoirs « Select » et « Left » permet de faire un reboot
Un appui sur le Bouton Poussoir « Up » affiche l’adresse ou les adresses IP du Raspberry
Un appui sur le Bouton Poussoir « Down » redémarre IrcddbGateway
Pour l’installation du programme:
mkdir /home/pi/votreindicatif cd Adafruit-Raspberry-Pi-Python-Code cd Adafruit_CharLCDPlate cp *.* /home/pi/votreindicatif/
ensuite vous devez installer le programme HotSpot.py dans le répertoire /home/pi/votreindicatif/:
cd /home/pi/votreindicatif/ wget http://www.f4gen.fr/G4KLX/HotSpot.py
puis, il faut le rendre exécutable avec la commande:
chmod +x HotSpot.py
si vous souhaitez qu’il se lance au démarrage du Raspberry:
Editer le fichier rc.local:
sudo nano /etc/rc.local
Ajouter avant la commande Exit 0:
/home/pi/votreindicatif/HotSpot.py &
Vous pouvez bien-sur adapter le programme en fonction de votre configuration, DVAP, Modem GMSK etc…
Voici le Programme HotSpot.py:
#!/usr/bin/python from time import sleep from Adafruit_CharLCDPlate import Adafruit_CharLCDPlate import os import re import commands # Fonction permettant le centrage du texte sur l'afficheur def centertxt(x): nb = 16-len(x) nb2=int(nb/2) nb1=nb2+(nb%2) espace=" " x=espace*nb1 + x + espace*nb2 return x # Initialize the LCD plate. Should auto-detect correct I2C bus. If not, # pass '0' for early 256 MB Model B boards or '1' for all later versions lcd = Adafruit_CharLCDPlate() # Fichiers de Config dvapnode="/home/opendv/dstarrepeater/dstarrepeater_1" links="/var/log/opendv/Links.log" headers="/var/log/opendv/Headers.log" #Effacement du contenu de Headers.log fichier = open(headers,"w") fichier.close() # Recherche de l'Indicatif HotSpot chaine = "callsign=" fichier = open(dvapnode,"r") for ligne in fichier: if chaine in ligne: index = ligne.find(chaine)+9 indicatif=ligne[index:index+8] fichier.close() # Clear display and show greeting, pause 1 sec lcd.clear() lcd.message(" HotSpot D-Star\n " + indicatif) sleep(10) # Poll buttons, display message & set backlight accordingly #btn = ((lcd.LEFT , 'Red Red Wine' , lcd.RED), # (lcd.UP , 'Sita sings\nthe blues' , lcd.BLUE), # (lcd.DOWN , 'I see fields\nof green' , lcd.GREEN), # (lcd.RIGHT , 'Purple mountain\nmajesties', lcd.VIOLET), # (lcd.SELECT, '' , lcd.ON)) while True: #sudo halt avec les boutons SELECT et RIGHT if lcd.buttonPressed(lcd.SELECT) and lcd.buttonPressed(lcd.RIGHT): lcd.clear() lcd.message("Shutdown") sleep(.2) lcd.message(".") sleep(.2) lcd.message(".") sleep(.2) lcd.message(".") sleep(.2) lcd.message("\n Bye") sleep(.2) lcd.message(" Bye") sleep(.2) os.system("sudo halt") break #sudo reboot avec les boutons SELECT et LEFT if lcd.buttonPressed(lcd.SELECT) and lcd.buttonPressed(lcd.LEFT): lcd.clear() lcd.message("Reboot") sleep(.2) lcd.message(".") sleep(.2) lcd.message(".") sleep(.2) lcd.message(".") os.system("sudo reboot") break #sudo restart ircddbgateway avec le bouton DOWN if lcd.buttonPressed(lcd.DOWN): lcd.clear() lcd.message("Restarting\nIrcddbgateway") sleep(.2) lcd.message(".") sleep(.2) lcd.message(".") sleep(.2) lcd.message(".") os.system("sudo /etc/init.d/ircddbgateway restart") #recherche connexion reflecteur chaine1 = "Refl: " chaine2 = "Remote: " reflecteur="" fichier = open(links,"r") for ligne in fichier: if chaine1 in ligne: index = ligne.find(chaine1)+6 reflecteur=ligne[index:index+8] if chaine2 in ligne: index = ligne.find(chaine2)+8 reflecteur=ligne[index:index+8] fichier.close() LCDligne1=centertxt("Unlinked") if reflecteur: protocol=ligne[21:24] if protocol=="DEx": LCDligne1="DExtra: " elif protocol=="DCS": LCDligne1="DCS: " elif protocol=="DPl": LCDligne1="DPlus: " elif protocol=="CCS": LCDligne1="CCS: " LCDligne1 += reflecteur.strip() LCDligne1 = centertxt(LCDligne1) #recherche indicatif du dernier appelant indicatif="" if os.path.getsize(headers): fichier = open(headers,"r") lignes = fichier.readlines() fichier.close() last_ligne = lignes[-1].rstrip("\n\r") index = last_ligne.find("My: ")+4 indicatif=last_ligne[index:index+13] LCDligne2=" " if indicatif: LCDligne2=centertxt(indicatif) # Affichage des adresses IP if lcd.buttonPressed(lcd.UP): adresseip1="no network" adresseip2="" found_ips = [] ips = re.findall( r'r:[0-9]+(?:\.[0-9]+){3}', commands.getoutput("/sbin/ifconfig")) for ip in ips: if ip.startswith("r:255") or ip.startswith("r:127") or ip.endswith("255"): continue found_ips.append(ip) if len(found_ips)>0: adresseip1=found_ips[0][2:] if len(found_ips)>1: adresseip2=found_ips[1][2:] LCDligne1=centertxt(adresseip1) LCDligne2=centertxt(adresseip2) # Affichage lcd.home() lcd.message(LCDligne1 + "\n" + LCDligne2) #Pause sleep(.5)