Utiliser Hmi4DinBox sur carte Pi

Dans cet article nous allons utiliser l’interface homme-machine Hmi4DinBox sur une carte Pi.

Après une installation ou une mise à jour de piduino, nous connecterons l’interface Hmi4DinBox à un carte Pi avant d’en effectuer le test à partir de la ligne de commande avec les outils du paquet i2c-tools.

Comme nous l’avons vu dans un article précédent cette interface est prévue pour être connectée à une carte Arduino ou Pi par un bus I2C. Elle est fournie avec une librairie Arduino que nous utiliserons dans un deuxième article pour réaliser des programmes accédant à l’interface Hmi4DinBox sur notre carte Nano Pi.

La carte Nano Pi utilisée est une carte Nano Pi Neo Core implantée sur un Mini Shield, commercialisée en France par GoTronic, mais on pourra utiliser n’importe quelle carte Pi compatible avec piduino.

hmi4dinbox-nanopi

Installer ou mettre à jour piduino

Si ce n’est pas encore fait, installer les paquets libpiduino-dev et piduino-utils comme expliqué dans l’article sur piduino.

Si vous avez déjà installer piduino, effectuez une mise à jour des paquets :

sudo apt update
sudo apt upgrade

Afin que pido affiche correctement le connecteur GPIO, il est nécessaire de modifier le fichier /etc/piduino.conf afin d’indiquer que la carte est implantée sur le Mini Shield:

sudo nano /etc/piduino.conf

Il faut retirer le # devant la ligne tag et mettre nanopineocoreshield entre les guillemets. Le fichier doit ressembler à ceci:

# PiDuino configuration file
connection_info="sqlite3:db=/usr/share/piduino/piduino.db"

# Allows you to force the board tag (Armbian)
# !! Be careful, this is at your own risk !!
# !! Forcing an incorrect value may destroy GPIO pins !!
tag="nanopineocoreshield"

# Allows forcing the revision of the board (Raspbian)
# !! Be careful, this is at your own risk !!
# !! Forcing an incorrect value may destroy GPIO pins !!
#revision=0xa02082

Relier l’interface Hmi4DinBox au Nano Pi

Fil de câblageAprès avoir arrêté la carte Nano Pi, nous allons relier l’interface Hmi4DinBox au connecteur GPIO grâce à des fils équipés de petits connecteurs (femelle-femelle) comme ci-contre.

Le brochage du connecteur J1 de l’interface Hmi4dinBox est le suivant:

# Nom Description
1 VCC Alimentation 5V ou 3,3V, protégée contre les surtensions et les inversions de polarité
2 SCL Horloge I2C, pas de résistance au pull-up sur cette ligne! mettez-en une sur la carte principale !
3 SDA Données I2C, pas de résistance au pull-up sur cette ligne! mettez-en une sur la carte principale !
4 HIRQ Indique qu’une ou plusieurs actions ont été effectuées sur le bouton de navigation
5 GND Masse

Nous pouvons voir le brochage du connecteur GPIO CON1 du Nano Pi grâce à pido :

