欢迎来到IoT实用 Python 编程。本书的重点围绕 Raspberry Pis、电子、计算机网络、Python 编程语言,以及我们如何结合所有这些元素来构建复杂和多方面的物联网项目。
我们将从多个角度观察这些元素,比较和对比不同的选项,并讨论我们构建的电子电路背后的如何和为什么。到本书结束时,您将拥有一个广泛的工具包,包括电子接口代码示例、网络代码示例和电子电路示例,您可以根据自己的需要和项目借用、改编和重新设计这些示例。
我期待着加入你们的物联网之旅。
本书面向对利用 Python 编程语言构建物联网应用程序感兴趣的应用程序开发人员、物联网专业人员和爱好者。本书的作者是中高级软件工程师,他们在桌面、网络和移动开发方面经验丰富,但对电子、物理计算和物联网几乎没有接触。
第 1 章设置您的开发环境,在 Raspberry Pi OS 的背景下探索 Python 生态系统,并教您如何正确设置 Python 开发项目以获得成功。您还将学习启动 Python 程序的其他方法,以及如何为 GPIO 接口配置 Raspberry Pi。
第 2 章、Python 和 IoT入门课程,向您传授与 Python 进行电子和 GPIO 接口的基础知识。您将构建并实验使用 Python 控制的简单电子电路,并结合本次学习,使用 dweet.io 平台从头构建一个简单但完整的互联网可控物联网应用程序。
第 3 章使用 Flask与 RESTful API 和 Web 套接字联网,探讨如何使用两种方法——RESTful API 和 Web 套接字——在 Python 中构建网络服务器。您将学习如何将这些服务器与 Python 和 HTML/JavaScript 用户界面结合使用,从 web 浏览器控制网络上的电子电路。
第 4 章与 MQTT、Python 和 Mosquitto MQTT 代理的联网,介绍了使用消息队列遥测传输的联网方法,这是分布式物联网应用程序的一种流行选择。您将学习如何将 MQTT 与 Python 和 HTML/JavaScript 用户界面结合使用,通过网络和 web 浏览器控制电子电路。
第 5 章将您的 Raspberry Pi 连接到物理世界,探索了不同的基于 Python 的软件选项和技术,用于使用 Raspberry Pi 的 GPIO 引脚连接和控制电子设备。您还将构建并学习使用 ADS1115 模数转换器模块来扩展 Raspberry Pi 的本机接口选项,并将介绍脉宽调制(PWM),这是一个重要的电子和接口概念,您将在后面的章节中使用。
第 6 章、**软件工程师的电子 101向您传授核心电子概念和基础知识。您将学习常见电子和接口电路背后的基本如何和为什么*,以及如何实际使用它们将传感器和执行器正确、安全地连接到覆盆子 Pi。您还将了解数字和模拟电子设备之间的差异,以及它们如何应用和影响接口电路要求。当我们使用不同的电子元件和模块时,您在本章学到的许多基础知识将在后续章节中实际应用。*
*第 7 章开启和关闭教你如何使用光耦合器、MOSFET 晶体管和继电器,使用覆盆子 Pi 和 Python 开启和关闭其他电路。您还将了解电路负载,如何测量它们,以及这如何影响电路中光耦、MOSFET 晶体管和继电器的选择和使用。
第 8 章、灯、指示灯和显示信息教您如何结合 Python 使用 APA102 LED 照明条、RGB LED、OLED 显示器和蜂鸣器来创建视觉和可审计的定向电路和应用程序。
第 9 章测量温度、湿度和光照水平,教您如何使用树莓皮和蟒蛇测量常见的环境属性。您将使用 DHT11/22 温度和湿度传感器构建一个电路,并了解并使用光相关电阻器(LDR来检测是否有光。在本章中,您还将加深对模拟电子学的实际理解和经验,并应用基本原理构建湿度检测电路和应用程序。
第 10 章使用伺服、电机和步进器的运动,教您如何使用流行的机械设备以及树莓 Pi 和 Python 创建运动。您将学习如何使用 PWM 控制伺服以产生角度运动,使用 H 桥 IC 电路和电机一起控制其速度和旋转方向。此外,您还将学习如何调整 H 桥 IC 电路,以便与步进电机一起使用,以用于需要精确控制运动的项目。
第 11 章测量距离和检测运动向您介绍使用 HC-SR04 超声波距离传感器进行距离测量的原理,以及如何使用 HC-SR501 PIR 传感器在宏观尺度上检测运动。您还将学习如何使用比率式和开关式霍尔效应传感器来检测运动并测量微尺度上的相对距离。
第 12 章、高级物联网编程概念——线程、异步 IO 和事件循环是一个高级编程章节,探讨构建复杂 Python 程序的替代方法。您将在电子接口环境中学习 Python 线程、异步 I/O、经典事件循环和发布者-订阅者模式。到本章结束时,您将体验并理解四种功能相当的应用程序,它们是以四种非常不同的方式编写的。
第 13 章、**物联网可视化与自动化平台是一次进入物联网相关在线服务与整合世界的旅程。您将基于第 9 章中的 DHT11/22 温湿度电路创建两个环境监测应用程序。首先,您将利用第 4 章中对 MQTT 的理解,与 MQTT、Python 和 Mosquitto MQTT 代理建立网络,在 ThingSpeak.com 上创建一个在线仪表板,以显示和绘制温度和湿度数据。然后,您还将应用第 4 章中的 RESTful API 概念,与 MQTT、Python 和 Mosquitto MQTT 代理进行联网,并构建一个 If-This-Then-That(IFTTT.com)工作流小程序,每当温度升高或降低到某个点以上时,它就会向您发送电子邮件。
*第 14 章、将其结合在一起——物联网圣诞树,通过一个以互联网连接的圣诞树为中心的多方面示例,将您在前面章节中学习到的许多主题和概念结合在一起。从电子学的角度来看,您将回顾第 8 章中的 APA102 LED 带、灯、指示灯和显示信息(这将是圣诞树灯),以及第 10 章中的伺服装置、带有伺服装置、电机和步进装置的运动(这是用来提供一种摇动或摇动树的机制)。从网络的角度来看,您将重新访问第 2 章、Python 和 IoT 入门、*第 3 章第、中的 RESTful API 使用 Flask和 MQTT fr om第 4 章与 RESTful API 和 Web 套接字进行联网,*与 MQTT、Python 和 Mosquitto MQTT 代理进行联网,并学习如何结合技术来实现需要跨越不同技术的复杂集成。最后,您将从第 13 章、物联网可视化和自动化平台重温 IFTTT,并创建两个小程序,让您控制树的灯光,使树在互联网上摇动或摇晃。这三个小程序包括电子邮件控制和使用谷歌助手的语音激活控制。
*# 充分利用这本书
以下标题概述了成功完成本书中的练习所需的硬件、软件、电子设备和外围设备。
- 硬件和软件:本书中的所有练习和代码都是在以下硬件和软件版本上构建和测试的:
这将是我的假设,你将使用一个同等的设置;但是,只要您的 Python 版本是 3.5 或更高版本,就可以合理地期望代码示例在不修改 Raspberry Pi 3 Model B 或不同版本的 Raspbian OS 或 Raspberry Pi OS 的情况下工作。
如果您对 Python 版本不太确定,请不要担心。在第一章中,我们的首要任务之一是建立您的开发环境,了解 Raspberry Pi 上的 Python,并确定哪些版本可用。
- 电子零件和设备:我们将在本书中使用许多电子零件。在每章的开头,我列出了本章示例所需的具体零件和数量。除了列出的零件外,还需要电子试验板和跳线/杜邦电缆的混合。
为了您的方便,下面有一个表格,其中列出了本书中使用的所有电子部件、它们使用的章节以及您需要的最低数量。如果您刚开始购买电子零件,您还可以在下表后找到帮助您开始购买的提示:
| 零件名称 | 最低数量 | 说明/注释 | 用于第章 | | 红色发光二极管 | 2 * | 5mm 红色发光二极管。不同颜色的 LED 可以具有不同的电气特性。本书中的大多数示例都采用红色 LED。 | 2, 3, 4, 5, 6, 7, 9, 12, 13 | | 15Ω电阻器 | 2 * | 色带(4 波段电阻器)为棕色、绿色、黑色、银色/金色 | 8. | | 200Ω电阻器 | 2 * | 色带(4 波段电阻器)为红色、黑棕色、银色/金色 | 2, 3, 4, 5, 6, 8, 9, 12, 13 | | 1kΩ电阻器 | 2 * | 色带(4 波段电阻器)为棕色、棕色、红色、银色/金色 | 6, 7, 9, 8, 11 | | 2kΩ电阻器 | 2 * | 色带(4 波段电阻器)为红色、黑色、红色、银色/金色 | 6, 11 | | 10kΩ电阻器 | 1 * | 色带(4 波段电阻器)为棕色、黑色、橙色、银色/金色 | 9, 13 | | 51kΩ电阻器 | 1 * | 色带(4 波段电阻器)为绿色、棕色、橙色、银色/金色 | 6. | | 100kΩ电阻器 | 1 * | 色带(4 波段电阻器)为棕色、黑色、黄色、银色/金色 | 7, 8, 9 | | 瞬时按钮开关 | 1. | 要找到一个对试验板友好的按钮开关,请尝试搜索一个大触觉开关。 | 1, 6, 12 | | 10kΩ线性电位计 | 2. | 在本书的示例中,可以用手指调整的较大电位计比需要螺丝刀调整的小电位计更容易使用。确保您有线性电位计(非对数)。 | 5, 6, 12 | | 2N7000 MOSFET | 1 * | 这是一个逻辑电平兼容的 MOSFET 晶体管。 | 7, 8 | | FQP30N06L 功率 MOSFET | 1 * | 可选择的购买时,确保零件号以 L 结尾,表明它是逻辑级兼容 MOSFET(否则,它将无法可靠地工作您的 Raspberry Pi)。 | 7. | | PC817 光耦 | 1 * | 也称为光隔离器。 | 7. | | SDR-5VDC-SL-C 继电器 | 1. | 这些继电器非常受欢迎,而且容易获得;但是,它们对试验板不友好。您需要将端子或电线焊接到它们上,以便将它们插入您的试验板。 | 7. | | 1N4001 二极管 | 1 * | 我们将使用二极管作为反激抑制二极管,以保护其他电气元件免受电压尖峰的影响。 | 7, 8 | | 尺寸 R130 5 伏直流电动机 | 2. | R130 尺码只是一个建议。我们需要的是 5 伏兼容直流电机,失速电流(理想情况下)小于 800 毫安。虽然这些电机在拍卖网站上很容易找到,但它们的电流和工作电流可能记录得很差,因此,这可能是一场赌博。第 7 章开启和关闭将带您完成一个练习,以测量电机的工作电流。 | 7, 10 | | RGBLED,普通阴极类型 | 1 * | 这是一种能够产生不同颜色的 LED。 | 8. | | 无源蜂鸣器 | 1. | 可在 5 伏电压下工作的无源蜂鸣器。 | 8. | | SSD1306 OLED 显示器 | 1. | 这是一个基于像素的小型单色显示器。 | 8. | | APA102 三角带 | 1. | 这是一条可寻址 APA102 RGBLED。我们的练习只需要 LED 灯,而不是电源或遥控器。请务必确保您购买的是 APA102 LED,因为有不同(且不兼容)类型的可寻址 LED 可用。 | 8, 14 | | DHT11 或 DHT22 温度/湿度传感器 | 1. | DHT11 和 DHT22 是可互换的。DHT22 稍贵一些,但精度更高,可以测量零下温度。 | 9, 13 | | LDR | 1 * | 光敏电阻器 | 9 | | MG90S 爱好伺服 | 1. | 这是一个建议。任何带有 3 根导线(+、GND、信号)的 5 伏嗜好伺服都应该合适。 | 10, 14 | | L293D H 桥集成电路 | 1 * | 确保您购买的零件号以 D 结尾,这意味着 IC 包括嵌入式反激抑制二极管。 | 10 | | 28BYJ-48 步进电机 | 1. | 确保您购买的是 5 伏步进电机,传动比为 1:64。 | 10 | | HC-SR501 PIR 传感器 | 1. | PIR 传感器检测运动。它靠热工作,所以它能探测到人和动物的存在。 | 11 | | HC-SR04 超声波距离传感器 | 1. | 超声波距离传感器利用声波估计距离。 | 11 | | A3144 霍尔效应传感器 | 1 * | 这是一种非锁定开关型霍尔效应传感器,在磁场存在时打开。 | 11 | | AH3503 霍尔效应传感器 | 1 * | 这是一种比率式霍尔效应传感器,可以检测它与磁场的距离(相对距离)。 | 11 | | 磁铁 | 1. | 霍尔效应传感器需要一个小磁铁。 | 11 | | ADS1115 模数转换器分接模块 | 1. | 该模块将允许我们将模拟组件与 Raspberry Pi 接口。 | 5, 9, 12 | | 逻辑电平移位器/转换器分接模块 | 1. | 该模块将允许我们将 5 伏电气组件与 Raspberry Pi 连接。搜索逻辑电平移位器/转换器分接模块,并在 4 或 8 个通道时查找双向(首选)模块。 | 6, 8, 14 | | 试验板 | 1. | 我们所有的电子示例都将构建在一个试验板上。我建议购买两个全尺寸的面包板并将它们连接在一起——更多的面包板工作区将使构建电路更容易。 | 2 - 14 | | 杜邦/跨接电缆 | 3 套* | 这些电缆用于将试验板上的组件连接在一起。我建议购买一套男式对男式、男式对女式和女式对女式。 | 2 - 14 | | 覆盆子皮 GPIO 试验板突破 | 1. | 这是可选的,但是,它将使您的 Raspberry Pi GPIO 引脚更容易与您的试验板接口。 | 2 - 14 | | 数字万用表 | 1. | 作为指南,价格在 30-50 美元之间的数字万用表应该更合适。避免使用非常低且最便宜的万用表。 | 6, 7 | | 外部电源 | 2. | 本书中的一些电路将需要比我们期望的树莓 Pi 提供更多的功率。作为最低电源,3.3/5 伏试验板兼容电源(能够输出 1 安培)将是合适的。您可能还希望研究实验室电源,将其作为一种更有效、更通用的替代方案。 | 7, 8, 9, 10, 14 | | 烙铁和焊料 | 1. | 在某些情况下,您需要将导线和端子焊接到组件上–例如,您很可能需要将端子支脚焊接到您购买的 ADS1115 和逻辑电平转换器/移位器模块上。您还需要将端子或导线焊接到 SDR-5VDC-SL-C 继电器上,以便将其插入试验板。 | |
*推荐备件。如果连接或供电不正确,这些部件可能会损坏,或者在使用过程中可能会发生物理断裂(例如,腿断开)。
之所以选择这些部件,是因为它们的价格较低,并且在易趣、Bangood、AliExpress 和电子产品零售商等网站上都可以买到。
在购买之前,请考虑以下事项:
- 最小数量栏是您在本书练习中需要的,但是,强烈建议您购买备件,尤其是 LED、电阻器和 MOSFET,因为这些组件很容易损坏。
- 你会发现许多组件需要批量购买。
- 搜索电子元件起动器套件并将其与表中列出的零件进行比较。您可以在一笔交易(折扣)中一起购买多个零件。
- 许多可用的即插即用 S传感器模块启动器套件在很大程度上与本书中介绍的电路和代码练习不兼容。我们的电子和代码示例的深度意味着我们需要使用核心电气组件。然而,在完成本书之后,您将有机会了解这些即插即用传感器模块是如何构建和工作的!
如果您使用的是本书的数字版本,我们建议您自己键入代码或通过 GitHub 存储库访问代码(下一节提供链接)。这样做将帮助您避免与复制和粘贴代码相关的任何潜在错误。
您可以从您的账户www.packt.com下载本书的示例代码文件。如果您在其他地方购买了本书,您可以访问www.packtpub.com/support并注册,将文件通过电子邮件直接发送给您。
您可以通过以下步骤下载代码文件:
- 登录或注册www.packt.com。
- 选择“支持”选项卡。
- 点击代码下载。
- 在搜索框中输入图书名称,然后按照屏幕上的说明进行操作。
下载文件后,请确保使用以下最新版本解压或解压缩文件夹:
- WinRAR/7-Zip for Windows
- 适用于 Mac 的 Zipeg/iZip/UnRarX
- 适用于 Linux 的 7-Zip/PeaZip
该书的代码包也托管在 GitHub 上的https://github.com/PacktPublishing/Practical-Python-Programming-for-IoT 。如果代码有更新,它将在现有 GitHub 存储库中更新。
我们的丰富书籍和视频目录中还有其他代码包,请访问**https://github.com/PacktPublishing/** 。看看他们!
本书的行动代码视频可在查看 https://bit.ly/316OvNu
我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以在这里下载:https://static.packt-cdn.com/downloads/9781838982461_ColorImages.pdf 。
本书中使用了许多文本约定。
CodeInText
:表示文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。下面是一个示例:“让我们使用gpio_pkg_check.py
和pip
检查 GPIO 包的可用性。”
代码块设置如下:
# Global Variables
...
BROKER_HOST = "localhost" # (2)
BROKER_PORT = 1883
CLIENT_ID = "LEDClient" # (3)
TOPIC = "led" # (4)
client = None # MQTT client instance. See init_mqtt() # (5)
...
当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:
# Global Variables
...
BROKER_HOST = "localhost" # (2)
BROKER_PORT = 1883
CLIENT_ID = "LEDClient" # (3)
TOPIC = "led" # (4)
client = None # MQTT client instance. See init_mqtt() # (5)
...
任何命令行输入或输出的编写方式如下:
$ python --version
Python 2.7.16
粗体:表示您在屏幕上看到的新术语、重要单词或单词。例如,菜单或对话框中的单词出现在文本中,如下所示。下面是一个示例:“从 Raspbian 桌面,导航到 Raspberry 菜单|首选项| Raspberry Pi 配置。”
Warnings or important notes appear like this. Tips and tricks appear like this.
我们欢迎读者的反馈。
一般反馈:如果您对本书的任何方面有疑问,请在邮件主题中注明书名,并发送电子邮件至 customercare@packtpub.com
。
勘误表:尽管我们已尽一切努力确保内容的准确性,但还是会出现错误。如果您在本书中发现错误,如果您能向我们报告,我们将不胜感激。请访问www.packtpub.com/support/errata,选择您的书籍,单击 errata 提交表单链接,然后输入详细信息。
盗版:如果您在互联网上发现我们作品的任何形式的非法复制品,请您提供我们的位置地址或网站名称,我们将不胜感激。请通过copyright@packt.com
与我们联系,并提供该材料的链接。
如果您有兴趣成为一名作家:如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请访问authors.packtpub.com。
请留下评论。一旦你阅读并使用了这本书,为什么不在你购买它的网站上留下评论呢?然后,潜在读者可以看到并使用您的无偏见意见做出购买决定,我们 Packt 可以了解您对我们产品的看法,我们的作者可以看到您对他们书籍的反馈。非常感谢。
有关 Packt 的更多信息,请访问Packt.com。***