Hé! Vous semblez être en United States, souhaitez-vous utiliser notre site English ?
Switch to English site
Skip to main content

Créer une application IoT basée sur le FPGA par Python

L'Internet des objets (IoT) n'est plus un simple mot à la mode. Depuis peu, vous pouvez trouver toute une série d'applications de l’IoT dans différents secteurs et marchés de l'électronique grand public. Parmi les applications les plus populaires de l’IoT figurent la maison intelligente, la voiture connectée, l’IoT industriel et l'agriculture de précision.

Les FPGA de Xilinx sont fréquemment utilisés dans l'IoT industriel (IIoT) car ils offrent une solution flexible et standardisée qui allie la programmabilité logicielle, le traitement en temps réel, l'optimisation matérielle et la connectivité point à point avec la sécurité et la sûreté nécessaires aux systèmes IoT industriels. Le SoC Zynq de Xilinx équipé d'un processeur ARM et d'une matrice logique permet aux ingénieurs et aux développeurs de prétraiter les données entrantes à grande vitesse à l'aide d'une logique programmable, puis d'effectuer des opérations logicielles dans le processeur.

Python est couramment utilisé dans le développement d'applications IoT en raison de sa simplicité et de sa lisibilité. C'est le meilleur choix pour l'analyse des données dans les systèmes IoT. En raison de la grande communauté, les développeurs peuvent trouver de l'aide et des bibliothèques en fonction de leurs besoins. C'est le langage idéal pour les applications exigeantes en données.

PYNQ de Xilinx est un nouveau cadre de développement à code source ouvert qui permet aux programmeurs embarqués d'exploiter les capacités des SoC Zynq entièrement programmables de Xilinx (APSoC) sans avoir à concevoir de circuits logiques programmables. Les circuits logiques programmables sont importés sous forme de bibliothèques matérielles et programmés par l'intermédiaire de leurs API, essentiellement de la même manière que les bibliothèques logicielles sont importées et programmées. L'utilisation de Python dans PYNQ permet d'accéder et d'utiliser facilement des cadres de développement de haut niveau, y compris ceux qui nous connectent à l'Internet des objets (IoT) et aux services de cloud computing.

Adam Taylor, expert en conception de systèmes embarqués, utilise l'image PYNQ de Xilinx, Python, la ZYBO Z7 de Digilent, la plate-forme SoC Zynq de Xilinx, la plate-forme SoC Zynq de Xilinx, le capteur de lumière ambiante PmodALS de Digilent, le service IFTTT Hue et adafruit.io pour créer une application IdO. Adam met d'abord PYNQ sur la ZYBO Z7 puis écrit l'application sur Python. Ensuite, il connecte le matériel (Zybo Z7 + PmodALS) à l'Internet et utilise adafruit.io et IFTTT pour exécuter l'application IdO.

Charger le cadre de développement PYNQ sur la ZYBO Z7

L'application est conçue sur une machine Linux. Tout d'abord, Adam utilise une machine virtuelle avec Ubuntu 16.04. (Remarque : si vous avez besoin de plus amples informations sur la création de l'environnement de compilation, consultez le blog PYNQ Edition) Adam clone ensuite le répertoire PYNQ à partir du github.

git clone https://github.com/Xilinx/PYNQ.git

Une fois celui-ci téléchargé, il crée l'application de base dans Vivado Design Suite de Xilinx et utilise l'IP disponible dans le répertoire /PYNQ/Boards/IP. Comme le capteur de lumière ambiante PmodALS est utilisé, Adam se sert des processeurs entrée/sortie (E/S) PYNQ, des processeurs Microblaze se connectant à un commutateur d'entrée/sortie pour prendre en charge certains protocoles de communication numérique.

IoP_Implementation_in_Xilinx_Vivado2_11ce8914e7c5532c2f0fc9f5d3c9a0143d1a2f69.jpg

Mise en œuvre du processeur E/S dans Vivado de Xilinx

image_LWKZy4VagE2_09efbbf9db257680daf4e5a6bb6a93ddae79ca02.png

Conception PYNQ de base ZYBO Z7

Une fois que la conception de base est construite dans Vivado, Adam doit l'exporter vers les outils PetaLinux de Xilinx et créer un projet PetaLinux. PetaLinux est une solution de développement Linux intégrée qui permet aux utilisateurs de déployer Linux sur les FPGA de Xilinx. (Si vous n'êtes pas familiarisé avec PetaLinux, vous pouvez consulter le document « Démarrer avec PetaLinux » sur le wiki de Digilent.)