pido readall 1
                                          CON1 (#1)
+-----+-----+----------+------+------+---+----++----+---+------+------+----------+-----+-----+
| sOc | iNo |   Name   | Mode | Pull | V | Ph || Ph | V | Pull | Mode |   Name   | iNo | sOc |
+-----+-----+----------+------+------+---+----++----+---+------+------+----------+-----+-----+
|     |     |     3.3V |      |      |   |  1 || 2  |   |      |      | 5V       |     |     |
|  12 |   8 |  I2C0SDA | ALT2 |  OFF |   |  3 || 4  |   |      |      | 5V       |     |     |
|  11 |   9 |  I2C0SCK | ALT2 |  OFF |   |  5 || 6  |   |      |      | GND      |     |     |
|  91 |   7 |  GPIOG11 |  OFF |  OFF |   |  7 || 8  |   | OFF  | ALT2 | UART1TX  | 15  | 86  |
|     |     |      GND |      |      |   |  9 || 10 |   | OFF  | ALT2 | UART1RX  | 16  | 87  |
|   0 |   0 |   GPIOA0 |  OFF |  OFF |   | 11 || 12 |   | OFF  | OFF  | GPIOA6   | 1   | 6   |
|   2 |   2 |   GPIOA2 |  OFF |  OFF |   | 13 || 14 |   |      |      | GND      |     |     |
|   3 |   3 |   GPIOA3 |  OFF |  OFF |   | 15 || 16 |   | OFF  | OFF  | GPIOG8   | 4   | 88  |
|     |     |     3.3V |      |      |   | 17 || 18 |   | OFF  | OFF  | GPIOG9   | 5   | 89  |
|  15 |  28 | SPI1MOSI | ALT2 |  OFF |   | 19 || 20 |   |      |      | GND      |     |     |
|  16 |  24 | SPI1MISO | ALT2 |  OFF |   | 21 || 22 |   | OFF  | OFF  | GPIOA1   | 6   | 1   |
|  14 |  29 |  SPI1CLK | ALT2 |  OFF |   | 23 || 24 |   | OFF  | ALT2 | SPI1CS   | 27  | 13  |
|     |     |      GND |      |      |   | 25 || 26 |   | OFF  | OFF  | GPIOA17  | 11  | 17  |
+-----+-----+----------+------+------+---+----++----+---+------+------+----------+-----+-----+
| sOc | iNo |   Name   | Mode | Pull | V | Ph || Ph | V | Pull | Mode |   Name   | iNo | sOc |
+-----+-----+----------+------+------+---+----++----+---+------+------+----------+-----+-----+

Voilà les connexions que nous devons réaliser :

J1NomCON1NomiNo
1VCC13.3V
2SCL5I2C0SCK9
3SDA3I2C0SDA8
4HIRQ15GPIOA33
5GND6GND

Après avoir vérifié, puis revérifié encore les 5 fils, démarrer le Nano Pi.

Tester l’interface Hmi4DinBox

Avant d’utiliser l’interface dans un programme, il est préférable d’en effectuer un test directement à partir de la ligne de commande.

Nous allons utiliser pour ce faire les programmes du paquet i2c-tools (à installer si nécessaire).

sudo apt install i2c-tools

Avant de « parler » à notre interface, il ne faut oublier que les lignes SDA et SCL sur un Nano Pi ne disposent pas de résistances de pull-up (ce n’est pas le cas sur Raspberry Pi). Il faut donc, soit ajouter une résistance de 1,8k reliée au 3,3V sur chaque signal, soit activer les résistances de pull-up sur les lignes iNo 8 et 9. C’est cette dernière solution que nous allons utiliser car elle est plus simple (mais la première solution avec des résistances externes devra être retenue dans un cadre industriel).

pido nous permet d’activer les résistances de pull-up :

pido pull 8 up
pido pull 9 up

Si vous ne savez pas pourquoi il faut des résistances de pull-up sur les lignes I2C, il est tant de se renseigner sur Wikipedia

Pour comprendre ce que nous allons faire, il faut regarder le diagramme d’exigences de l’interface Hmi4DinBox qui a été présenté dans un article précédent.

L’exigence Affichage LED (id=1.10.2) nous dit la chose suivante :

  • L’interface dispose de 5 leds T1-3mm.
  • L’accès à la fonction par le module hôte se fera par bus I2C à l’adresse 0111111.
  • Le registre 0 à cette adresse permettra de lire et modifier l’état des leds (1 bit par led). Le bit 0 correspond à la led rouge, le bit 1 à la verte1, le bit 2 à la verte2, le 3 à jaune1 et le 4 à jaune2).

L’exigence Affichage LCD (id=1.10.1) nous informe que l’afficheur de modèle ST7032i se trouve à l’adresse 0111110.

