封控在家,带大家建设一个物联网平台吧

2021年11月9日下午8:33

一,服务器

虽然这个没什么要求,实验的话虚拟机就可以;什么淘汰笔记本,台式机也可以。由于我是狂热份子,就买了台巴掌大的小电脑做为我的实验服务器。只是个电脑,内存没有ECC功能。不过够我做实验的了。

巴掌大,可以装一块2.5英寸机械硬盘和一块NVME固态硬盘。8G内存,CPU是I5-6500t,当时价格1800元。里面装的是Ubuntu 21.04服务器系统,我的Gcc编译和服务器实验都是上面进行。

怎么装Ubuntu我就不详细说了,网上教程很多,装服务器版本的系统,这种系统没有界面纯命令行,稳定性非常高。

二,物联网接入平台

我选择的是开源的EMQX,百万级连接。比着商业版缺少数据固化功能,需要自己开发一套订阅系统用于存储数据。

网址是:
https://www.emqx.com/zh/downloads?product=broker,记得选择开源版的Ubuntu版本,企业版只可免费试用几个月。

安装也很简单,官方给了说明,只需3行代码。

从http://你的服务器IP:18083/进入管理界面,18083是WEB管理页面端口。运行后的界面是这样的。

占用的接口是下面这些,我们常使用的是1883端口,既是mqtt:tcp接口。如果使用coap协议就是5683端口。

三,传感器模拟(物联网设备1)

传感器模拟我使用的是树莓派,把树莓派的CPU温度用python上传到物联网平台。也可以订阅自己感兴趣的主题,用于控制个灯,风扇啥的。代码如下:

# subscriber.py
import paho.mqtt.client as mqtt
import time

# 0: 连接成功
# 1: 连接失败-不正确的协议版本
# 2: 连接失败-无效的客户端标识符
# 3: 连接失败-服务器不可用
# 4: 连接失败-错误的用户名或密码
# 5: 连接失败-未授权
# 6-255: 未定义
# 如果是其它问题,可以检查网络情况,或者确认是否安装了 `paho-mqtt`。
def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("\n连接成功!\n")
    elif rc==1:
        print(f"\n接失败-不正确的协议版本\n")
    elif rc==2:
        print(f"\n连接失败-无效的客户端标识符\n")
    elif rc==3:
        print(f"\n连接失败-服务器不可用\n")
    elif rc==4:
        print(f"\n连接失败-错误的用户名或密码\n")
    elif rc==5:
        print(f"\n连接失败-未授权\n")
    else:
        print(f"\n连接失败-未定义\n")
    # 订阅,需要放在 on_connect 里
    # 如果与 broker 失去连接后重连,仍然会继续订阅 raspberry/topic 主题
    client.subscribe("raspberry/topic")

# 回调函数,当收到消息时,触发该函数
def on_message(client, userdata, msg):
    print(f"{msg.topic} {msg.payload}")
    
def get_cpu_temp():
    tempFile = open( "/sys/class/thermal/thermal_zone0/temp" )
    cpu_temp = tempFile.read()
    tempFile.close()
    return float(cpu_temp)/1000

client = mqtt.Client("数梅派终端")
client.username_pw_set("你的用户名","你的密码")
client.on_connect = on_connect
client.on_message = on_message

# 设置遗嘱消息,当树莓派断电,或者网络出现异常中断时,发送遗嘱消息给其他客户端
client.will_set('raspberry/status',  b'{"status": "offline!"}')

# 创建连接,三个参数分别为 broker 地址,broker 端口号,保活时间
client.connect("10.195.136.221", 1883, 60)

# 设置网络循环堵塞,在调用 disconnect() 或程序崩溃前,不会主动结束程序
client.loop_start()

while True:
    # 四个参数分别为:主题,发送内容,QoS, 是否保留消息
    client.publish('raspberry/topic', payload=str(get_cpu_temp()), qos=0, retain=False)
    print(f"send cpu temp to raspberry/topic")
    time.sleep(5)

Copy

这段代码每5秒钟向服务器发送一条温度信息。同时订阅了一条raspberry/topic的主题。

四,订阅设备模拟(物联网设备2)

如果没有树莓派,也可以用软件模拟,软件叫MQTTX,免费的,和服务器平台是一家,不用写任何代码,也是新手比较推荐的玩法。

和树莓派一样,可以发送消息和订阅消息,从图中可以看到订阅了树莓派所有过来的主题,当前温度不到44度。

从上次升级到现在,服务器已经运行3天接收到5万多条信息。

文章标签: 封控在家 
    上一篇:       下一篇: