首页-达尔闻    全部    毕业设计| STM32+OneNET实现NB-IOT电量采集系统

毕业设计| STM32+OneNET实现NB-IOT电量采集系统

本次分享的项目是基于STM32设计,使用OneNET进行NB-IOT电量采集的系统,来自Knight-20的作品。尤其适合对NB-IOT、OneNET、电量显示系统感兴趣的小伙伴,图文拆解设计过程,建议收藏~
收藏
  • 本次分享的项目是基于STM32设计,使用OneNET进行NB-IOT电量采集的系统,来自Knight-20的作品。尤其适合对NB-IOT、OneNET、电量显示系统感兴趣的小伙伴,图文拆解设计过程,建议收藏~~相关设计资料可以在“达尔闻说”微信回复:电量采集,获取;也可以下拉文末至Knight-20的博客下载。

    01实现的功能

    实现的功能:

    1)测量用电设备的有功功率、电流和电压有效值和用电量;

    2)电参数通过NB-IoT上传到OneNET,可以在后台实时监控数据;

    3)通过OneNET后台发送指令控制电参数是否上传(可以拓展继电器控制)。

    02需要的材料

    需要的材料:

    一个STM32芯片,我这里用的是正点原子的mini开发板,型号:STM32F103RCT6

    http://dwz.date/aTyF 

    ST-Link下载器,主要用来给STM32单片机下载程序的,有其他的仿真下载器也是可以的。当然,用串口也是可以下载的,就是比较麻烦,我比较喜欢用仿真器下载,一键完事!

    http://dwz.date/aTzr

    USB-TTL串口模块,这个是用来调试M5311模块的,可以不需要,因为mini开发板板载USB转TTL模块,你可以拔掉原有的短路帽来用。不过玩单片机的话,最好是有一个这个模块,超级方便!

    http://dwz.date/aTza

    中移的M5311核心板,建议用哪个胶棒天线的,比较方便!

    http://dwz.date/aTzf

    HLW8032计量模块,用于采集电参数的,不需要进行校准,精度2%。也可以自己再进行校准一次,精度可达0.5%,需要专门设备进行校准,我自己用2%的精度足够了

    http://dwz.date/aTzp

    杜邦线12根

    03获取M5311模块的IMEI和IMSI

    1.把USB转TTL串口模块和M5311模块用杜邦线连接起来

    2.把USB-TTL串口模块插到电脑上,电脑打开串口调试助手

    如果在串口选择那里没有发现CH340设备,打开电脑设备管理器

    CH340驱动下载地址:http://pan.baidu.com/s/1gfreXbH

    3.输入AT指令获取模块的IMEI和IMSI

    先发送:AT+SM=LOCK

    这个是关闭模块的睡眠模式!!!

    然后再发送AT+CGSN=1指令获取IMEI

    同理,发送AT指令获取IMSI:

    拿到这两个参数之后,接下来就是配置OneNET后台了,也是非常简单几步就可以了!

    04配置OneNET后台

    1.打开OneNET官网:open.iot.10086.cn

    2.如果没有账号的,注册账号后登陆,然后进入开发者中心:

    3.进入开发者中心后,点击进入NB-IoT物联网套件:

    4.点击添加产品

    5.点击添加产品后会在左边弹出页面,填写好信息后,点击保存

    6.新建产品后,点击产品的名字进入下图页面后,点击左侧的设备列表

    7.进入设备管理后,点击添加设备:

    8.填写刚刚串口调试助手获取到的IMEI和IMSI,再点击保存即可:

    这个时候我们就可以看到刚刚新建的设备了,显示为离线及订阅失败!接下来通过串口调试助手让设备上线!!!

    05发送AT指令让M5311模块上线

    1.返回串口调试助手软件那里,在输入框输入AT指令,然后发送,看看M5311模块是否返回OK。如果没有就按一下RST复位按键即可。

    然后再输入框输入AT+CEREG?,用于查询M5311模块的网络状态:

    2.在输入框输入:AT+MIPLCREATE,并发送这个指令是用于创建一个OneNET设备实例的,M5311会反馈创建设备实例的ID,这个过程比较久,大概3S左右,和你的M5311网络有关。

    3.创建实例成功后,发送:AT+MIPLADDOBJ=0,3200,1,"1",1,1

    这句指令用于添加一个object及其所属的instance,

    第一个0是上面反馈的设备实例ID;

    第二个3200是object ID;

    第三个1是指实例个数;

    第四个“1”是实例位图,字符串格式,每一个字符代表一个实例,1表示可用,0表示不可用,说白了就是填“1”就可以啦;

    第五个1是属性个数;

    第六个1是指操作个数。

    4.添加Object成功后,发送:

    AT+MIPLDISCOVERRSP=0,3200,1,4,"5750"

    这个指令用于设置指定object的所属资源列表

    第一个0是设备实例ID;

    第二个3200是object的ID;

    第三个1是保留;

    第四个4是指后面字符串的长度;

    第五个“5750”是ibject的属性;

    5.上面操作完成后,就可以向OneNET平台发起注册请求了

    发送:AT+MIPLOPEN=0,3600

    这个指令用于向平台发起注册的请求的!

    第一个0是设备实例ID;

    第二个是本次注册的生命周期,单位为秒,说白了就是在这个时间内,就算我不上传消息,平台也会显示我在线。这里测试使用3600秒,就是一个小时,建议使用的时候改成60秒!不然你这边M5311掉线了,但是平台还是显示在线的。

    这个时候进入OneNET的后台就可以看到设备显示在线了!

    06上传测试数据到OneNET平台

    1.发送AT+MIPLNOTIFY=0,0,3200,0,5750,1,4,"test",0,0

    这条这里的含义:

    然后我们就可以在后台看到上传的字符串“test”了

    测试阶段到这里就结束了,点击操作里面的写,可以从OneNET平台发送数据到模块,M5311会通过串口打印数据的,平台会显示发送失败,因平台需要收到模块的反馈指令才会认为数据发送成功的。

    07STM32与M5311测试

    1.把模块接线:注:开发板的那个USB-232串口线需要接,用于串口调试及提供5V电压!!!

    2.打开提供的例程:需要用keil5的ARM版本,而不是MDK版本哦

    3.编译一下程序,然后点击下载即可:

    注:一般如果第一次使用仿真下载程序都会弹出错误提示的!这些都要你耐心去检查啦!因为出现问题有很多种,我这里就不一一举例了,你可以把错误拿去百度一下。

    4.打开资料里面的XCOM串口调试助手,也可以百度去下载:(XCOM2.0比较稳定,也是我觉得最好用的串口调试软件)

    别忘了长按M5311模块上的POWER键启动模块哦!!!

    同时,打开OneNET的后台可以查看模块上传的数据:

    到这里就已经把STM32和M5311调试成功了,接下来就是接入HLW8032模块啦!!!

    08系统测试

    1.接入HLW8032模块:

    关于HLW8032模块的测试可以参考这篇帖子!https://blog.csdn.net/qishi3250/article/details/103546632

    HLW8032与STM32接线:

    注:HLW8032模块的芯片供电是来源于220V,所以只有接了220V交流电后,模块才会输出数据给到STM32!!!HLW8032模块接了220V交流电后就千万不要碰模块了,注意安全!

    2.测试

    接入HLW8032模块后,从串口调试助手可以看到电参数不再是0了

    因为我在HLW8032模块上没有接负载,所以测量出来的有功功率还是为0!!!

    从OneNET也可以看到上传的电参数:

    下面是接了一个5W的灯泡后的数据:

    到这里基于STM32设计的NB-IOT电量采集系统的功能基本就实现啦,还有想通过OneNET平台来控制继电器的,就自己调试一下,改一下代码就可以啦!加油!奥利给!!!

    本文为CSDN博主「Knight-20」的原创文章,如果想和他交流,可以来CSDN博客,即本文原文链接:https://blog.csdn.net/qishi3250/article/details/106654894

Control Render Error!ControlType:productSlideBind,StyleName:Style1,ColorName:Item0,Message:InitError, ControlType:productSlideBind Error:未将对象引用设置到对象的实例。