UniHiker: premier contact
Bonjour à tous,
Si vous aimez le Raspberry-Pi ou Python ou l'acquisition de données, alors ce billet pourrait fort bien vous intéresser.
Source: UniHiker @ MCHobby |
Qu'est que l'UniHiker ?
C'est un nano-ordinateur 4 coeurs intégrant un écran tactile, un support WiFi/Bluetooth et les nombreux connecteurs Gravity de DFRobot.
UniHiker @ MCHobby |
Basé sur le système d'exploitation Linux (Debian), il bénéficie donc de ses nombreux utilitaires, service autour du langage de programmation Python 3.
Clairement orienté Acquisition de données/DataLoging et SBC Ultra portatif, l'UniHiker n'est pas là pour concurrence le Raspberry-Pi mais pour offrir des services complémentaires.
Ses points communs avec le Raspberry-Pi sont: le système d'exploitation, la connectique de prototypage et Python.
L'UniHiker peut aussi agir sur son environnement et exécuter des script Python à la demande. Il n'est donc pas exclusivement cantonné à l'acquisition de données.
C'est justement pour ces caractéristiques spécifiques que l'UniHiker à attiré notre attention.
Préchargé avec Linux Debian et logiciel UniHiker, l'appareil est prêt à l'emploi.
Notre premier contact avec l'UniHiker est plutôt prometteur.... à mon avis, il y aura quelques articles.
L'UniHiker se présente dans une boite toute proprette avec tout ce qu'il faut pour démarrer facilement (y compris le câble USB-C vers USB-A).
UniHiker @ MCHobby |
UniHiker: Capteurs et détails techniques
Commençons par quelques caractéristiques techniques:
- RockChip RK3308 Quad Core Cortex-A35.
ARM 64bits à 1.2 Ghz max - 512 Mo de RAM DDR3
- microSD : étendre l'espace de sticjage
- 16 Go de Flash eMMC (système de fichiers)
- Ecran 2.8" tactile (résistif). ILI9347 en SPI, résolution 320 x 240
- WiFi 2.4 Ghz + Bluetooth 4.0, RealTek RTL8723DS
Permet de se connecter sur un réseau WiFi existant ou de créer un HotSpot. - Microcontrôleur GD32VF103C8T6, RiscV @ 108 Mhz, 64 Ko flash, 32 Ko RAM
Prend en charge la communication avec les capteurs et actuateur
Support les fonctions Numérique, Analogique, SPI, I2C, UART, SPI de l'UniHiker. - 16 GPIO disponibles
- Debian 10 personnalisé
- Bouton "Home"
La connectique:
- USB-C: permet d'alimenter et programmer le UniHiker (a noter qu'il peu aussi être programmé via WiFi)
- USB-A : permet de brancher des périphériques externes (ex: WebCam comme dans les exemples).
- 4x connecteur Gravity 3 broches
- 3x PWM 10bits
- 2x Analogique/ADC 12bits) - 2x connecteur Gravity 4 broches
- I2C interface - 1x connecteur EDGE
- Compatible Micro:bit
- 1x I2C
- 1x UART
- 2x SPI
- 6x ADC 12 bits
- 5x PWM 10 bits
Les capteurs déjà présent sur l'UniHiker:
- 2x boutons utilisateurs A/B
- 1x microphone
- 1x capteur de luminosité (triode photosensible, PT0603)
- 1x accéléromètre (ICM20689orientation par rapport au sol)
- 1x gyroscope (modification d'orientation)
- 1x Buzzer
- 1x LED Bleue
Architecture de l'UniHiker |
Programmer l'UniHiker
L'UniHiker est un nano-ordinateur Linux, il peut donc exécuter directement du code Python ou su code block (avec Mind+).
L'UniHiker dispose des services SSH (Secure Shell) et SMB (partage de fichier Samba/Windows) qui sont activés par défaut. Il est donc possible d'écrire du code sur un ordinateur et le transférer sur l'UniHiker pour l'exécuter.
Voici quelques informations concernant les méthodes et logiciels de programmations pour l'UniHiker:
- Jupyter Notebook: une fois le service Jupyter activé sur l'UniHiker, il est possible de programmer l'UniHicker en Python depuis une navigateur internet. Jupyter permet également d'utiliser un WEB Terminal avec la plateforme.
Voir Jupiter.org pour plus d'informations. - VSCode: VSCode est un puissant et populaire éditeur de code. Les amateurs de VSCode seront heureux d'apprendre qu'il est possible de programmer et contrôler l'UniHiker (voir ici pour plus d'informations... voir aussi code.visualstudio.com).
- SSH / Secure Shell: permet d'établir une liaison Shell/terminal sécurisée avec un ordinateur distant (comme l'UniHiker). Cette méthode propre au monde Linux/Unix est bien connue des utilisateurs de Raspberry-Pi.
UniHiker étant un système Linux, il dispose aussi d'utilitaires courants comme nano permettant d'éditer/modifier des fichiers depuis un terminal (donc depuis la connexion SSH).
Il est tellement populaire qu'il existe même des logiciel client SSH pour Windows. Sous Linux/Raspberry-Pi il est même possible d'établir un partage de système de fichiers via ssh (cela s'appelle SshFS). - Mind Plus: Mind+ est un logiciel supportant la programmation graphique (code block) et programmation Python. Il propose d'établir facilement une connexion sur l'UniHicker et offre même un gestionnaire de fichier.
- Thonny IDE: (Ajout personnel) éditeur Python très populaire chez les néophytes, il permet d'écrire et tester du code Python pour ordinateurs, nano-ordinateur et les plateformes MicroPython. Je ne sais plus où j'ai lu l'information mais il est viviblement possible d'utiliser Thonny abec un UniHiker... ce qui est selon moi une excellente chose.
- Samba: (Ajout personnel) Samba est le protocole de partage de fichiers en réseau de M!cro$oft. Ce service est actif sur l'UniHiker, ce qui permet d'éditer et modifier des contenu sur l'UniHiker via un lecteur réseau. J'ai testé cette méthode depuis mon PC Linux, c'est déconcertant de simplicité!
UniHiker pour l'IoT
UniHiker permet de stocker des données localement en utilisant le protocole MQTT (MQTT est facile à utiliser).
Le SIot et son service (démarré par défaut) permet justement d'avoir un mini-serveur IoT de type MQTT à disposition sur l'UniHiker.
SIoT dispose également d'un serveur WEB permettant de consulter les
données (via l'URL http://<UNIHIKER_IP_ADDR>:8080/html/ ).
Page d'accueil de Slot sur l'UniHiker |
Pour les distraits, la page d'accueil SIoT est accessible depuis la page WEB principale de l'UniHiker.
C'est l'un de mes centres d'intérêt, il fera l'objet d'un article spécifique car il me semble prématuré d'aborder ce sujet dans un article de présentation.
UniHiker et Python
S'il est possible d'utiliser Mind+ (code bloc) ou des fichiers Bash (script Linux), c'est surtout le langage Python qui publicité pour programmer l'UniHiker.
Python 3.7
UniHiker dispose de Python 3.7.3, il supporte donc l'Unicode par défaut.
La puissance de Python réside dans ses bibliothèques disponibles (on dit qu'il est livré "batteries included").
Quelles sont donc les bibliothèques Python disponibles sur un UniHicker.
La commande "pip list" lancée dans un terminal permet de lister les bibliothèques Python installés... avec pas moins de 241 paquets disponibles dont:
- beautifulsoup4 : xml parsing
- Django : Framework
- evdev : capture d'évènements Linux.
- Flask : Framework Web léger et performant
- google-auth
- matplotlib : générer des courbes
- MyQR
- NumPy : calcul sur matrice
- open-cv : reconnaissance et identification d'objet
- paho-mqtt : interaction avec broker MQTT
- paramiko : parsing des paramètres d'une ligne de commande
- Pillow : Traimement d'image
- pinpong : support des capteurs DFrobot
- prometheus-client : envoir de données IoT sur un serveur Propmetheus
- PyAudio
- PyGame : voir PyGame.org .
- PyMySQL : client mysql
- pyserial : établir une connexion série
- request : effectuer des requêtes sur le net
- simplejson : traitement du format json
- siot : Simple Internet of the Thing.
- tensorflow
- Twisted : utilisé en communication réseau
- unihiker : interaction avec l'UniHiker
- websocket-client : utilisé pour les requêtes Ajax
- XlsWriter : générer des fichiers Excel
unihiker
La bibliothèque Python unihiker permet d'interagir avec le matériel présent sur l'UniHiker et branché directement sur le CPU
Il sera ainsi possible d'afficher du texte ou de dessiner des contrôles sur l'écran, détecter la pression des boutons, etc.
pinpong
Pinpong est une bibliothèque d'abstraction permettant d'utiliser le même code avec différentes carte (LattePanda, Arduino Uno, UniHiker, RPi, etc. voir Board class).
J'ai trouvé une documentation "Pinpong library" en anglais concernant l'UniHiker.
Avec l'UniHiker, la bibliothèque PinPong se connecte sur le coprocesseur (MCU) via la liaison série /dev/ttyS3 et énumère les GPIO disponibles et contrôle ceux-cis à l'aide du protocole Firmata.
L'exemple ci-dessous indique comment prendre le contrôle de la LED Bleue branchée sur la broche P25 (visible à l'arrière de la carte).
root@unihiker:~# python Python 3.7.3 (default, Jan 22 2021, 20:04:44) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from pinpong.board import Board, Pin >>> Board().begin() ___________________________ | | | PinPong v0.5.1 | | Designed by DFRobot | |___________________________| [01] Python3.7.3 Linux-4.4.143-67-rockchip-g01bbbc5d1312-aarch64-with-debian-10.11 Board: UNIHIKER selected -> board: UNIHIKER serial: /dev/ttyS3 [10] Opening /dev/ttyS3 [32] Firmata ID: 3.7 [22] Arduino compatible device found and connected to /dev/ttyS3 [40] Retrieving analog map... [42] Auto-discovery complete. Found 30 Digital Pins and 30 Analog Pins ------------------------------ All right. PinPong go... ------------------------------ <pinpong.board.Board object at 0x7f7f2aba90> >>> led = Pin( Pin.P25, Pin.OUT ) >>> # Allume LED bleue >>> led.write_digital( 1 ) >>> # Eteint LED bleue >>> led.write_digital( 0 ) >>> >>> # Allume LED bleue >>> led.on() >>> # Eteint LED bleue >>> led.off()
Plus d'information sur cette page de documentation de l'UniHiker .
pygame
La bibliothèque PyGame a été popularisée avec Raspberry-Pi. Elle permet de créer des jeux et interagir avec les différents controles mais permet aussi de créer des interfaces inédites.Gravity et connecteur Edge
Les différents connecteurs présents sur la carte permettront de brancher des capteurs et actuateur.
PinOut UniHiker Source: DFRobot Board Overview |
PinOut UniHiker Source: DFRobot Board Overview |
Il est important d'identifier les broches correspondantes au divers connecteurs afin d'écrire correctement le code.
Les fonctions (ADC/PWM/...) disponibles ont également leur importance.
Cas pratique
Par exemple, le module Sound Level Meter (3.3 à 130 dB A) de DFRobot produit une tension analogique en sortie.
Sound Level Meter @ MCHobby |
Il faut donc sélectionner un connecteur Gravity disposant d'une fonction analogique (ADC = Analogic to Digital Converter).
Donc seuls P21 & P22 peuvent être utilisés avec ce module analogique.
UniHiker et autonomie
L'UniHiker ne dispose pas d'accumulateur/Lipo. Il ne dispose d'aucune autonomie.
Selon le point de vue, cela est un inconvénient ou un avantage.
Si l'UniHiker était équipé d'un accu Lipo, il y a de forte change que sa capacité ne corresponde pas à vos besoins spécifique!
DFRobot a choisi une alimentation via connecteur USB-C de l'UniHiker.
Ainsi, l'utilisateur pourra opter pour:
- un port USB du PC (pour alimenter et programmer)
- une alimentation USB-C
- un powerbank (ou système UPS) de capacité adaptée au projet
UniHiker et gestion du temps
J'ai remarqué que l'UniHiker ne dispose pas d'horloge RTC. Il ne peut donc pas rester à l'heure si celui-ci est placé hors-tension.
Vérifions cela avec quelques ligne en Python (via une connexion SSH).
>>> import datetime >>> datetime.datetime.now() datetime.datetime(2019, 2, 15, 18, 35, 28, 938688)
L'expression datetime.datetime.now() retourne l'heure actuelle. Le résultat indique que nous sommes le 15 Février 2019 (ce qui n'est absolument pas le cas, nous somme le 13 sept. 2023. L'heure est également incorrecte.
Avant de pouvoir initialiser la date, il est essentiel de fixer le TimeZone de la machine.
En Belgique et France, nous somme dans le TimeZone CET = Central European Time et comme c'est toujours l'été, nous sommes encore en CEST = Central European Summer Time (CET c'est pour un peu plus tard).
Saisir la commande tzselect dans une session SSH sur l'UniHiker. Suivre les indications en sélectionnant Europe et Belgique.
# tzselect Please identify a location so that time zone rules can be set correctly. Please select a continent, ocean, "coord", or "TZ". 1) Africa 2) Americas 3) Antarctica 4) Asia 5) Atlantic Ocean 6) Australia 7) Europe 8) Indian Ocean 9) Pacific Ocean 10) coord - I want to use geographical coordinates. 11) TZ - I want to specify the time zone using the Posix TZ format. #? 7 ... 3) Andorra 16) Germany 29) Malta 42) Slovakia 4) Austria 17) Gibraltar 30) Moldova 43) Slovenia 5) Belarus 18) Greece 31) Monaco 44) Spain 6) Belgium 19) Guernsey 32) Montenegro 45) Svalbard & Jan Mayen 7) Bosnia & Herzegovina 20) Hungary 33) Netherlands 46) Sweden 8) Britain (UK) 21) Ireland 34) North Macedonia 47) Switzerland 9) Bulgaria 22) Isle of Man 35) Norway 48) Turkey 10) Croatia 23) Italy 36) Poland 49) Ukraine 11) Czech Republic 24) Jersey 37) Portugal 50) Vatican City 12) Denmark 25) Latvia 38) Romania 13) Estonia 26) Liechtenstein 39) Russia #? 6 The following information has been given: Belgium Therefore TZ='Europe/Brussels' will be used. Selected time is now: Wed Sep 13 18:11:43 CEST 2023. Universal Time is now: Wed Sep 13 16:11:43 UTC 2023. Is the above information OK? 1) Yes 2) No You can make this change permanent for yourself by appending the line TZ='Europe/Brussels'; export TZ to the file '.profile' in your home directory; then log out and log in again. Here is that TZ value again, this time on standard output so that you can use the /usr/bin/tzselect command in shell scripts: Europe/Brussels
x
J'ai donc suivit le conseil de l'outil tzselect et utilisé nano pour modifier mon fichier .profile .
cd ~ nano .profile
Où la ligne "TZ='Europe/Brussels'; export TZ " est ajoutée en fin de fichier.
Ajout du Time Zone |
Après une sauvegarde Ctrl+O et sortie de nano Ctrl+X , il faut redémarrer/rebooter l'UniHiker et rétablir la connexion SSH après le redémarrage.
sudo reboot
Après le redémarrage, il est possible de fixer la date et l'heure en accord avec le TimeZone en vigueur.
# date -s "13 SEPT 2023 19:50:30" Wed 13 Sep 2023 07:50:30 PM CEST
On constate dans la confirmation que nous sommes bien dans le bon timezone (CEST = Centrale Europe Summer Time).
Contrôlons également ce que retourne Python à propos de la date et l'heure du système.
root@unihiker:~# python Python 3.7.3 (default, Jan 22 2021, 20:04:44) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import datetime >>> datetime.datetime.now() datetime.datetime(2023, 9, 13, 19, 53, 39, 30764)
Conclusion
Pour un premier article l'UniHiker laisse entrevoir beaucoup de fonctionnalités mais si elles ne sont pas abordées en profondeur, ce qui serait pourtant intéressant.
Il y aura donc d'autres articles.
La prochaine fois que nous parlerons de l'UniHicker, ce sera pour détailler les moyens de communication.
Écrire un commentaire