随着物联网技术的迅猛发展,越来越多的智能设备应运而生,而温度采集系统是其中重要的一类。在现代工业和家庭生活中,温度对于生产、居住和储存等过程的控制有着非常重要的作用。因此,准确地采集环境温度数据并进行处理和展示,对于人们的生产和生活都具有重要意义。
基于此背景,设计了基于STM32F030的多点无线温度采集系统,该系统可以通过多个独立的采集设备,同时采集多个不同位置的温度数据,并分别通过MQTT协议上传到OneNet平台,方便用户远程管理和监控温度变化。同时,该系统还配备了OLED显示屏,可在本地实时显示温度信息,方便用户及时了解环境温度变化趋势。
整个系统采用了STM32F030作为主控芯片,以保证系统性能稳定可靠;温度采集模块采用DHT20,具有精度高、响应快等特点;NBIoT 通信模块采用了移远BC260Y-CN,可以实现快速、安全地连接云平台;OLED显示屏采用0.96寸SPI接口的显示屏,驱动芯片是SSD1306。整个系统设计紧凑、可靠,可以广泛应用于各种场合,为用户提供精准的环境温度数据和便捷的数据处理及展示功能。
资料地址: https://z7po9bxpe4.k.topthink.com/@nb-iot/peitaoziyuanxiazai.html
硬件选型是基于需求和要求选择合适的硬件组件来实现系统设计的关键步骤。
在本项目中,选择了以下硬件组件:
本项目中的硬件选型具有性价比高、功能强大、质量可靠、采集精度高等优点,可以满足多种温度采集系统的设计需求,并提供了便捷易用的数据处理和展示功能。
平常所讲的2G、3G、4G中的G其实是Generation的意思,例如2G是指第二代移动通信技术。每一代移动通信技术都有对应的网络制式:
中国移动:
中国联通:
中国电信:
其中,LTE的全称为Long Term Evolution,即长期演进。
WPAN
WPAN的全称是Low-rate wireless personal area network(低速无线个人区域网络),典型的代表有ZigBee、蓝牙等,其特点是低复杂度、低功耗、低速率、低成本。
LPWA
LPWA的全称是Low Power Wide Area(低速无线广域网),典型的代表有NB-IoT、eMTC、Lora和SigFox等,具有广覆盖、低功耗、低成本和大连接的特点。
实际上NB-IoT是基于LTE制式的一种移动通信技术,也就是说,它是4G技术的一种。下图是LTE制式通信技术的各个分支对比:
LTE Cat-NB即NB-IoT,是基于LTE网络制式而设计的一种具有低功耗、低速率、上行通信时延低和下行通信时延较高(相对)特点的通信技术,满足对低功耗要求高但是对通信速率要求低的应用场景。上图中,还可以看到LTE Cat-M,它支持的通信速率比NB-IoT更高,可以应用于对通信速率要求更高的应用场景。注意,此处说的通信速率是指通信的带宽,不是说通信的时延。
NB-IoT技术相关的技术供应商有:芯片解决方案商、模块生产厂商、运营商。
(1)主要的芯片方案商有:高通、华为海思、Intel、RDA、简约纳、MTK、TI、SEQUANS、MARVELL、 NODRIC和中兴微等。
(2)主要的中国模块生产厂商有:移远、芯讯通、中兴、联想和中国移动等。
(3)运营商:中国移动、中国联通和中国电信。
由于NB-IoT技术具有低功耗、低速率、上行通信时延低和下行通信时延较高(相对)的特点,所以非常适用于数据采集上报类的应用场景,例如
NB-IoT的下行通信时延较高,约15秒左右(读者需要以实际测试为准),所以如果把NB-IoT用于下发指令或数据给终端设备,需要考虑这个时延问题。如需对下行通信速率有更快速的要求,可以采用eMTC或CATn等技术。
OneNet即为“中国移动互联网应用服务平台”,是中国移动推出的物联网云平台服务。OneNet服务器是一个基于云计算技术的物联网数据平台,旨在为用户提供稳定、安全、高效的数据云端存储、处理、分析和展示等服务。
OneNet服务器具有以下主要特点:
在本项目中,通过使用MQTT协议将温度数据上传到OneNet服务器上,并使用其提供的数据分析和展示功能,可以轻松地实现环境温度的实时监测和管理,提高生产和生活效率,方便用户的使用和管理。
官网链接:https://open.iot.10086.cn/console/summary
这里的数据协议可以选择数据流和JSON两种形式。我这里选择数据流方式。
产品ID: OIcHdSz8R7
access_key: 8wXH2z97abNh9a37ndNB6ZWrR+eXVYVZnbvH3x3t29s=
设备详情:
设备ID: 2103765871
设备密钥: NU14N01INmlhTE9sOUpGUkNOREwzNjBJbVJ1RzFRdkw=
设备ID: 2103766001
设备密匙:YWF5NTNZMFpZeWFEWnVMemVWYmdURkZuaEJhUnBRZGQ=
设备ID: 2103766258
设备密匙: anZRUmFYaFlYYWRBbHVLNEdQdnlMTEtweGhPTUFFYTA=
MQTT服务器地址信息: https://open.iot.10086.cn/doc/v5/develop/detail/248
密匙生成工具:https://open.iot.10086.cn/doc/v5/develop/detail/242
工具软件里需要填写的参数如下:
【1】res选项参数的格式: products/{产品ID}/devices/{设备名称}
【2】et是设置token过期时间:算出1970-1-1到你想要设置的到期时间,单位是秒,填入即可。
比如: 超时时间设置为2022-4-7,那么,这里填入的秒就是:1970-1-1到2022-4-7之间的秒单位时间。
【3】key的参数格式: 就是设备创建之后,在设备详情页的key
res: products/OIcHdSz8R7/devices/dev1
et : 56804459115
key: NU14N01INmlhTE9sOUpGUkNOREwzNjBJbVJ1RzFRdkw=
得到的结果:
version=2018-10-31&res=products%2FOIcHdSz8R7%2Fdevices%2Fdev1&et=56804459115&method=md5&sign=LGkD04FA%2FFg78rSuVFDPsg%3D%3D
res: products/OIcHdSz8R7/devices/dev2
et : 56804459115
key: YWF5NTNZMFpZeWFEWnVMemVWYmdURkZuaEJhUnBRZGQ=
得到的结果:
version=2018-10-31&res=products%2FOIcHdSz8R7%2Fdevices%2Fdev2&et=56804459115&method=md5&sign=haV81ypEWLefpOCrrSWHSg%3D%3D
res: products/OIcHdSz8R7/devices/dev3
et : 56804459115
key: anZRUmFYaFlYYWRBbHVLNEdQdnlMTEtweGhPTUFFYTA=
得到的结果:
version=2018-10-31&res=products%2FOIcHdSz8R7%2Fdevices%2Fdev3&et=56804459115&method=md5&sign=49hqM5724RC40sgSuzqCnA%3D%3D
当前设备的主题订阅与主题发布总结:
IP地址: 183.230.40.96
端口号: 1883
clientId: dev1
username: OIcHdSz8R7
password: version=2018-10-31&res=products%2FOIcHdSz8R7%2Fdevices%2Fdev1&et=56804459115&method=md5&sign=LGkD04FA%2FFg78rSuVFDPsg%3D%3D
订阅主题: $sys/OIcHdSz8R7/dev1/#
发布主题: $sys/OIcHdSz8R7/dev1/dp/post/json
发布消息:
{"id":123,"dp":{"temp":[{"v":28.3}]}}
使用MQTT客户端模拟设备登录测试:
依次填入参数,进行登录、订阅主题、发布主题。
查看OneNet云端:
查看上传的数据:
上传多个数据后,看温度的变化曲线:
当前设备的主题订阅与主题发布总结:
IP地址: 183.230.40.96
端口号: 1883
clientId: dev2
username: OIcHdSz8R7
password: version=2018-10-31&res=products%2FOIcHdSz8R7%2Fdevices%2Fdev2&et=56804459115&method=md5&sign=haV81ypEWLefpOCrrSWHSg%3D%3D
订阅主题: $sys/OIcHdSz8R7/dev2/#
发布主题: $sys/OIcHdSz8R7/dev2/dp/post/json
发布消息:
{"id":123,"dp":{"temp":[{"v":38.3}]}}
使用MQTT客户端模拟设备登录测试:
依次填入参数,进行登录、订阅主题、发布主题。
查看OneNet云端:
当前设备的主题订阅与主题发布总结:
IP地址: 183.230.40.96
端口号: 1883
clientId: dev3
username: OIcHdSz8R7
password: version=2018-10-31&res=products%2FOIcHdSz8R7%2Fdevices%2Fdev3&et=56804459115&method=md5&sign=49hqM5724RC40sgSuzqCnA%3D%3D
订阅主题: $sys/OIcHdSz8R7/dev3/#
发布主题: $sys/OIcHdSz8R7/dev3/dp/post/json
发布消息:
{"id":123,"dp":{"temp":[{"v":48.3}]}}
使用MQTT客户端模拟设备登录测试:
依次填入参数,进行登录、订阅主题、发布主题。
查看OneNet云端:
地址:https://open.iot.10086.cn/studio/view/project
修改为手机版本:
根据参数填入,管理设备的数据流。
填写之后点击创建按钮,就可以添加数据源。
然后按照流程,添加剩下3个设备的数据源进来。
上面列表里参数的来源:
(1)userId
(2)accessKey
先大致设计好界面。然后给控件绑定数据源。
为了了解数据更新情况,可以添加一个文本控件显示最新的数据上报时间。
return [{
"value": "数据上报时间:" + data[0].update_at
}]
设置过滤器:
if (data[0].value > 30) {
return [{ "value": "温度异常" }]
}
else {
return [{ "value": "设备1(正常)" }]
}
链接:https://open.iot.10086.cn/view/main/index.html#/share2d?id=646f1f2078cb250035479cb5
填写设备的信息:
上传温度数据。
为了在onenet页面显示温度的变化曲线。需要再新增加3个数据源。
单独建立一个数据源,设置采集10次数据。也就是这数据源会保存最新的10个温度数据,这样在曲线里可以显示最近10个温度的变化曲线。
添加的这3个数据源,是接下来给折线图控件使用。
添加一个折线图控件。
折线图控件的系列表示界面要显示几根曲线。
编写过滤器提取数据:
// 最终数据应该是一个数组
var result = [];
var dataPoint = null;
//循环处理选中的数据源的数据点
for (var i = 0; i < data.length; i++) {
// 从数据点中取出需要的数据,通过配置键值对使得数据格式符合要求
dataPoint = {
y1: data[i].value,
};
// 将这个数据点添加进结果中
result.push(dataPoint);
}
return result;
剩下的折线图控件也是一样的。