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

物联网
后台-插件-广告管理-内容页头部广告(手机)

一,服务器

虽然这个没什么要求,实验的话虚拟机就可以;什么淘汰笔记本,台式机也可以。由于我是狂热份子,就买了台巴掌大的小电脑做为我的实验服务器。只是个电脑,内存没有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.pyimport paho.mqtt.client as mqttimport 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)/1000client = mqtt.Client("数梅派终端")client.username_pw_set("你的用户名","你的密码")client.on_connect = on_connectclient.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万多条信息。

封控在家,带大家建设一个物联网平台吧
后台-插件-广告管理-内容页尾部广告(手机)
标签:

评论留言

我要留言

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。