md
Connexion série avec l'Orange Pi Zero
2017-11-27
Mise à jour: 2019-03-18
<-Domoticz sur un Orange Pi Zero, un aperçu --

Une mise à jour et une mise à niveau du système d'exploitation sur l'Orange Pi Zero plus tôt dans la journée se sont très mal déroulées. Impossible d'ouvrir une session ssh sur l'OPiZ. En effet, l'ordinateur monocarte n'était même plus visible sur le réseau local, même avec une connexion filaire Ethernet en place.

Voilà une bonne occasion de tester le port de débogage UART situé à côté du connecteur RJ45. En même temps, je pouvais tester un autre convertisseur USB-TTL basé sur le CH340G que j'avais acheté il y a quelque temps pour presque rien. J'oublie l'origine de l'appareil, mais on dirait qu'il est facile à obtenir auprès des points de vente chinois habituels. L'appareil est affiché comme étant un adaptateur de QinHeng Electronics avec la commande lsusb.

      QinHeng Electronics HL-340 USB-Serial adapter

Tout était très simple à connecter et le convertisseur a fonctionné sans problème. Un blogue de codelectron est consacré à ce sujet. Datant de mai 2017, il contient de nombreuses photographies. Il n'y a pas grand-chose à ajouter si vous aimez PuTTY sur une machine Linux. Un lecteur qui utilise ce logiciel dans Windows m'a envoyé un message confirmant que la connexion a l'OPiZ fonctionne. Voici les paramètres de connexion.

PuTTy screen shot

Puisque je n'utilise pas ce logiciel, j'ai d'abord essayé miniterm.py comme auparavant avec nodeMCU des périphériques ESP8266. Le résultat a été décevant, en particulier lors de l'utilisation d'utilitaires de configuration ou d'autres programmes qui dessinent une interface utilisateur texte avec des codes d'échappement ANSI. Ensuite, j'ai essayé GNU Screen. S'il n'est pas déjà présent, il peut être installé avec Logiciels Ubuntu ou avec le gestionnaire de paquets APT. Je suggère d'installer un fichier de configuration dans le répertoire de base pour activer un tampon de défilement.

michel@hp:~$ sudo apt-get install screen if necessary ... michel@hp:~$ echo "defscrollback 5000" > .screenrc 5,000 lignes est-ce suffisant ?

Branchez le convertisseur sur un port USB de l'ordinateur de bureau. Connectez le convertisseur aux broches d’entête de l’OPiZ qui doit être déconnecté de sa source d’alimentation. Nous avons besoin de savoir quel port TTY est attribué au convertisseur USB-TTL. Essayez de lister tous les périphériques tty. Il devrait apparaître comme ttyUSB0 quelque chose de similaire. S'il y a trop de noms similaires dans le répertoire, alors la commande dmesg indiquera le port sur lequel le dernier convertisseur ch341-uart (ou le type de puce sur lequel votre convertisseur USB-TTL est basé) a été connecté.

michel@hp:~$ ls /dev/tty* ... /dev/tty18 /dev/tty33 /dev/tty49 /dev/tty7 /dev/ttyS20 /dev/ttyS8 /dev/tty19 /dev/tty34 /dev/tty5 /dev/tty8 /dev/ttyS21 /dev/ttyS9 /dev/tty2 /dev/tty35 /dev/tty50 /dev/tty9 /dev/ttyS22 /dev/ttyUSB0 /dev/tty20 /dev/tty36 /dev/tty51 /dev/ttyprintk /dev/ttyS23 ... michel@hp:~$ dmesg | grep tty [ 0.000000] console [tty0] enabled [25490.513501] usb 3-14: ch341-uart converter now attached to ttyUSB0

Sachant le port, lancez screen dans le terminal et, APRÈS, mettez l’OPiZ sous tension. On verra alors défiler beaucoup de texte dans la fenêtre du terminal. Vous verrez la séquence de démarrage typique de Linux comme si un écran physique avait été connecté à OPiZ.