Adam exécute les commandes suivantes pour construire l'image PetaLinux. Le processus peut prendre quelques minutes.

petalinux-create — type project — template zynq — name zybo
petalinux-config — get-hw-description 
Petalinux-build 

Une fois l'image PetaLinux construite, Adam s'assure que l'image Linux fonctionne sur le matériel. Il la teste grâce aux commandes suivantes. Celles-ci permettent de télécharger l'image sur la ZYBO Z7 en utilisant le lien JTAG et d'exécuter l'image.

petalinux-boot –-jtag –-fpga
petalinux-boot –-jtag –-kernel

Ensuite, il prépare un « board support package » (BSP) pour le processus de création d'images PYNQ. Tout d'abord, il doit empaqueter l'image.

petalinux-package --boot --fsblzynq_fsbl.elf --u-bootu-booot.elf --fpgasystem.bit

Cela permettra de créer le boot.bin nécessaire pour démarrer à partir d'une carte SD. Une fois que les fichiers de démarrage sont disponibles, il utilise la commande suivante pour créer le BSP :

petalinux-package --bsp -p zybo -o zybo_pynq.bsp

Une fois le BSP disponible, il crée l’image PYNQ.

Pour ce faire, il crée une nouvelle définition de la carte dans le dossier pynq/boards. Dans le dossier ZYBO, il inclut le BSP, le fichier Bit et une définition de la carte.

New_ZYBO_Folder2_e5c089b66f214901c29214e73349982c8619aecc.jpg

Nouveau dossier ZYBO

ZYBO_specification2_439e4f9d2be02bfd63f29874bb9f07df93a2fa72.jpg

Dans le dossier ZYBO

Il utilise ensuite la commande suivante pour construire l'image PYNQ à partir du répertoire pynq/sdbuild :

make BOARDS=zybo

Une fois terminée, l'image est disponible sous pynq/sdbuild/output.

Output_Image2_f7998284557180bd6d74e24aab7d480bb13d2f9b.jpg

Image de sortie PYNQ

Développement de l’application IdO

'application consiste à échantillonner le niveau de lumière ambiante en utilisant un capteur de lumière ambiante PmodALS et à écrire cette valeur sur le nuage, puis à utiliser « If This Then That » (IFTTT) pour allumer ou éteindre les lumières Phillips Hue. Pour commencer, il utilise le nuage Adafruit.io qui fait appel au « Message Queuing Telemetry Transport » (MQTT). Les utilisateurs doivent créer un compte sur http://adafruit.io/ puis installer la bibliothèque adafruit.io.

Après la création d'un compte, des clés AIO sont créées et se trouvent à gauche sous la rubrique "Afficher la clé AIO". Ces clés sont requises dans l'application Python. L'étape suivante consiste à créer le flux auquel la ZYBO enverra les données. Dans l'environnement PYNQ, Adam ouvre un terminal et installe les paquets adafruit.io à l’aide de la commande suivante :

pip3 install adafruit.io

Une fois le paquet téléchargé, Adam écrit les scripts Python ci-dessous dans le carnet PYNQ. (Vous pouvez les télécharger à l'adresse suivante: https://pynq.readthedocs.io/en/v2.0/jupyter_notebooks.html.)Le code échantillonnera le capteur ALS toutes les 5 secondes et enverra les données échantillonnées vers le nuage Adafruit.

from pynq.overlays.base import BaseOverlay
from pynq.lib import Pmod_ALS 
from Adafruit_IO import Client
import time
overlay = BaseOverlay("base.bit")
overlay.is_loaded()
aio = Client('NAME', 'ID') 
try:
   while True:
       illum = my_als.read()
       aio.send('illumination', illum)
       time.sleep(5)
except KeyboardInterrupt:
       print("CTRL-C!! Exiting...")

Adam utilise ensuite l'IFTTT pour surveiller le flux de données du nuage adafruit.io. n fonction de la valeur du flux, la lumière Phillips Hue peut être allumée ou éteinte. Pour ce faire, il crée un compte IFTTT et crée un nouvel applet. Il connecte l'IFTTT à adafruit.io et choisit la bonne configuration pour contrôler la lumière Philips HUE.

awong n'a pas encore rempli le champs " à propos de moi" ...
DesignSpark Electrical Logolinkedin