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é!
J'aurais aimé présenter l'établissement de la connexion SSH (shell sécurisé) avec l'UniHiker mais cet article est déjà trop long. Je le ferais dans le prochain article, ce qui vous permettra de tester les exemples présentés plus bas dans l'article.

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.
 
Disposer de la bibliothèque PyGame sur l'UniHiker est un avantage indéniable et les exemples PyGame ne manquent pas. 
Voir voir PyGame.org .

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.

Il faudra remettre l'UniHiker à l'heure à chaque mise sous tension.

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.

Où acheter

Aucun commentaire