Utilisons i2cdetect sur le bus I2C 0 pour savoir si les 2 adresses, celle du LCD et l’autre utilisée pour les leds (et les autres fonctions) sont détectées :

sudo i2cdetect  -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e 3f 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         

Bingo ! nous détectons 2 circuits sur le bus I2c :

  • un circuit à l’adresse hexadécimale 0x3e, 00111110 en binaire, qui correspond au LCD.
  • un circuit à l’adresse hexadécimale 0x3f, 00111111 en binaire, qui correspond aux leds (et les autres fonctions).

Nous allons écrire 0x01 dans le registre 0 à l’adresse 0x3f grâce à i2cset :

sudo i2cset -y 0 0x3f 0 0x01

Normalement cela allume la LED1, c’est à dire la rouge, pour allumer la LED2 on écrira 0x02, la LED3 0x04, la LED4 0x08, la LED5 0x10. On allumer plusieurs leds en effectuant une somme des valeurs, par exemple, 0x12 allume la LED2 et la LED5, 0x1F toutes les leds…

Pour éteindre les leds :

sudo i2cset -y 0 0x3f 0 0x00

Pour lire l’états des leds :

sudo i2cget -y 0 0x3f 0
0x12

L’exigence id=1.10.1.1 nous permet de savoir que le registre 1 à l’adresse 0x3f correspond au rétroéclairage, pour l’allumer à mi-puissance soit 128 :

sudo i2cset -y 0 0x3f 1 128

L’exigence id=1.10.3 nous permet de savoir que les actions effectuées par l’utilisateur sont accessibles par le registre 2 à l’adresse 0x3f et que le signal HIRQ, broche iNo 3 dans notre cas, est à l’état haut lorsque des actions sont disponibles. Commençons par passer la broche en entrée et lisons sa valeur avec pido :

pido mode 3 in
pido read 3
0

Cela veut dire qu’aucune action n’est mémorisé, effectuons un appui sur le bouton, puis relisons HIRQ :

pido read 3
1

Nous pouvons effectuer maintenant la lecture des actions avec i2cget en lisant le registre 2 à l’adresse 0x3f :

sudo i2cget -y 0 0x3f 2
0x05

D’après l’exigence id=1.10.3, cela correspond à un appui (bit 7 à 0) au centre.

Une nouvelle lecture de HIRQ, nous apprend qu’il y a encore des actions disponibles :

pido read 3
1

Qu’on peut lire :

sudo i2cget -y 0 0x3f 2
0x85

Cela correspond à un relâchement (bit 7 à 1 0x80) du centre (0x05). Une nouvelle lecture de HIRQ, nous apprend qu’il n’y a plus d’action disponible.

pido read 3
0

Le test en ligne de commande du LCD à l’adresse 0x3e est un peu plus complexe car il nécessite de se pencher sur le datasheet du ST7032i… Nous verrons sa programmation dans le prochain article… 🙂

Installer Armbian dans la mémoire eMMC d’une carte Nano Pi

Certaines cartes Nano Pi disposent de mémoire eMMC. C’est le cas des Nano Pi Neo Core et Neo Core2, mais aussi de la Neo Plus2.
Cette mémoire change radicalement l’utilisation possible de ces cartes Nano Pi, en autorisant leur utilisation dans un contexte industriel. En effet, la mémoire MMC (cartes SD ou microSD) dont sont équipées la plupart des cartes concurrentes, comme les cartes Raspberry Pi, a la fâcheuse tendance à rendre l’âme sans prévenir au bout de quelques mois d’utilisation. Il suffit de lancer une recherche sur un moteur de recherche avec les mots clés { sd card corrupted raspberry pi } pour comprendre le problème.

Les cartes Nano Pi équipées de mémoire de mémoire eMMC sont livrées avec le système d’exploitation « maison » qui est une version modifiée de ArmBian basé sur Ubuntu Xenial. Bien que ce choix soit celui de la simplicité, il amène à se pencher, dans un contexte industriel, sur la pérennité, l’évolutivité et la sécurité de cette solution.

