Yop

Aller au contenu | Aller au menu | Aller à la recherche

RaspberryPi/Arduino

Fil des billets - Fil des commentaires

dimanche, 8 novembre 2015

Rooter/jailbreaker le Kindle PW2 par le port série

Introduction

Il n'y a même pas la possibilité par défaut sur un Kindle de changer les images de veille. Rien que pour cette raison, on est tenté de rooter/jailbreaker son Kindle afin d'en reprendre un peu le controle. (My device, my rules).

Quand je me le suis procuré il y a quelques mois, il est arrivé en version 5.6 quelquechose et il n'est pas possible à l'heure où sont écrites ces lignes, de le rooter/jailbreaker de manière uniquement logicielle.

Dans des versions précédentes, il était possible de faire passer le JailBreak pour une mise à jour, mais ceci a été "corrigé" par Amazon.

La seule solution est pour l'instant d'ouvrir le Kindle, et d'accèder au port série. (Au moins il y en a un, c'est déjà çà).

IMG_20151107_220727.jpg-s.jpg


La technique dans les grandes lignes:

- Ouvrir le Kindle et se connecter sur le port série
- Booter sur la 2ème partition de debug/diag
- Trouver le mot de passe de cette partition de debug/diag et se connecter en root dessus
- Une fois root sur la partion de debug/diag, monter la partition "principale" pour éditer le fichier /etc/passwd pour en débloquer l'accès root.
- Rebooter sur la 1ère partition et s'y connecter en root.
- Lancer le script de JailBreak

Si j'ai bien compris, Amazon n'autorise que les applications qu'ils ont signés eux (avec leur clé privée) à s'installer. Le JailBreak consiste à ajouter une autre clé publique (dont la communauté connait la clé privée) rendant donc possible l'installation d'applications non authorisée par Amazon.

uggy-kindle-pubKey.png-s.jpg


Connaitre sa version de firmare

Menu/Paramètres/Menu/Infos sur l'appareil/Version du micrologiciel


Trouver son numéro de série/modèle

http://wiki.mobileread.com/wiki/Kindle_Serial_Numbers


Avoir un accès console avec niveaux logiques 1.8V

Le port série des Kindles (au moins mon PW2) communique avec des niveaux logiques 1.8V.

Il faut donc utiliser un port série qui utilise ces niveaux logiques et non les classiques 3.3V et 5V

J'ai utilisé un PL2303HXrevD (dans les 4€ sur Ebay)

PIN4 The power pin for the serial port signals.
The range can be from 1.8V~3.3V

