Hey! Sie scheinen aus United States zu kommen, möchten Sie auf die Englisch Webseite wechseln?
Switch to Englisch site
Skip to main content

So erstellen Sie eine FPGA-basierte IoT-Anwendung mit Python

Das Internet der Dinge (IoT) ist nicht mehr nur ein Schlagwort. In jüngster Zeit können Sie eine Reihe von IoT-Applikationen in verschiedenen Branchen und im Bereich der Unterhaltungselektronik erleben. Zu den beliebten IoT-Anwendungen gehören Smart-Home, am Körper getragene Geräte, vernetzte Fahrzeuge, das industrielle IoT und die digitale Landwirtschaft.

Die FPGAs von Xilinx sind im industriellen IoT weit verbreitet, da sie eine flexible, normbasierte Lösung bieten, die Software-Programmierbarkeit, Echtzeitverarbeitung, Hardwareoptimierung und Any-to-Any-Konnektivität mit der für industrielle IoT-Systeme notwendigen Sicherheit verbindet. Die Xilinx Zynq Systems-on-Chip (SoCs) sind mit einem Prozessor von Arm und einer Logikstruktur ausgestattet. Entwickler können damit eingehende Daten mittels der programmierbaren Logik mit hoher Geschwindigkeit vorverarbeiten und dann softwarebasierte Operationen auf dem Prozessor durchführen. 

Python wird aufgrund seiner Einfachheit und Lesbarkeit häufig in der Entwicklung von IoT-Anwendungen eingesetzt. Für die Datenanalyse in IoT-Systemen ist Python die perfekte Wahl. Aufgrund der großen Community können Entwickler bei Bedarf Hilfe und Bibliotheksdateien finden. Für datenintensive Anwendungen ist es die ideale Sprache.

Xilinx PYNQ ist ein neues Open-Source-Framework, das es Entwicklern von Embedded Systemen ermöglicht, die Möglichkeiten der Xilinx Zynq All Programmable SoCs (APSoCs) auszuschöpfen, ohne programmierbare Logikschaltungen entwerfen zu müssen. Die programmierbaren Logikschaltungen werden als Hardwarebibliotheken importiert und über ihre APIs prinzipiell genau so programmiert, wie auch Softwarebibliotheken importiert und programmiert werden. Die Verwendung von Python innerhalb von PYNQ ermöglicht einen einfachen Zugang und die einfache  Verwendung von High-Level-Frameworks, einschließlich derer, die uns mit dem Internet der Dinge (IoT) und Cloud-basierten Diensten verbinden.