La distribution ArmBian prenant en charge les cartes Nano Pi, il apparaît bien plus intéressant de se tourner vers cette solution. Cette solution permettra, par exemple, de recompiler « rapidement » les paquets du noyau (BSP) afin d’y intégrer des drivers absents de l’image par défaut (IIO par exemple). ArmBian fournit le script compile.sh qui permet de faire cela très simplement.

Dans cet article, nous allons voir comment installer ArmBian dans la mémoire eMMC d’une carte Nano Pi Core LTS. Cette carte sera implantée dans son mini-shield afin de pouvoir effectuer le prototypage.

Nous utiliserons comme environnement de travail un PC sous GNU Linux, car c’est beaucoup plus simple de travailler sur une carte Nano Pi à partir d’un PC sous GNU Linux. Pour ceux qui en doute, il suffit de se reporter à mon article sur Codelite.

Téléchargement de l’image ArmBian

L’image que nous avons choisi est la version Stretch basée sur Debian. Elle peut être téléchargée sur la page de téléchargement de ArmBian consacrée à la carte NanoPi Neo (et Core).

Une fois le fichier archive 7z téléchargé, puis décompressé on oubliera pas de vérifier la signature SHA256 du fichier afin de vérifier son intégrité…

$ 7za e Armbian_5.69_Nanopineo_Debian_stretch_next_4.19.13.7z 

7-Zip (A) [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=fr_FR.UTF-8,Utf16=on,HugeFiles=on,8 CPUs)

Processing archive: Armbian_5.69_Nanopineo_Debian_stretch_next_4.19.13.7z

Extracting  Armbian_5.69_Nanopineo_Debian_stretch_next_4.19.13.img
Extracting  Armbian_5.69_Nanopineo_Debian_stretch_next_4.19.13.img.asc
Extracting  armbian.txt
Extracting  sha256sum.sha

Everything is Ok

Files: 4
Size:       1103121482
Compressed: 266049577
$ sha256sum -c sha256sum.sha 
Armbian_5.69_Nanopineo_Debian_stretch_next_4.19.13.img: Réussi

Écriture de l’image sur carte microSD

Pour écrire l’image dans la mémoire eMMC, il faudra passer par une carte microSD. Une fois le système transféré en eMMC, cette carte SD pourra être retirée. La solution la plus simpliste pour écrire une image sur une carte SD est dd, mais il existe une solution beaucoup plus confortable et « sécurisée », elle s’appelle Etcher.

Balena Etcher en action

Je vous conseille donc d’utiliser Etcher pour écrire votre image sur la carte microSD. Pour l’installer proprement, il est préférable d’ajouter le dépôt de paquets :

echo "deb http://deb.etcher.io stable etcher" | sudo tee /etc/apt/sources.list.d/balena-etcher.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 379CE192D401AB61
sudo apt-get update
sudo apt-get install balena-etcher-electron

Démarrage de la carte Nano Pi sur la carte microSD

Une fois l’image écrite sur la carte microSD, il suffit de l’insérer dans la carte Nano Pi et de l’alimenter.

La première connexion se fera sur la liaison série de débogage (UART0). On utilisera pour ce faire, un adaptateur série-USB connecté au connecteur DBG_UART du mini-shield et un logiciel d’émulation de terminal comme gtkTerm ou minicom.

Lors de la première connexion, le mot de passe root est ‘1234’. Il devra être modifié pour un plus sûr ;-| et vous aurez la possibilité de créer un utilisateur. Je vous conseille de créer un utilisateur pi dans un premier temps.

Transfert du système en mémoire eMMC

Pour transférer le système de la microSD vers la mémoire eMMC, il suffit d’utiliser la commande :

sudo nand-sata-install 

On choisira ensuite le menu system on eMMc puis le type ext4.

Après quelques minutes de patience… On arrêtera proprement le système. Après coupure de l’alimentation, on retirera la carte microSD avant de redémarrer sur la mémoire eMMC… 🙂