(Attention, le PL2303HX (pas révision D) ne supporte pas le 1.8V d'après la datasheet)

Il suffit de décoller doucement la PIN4 du chip (par exemple avec une petit aiguille) afin de pouvoir la connecter ensuite à du 1.8V (ou 3V3 ou 5V pour d'autres usages)

IMG_20151108_190546.jpg-s.jpg


Trouver le mot de passe de la partition diag (2ème partition)

J'avais initialement utilisé le code suivant trouvé sur le forum http://www.mobileread.com/forums/

#!/usr/bin/env python
import hashlib
print("fiona%s"%hashlib.md5("XXXYOURSERIALXXX\n".encode('utf-8')).hexdigest()[7:11])

Mais dans mon cas, le mot de passe ainsi trouvé n'a ensuite PAS fonctionné.
Même problème avec le site https://www.sven.de/kindle/ qui utilise le même "algo".

J'ai donc utilisé kindletool qui lui m'a donné un mot de passe différent qui a fonctionné sur mon Kindle.

$ ./kindletool info XXXYOURSERIALXXX
Platform is Wario or newer
Root PW fionaXXX
Recovery PW fionaXXXX
$


Démonter le Kindke pour accéder au port console

Je me suis basé sur cette vidéo

Si vous acheter le PL2303HXrevD à HongKong sur un site d'enchère (environ 4€), cà vaut peut être le coup d'acheter en même temps les "Metal spudger" (2€ les 2) mais sinon un couteau avec une lame fine peut faire l'affaire.

Le plus difficile est de ne pas laisser de trace pour passer le spudger sous la coque au tout début.
La suite du démontage est triviale.
Faire cependant attention à la bande de plastique blanche au niveau des LEDs car elle joue sur la répartition de la lumière sur la dalle.


Connecter le port série

uggy-serial-kindle.png-s.jpg

Les pins sont toutes petites, donc à souder avec précaution

IMG_20151107_220202.jpg-s.jpg

Pour les branchements, TX sur RX, RX sur TX, Gnd sur Gnd, le fil vert sur le bouton vert etc..

Les paramètres sont: 8N1 115200

J'ai utilisé "screen"

$ screen /dev/ttyUSB0 115200


Sortir de "veille" le kindle

Si tout se passe bien le port série devrait s'afficher comme ceci

uggy-kindle-Serial.png-s.jpg

Il dit "Welcome", c'est qu'on a le droit de se connecter :)


Boot de la partition diag

Rebooter le Kindle, tapez sur n'importe quelle touche au début du boot pour arreter la séquence (il y a un créneau que de quelques secondes), allez en mode diag en tapant bootm 0xE41000

uggy-kindle-bootm.png-s.jpg


Choisir "Exit, Reboot or Disable Diags" puis "Exit to login prompt" etc...

uggy-kindle-menu1.png-s.jpg

uggy-kindle-menu2.png-s.jpg

uggy-kindle-menu3.png-s.jpg

uggy-kindle-menu4.png-s.jpg


Se logguer

Utiliser le compte de la partition diag trouvé à l'une des étapes précédentes: root/fionaXXX

uggy-kindle-root-diag.png-s.jpg


Monter la partition principale (la 1ère partition) et éditer le fichier etc/passwd

uggy-kindle-passwd1.png-s.jpg


Modifier la ligne pour root.

root:*: -> Indique un mot de passe chiffré dans /etc/shadow
root:: -> Indique qu'il n'y a pas de mot de passe

uggy-kindle-passwd2.png-s.jpg

uggy-kindle-passwd3.png-s.jpg

Pour l'instant on choisi d'enlever le mot de passe


Rebooter, tester l'accès root à la partition principale

uggy-kindle-root-main.png-s.jpg


Télécharger les fichiers de jailBreak

http://www.mobileread.com/forums/showthread.php?t=186645


Connecter l'USB, copier les fichiers à la racine sur le Kindle (USB classique) puis déconnecter l'USB


Executer le scipt de jaibreak avec l'acces root (partition principale, pas diag)

uggy-kindle-jb.png-s.jpg


Conclusion

Ce billet de couvre pas l'installation des outils que l'on peut alors utiliser.

Mais j'ai commencé par personnaliser l'écran de "veille"...

IMG_20151108_191509.jpg-s.jpg

Crédit: De nombreux posts et personnes de http://www.mobileread.com/forums/

vendredi, 3 juillet 2015

ESP8266 - Projet d'indicateur de réveil pour enfant

L'idée est de pouvoir indiquer avec un ESP8266 à mes jeunes enfants qu'il a beau faire jour dehors en ce mois de Juin, ce n'est pas l'heure de venir réveiller leurs pauvres parents en manque de sommeil.

Je ne suis pas le premier à avoir eu la même idée de père fatigué, puisqu'en cherchant un peu je suis tombé sur l'excellent blog de Dani Eichhorn.

Son billet explique qu'il fait une connection HTTP à intervalle régulier, afin de récupérer l'heure sur Internet, puis allume une LED ou une autre suivant qu'il est l'heure de se lever ou non.

Cependant, j'avais imaginé une autre façon de procéder, donc je suis resté sur ma première idée qui a "l'inconvénient" d'utiliser mon Rasp à tout faire sur le réseau local, mais l'avantage de pouvoir changer l'heure de "réveil" sans avoir à modifier le script sur l'ESP8266. Et puis c'est plus sympa d'essayer de faire à sa sauce.

L'idée est la suivante:
- L'ESP8266 faire tourner les serviettes un petit serveur HTTP.
- S'il recoit une requête "jour", il allume la LED verte
- S'il recoit une requête "nuit", il allume la LED rouge "laisse tes parents dormir, ils ne se couchent pas à 20h30 eux ! ".
- Le Rasp sur le réseau local exécute le script toutes les minutes, regarde l'heure, et en fonction, envoi la requête HTTP "jour" ou "nuit" à l'ESP 8266.
- Il y a en réalité 2 scripts dans la cron du Rasp, un qui s'exécute les jours de la semaine, et un autre le WE. L'heure de l'allumage "jour" est donc reglé plus tardivement le WE.
- Une page web pourrait éventuellement être créée à l'avenir sur le Rasp pour que Madame Yop puisse elle même changer l'heure avec un navigateur... sans aller modifier le Rasp en SSH... (WAF) Mais avant cela, faudrait d'abord voir si les 2 loustics vont bien vouloir suivre les indications des LEDs...

Tests sur Breadboard:

esp-led-verte.jpg

esp-led-rouge.jpg

On soude un peu et on range tout çà:

esp-led-boitier1.jpg

esp-led-boitier2.jpg

Schéma

esp-led-schema.png

Scripts

init.lua
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","Password")
wifi.sta.connect()
wifi.sta.setip({ip="192.168.1.247",netmask="255.255.255.0",gateway="192.168.1.1"})
print("ESP8266 mode is: " .. wifi.getmode())
print("The module MAC address is: " .. wifi.ap.getmac())
print("Config done, IP is "..wifi.sta.getip())
dofile("jour-nuit.lua")@@

J'ai récupéré le code suivant sur un github, mais je ne retouve pas lequel...

jour-nuit.lua
-- Relay pin as output
gpio.mode(5, gpio.OUTPUT)
gpio.mode(6, gpio.OUTPUT)

-- Include url_parser module
local parser = require "url_parser"

-- Create server
srv=net.createServer(net.TCP) 

srv:listen(80,function(conn) 
  conn:on("receive",function(conn,payload) 
    
    -- Parse request
    parsed_request = parser.parse(payload)

    if parsed_request == 'jour' then gpio.write(6, gpio.LOW) gpio.write(5, gpio.HIGH) end
    if parsed_request == 'nuit' then gpio.write(5, gpio.LOW) gpio.write(6, gpio.HIGH) end

    -- Display main page
    conn:send("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n")
    conn:send('<head>')
    conn:send('<meta name="viewport" content="width=device-width, initial-scale=1">')
    conn:send('<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>')
    conn:send('<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">')
    conn:send('</head>')
    
    conn:send('<div class="container">')
    conn:send("<h1>Control Sommeil</h1>")
    conn:send('<div class="row">')
    
    conn:send('<div class="col-md-2"><input class="btn btn-block btn-lg btn-primary" type="button" value="Jour" onclick="jour()"></div>')
    conn:send('<div class="col-md-2"><input class="btn btn-block btn-lg btn-danger" type="button" value="Nuit" onclick="nuit()"></div>')

    conn:send('</div></div>')
    
    conn:send('<script>function jour() {$.get("/jour");}</script>')
    conn:send('<script>function nuit() {$.get("/nuit");}</script>')
  end) 
  conn:on("sent",function(conn) conn:close() end)
end)@@
url_parser.lua
-- Module declaration
local parser = {}

function parser.parse(request)

     -- Find start
     local e = string.find(request, "/")
     local request_handle = string.sub(request, e + 1)
     
     -- Cut end
     e = string.find(request_handle, "HTTP")
     request_handle = string.sub(request_handle, 0, (e-2))

     return request_handle

end

return parser
jour-nuit.sh sur le Rasp
 
#!/bin/bash
# Control de la LED pour jour/nuit enfants

LEVER="0720"
COUCHER="2030"

IP="192.168.1.247"
CUR_TIME=`date +%H%M`

if [ $CUR_TIME -ge $LEVER -a $CUR_TIME -le $COUCHER ]
    then 
        echo "Jour"
	curl http://$IP/jour > /dev/null 2>&1
    else
        echo "Nuit"
	curl http://$IP/nuit > /dev/null 2>&1
fi

Le résultat final

ou presque (manque les autocollants de Spiderman et de la Reine de Neige)

esp-led-end.jpg

Evolutions possibles futures

(ou pas) dépendra surtout si les bambins suivent les indications des LEDs:

- Serveur web de configuration de l'heure
- Ajout d'une sonde de température ds18b20
- Utilisation du mode "veille" / utilisation sur batterie

jeudi, 4 juin 2015

ESP8266 - Firmware et outils

Comme nous l'avons vu dans un le précédent billet, l'ESP8266 peut être flashé avec des firmwares alternatifs.


Modification des branchements

Pour je pense toutes les versions, il est nécessaire de mettre la GPIO0 à la masse au démarrage du module pour qu'il puisse rentre en mode "ready pour être flashé".
(Penser à l'enlever après ! )


Logiciel pour flasher

Sous GnuLinux, j'ai utilisé esptool.

$ sudo apt-get install python-serial
$ git clone https://github.com/themadinventor/esptool.git
$ ./esptool/esptool.py --help
usage: esptool [-h] [--port PORT] [--baud BAUD]

Exemple avec NodeMCU si votre port série est /dev/ttyUSB0

$ wget https://github.com/nodemcu/nodemcu-firmware/raw/master/pre_build/latest/nodemcu_latest.bin
$ python esptool.py --port /dev/ttyUSB0 write_flash 0x000000 nodemcu_latest.bin
Connecting...
Erasing flash...
Writing at 0x00062000... (100 %)

Leaving...


Firmwares

Frankenstein

Frankenstein est un firmware qui permet de se passer des commandes AT pas très intuitives, et d'utiliser à la place des commande beaucoup plus simples.

Exemples de commandes qui elles se passent d'explication:

iwscan
iwconnect ApName password
ifconfig
listen 8080
send 192.168.0.101 8080 hello
deepsleep 10000
gpio out 0 1

etc..

simple...


NodeMcu

NodeMcu ici ou ici est je pense, à la date de rédaction de ce billet, le firmware le plus utilisé.

Il utilise des scripts en Lua.

NodeMCU 0.9.5 build 20150214 powered by Lua 5.1.4
lua: cannot open init.lua
> print("hello")
hello
>

Exemple de code pour faire tourner un serveur HTTP:

-- a simple http server
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive",function(conn,payload)
print(payload)
conn:send("<h1> Hello, NodeMCU.</h1>")
end)
end)