Adam Taylor, ein Experte für die Entwicklung von Embedded Systemen, benutzt für die Erstellung einer IoT-Anwendung Xilinx PYNQ Image, Python, die Zybo Z7 Xilinx Zynq SoC Plattform von Digilent, die Xilinx Zynq SoC Plattform, das ALS Ambient Light Sensor Pmod von Digilent , den IFTTT Farbton-Dienst und Adafruit IO. Adam installiert zuerst PYNQ auf dem Zybo Z7 und schreibt anschließend die Applikation in Python. Danach verbindet er die Hardware (Zybo Z7 und Pmod ALS mit dem Internet und verwendet Adafruit IO und IFTTT, um die IoT-Anwendung auszuführen.

Laden des PYNQ-Frameworks auf das Zybo Z7

Die Applikation wird auf einem Linux-Rechner entwickelt. Zunächst einmal verwendet Adam eine virtuelle Maschine mit Ubuntu 16.04  (Anmerkung: Falls Sie mehr Informationen zur Erstellung der Build-Umgebung benötigen, lesen Sie diesen Blog zur PYNQ-Edition. Dann klont Adam das PYNQ-Verzeichnis aus dem Github. 

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

Sobald dieses heruntergeladen ist, erstellt er die Basisanwendung in der Xilinx Vivado Design Suite und verwendet die im Verzeichnis /PYNQ/Boards/IP verfügbare IP.  Da der Umgebungslichtsensor des Pmods verwendet wird, verwendet Adam die PYNQ Input Output Prozessoren (IOP), bei denen es sich um Microblaze-Prozessoren handelt, die mit einem Ein-/Ausgangsschalter verbunden sind, um einige digitale Kommunikationsprotokolle zu unterstützen. 

IoP_Implementation_in_Xilinx_Vivado1_21efe870c6d317074717512029b4bb8d6379ce92.jpg

IoP-Implementation in Xilinx Vivado

image_LWKZy4VagE1_09efbbf9db257680daf4e5a6bb6a93ddae79ca02.png

Zybo Z7 PYNQ Schaltung

Sobald das Basisdesign in Vivado integriert ist, muss Adam es in die Xilinx PetaLinux-Tools exportieren und ein PetaLinux-Project erstellen. PetaLinux ist eine eingebettete Linux-Entwicklungslösung mit der Benutzer Linux auf FPGAs von Xilinx einsetzen können  (wenn Sie mit PetaLinux nicht vertraut sind, können Sie sich den Abschnitt „Erste Schritte mit PetaLinux“ im Digilent Wiki durchlesen). 

Adam führt die folgenden Befehle aus, um das PetaLinux-Abbild zu erstellen, Der Vorgang kann einige Minuten dauern. 

petalinux-create — type project — template zynq — name zybo

petalinux-config — get-hw-description

Petalinux-build

Sobald das PetaLinux-Image erzeugt ist, stellt Adam sicher, dass das Linux-Image auf der Hardware läuft. Er testet es mit den nachfolgenden Befehlen, welche das Image mit Hilfe des JTAG-Links auf das Zybo Z7 laden und starten.  

petalinux-boot –-jtag –-fpga

petalinux-boot –-jtag –-kernel

Danach bereitet er ein Board-Support-Package (BSP) für die Erstellung des PYNQ-Images vor. Zuerst muss er das Image verpacken. 

petalinux-package --boot --fsbl zynq_fsbl.elf --u-boot u-booot.elf --fpga system.bit

Dies erzeugt die Datei boot.bin, die zum Booten von einer SD-Karte benötigt wird. Sobald die Boot-Dateien bereit sind, benutzt er den folgenden Befehl, um das BSP zu erzeugen. 

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

Sobald das BSP bereit ist, generiert er das PYNQ-Image.

Dazu legt er im Verzeichnis pynq/boards eine neue Board-Definition an. Dann fügt er dem ZYBO-Ordner das BSP, die Bit-Datei und eine Board-Definition hinzu.

New_ZYBO_Folder1_d784319282360fd311580c0accfed396bfb33f87.jpg

Neu erstellter Ordner Zybo

ZYBO_specification1_6ebe8f002c79c09442ba3bfec81a2bc69e01b2c0.jpg

Inhalt des Ordners Zybo

Danach benutzt er den folgenden Befehl um das PYNQ-Image aus dem Verzeichnis pynq/sdbuild heraus zu erzeugen.

make BOARDS=zybo

Sobald das Image erstellt wurde, steht es im Verzeichnis pynq/sdbuild/output zur Verfügung.

Output_Image1_d4d028a0ac6961b75106091bf27b8f92ea87ff52.jpg

Erstellung der IoT-Applikation

Die Anwendung misst das Umgebungslicht mit einem Pmod ALS und sendet diesen Wert anschließend in die Cloud. Dort wird dann der Dienst „If This Than That“ (IFTTT) benutzt, um Philips Hue Lichter ein- oder auszuschalten. Dazu verwendet er die Adafruit IO Cloud, die Message Queuing Telemetrie (MQTT) benutzt. Benutzer müssen ein Konto unter http://adafruit.io/ anlegen und die Adafruit IO Bibliothek installieren.

Nach der Einrichtung des Kontos werden AIO-Schlüssel generiert, die auf der linken Seite unter „View AIO Key“ angezeigt werden. Diese Schlüssel werden in der Python-Anwendung benötigt. Als nächstes muss der Feed erstellt werden, in den das Zybo-Board die Daten schreibt. Adam öffnet in der PYNQ-Umgebung ein Terminalfenster und installiert mit dem untenstehenden Befehl die Adafruit IO-Pakete.

pip3 install adafruit.io

Nach dem Download des Pakets schreibt Adam die nachstehenden Python-Skripte in das PYNQ-Notebook (Sie können sie unter https://pynq.readthedocs.io/en/v2.0/jupyter_notebooks.html herunterladen). Das Programm frägt den ALS-Sensor alle 5 Sekunden ab und schiebt diese Daten in die Adafruit-Cloud.

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 benutzt den IFTTT-Dienst, um den Adafruit IO Cloud-Feed zu überwachen. Abhängig vom Wert im Feed kann das Philips Hue Licht dann ein- oder ausgeschaltet werden. Zu diesem Zweck legt er ein IFTTT-Konto an und erstellt ein neues Applet. Dann verbindet er den IFTTT-Dienst mit Adafruit IO und wählt die richtige Bedingung aus, um das Philips Hue Licht zu steuern. 

Connect_IFTTT_with_Adadruit_IO1_a151057622a96af69cd6d68786689ad4f979870b.jpg

Die Projektdetails finden Sie auf der Projekt-Seite von Digilent. Zusätzliche Informationen zur Entwicklung mit dem Xilinx FPGA / SoC finden Sie wöchentlich in den MicroZed Chronicles.

 
awong hat noch keine Biografie verfasst...
DesignSpark Electrical Logolinkedin