Ne pouvant résister, je me suis retrouvé en train de jouer avec l'Orange Pi Zero pour voir s'il était possible d'installer Google Assistant. Cela a fonctionné, mais on s'en doute, il y a eu des complications en cours de route. La plus importante était le fait que je ne pouvais pas me connecter à l'OPiZ avec WiFi ou Ethernet. Donc, j'ai de nouveau gravé l'image d'un système d'exploitation sur la carte SD, DietPi cette fois-ci. J'ai été impressionné par cette distribution de Debian 8 (Jessie version serveur) et il a été possible d'installer Google Assistant après avoir franchi quelques obstacles.
De plus, l'image du système d'exploitation Linux provenant de DietPi est maintenant dérivée de Stretch (Debian 9) de sorte qu'un certain nombre d'étapes supplémentaires décrites ci-dessous ne sont plus nécessaires.
Je devrais réécrire ce billet, mais je travaille actuellement sur un projet similaire en utilisant un Raspberry Pi 3 qui a la priorité.
Table des matières
- Les malheurs de WiFi
- Installation de DietPi
- Vérification de l'audio
- Installation de Python 3
- Installation de Google Assistant
- Some Like It Hot
En pensant à ce que je faisais avec l'OPiZ, je peux deviner pourquoi il ne se connectait plus au réseau local. J'ai probablement désactivé l'interface Ethernet pour économiser de l'énergie et donc réduire la chaleur générée par le système sur puce H2+. En même temps, la connexion sans fil avait une adresse IP statique pour tester le serveur Domoticz. C'est à éviter sur l'OPiZ car, apparemment, le WiFi avec une adresse statique est inopérant à moins qu'une connexion Ethernet soit faite. Et puisque l'Ethernet a été désactivé, bien l'échec était inévitable.
D'autres ont également eu des problèmes avec le WiFi sur l'OPiZ. Dans son blogue de décembre 2016 intitulé The Orange Pi Zero, Pete Scargill en parle longuement et refuse d'utiliser ce dispositif plus ou moins à cause de cela. Apparemment, il n'avait pas changé d'avis en septembre de cette année, en disant que ... le WIFI sur l'Orange Pi Zero était et est essentiellement une saloperie (bien que ce soit peut-être à la mise en œuvre plutôt que le matériel) dans Orange Pi Time. Cependant, dans les réponses aux commentaires, il semble avoir trouvé une utilisation de l'OPiZ, vraisemblablement lorsqu'il est connecté par Ethernet ou utilisé sans connexion au réseau.
Puisqu'une image d'un système d'exploitation devait être installée à nouveau, pourquoi ne pas utiliser DietPi mentionné par Pete Scargill? Qui sait, une mise à jour récente pourrait contenir la solution des problèmes d'interface réseau.
Le plus récent fichier image compressé
(DietPi_OrangePiZero-armv7-(Jessie).7z
, en date du 6 novembre
2017) peut être téléchargé à partir de dietpi.comdietpi.com.
J'ai suivi les instructions qu'on retrouve sur la page Getting
started. Il me semblait plus sage de ne pas activer l'interface WiFi
initialement, alors je n'ai rien changé au fichier dietpi.txt
.
Comme précédemment, il était nécessaire de brancher l'OPiZ au réseau local
par une connexion Ethernet afin de le configurer. J'ai effectué un balayage
du réseau rapide, Quick scan
, en utilisant Zenmap/Nmap ce qui m'a permis de trouver l'adresse IP de l'OPiZ :
192.168.0.136
.
Puis la licence GPL
est affichée
et après avoir accepté ses termes, le système d'exploitation a été automatiquement mis à jour de la version 145 vers la version 157. Il faut faire preuve d'un peu de patience, ces étapes exigent un certain temps.
Quand une nouvelle session ssh
est ouverte, l'écran de
configuration s'affiche.
La première chose que j'ai faite a été de lancer DietPi-Config
.
Je ne vais pas entrer dans les détails, cet utilitaire de configuration est
assez simple.
Dans Audio Options
, j'ai changé la carte de son à l'option
default 3.5mm Analogue
. La sortie 3,5mm se trouve sur la carte
d'extension achetée avec l'OPiZ.
Dans Language/Regional Options
, j'ai changé le fuseau horaire
(Timezone
) à America/Moncton
qui est la ville la plus
proche. Je ne change pas la langue ni le clavier, puisque l'OPiZ sera un serveur
étêté.
Dans Security Options
, j'ai modifié le mot de passe
(Root Password
) et le nom de l'hôte (Hostname
) à
domopiz
.
Dans Network Options: Adapters
, j'ai activé l'interface WiFi,
en définissant l'identité et le mot de passe de mon réseau. Cela a été fait en
utilisant l'option Scan
, bien que cela puisse être fait avec l'option
Manual
. Enfin, j'ai activé la reconnexion automatique
(Auto Reconnect
).
Le système propose un redémarrage. C'est un moment opportun pour éteindre le système, déconnecter le câble Ethernet et repartir l'OPiZ pour vérifier que le WiFi fonctionne indépendamment d'une connexion filaire au réseau. Cela s'est avéré, mais j'estime que l'OPiZ met plus de temps à se connecter au réseau qu'un Raspberry Pi ou un ESP8266.
Il faut mentionner que j'ai modifié le routeur WiFi afin qu'il attribue une adresse IP fixe à l'OPiZ. Avoir une adresse IP fixe est une très bonne chose lors de l'exécution d'un serveur sans tête. En principe, l'adresse aurait pu être fixée à l'étape précédente, mais comme indiqué précédemment plusieurs ont noté des problèmes avec une adresse WiFi fixe et j'étais impatient de poursuivre l'installation de Google Assistant.
De retour dans dietpi-software
, j'ai choisi
OpenSSH comme serveur ssh
(SSH Server
) plutôt que Dropbear. Ainsi
il sera possible réaliser des tranferts de fichiers avec FileZilla en utilisant le protocole SFTP.
Autrement, il était possible de continuer avec Dropbear
et un serveur FTP
; deux ou trois sont disponibles pour installation
depuis l'utilitaire dietpi-software
.
À ce stade, j'ai arrêté de me connecter en tant que root pour établir
des connexions en tant que l'utilisateur dietpi
déjà défini.
C'est le bon moment pour changer le mot de passe de cet utilisateur
Ajouter l'OPiZ à la liste des sites de FileZilla n'est pas difficile
mais il était impossible d'établir le serveur SFTP
:
Status: Connecting to 192.168.0.25... Response: fzSftp started, protocol_version=2 Command: open "dietpi@192.168.0.25" 22 Command: Pass: ******** Error: Connection timed out after 20 seconds of inactivity Error: Could not connect to server Status: Waiting to retry...
Comme d'habitude, une solution était à portée de main sur le web, mais j'ai
oublié de noter où, afin de donner un crédit approprié. Il suffit de faire un
petit ajout au fichier de configuration de bash
.
# ~/.bashrc: executed by bash(1) for non-login shells. # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac # Note: PS1 and umask are already set in /etc/profile. You should not # need this unless you want different defaults for root. # PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ ' # umask 022 # You may uncomment the following lines if you want `ls' to be colorized: export LS_OPTIONS='--color=auto' eval "`dircolors`" alias ls='ls $LS_OPTIONS' alias ll='ls $LS_OPTIONS -l' alias l='ls $LS_OPTIONS -lA' ...
J'ai également supprimé les commentaires sur les options de couleur pour
la commande ls
. Cela a également ajouté quelques alias.
À partir de maintenant, ll
sera l'équivalent de ls -l
et l
l'équivalent de ls -lA
. L'option -A
signifie que tout sera répertorié, y compris les fichiers et répertoires cachés,
sauf pour les répertoires actuel et parent (".
" et
"..
").
Voilà la configuration de base de DietPi sur l'Orange Pi Zero terminée. Et voici, quelques informations sur la distribution juste installée.
Donc il s'agit de Debian 8 (Jessie) version serveur avec la version 3.4.113 du noyau Linux pour l'architecture arm V.7. Ce n'est pas la distribution la plus récente. Une image Raspbian (Debian 9 Stretch) est actuellement disponible pour le Raspberry Pi.
Essentiellement, j'ai suivi les instructions données dans How to Setup an Orange Pi Zero DIY Smart Speaker with Google Assistant SDK.
La première étape consistait à tester le matériel audio. J'ai éteint l'OPiZ, branché la carte d'extension, puis connecté des haut-parleurs alimentés à cette dernière. Quand tout est dans le boîtier acheté en même temps que l'Orange Pi Zero on obtient un système très compact, voire plus petit que l'alimentation des haut-parleurs.
Une fois une session ssh
établie tant que l'utilisateur
dietpi
, j'ai vérifié que ce dernier faisait partie du groupe
audio
.
Si dietpi
n'avait pas été membre de audio
, il
aurait été facile de rejoindre ce groupe :
La première étape de la vérification du matériel audio est d'enregistrer
le son provenant du microphone sur la carte d'extension dans un fichier
temporaire sample.wav
.
Comme deuxième étape, on peut vérifier que les haut-parleurs sont correctement branchés en jouant l'enregistrement.
Sans qu'il soit nécessaire d'ajuster les volumes de lecture et
d'enregistrement, cela fonctionnait. Il ne restait plus qu'à créer le
fichier de configuration asound
. Encore une fois, j'ai suivi
les instructions de CNX modifiées pour utiliser le
microphone intégré.
pcm.!default { type asym capture.pcm "mic" playback.pcm "speaker" } pcm.mic { type plug slave { pcm "hw:0,0" format S16_LE } } pcm.speaker { type plug slave { pcm "hw:0,0" } }
Python n'est pas installé dans DietPi mais
la version 3 ainsi que python3-dev
et python3-venv
sont nécessaire au fonctionnement de Google Assistant.
Il y a de nombreuses étapes avant d'entendre enfin un mauvais jeu de mots
(y'a-t-il de bons calembours?) de Mme Google en réponse à un « Hey
google, tell me a joke » (Note Il semble que
Google Assistant ne soit disponible qu'en anglais jusqu'à nouvel
ordre). Il faut créer un projet sur Google Cloud Platform
À cette étape un fichier « secret » contenant une clé identifiant
le projet sera téléchargé. Ensuite, la bibliothèque de l'Assistant Google et
l'outil d'autorisation de Google sont téléchargés sur l'OPiZ et l'outil
d'autorisation est utilisé en combinaison avec la clé secrète pour compléter
la liaison de l'Assistant Google et du projet. Et j'ai oublié, vous devez
également activer Voice & Audio Activity
dans la page
Google Activity Controls
de votre compte Google, ce qui signifie,
bien sûr, que vous devez posséder un tel compte.
Encore une fois, j'ai suivi les instructions de CNX dans Setting Up Google Assistant on Orange Pi Zero. En fait, je me suis embrouillé et je ne saurais expliquer en détail ce que j'ai fait. Vous pouvez trouver une aide supplémentaire de Takanob Fuse dans Voice Control by Google Assistant. Et comme on pouvait s'y attendre, il y a des présentations YouTube.
En fin de compte, vous devriez vous retrouver avec un fichier avec un
nom de fichier très long qui ressemble à
client_secret_00000000-0123456xxx.apps.googleusercontent.com.json
dans le répertoire personnel de dietpi
. À partir de là, voici
ce que j'ai fait.
Installation des bibliothèques de Google
Authorization
La commande est si longue que je l'ai divisée en trois parties. Le «
\ » à la fin des deux premières lignes est le symbole de
continuation et le « > » au début des deux dernières lignes est
affiché par bash
comme une invite pour le reste de la commande.
Tester Google Assistant
Voilà, c'est terminé et l'on peut vérifier que Google Assistant fonctionne.
Google assistant a répondu "its eight forty-five".
Actuellement, Google assistant ne fonctionne qu'en anglais. Cela pourrait changer à l'avenir; après tout Google Home est disponible en français et la reconnaissance vocale fonctionne en français sur Android depuis des années.
CtrlC stops the assistant.Utilisation de Google Assistant
Évidemment, il n'est pas nécessaire de répéter toutes les étapes de l'installation. Dorénavant, on peut lancer Google Assistant avec deux commandes et en sortir en frappant sur un combinaison de touche sur le clavier :
Démarrage automatique de Google Assistant
La dernière étape consiste à s'assurer que Google Assistant démarre automatiquement lorsque l'OPiZ est mis sous tension ou réinitialisé. Encore une fois, j'ai simplement adapté ce que proposait CNX. Je n'ai que modifié le nom de l'utilisateur; le reste exige des connaissances nettement supérieures à celles que je possède.
[Unit] Description=google assistant service After=network.target ntpdate.service [Service] Type = idle Environment=VIRTUAL_ENV=/home/dietpi/env/ Environment=PATH=/home/dietpi/env/bin:/usr/local/sbin:/usr/local ExecStart=/home/dietpi/env/bin/google-assistant-demo WorkingDirectory=/home/dietpi StandardOutput=inherit StandardError=inherit Restart=always User=dietpi [Install] WantedBy=multi-user.target Alias=google-assistant.service
Le service ainsi crée doit maintenant être activé puis démarrer. Ceci n'est à faire qu'une seule fois.
Vérifiez en éteignant l'OPiZ puis en le mettant sous tension. Vous devrez attendre plusieurs secondes avant de parler à Mme Google, soyez patient.
La température de fonctionnement du système sur puce H2+ est une préoccupation à laquelle j'ai fait mention dans mon premier billet sur l'Orange Pi Zero. Alors que la photo ci-dessus indiquait que l'OPiZ se trouvait dans le petit boîtier, c'est en fait sans boîtier et dans une pièce fraîche. que j'ai vérifié la température.
Ce n'est pas mal, mais le fait est qu'en enfermant l'OPiZ dans le
boîtier la température atteint des niveaux dangereux, selon cpu
.
D'ailleurs, l'Assistant Google est en marche depuis une vingtaine de minutes
alors qu'il entend le son de quelque bavarder à la radio. Même si la
température de la pièce n'est que de 20 ° C, l'OPiZ signale une température
de 63 ° C «chaude, non recommandée» et la fréquence du processeur a été
abaissée de 1008 MHZ à 648 MHZ sur les quatre noyaux.
Il serait réconfortant de pouvoir atteindre des niveaux acceptables avec un refroidissement passif. Ce ne sera pas facile. D'une part il n'y a pas beaucoup de place pour un dissipateur de chaleur entre la carte principale et la carte d'extension qui ne sont séparées que de 9,5 mm. De plus, le H2+ s'élève à environ 1,8 mm au-dessus de la carte principale. La puce n'a que 14 mm de côté, mais l'aire autour est dégagé. Je pense qu'il devrait être possible de mettre un dissipateur de chaleur rectangulaire de 17×22 mm et de 6 mm de haut sur la puce. J'ai commandé du matériel et je verrai ce qui peut être fait.
Je me propose de percer des trous dans la plaque inférieure du boîtier pour augmenter le débit d'air. Le problème est que la carte principale se trouve juste à 2,5 mm au-dessus de la plaque de sorte qu'elle bloquera le mouvement d'air du bas vers le haut. Mais il n'y a rien à perdre à essayer.
Il y aura un rapport sur le succès, ou l'absence de succès, de ces mesures après l'arrivée d'un tube de pâte et des dissipateurs thermiques par cargo lent en provenance de Chine.