Le mieux est d'aller voir les autres exemples sur le site web ou sur GitHub pour se rendre compte.

Au démarrage, le fichier init.lua sera exécuté, s'il existe.
Il est donc possible par exemple de faire tourner un serveur HTTP connecté en Wifi qui permet de basculer les GPIOs.
Oui, oui, tout ceci pour 2€50 ! Sans avoir besoin d'un Arduino etc.. L'Internet des objets est là.


esp8266-cli

esp8266-cli permet de réaliser simplement des opérations sur le système de fichier accessible sous le firmware NodeMcu.

Il permet donc de copier facilement ses scripts, les supprimer etc.. en ligne de commande.

$ sudo npm install -g esp8266

J'ai eu l'erreur "/usr/bin/env: node: No such file or directory" qui a été corrigé par

$ ll /usr/bin/nodejs
-rwxr-xr-x 1 root root 1.4M Oct 19 2013 /usr/bin/nodejs
$ sudo ln -s /usr/bin/nodejs /usr/bin/node

Exemples de copie de fichier vers l'ESP8266:

$ echo pouet > toto
$ sudo esp port set /dev/ttyUSB0
$ sudo esp file list
$ sudo esp file write toto
$ sudo esp file list
6 bytes toto
$ sudo esp file read toto
pouet

