第10章:Python 物联网开发
Python 以其简洁的语法和丰富的生态,成为物联网开发中不可或缺的语言。它既可以在树莓派等 Linux 网关上运行,也可以通过 MicroPython 运行在单片机上。
10.1 Python 基础
建议回顾《Python 从入门到精通》系列教程,这里只强调物联网相关的特性。
- 二进制数据处理:
struct模块用于打包和解包二进制数据(解析传感器协议)。 - 异步 IO:
asyncio用于编写高并发的网络应用。
10.2 树莓派 GPIO 控制
在树莓派上,最常用的库是 RPi.GPIO 或 gpiozero。
实战:呼吸灯 (PWM)
from gpiozero import PWMLED
from time import sleep
led = PWMLED(17) # GPIO 17
while True:
# 渐亮
for i in range(100):
led.value = i / 100.0
sleep(0.01)
# 渐灭
for i in range(100, 0, -1):
led.value = i / 100.0
sleep(0.01)10.3 MicroPython 开发
MicroPython 是运行在微控制器上的 Python 解释器。
- 硬件支持:ESP32, ESP8266, Raspberry Pi Pico.
- Hello World (ESP32):
from machine import Pin import time led = Pin(2, Pin.OUT) while True: led.value(not led.value()) # 翻转状态 time.sleep(1)
10.4 项目实战:智能家居中控系统
我们将构建一个运行在树莓派上的中控程序,它通过 MQTT 接收传感器数据,并控制家电。
架构设计
- 输入:通过 MQTT 订阅
home/sensors/#主题。 - 逻辑:如果温度 > 30度,自动开启风扇。
- 输出:通过 MQTT 发布
home/fan/control主题,或直接控制 GPIO。
代码实现
import paho.mqtt.client as mqtt
import json
from gpiozero import LED
# 模拟风扇连接在 GPIO 18
fan = LED(18)
# MQTT 回调函数
def on_connect(client, userdata, flags, rc):
print(f"Connected with result code {rc}")
client.subscribe("home/sensors/temp")
def on_message(client, userdata, msg):
try:
payload = msg.payload.decode()
print(f"Received: {payload}")
# 假设收到的是 JSON: {"value": 32.5}
data = json.loads(payload)
temp = data.get('value', 0)
if temp > 30:
print("Too hot! Turning on fan.")
fan.on()
else:
fan.off()
except Exception as e:
print(f"Error: {e}")
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
# 连接到 MQTT Broker
client.connect("broker.emqx.io", 1883, 60)
# 阻塞运行,处理网络循环
client.loop_forever()Python 擅长逻辑处理,但如果你想开发实时性强、且带有漂亮界面的应用,*JavaScript 是个不错的选择。下一章见!*