第10章:Python 物联网开发

Python 以其简洁的语法和丰富的生态,成为物联网开发中不可或缺的语言。它既可以在树莓派等 Linux 网关上运行,也可以通过 MicroPython 运行在单片机上。

10.1 Python 基础

建议回顾《Python 从入门到精通》系列教程,这里只强调物联网相关的特性。

  • 二进制数据处理struct 模块用于打包和解包二进制数据(解析传感器协议)。
  • 异步 IOasyncio 用于编写高并发的网络应用。

10.2 树莓派 GPIO 控制

在树莓派上,最常用的库是 RPi.GPIOgpiozero

实战:呼吸灯 (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 是个不错的选择。下一章见!*

« 上一篇 C/C++ 嵌入式编程 下一篇 » JavaScript/Node.js 物联网应用