$ sudo esp file remove toto
$ sudo esp file list


ESPlorer

Dispo ici, écrit en Java, il est multi-plateformes

$ java -jar ESPlorer.jar

esp8266-esplorer.png

dimanche, 31 mai 2015

Découverte de l'ESP8266

esp8266-coin.png

Présentation

L'ESP8266 est un petit module Wifi très bon marché (de l'ordre de 2,80€ port compris au jour de l'écriture de ce billet).
Il permet à l'origine de s'interfacer en serial avec d'autres périphériques et donc de faire de l'UART vers Wifi. Par exemple pour qu'un Arduino puisse se connecter à Internet pour récupérer la météo, ou envoyer la température d'un radiateur.
Son faible coût et ses capacités croissantes (firmwares alternatifs, nouvelles versions hardware) ont font un candidat sérieux pour tous les "objets connectés".

Par rapport à un module 433MHz du même ordre de prix, les avantages principaux sont:
- Possibilité de se passer d'Arduino etc.. Le module peut etre flashé pour mettre son propre firmware et donc faire un peu ce qu'on veux (dans la limite de ce qu'autorise 80Mhz).
- On ne se soucie plus d'implémenter un protocole, de mettre du "manchester" etc... On est direct en TCP/IP classique pour nos applications.
- On bénéficie du chiffrement Wifi. (WPA/WPA2)
- Il y a des GPIOs (le nombre dépend des modèles)
- La portée semble tout a fait correcte et on pourra donc installer un module partout ou le signal Wifi peut être capté... Et donc généralement n'importe ou dans la maison.

Le seul bémol, c'est que le Wifi est assez consommateur de courant. Même si le but n'est par exemple de l'allumer que quelques secondes par heure pour envoyer la température etc... Donc a étudier ce que cela donne sur batterie et quels sont les moyens possibles d'optimisation. (Deep Sleep 10µA ?)

Hardware

Il existe à ce jour 12 versions de ce module. Voir ici
Je ne détaillerais donc pas les branchements dans le détail mais en gros, un Vcc, une masse, un TX, un RX et d'autres trucs (GPIOs).

/!\ Ce module est en 3.3V !
Ne PAS y mettre 5V ...j'ai testé par erreur...je confirme... Il n'aime pas ;)

