User Tools

Site Tools


electronique:info_bus_tpg:accueil

Affichage des bus TPG en temps réel

**__En cours de réalisation __** TODO FIXME

Introduction

Je prends le bus journalièrement pour aller à l'université. Le truc c'est que je suis pas entièrement dans la ville, donc les bus n'ont pas une fréquence cadencée chaque 5 minutes, mais plutot aux 20 minutes (et, le dimanche, à l'heure). C'est donc assez embêtant de louper son bus… Les TPGs ont une interface web par laquelle on peut regarder en temps réel les prochains bus à l'arrêt. C'est cool, mais ca nécessite d'avoir un ordi allumé/smartphone, etc… Le truc, c'est donc de pouvoir utiliser un petit afficheur 7 segments pour afficher le temps du prochain bus.

Réalisation

Cette réalisation va se scinder en deux parties. La première sera la partie “afficheur” qui va simplement s'occuper d'afficher le temps (MSP430 + 74LS138 + 7 segments). La deuxième va s'occuper d'aller chercher les horaires en temps réel sur le site internet pour les parser puis les balancer ensuite à l'MSP430 via un port série (WRT54GL).

Affichage du temps - MSP430

Pour cela, nous allons utiliser le MSP430, facile à prototyper. Celui-ci s'occupe d'écouter via la liaison série UART. Le “procotole” est le suivant:

sXf

Donc ouais, c'est très très simple. 0 ⇐ X ⇐ 99
Petite vidéo de test http://www.youtube.com/watch?v=kVVR3LA49Jw

Script de test

Un script vraiment très con pour tester l'afficheur
Ainsi que sa vidéo associée: http://www.youtube.com/watch?v=kVVR3LA49Jw

TTY=/dev/ttyUSB0
while true
do
	for i in `seq 0 99`;
	do
		echo -n s > $TTY
		sleep 0.01
		echo "i: $i"
		if [ $i -gt 9 ]
		then
			a=`echo "$i%10" | bc`
			b=`echo "($i/10)%10" | bc`
			echo -n $b > $TTY
			sleep 0.01
			echo -n $a > $TTY
			sleep 0.01
		else
			echo -n $i > $TTY
			sleep 0.01
		fi
		echo -n f > $TTY
		sleep 0.5
	done;
done;

La récupération du temps

Premièrement, un script PHP sur mon serveur va récupérer le temps sur le site des TPG:

<?php
$url = "http://www.tpg.ch/TempsReel-portlet/TRService?method=GetProchainsDepartsTriLigneSens&codeArret=CYNT&lignes=F&destinations=GARE%20CORNAVIN&nocache=0.25541495694672667"; //CORNAVIN
 
$json = file_get_contents($url);
 
$jsonDecode = json_decode($json, true);
 
if(isset($jsonDecode['prochainsDeparts']['prochainDepart'][0]['attenteMilli'])) //last bus
 $attente = $jsonDecode['prochainsDeparts']['prochainDepart'][0]['attenteMilli'];
else
 $attente = $jsonDecode['prochainsDeparts']['prochainDepart']['attenteMilli'];
 
$attente /= 60000; //convert to min
if($attente > 99) //more thant 99min ? -> 99 min
 $attente = 99; 
 
$attente = (int)$attente; //round off
 
if(isset($_GET['short']))
 echo $attente;
else
 echo "Prochain bus dans $attente minutes";
?>

Truc tout con, quoi

Puis le deuxième script (qui sera lancé sur un bête WRT54GL, va récupérer ce temps, pour le balancer sur le MSP430:

#/bin/bash
 
attente=`wget URL?short -q -O -`
TTY=/dev/ttyUSB0
 
echo -n s > $TTY #start
sleep 0.01
 
echo "attente: $attente"
if [ $attente -gt 9 ] 
then
 a=`echo "$attente%10" | bc`
 b=`echo "($attente/10)%10" | bc`
 
 echo -n $b > $TTY
 sleep 0.01
 echo -n $a > $TTY
 sleep 0.01
else
 echo -n $attente > $TTY
 sleep 0.01
fi
echo -n f > $TTY #final
sleep 0.5 

Discussion

Enter your comment. Wiki syntax is allowed:
AZIBR
 
electronique/info_bus_tpg/accueil.txt · Last modified: 2013/01/08 23:48 by frank