michel@hp:~$ screen /dev/ttyUSB0 115200 [ 8469.538162] Restarting Linux version 3.4.113-sun8i (root@armbian) (gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.4) ) #4 SMP PREEMPT Wed Nov 22 13:45:28 CET 2017 [ 8469.538174] U-Boot SPL 2017.09-armbian (Nov 22 2017 - 16:54:06) DRAM: 512 MiB Trying to boot from MMC1 ... ... beaucoup de messages pour la plupart incompréhensibles, en ce qui me concerne ... [Ok] Scheduler SCHED_OTHER 0 OpenSSH Server (480) [Ok] Nice 0 [Ok] Affinity 0-3 [Ok] Scheduler SCHED_OTHER 0 [Ok] DietPi-Process Tool | Completed ─────────────────────────────────────── DietPi | 17:39 | Mon 27/11/17 ─────────────────────────────────────── V158 | OrangePi Zero (armv7l) ─────────────────────────────────────── IP Address | 192.168.0.75 ─────────────────────────────────────── Default Login: Username = root Password = dietpi [Ok] NTPD: time sync | Completed Enter Il ne se passe rien tant que cette touche ne soit appuyée Debian GNU/Linux 8 domopiz ttyS0 domopiz login:

Si screen rouspète au sujet des autorisations, vous pouvez les modifier pour le périphérique /dev/ttyUSB0, mais la meilleure solution consiste à vous ajouter (en tant qu'utilisateur) au groupe dialout de l'ordinateur de bureau.

michel@hp:~$ sudo chmod 666 /dev/ttyUSB0 or michel@hp:~$ sudo usermod -a -G dialout michel

Pour passer en mode défilement dans screen appuyez sur la combinaison de touches CtrlA puis sur la touche ESC. Les touches de curseur haut/bas et PageHaut/PageDown feront défiler le tampon. Il est possible de sélectionner une région de texte avec le bouton gauche de la souris, qui peut ensuite être copiée dans le Presse-papiers du système en cliquant sur le bouton droit de la souris. Appuyez sur la touche ESC pour quitter le mode de défilement.

Pour quitter screen, appuyez sur la combinaison de touches CtrlA puis sur la touche \. Avec le clavier français AZERTY sur mon ordinateur, je produis un "\" avec la combinaison Alt Gr8.

Toutes ces combinaisons de touches ne me sont pas familières, alors j'ai essayé Kermit. L'origine de ce logiciel remonte à plusieurs années; je l'ai rencontré dans les années 1980. Voici comment j'ai installé puis démarré le programme.

michel@hp:~$ sudo apt-get install -y ckermit ... michel@hp:~$ kermit -l /dev/ttyUSB0 -b 115200 -C "set carrier-watch off, connect" Connecting to /dev/ttyUSB0, speed 115200 Escape character: Ctrl-\ (ASCII 28, FS): enabled Type the escape character followed by C to get back, or followed by ? to see other options. ---------------------------------------------------- Enter Nothing happens until you hit that key Debian GNU/Linux 8 domopiz ttyS0 domopiz login:

On peut démarrer kermit en mode interactif pour spécifier les paramètres, puis se connecter.

michel@hp:~$ kermit C-Kermit 9.0.302 OPEN SOURCE:, 20 Aug 2011, for Linux+SSL+KRB5 (64-bit) Copyright (C) 1985, 2011, Trustees of Columbia University in the City of New York. Type ? or HELP for help. (/home/michel/) C-Kermit>set line /dev/ttyUSB0 (/home/michel/) C-Kermit>set flow-control none (/home/michel/) C-Kermit>set carrier-watch off (/home/michel/) C-Kermit>set speed 115200 /dev/ttyUSB0, 115200 bps (/home/michel/) C-Kermit>connect

Au lieu d'entrer dans cette longue ligne de commande compliquée ou de passer par la petite session interactive, créez un fichier de configuration .kermrc contenant les lignes suivantes et enregistrez-le dans le répertoire de base /home/user/dietpi.

set line /dev/ttyUSB0 set speed 115200 set flow-control none set carrier-watch off connect

Dorénavant, kermit se connectera automatiquement à l’OPiZ au lancement.

michel@hp:~$ kermit Connecting to /dev/ttyUSB0, speed 115200 Escape character: Ctrl-\ (ASCII 28, FS): enabled Type the escape character followed by C to get back, or followed by ? to see other options. ---------------------------------------------------- Enter Nothing happens until you hit that key Debian GNU/Linux 8 domopiz ttyS0 domopiz login:

C'est un programme énorme, mais il est plus simple à utiliser. En particulier, les touches de défilement fonctionnent comme prévu, nul besoin d'entrer dans un mode commande. Toutefois, pour quitter le programme, il faut activer le mode commande avec la combinaison Ctrl\ puis appuyer sur C. Avec un clavier AZERTY, la combinaison initiale est une affaire à trois touches CtrlAlt Gr 8. En mode commande, entrer quit pour enfin quitter le programme.

Si GNU screen et Kermit ne vous attirent pas, vous pouvez essayer minicom comme recommandé par OrangePi org. En fin de compte, utilisez ce qui vous convient le mieux.

Quel que soit le programme de terminal que vous utilisez, vous trouverez peut-être que le port UART de débogage est beaucoup plus pratique qu'une session ssh. Et le meilleur de tous, vous n'avez pas besoin de trouver l'adresse IP attribuée à l'interface Ethernet ou Wi-Fi pour établir une connexion. En fait, cela peut être un moyen plus rapide de trouver l'adresse IP telle qu'elle est affichée sur l'écran de connexion. Si celle-ci a défilé trop rapidement, on peut utiliser la commande ip pour l'afficher en tout temps.

dietpi@domopiz:~$ ip addr 1: lo: mtu 16436 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 0b:42:09:fc:73:9c brd ff:ff:ff:ff:ff:ff inet 192.168.0.35/24 brd 192.168.0.255 scope global eth0 inet6 fd00:fc:8d4f:71b2:8b4:91ff:feff:739c/64 scope global dynamic valid_lft 535418sec preferred_lft 401561sec inet6 2607:fea8:f180:c5a:8b4:91ff:feff:739c/64 scope global dynamic valid_lft 604790sec preferred_lft 172790sec inet6 fe80::8b4:91ff:feff:739c/64 scope link valid_lft forever preferred_lft forever

On peut aussi utiliser la commande ifconfig, mais elle n'est pas toujours installée ce qui est le case dans la version dietPi de Armbian.

En ce qui concerne ssh, je n'ai jamais réussi à le faire fonctionner sur l'OPiZ après la mise à niveau. En revanche, j'ai rechargé une sauvegarde récente de ma carte SD avec Etcher ce qui a demandé moins de 15 minutes et cette fois la mise à niveau de l'image d'Armbian s'est déroulée sans accroc.

REMARQUE: Il peut s'avérer impossible d'établir une connexion avec screen ou Kermit.

michel@hp:~$ screen /dev/ttyUSB0 115200 cannot open /dev/ttyUSB0: Device or resource busy ou avec connexion kermit à partir de la ligne de commande michel@hp:~$ kermit -l /dev/ttyUSB0 -b 115200 -C "connect" /dev/ttyUSB0: Device or resource busy ou avec kermit en mode interactif (/home/michel/) C-Kermit>set line ttyUSB0 Sorry, write access to UUCP lockfile directory denied.

Il n'y avait aucun doute que /dev/ttyUSB0 était le bon port série. Le problème est peut-être causé par un processus qui utilise le port. Dans mon cas, une session screen que j'avais laissée en suspens lorsque j'ai fermé le terminal dans lequel screen tournait sans quitter le programme lui-même était toujours connectée au port. Pour reprendre le contrôle du port, il faut d'abord obtenir l'identificateur du processus (son pid), pour le tuer après.

michel@hp:~$ sudo lsof /dev/ttyUSB0 ... lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME screen 15906 michel 7u CHR 188,0 0t0 525 /dev/ttyUSB0 michel@hp:~$ kill 15906

Merci à AppBeing Studio pour l'astuce.

AVERTISSEMENT: je ne suis pas responsable si vous perdez tout votre travail parce que vous avez tué le mauvais processus à cause de doigts trop gros, de dyslexie ou de malchance. Faites attention.

<-Domoticz sur un Orange Pi Zero, un aperçu --