C'est valable pour l'alim et pour les niveaux TX/RX.
L'alimentation doit semble t-il pouvoir founir jusqu'à 215 mA suivant les paramètres et phases Wifi.

La plupart des versions n'ont pas le classique pas de 2.54 pour les connecteurs.. il faut donc bidouiller un peu pour les mettre sur nos breadboards ou se procurer une carte adaptateur.

adapteurDIYESP8266.jpg

adapterESP8266.png

Software

Il faut donc s'interfacer avec le module en sérial.

Tous les modules ne sont pas fournis avec la même version de firmware, et d'ailleurs on peut modifier le firmware.

Mon 1er module est arrivé en 9600 bauds. D'autres semblent etre en 57600 ou 115200.
Toutes les versions n'ont pas non plus les même CR/LF.

J'ai testé d'abord avec GNU Screen

esp8266GnuScreen.png

Avec la version par défaut de mon 1er module, avec screen, il faut alors utiliser Crtl + m puis Ctrl + j pour indiquer les fin de lignes, et valider les commandes.

Sinon on peut utiliser un peu n'importe quel logiciel (minicom, picocom etc..)
En graphique, il y a aussi cutecom moins connu:

esp8266CuteCom.png



Commandes AT principales avec le firmware de base

- Test

AT
doit renvoyer
-> OK

Sinon vérifier le cablage, le baudrate, les fins de ligne etc...

- ReStarT du module

Permet également de voir version de firmware.

AT+RST

\0x04Z\0xcb
@\0xfd\0x13:6\0xa0;\0xd8@\0xae\0xea\0xfa\0x11\0xc8V\0x0c.\0xea\0xaa\0xfe
Vendor:www.ai-thinker.com Version:0.9.2.4

- Version du firmware

Get firMwaRe ?

AT+GMR

0018000902-AI03

- Mode de fonctionnement du Wifi

Wifi MODE

Il y a 3 modes: Station pour se connecter à un AP (1) / AP pour que des machines se connectent au module (2) / Combinaison des 2 ? (3)

