Python教程-Python与物联网
一般来说,原型或真实的物联网(IoT)系统需要快速而高效地设计和开发。每当出现这种情况时,立刻涌现出两个活动:一个是为IoT设备编程,另一个是组织后端以与这些设备进行交互。
在这两个活动中,我们都可以利用Python编程语言进行开发。或者,我们可以使用功能齐全而实用的MicroPython版本来处理计算资源有限且价格低廉的设备。
在以下教程中,我们将了解Python在编程物联网(IoT)设备方面的用途,并为其创建一个后端。
但在讨论这些内容之前,让我们简要讨论一下物联网的重要性。
了解物联网的重要性
术语“物联网”最早由Kevin Ashton于1999年首次提出。自那以后,物联网的重要性和规模迅速增长,其中一个主要指标是,物联网市场在2018年达到了1510亿美元,而且每年都在稳步增长。根据市场预测,到2022年,物联网市场的规模可能会超过5610亿美元。
过去,我们可以通过以下示例来解释物联网:
“我们可以使用手机来控制房间里的灯泡开关。”
如今,几乎没有人会对智能电表感到惊讶,它可以传输电力消耗的读数,将这些信息上传到云端,并直接发送每月账单到电子邮件。
物联网在各个行业中越来越被广泛应用,以优化流程并提高效率。例如,制造生产线和农业是物联网不同特性的众多行业的绝佳例子。在农业的特定场景中,物联网有助于协调具有提升粮食处理能力的升降机的卡车和收割机。
为什么在物联网中使用Python?
对于许多开发人员来说,Python被认为是市场上的首选语言。它易于学习,语法清晰,并且有庞大的在线社区支持。Python在物联网方面是一个很好的选择。我们可以将其用于开发后端或设备的软件开发。此外,Python可用于在Linux设备上工作,我们可以使用MicroPython来开发微控制器。
Python是编写物联网项目所需处理的数据量的编程语言,无论是从头开始创建物联网项目还是与执行器、传感器和附件进行交互,Python都可以满足需求。
使用Python开发物联网设备的众多好处之一是拥有大量适用于各种平台的库以及代码开发速度。
Python是开发设备原型的强大伙伴。即使在生产C、C++或Java的同时重新编写一些脚本以提高性能,系统通常仍然能够在Python中完美运行。
Python中物联网的最佳解决方案是什么?
Python编程语言中用于物联网的一些最佳解决方案如下:
- 树莓派上的Python
- PyBoard上的Python
- 使用MicroPython的ESP8266和ESP32
我们将简要讨论每个解决方案。
树莓派上的Python
首先想到的是在IoT设备上运行Python的主要目标是从树莓派上获取Python。Python已经预安装在操作系统中,我们只需编写代码脚本即可。
在这种情况下,我们可以控制树莓派的扩展板上的I/O端口。幸运的是,树莓派支持无线通信(蓝牙和WiFi)和以太网。我们还可以连接显示器到HDMI输出,专用的3.2英寸320x240 TFT液晶显示器,或者低能耗的2.13英寸250x122的E-Ink显示屏。
控制器具有各种计算能力和预算。我们可以选择这些控制器用于IoT系统,从快速的树莓派4型B 8 GB到最小的树莓派Zero,所有这些都支持Python编程语言。如果需要,我们可以安装以前版本的Python 2.7以实现向后兼容。
让我们考虑以下Python代码片段,其中我们使用GPIO Zero库来控制I/O端口。
示例:
# importing the required modules
from gpiozero import Button
from time import sleep
# creating an object of Button
the_button = Button(2)
# using the if-else statement
while True:
if the_button.is_pressed:
print("Button Pressed")
else:
print("Button Released")
sleep(1)
说明:
上述示例演示了在按钮按下时接收和处理信号的过程。
使用这种方法的好处在于有大量的开发工具、库和用于基于树莓派的复杂设备的通信。
PyBoard上的Python
在物联网设备中使用Python的另一个出色解决方案是带有STM32F405RG微控制器的PyBoard。
PyBoard被认为是一款紧凑而功能强大的电子开发板。它运行MicroPython。PyBoard通过USB连接到计算机,为我们提供了一个USB闪存驱动器,用于存储Python脚本和即时编程的串行Python提示(REPL)。它支持Windows、MacOS和Linux。
PyBoard执行MicroPython,这是标准CPython解释器的轻量级实现。官方文档还指出:“MicroPython是Python 3编程语言的紧凑和高效实现,包括Python标准库的一小部分,经过优化,可在微控制器和受限环境中运行。MicroPython pyboard是一块紧凑的电子电路板,可在裸金属上运行MicroPython,为您提供了一个低级别的Python操作系统,可用于控制各种电子项目。MicroPython具有诸多高级功能,如交互提示、任意精度整数、闭包、列表理解、生成器、异常处理等等。但它足够紧凑,可以在仅256k的代码空间和16k的RAM内运行。”
MicroPython是Python(版本3.4)编程语言的全新重写,旨在适应和执行在微控制器上。它包括各种优化以提高效率并降低内存消耗。
MicroPython在PyBoard上以裸金属方式执行,因此为我们提供了一个基于Python的操作系统。内置的pyb模块包括用于控制板上可用的外围设备(如I2C、UART、ADC、DAC和SPI)的函数和类。
该板的尺寸令人印象深刻,大约占据了两个硬币大小,33mm x 43mm,重量仅6克。
使用MicroPython的ESP8266和ESP32
另一个选择是使用ESP8266和ESP32来运行Python。我们可以创建一个基于物联网的设备,具有低功耗、强大的功能和与无线WiFi网络的集成。更准确地说,我们可以使用MicroPython。
一旦我们在系统上安装了Python,我们可以在命令行中使用pip安装esptool模块。其语法如下:
语法:
$ pip install esptool
MicroPython的安装过程非常简单。我们可以从网站上下载固件,然后使用esptool安装它,不要忘记在安装之前格式化板。
我们还可以使用用于MicroPython开发的IDE之一。开发的整个过程在工作计算机上进行,然后在ESP8266或ESP32微控制器的内存中进行编译和保存。
让我们考虑以下示例,看看脚本可能是多么简单:
示例:
# importing the required modules
from machine import Pin
import time
# creating an object of Pin
ledPin = Pin(2, Pin.OUT)
# using some functions
while True:
ledPin.on()
time.sleep(1)
ledPin.off()
time.sleep(1)
说明:
在上面的代码片段中,我们从machine库中导入Pin模块以及time模块。然后,我们创建了一个Pin对象并对其执行一些函数。
与常规Python相比,MicroPython有许多限制,但总体来说,我们可以在客户端侧轻松编写所需的功能,并在ESP微控制器上有效执行它。这个选项相对于购买PyBoard来说成本相对更低。
了解Python在IoT后端中的用途
我们可以以多种方式将Python用作物联网的后端编程语言。其中一些方式如下:
使用Python的MQTT协议
物联网设备最流行的连接方法之一是MQTT,它是一种用于Python有效实施的协议。
MQTT协议是一种面向机器到机器(M2M)/物联网的连接协议,被设计为高度轻量级的发布/订阅消息传输。它用于连接需要小代码占用空间和网络带宽高昂的远程位置。
Python客户端库称为Eclipse Paho MQTT实现了MQTT协议的版本3.1、3.1.1和5.0。
Paho库的代码提供了一个客户端类,允许应用程序连接到MQTT代理以发布消息、订阅主题和接收发布的消息。它还提供了一些辅助函数,以使将一次性消息发布到MQTT服务器变得更简单。
此外,此库支持Python 2.7.9及以上版本或3.5及以上版本。与旧版2.7的Python集成相对简单。
使用Python中的Flask构建IoT后端
我们还可以使用Flask微框架编写物联网系统的后端。Flask微框架是一个快速且无痛的工具,可以轻松设置服务器端I/O信息,而且还具有许多使工作更高效的功能。
首先,我们可以确定我们必须为物联网设备提供哪些请求。然后,我们必须设置Flask微框架并编写一段代码。使用GET方法将根据客户端的请求返回信息。
在许多情况下,在处理物联网设备时,最好专注于RESTful协议。这使我们能够简化系统组件之间的交流,并帮助我们将来扩展信息交换系统。
让我们考虑以下任务:在Web页面上显示物联网设备的信息。Flask微框架将再次通过其核心模板机制拯救我们,在这里,我们可以使用包含图形数据的数据设计所需的Web页面。
利用这种方法的缺点是可能会出现从服务器到设备的数据传输起点不明确的问题。因此,物联网必须定期并独立地从服务器拉取数据。不过,请放心,有方法来报告这个风险。我们可以利用Web套接字或Pushsafer的Python库。PushSafer是一种简单而安全的方式,可以实时发送和接收推送通知到Android、iOS和Windows设备(包括移动设备和桌面设备),还支持互联网浏览器,如Google Chrome、Mozilla Firefox、Opera等等。
Microsoft Azure IoT Python后端
微软发布了一款用于扩展Azure CLI 2.0功能的新开源IoT扩展。Azure CLI 2.0包括与Azure资源管理器和管理终端点交互的命令。
例如,我们可以利用Azure CLI 2.0来创建Azure虚拟机或IoT Hub。CLI的扩展允许Azure服务通过提供用户访问特定于服务的附加功能来补充Azure CLI。
IoT扩展为程序员提供了IoT Edge、IoT Hub和IoT Hub设备预配服务的命令行访问能力。
Azure CLI 2.0允许即时管理Azure IoT Hub资源、设备预配服务实例以及相关的中心。新的IoT扩展丰富了Azure CLI 2.0,包括设备管理和所有IoT Edge功能:
- Azure CLI 2.0 IoT功能 - 控制平面
- 管理IoT Hub实例、消费者组和作业
- 管理设备预配服务实例、访问策略、关联中心和证书
- 扩展的新特性 - 数据平面
- 管理设备和边缘模块身份及其相应的双生定义
- 查询IoT Hub以获取设备和模块作业、双生和消息路由等详细信息
- 调用设备和模块的方法
- 生成SAS令牌和获取连接字符串
- 云对设备和设备对云的消息传递
- 设备文件上传
- 用于测试的设备模拟