几个注意事项:
1、在cpolor后台建立tcp通道,得到带有端口的tcp地址
2、在cpolar.yml配置文件里设置带端口的tcp地址,如下图:
3、在域名的后台(如阿里云)解析二级域名,地址填入以上不带端口的tcp地址,如下图:
4、完成后可以在树莓派上运行mqtt服务器程序,如下:
import sys
import os
import time
import paho.mqtt.client as mqtt
sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/' + '..'))
sys.path.append("..")
REPORT_TOPIC = 'mqtt/myhome' # 主题
def on_connect(client, userdata, flags, rc):
print('connected to mqtt with resurt code ', rc)
client.subscribe(REPORT_TOPIC) # 订阅主题
def on_message(client, userdata, msg):
message = msg.payload.decode()
print(message)
def server_conenet(client):
client.on_connect = on_connect # 启用订阅模式
client.on_message = on_message # 接收消息
client.connect("mqtt.ihand.work", 20246, 60) # 链接
# client.loop_start() # 以start方式运行,需要启动一个守护线程,让服务端运行,否则会随主线程死亡
client.loop_forever() # 以forever方式阻塞运行。
def server_stop(client):
client.loop_stop() # 停止服务端
sys.exit(0)
def server_main():
client_id = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
client = mqtt.Client(client_id, transport='tcp')
server_conenet(client)
if __name__ == '__main__':
# 启动监听
server_main()
5、此时运行mqtt客户端即可实现通讯,如下:
import paho.mqtt.client as mqtt
client = mqtt.Client()
# 参数有 Client(client_id="", clean_session=True, userdata=None, protocol=MQTTv311, transport="tcp")
#client.connect("tcp://1.tcp.hk.cpolar.io", 20246, 60) # 连接服务器,端口为1883,维持心跳为60秒
client.connect("mqtt.ihand.work", 20246, 60)
client.publish('mqtt/myhome', '温度',1)