AT+CWMODE=1

- Voir le mode de fontionnement

AT+CWMODE?
+CWMODE:1

- Lister les SSID

Wifi ListAP

AT+CWLAP

+CWLAP:(0,"SFR WiFi Mobile",-69,"xx:xx:xx:xx:xx:xx",1)
+CWLAP:(2,"NEUF_1234",-69,"xx:xx:xx:xx:xx:xx",1)
+CWLAP:(0,"SFR WiFi FON",-69,"xx:xx:xx:xx:xx:xx",1)
+CWLAP:(2,"DartyBox_1234",-80,"xx:xx:xx:xx:xx:xx",6)
+CWLAP:(4,"Livebox-1234",-76,"xx:xx:xx:xx:xx:xx",6)
+CWLAP:(0,"orange",-77,"xx:xx:xx:xx:xx:xx",6)
+CWLAP:(0,"FreeWifi",-46,"xx:xx:xx:xx:xx:xx",11)
+CWLAP:(0,"FreeWifi_secure",-47,"xx:xx:xx:xx:xx:xx",11)

Le 1er chiffre indique:

0: OPEN
1: WPA_PSK
2: WPA2_PSK
4: WPA_WPA2_PSK

- Se connecter à un SSID

Wifi Join AP

AT+CWJAP="NomSSID","motDePasse"

- Voir sur quel SSID on est connecté

AT+CWJAP?
+CWJAP:"NomSSID"

- Voir son adresse IP

AT+CIFSR
192.168.1.218

- Mode Client TCP:

Ce mode permet au module d'aller se connecter vers un serveur.
Par exemple d'aller demander le contenu d'une page sur Internet.

- Activation des connexions multiples

0: Une seule connexion
1: Connexions multiples

Connection IP MUltiple ConneXions

AT+CIPMUX=1

- Ouvrir une connection vers un serveur

Connection IP START

AT+CIPSTART=4,"TCP","google.com",80

4 est le numéro de canal Le reste parle de lui même.

- Indiquer les données qui vont être envoyées:

Connection IP SEND

AT+CIPSEND=4,18
>

4 pour le numéro de canal
18 est le nombre d'octets qui vont être envoyés (GET / HTTP/1.0\r\n\r\n )
Un > indique que les données vont ensuite pouvoir être envoyées.

- Envoi des données vers le serveur

> GET / HTTP/1.1

SEND OK

-Réception des données depuis le serveur:

+IPD,4,524:HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Location: http://www.google.fr/?gfe_rd=cr&ei=1jrdVILoHonu8wfClICYBw
Content-Length: 258
Date: Thu, 12 Feb 2015 23:44:22 GMT
Server: GFE/2.0
Alternate-Protocol: 80:quic,p=0.08

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.fr/?gfe_rd=cr&amp;ei=1jrdVILoHonu8wfClICYBw">here</A>.
</BODY></HTML>

+IPD,4,524 signifie:
IPD: IP Data
4: Numéro de canal
524: Nombre d'octets de la réponse

- Mode Serveur TCP:

- Activation des connexions multiples

0: Une seule connexion
1: Connections multiples

AT+CIPMUX=1

- Mise en écoute du module sur le port TCP 80

Le 1er paramètre est 1 pour ouvrir le port, 0 pour le fermer.

Connexion IP SERVER

AT+CIPSERVER=1,80

- Test de connexion depuis une autre machine du LAN

$ telnet 192.168.1.218 80
Trying 192.168.1.218...
Connected to 192.168.1.218.
Escape character is '^]'.
AbcdEFGhi

Le module recoit bien les données:

Link
+IPD,0,11:AbcdEFGhi
OK

0 étant le numéro de canal
11 étant le nombre d'octets (avec \r\n\r\n )

- Répondre à la requète du client

Il y a a priori environ 1 minute de timeout pour répondre lors de mes tests (Message Unlink)

On indique le canal de réponse, le nombre d'octets, puis les données à transmettre:

AT+CIPSEND=0,9
> POUET

