物联网开发:MQTT与传感器数据采集
物联网开发MQTT与传感器数据采集大家好我是欧阳瑞Rich Own。今天想和大家聊聊物联网开发这个热门话题。作为一个全栈开发者物联网是连接物理世界和数字世界的关键技术。今天就来分享一下MQTT协议和传感器数据采集的实战经验。什么是物联网物联网IoT是指将物理设备连接到互联网实现数据采集和远程控制。MQTT协议什么是MQTTMQTTMessage Queuing Telemetry Transport是一种轻量级的消息协议专为物联网设计。MQTT特点特点说明轻量级适合资源受限设备低带宽适合网络不稳定环境发布/订阅灵活的消息模式QoS支持保证消息可靠性安装MQTT Broker# 使用Docker安装Mosquitto docker run -d --name mosquitto \ -p 1883:1883 \ -p 9001:9001 \ eclipse-mosquitto发布者代码import paho.mqtt.client as mqtt import time client mqtt.Client() client.connect(localhost, 1883, 60) while True: # 模拟传感器数据 temperature 25 (time.time() % 5) humidity 60 (time.time() % 20) client.publish(sensor/temperature, temperature) client.publish(sensor/humidity, humidity) print(fPublished: temp{temperature:.1f}C, humidity{humidity:.1f}%) time.sleep(1)订阅者代码import paho.mqtt.client as mqtt def on_connect(client, userdata, flags, rc): print(Connected with result code str(rc)) client.subscribe(sensor/#) def on_message(client, userdata, msg): print(f{msg.topic} {msg.payload.decode()}) client mqtt.Client() client.on_connect on_connect client.on_message on_message client.connect(localhost, 1883, 60) client.loop_forever()实战案例智能家居系统# 传感器节点 import paho.mqtt.client as mqtt import RPi.GPIO as GPIO import time client mqtt.Client() client.connect(mqtt.example.com, 1883, 60) # 读取传感器 def read_temperature(): return 25.5 def read_humidity(): return 60.2 def read_motion(): return GPIO.input(4) GPIO.HIGH while True: client.publish(home/bedroom/temperature, read_temperature()) client.publish(home/bedroom/humidity, read_humidity()) client.publish(home/livingroom/motion, read_motion()) time.sleep(5)# 控制节点 import paho.mqtt.client as mqtt def on_message(client, userdata, msg): if msg.topic home/bedroom/light: if msg.payload.decode() on: turn_on_light() else: turn_off_light() client mqtt.Client() client.on_connect lambda client, userdata, flags, rc: client.subscribe(home/#) client.on_message on_message client.connect(mqtt.example.com, 1883, 60) client.loop_forever()QoS级别# QoS 0: 最多一次 client.publish(sensor/data, value, qos0) # QoS 1: 至少一次 client.publish(sensor/data, value, qos1) # QoS 2: 恰好一次 client.publish(sensor/data, value, qos2)安全性# 使用TLS client.tls_set(ca_certsca.crt) client.connect(mqtt.example.com, 8883, 60) # 使用用户名密码 client.username_pw_set(user, password)总结MQTT是物联网开发的基础协议简单高效。通过MQTT可以轻松实现传感器数据采集和设备控制。我的鬃狮蜥Hash对物联网也有自己的理解——它总是能感知周围环境的变化这也许就是自然界的传感器吧如果你对物联网开发感兴趣欢迎留言交流我是欧阳瑞极客之路永无止境技术栈MQTT · 物联网 · 传感器