raspberry pi上安装mqtt服务器。
apt-get update
apt-get install mosquitto
apt-get install mosquitto mosquitto-clients python-mosquitto
apt-get install python-mosquitto
启动mqtt服务
mosquitto
检查mqtt服务是否启动。默认1883端口。
netstat -antp
结果
tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN 383/mosquitto
查看服务器详细信息命令
/etc/init.d/mosquitto status
esp8266源码
# -*- coding:utf-8 -*- import network from mqtt import MQTTClient import machine import time # 连接WIFi sta_if = network.WLAN(network.STA_IF); sta_if.active(True) #sta_if.scan() sta_if.connect("SID", "密码") while not sta_if.isconnected(): machine.idle() # 根据订阅内容开关灯 def sub_cb(topic, msg): if int(msg) == 0: machine.Pin(int(12), machine.Pin.OUT, value=0) elif int(msg) == 1: machine.Pin(int(12), machine.Pin.OUT, value=1) # 连接mqtt服务器 client = MQTTClient(client_id="1", server="192.168.1.212", port=1883) client.set_callback(sub_cb) client.connect() # 循环获取内容 while True: client.subscribe(topic="simonzhang/net") time.sleep(0.5)
esp8266的mqtt lib地址如下。将mqtt.py和主文件命名为main.py上传到esp8266。
https://github.com/simon-zzm/ESP8266-lib/blob/master/mqtt.py
重启esp8266,在raspberry pi上推送消息控制灯开关成功。
开灯
mosquitto_pub -t simonzhang/net -m “1”
关灯
mosquitto_pub -t simonzhang/net -m “0”
其它记录
命令行
mosquitto_sub -t simonzhang/net
-t 指定订阅主体(topic),主体不用提前设定,直接发布就行。
mosquitto_pub -t simonzhang/net -m “Hello, simonzhang!”
-m 为发送内容
订阅名称可以用 + 代替,例如:
simon/+/zhang/+
这样就可以推送,“simon/hello/zhang/led”的主体。
#号应用于主体的结尾,例如:
simon/hello/zhang/led#
需要研究的还有通讯加密,程序加密和耗能部分。
发表评论