Coté client, on recoit bien la réponse:

$ telnet 192.168.1.218 80
Trying 192.168.1.218...
Connected to 192.168.1.218.
Escape character is '^]'.
AbcdEFGhi
POUET

- Fermeture de la connexion

On indique le numéro de canal 0

AT+CIPCLOSE=0

$ telnet 192.168.1.218 80
Trying 192.168.1.218...
Connected to 192.168.1.218.
Escape character is '^]'.
aaabbcc
hello worConnection closed by foreign host.
$

Conclusion

Ceci n'est qu'une présentation générale de l'ESP8266, et de son firmware par défaut.
Cela montre quand même qu'avec 2,80€, on peut se connecter "facilement" en Wifi.

Mais grâce au SDK, il est possible d'utiliser d'autres firmwares facilitant l'utilisation, et plusieurs projets sont en cours avec probablement le plus utilisé NodeMCU qui pourra être le sujet d'un autre billet.

dimanche, 22 février 2015

Minitel et Raspberry

Voici comment j'ai branché un minitel avec un Raspberry.
Ou autrement dit, branché un minitel sur Internet :)

minitelRasp.jpg

J'ai trouvé plusieurs liens qui expliquent différentes manières de procéder, mais toutes imposent de créer un petit circuit électronique... et aucune ne propose d'utiliser le PL2303... Comme cette méthode me semble plus simple, j'écris ce billet.

Il vous faudra principalement:
- Un minitel avec prise DIN et touche Fonction (Recup ou ~ 5€)
- Un adaptateur USB/Serial PL2303 avec niveaux 5V (~ 1€)
- Une prise DIN (~ 1€)

Tous les minitels n'ont pas de port DIN. Il faut donc bien choisir.
Le minitel doit avoit cette prise au dos.. ainsi que la touche Fonction.

priseDIN.png

toucheFonction.png

L'adaptateur USB/Serial PL2303 existe avec, soit des niveaux de 3V3, soit des niveaux de 5V.
Pour l'utilisation avec le Minitel il faut utiliser un PL2303 avec les niveaux 5V.

Comme on n'est jamais vraiment certain, il vaux mieux vérifier.

pl2303Multimetre.jpg

La prise DIN comporte 5 connecteurs.

docMinitel.png

DINSoude.jpg

1: RX : à connecter sur TX du PL2303
2: Masse: à connecter sur la masse du PL2303
3: TX : à connecter sur RX du PL2303
4 et 5 se sont pas utilisés ici.

PL2303Soude.jpg

On branche ensuite simplement le PL2303 sur un port USB du Rasp, et la prise DIN sur le Minitel.

Coté OS, il est maintenant nécessaire de dire à Raspbian "d'envoyer une console" sur notre PL2303 qui est reconnu par défaut en /dev/ttyUSB0

Comme expliqué entre autres sur Pila's blog, on ajoute donc au fichier /etc/inittab la ligne:

T1:23:respawn:/sbin/getty -L -i -I "\033\143" ttyUSB0 4800 minitel1b-80

puis on exécute un sudo init q ou reboot pour appliquer la modification.

Coté Minitel, il faut lui dire d'utiliser la prise DIN, donc une fois allumé on fait:

Fnct + T, puis A (ou F) : passage en mode péri-informatique (80 colonnes).
Fnct + T, puis E : désactivation de l'écho local.
Fnct + P, puis 4 : réglage de la vitesse de transmission à 4800 bauds.

Avec cette méthode, le prompt de login ne s'affiche pas parfaitement, mais après avoir tapé quelques caractères, tout rentre dans l'ordre.

MinitelEtRasp.jpg

ScreenMinitel.jpg

MinitelPing.jpg


A quoi ca sert ?
A rien.. ok.. :)
Mais il faut bien recycler nos vieux Rasp modèles B ! ;)

Quelques autres liens sur le sujet:
Pila's blog ici et ici / x0r ici et ici / xavier / Yip / ForumRaspberry / alphak / furrtek / Labomedia / Aplu

- page 1 de 4