嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

使用 Python 创建基于 FPGA 的 IoT 应用程序

物联网 (IoT) 不再只是一个流行词。 最近,您可以在不同行业和消费电子市场看到一系列物联网应用。 流行的物联网应用包括智能家居、可穿戴、联网汽车、工业物联网和精准农业

Xilinx FPGAs 已广泛用于工业物联网 (IIoT),因为其 FPGA 提供了一种灵活的、基于标准的解决方案,该解决方案将软件可编程性、实时处理、硬件优化和任意连接与工业所需的安全性和安全性相结合 物联网系统。 Xilinx Zynq SoC 配备 ARM 处理器和逻辑架构,让工程师和开发人员可以使用可编程逻辑对高速输入数据进行预处理,然后在处理器中执行基于软件的操作。

Python因其简单性和可读性而常用于物联网应用程序开发。 它是物联网系统中数据分析的正确选择。 由于社区很大,开发人员可以在需要时找到帮助和库。 它是数据密集型应用程序的理想语言。

Xilinx PYNQ 是一个新的开源框架,使嵌入式程序员能够利用 Xilinx Zynq All Programmable SoC (APSoC) 的功能,而无需设计可编程逻辑电路。 可编程逻辑电路作为硬件库导入并通过其 API 进行编程,其方式与软件库的导入和编程方式基本相同。 在 PYNQ 中使用 Python 可以轻松访问和使用高级框架,包括那些将我们连接到物联网 (IoT) 和基于云的服务的框架。

Adam Taylor, 嵌入式系统设计专家, 使用 Xilinx PYNQ image、Python、Digilent ZYBO Z7、Xilinx Zynq Soc Platform (164-3487) , 、Xilinx Zynq SoC Platform、Digilent Pmod ALS Ambient Light Sensor (134-6463) , IFTTT Hue service 和 adafruit.io 来创建一个 IoT 应用程序。 Adam 首先将 PYNQ 放在 ZYBO Z7 上,然后在 Python 上编写应用程序。 之后,他将硬件(Zybo Z7 + Pmod ALS)与互联网连接,并利用 Adafruit.io 和 IFTTT 运行 IoT 应用程序。

在 ZYBO Z7 上加载 PYNQ 框架

该应用程序是在 Linux 机器上设计的。 首先,Adam 使用带有 Ubuntu 16.04 的虚拟机。 (注意:如果您需要有关创建构建环境的更多信息,请查看此PYNQ Edition blog)。 然后,Adam 从 github 克隆 PYNQ 目录。

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

下载后,他在 Xilinx Vivado 设计套件中创建基本应用程序,并使用 /PYNQ/Boards/IP 目录中的可用 IP。 由于使用了 Pmod 环境光传感器,Adam 使用 PYNQ 输入输出处理器 (IOP),它是连接到输入/输出开关的 Microblaze 处理器,以支持一些数字通信协议。

IoP_Implementation_in_Xilinx_Vivado_261ba0b9bcb609a07729116745b0d2d8c1800278.jpg

IoP Implementation in Xilinx Vivado

image_LWKZy4VagE_09efbbf9db257680daf4e5a6bb6a93ddae79ca02.png

ZYBO Z7 Base PYNQ Design

一旦基础设计内置 Viavdo,Adam 需要将其导出到 Xilinx PetaLinux 工具并创建一个 PetaLinux 项目。 PetaLinux 是一种嵌入式 Linux 开发解决方案,用户可以在 Xilinx FPGA 上部署 Linux。 (如果您不熟悉 PetaLinux,可以查看Digilent Wiki中的 PetaLinux 入门)。

Adam 运行以下命令来构建 PetaLinux 映像。 该过程可能需要几分钟。

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

构建 PetaLinux 映像后,Adam 会确保 Linux 映像在硬件上运行。 他通过以下命令对其进行测试。 这使用 JTAG 链接将映像下载到 ZYBO Z7 并运行映像。

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

之后,他为 PYNQ 映像创建过程准备了一个板级支持包 (BSP)。 首先,他需要对图像进行打包。

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

这将创建从 SDCard 启动所需的 boot.bin。 启动文件可用后,他使用以下命令创建 BSP。

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

在 BSP 可用的情况下,他创建了 PYNQ 映像。

为此,他在文件夹 pynq/boards 中创建了一个新的板定义。 在 ZYBO 文件夹中,他包含 BSP、Bit 文件和电路板定义。

New_ZYBO_Folder_088a67d277c69567ba51abe70ac19179625c130b.jpg

新建 ZYBO 文件夹

ZYBO_specification_374e60a56f8135fcbd18c99700607d568c35129a.jpg

ZYBO 文件夹内

然后,他使用以下命令从 pynq/sdbuild 目录中构建 PYNQ 映像

make BOARDS=zybo

完成后,该映像在 pynq/sdbuild/output 下可用。

Output_Image_80623e2075447ab8346b87bc55e497a1a25084b4.jpg

PYNQ 输出图像

物联网应用开发

该应用程序是使用 Pmod ALS 对环境光级别进行采样,并将该值写入云端,然后使用 If This Then That (IFTTT) 来打开或关闭 Phillips Hue 灯。 为此,他使用了使用消息队列遥测 (MQTT) 的Adafruit.io 云。 用户需要在http://adafruit.io/ 上设置一个帐户并安装adafruit.io 库。

创建帐户后,会创建 AIO 密钥,可以在左侧标有“查看 AIO 密钥”的下方找到。 Python 应用程序中需要这些密钥。 下一步是创建 ZYBO 将向其推送数据的提要。 在 PYNQ 环境中,Adam 打开一个终端并使用以下命令安装adafruit.io 包。

pip3 install adafruit.io

下载包后,Adam 在 PYNQ 笔记本中编写以下 Python 脚本。 (您可以在https://pynq.readthedocs.io/en/v2.0/jupyter_notebooks.html下载)。 该代码将每 5 秒对 ALS 传感器进行一次采样,并将采样数据推送到 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 使用 IFTTT 监控 adafruit.io 云提要。 根据提要中的值,然后可以打开或关闭 Phillips Hue 灯。 为此,他创建了一个 IFTTT 帐户并创建了一个新的小程序。 他将 IFTTT 与 adafruit.io 连接起来。 并选择合适的条件来控制飞利浦 HUE 灯。

Connect_IFTTT_with_Adadruit_IO_3778e98078b096e8994618a07c6a7134fb667dd2.jpg

您可以在 Digilant 项目页面上找到项目详细信息。 每周可在 MicroZed Chronicles 上找到有关 Xilinx FPGA / SoC 开发的更多信息。

 

                                                                                            

awong 还没写个人简介...