本文用STM32L431RCT6 + ADXL355 + ML307R实现倾角监测,并上传云端服务器。
关键词:加速度传感器,倾角,MQTT,ML307R,Cat.1,Onenet,Qoder。
从古至今,如何快速获取远处的信息,一直是人们不断探寻的一个课题。在古代,当大军压境时,机警的前哨点起令人胆寒的狼烟,把紧迫的军情接力传送到都城。希波战争中,无畏的勇士,为了去斯巴达求援,用生命完成最后的奔跑。
现代科技的发展,使我们得以快捷地获取远程的信息,给生活带来极大便利。信息的获取又离不开各种传感器,声音,图像,温湿度等,让我们得以全方位感知现场。
加速度传感器是其中一种不被熟知然而很重要的传感器,它可以测量各个轴向的加速度。当处于静止时,通过感知重力在各轴向的分量,可以反推出自身的倾角。我们利用STM32L431RCT6的SPI3连接加速度传感器ADXL335,UART2作为调试打印口,UART3作为通讯口连接Cat.1通讯模块ML307R-DC。通过加速度计在各轴向分量计算倾角,当横滚角Roll或俯仰角Pitch变化超过5度时,把当前角度上报至云端。
编程使用阿里的Qoder,云端用中移动的Onenet(注册就能用,一般应用免费额度就够),原以为这个小工程一个小时应该能搞定,没想到断断续续搞了两天才实现数据上传。有一些需要注意的点在这里分享一下。虽然现在AI很强大,但是如果没有正确的输入,可能会走不少弯路。
在Onenet创建产品时,选通讯协议要注意MQTT版本是3.3.1,还有个选项是MQTT5.0,注意4G模块的版本要和它一致,否则通不上。
你自己在Onenet创建好设备后,MCU跟它连,需要三项信息:产品ID,设备名称,设备密钥。
需要注意的是,不要搞混:设备名称和产品名称;设备密钥和Access Key;
设备密钥,可以存储在MCU中,然后用算法生成Token,用于和云端连接时验证,也可以现在PC端用工具软件生成Token,然后Token存入MCU,直接使用Token。我们用的后者,这样可以避免在程序中存储设备密钥的明文。
ML307R本身支持MQTT,但是我们用串口通过AT指令没有跑通,所以在MCU内增加了MQTT协议支持,只利用ML307的TCP网络连接能力。
在Onenet设备里增加Roll和Pitch两个float型自定义数据。
上报结果可以在云端设备的历史数据里查询。
ML307R这个模块,本身内部集成有CPU,对用户是开放的,片上有SPI,UART,I2C,ADC等模块,现在外挂的STM32L431是可以省掉的,当然我们也可以把ML307R换成其它的通讯模块,比如WiFi模块,或通过以太网模块完成通讯。
如果你需要完整的代码,可以在Gitee搜索TopSemic嵌入式,有完整的源代码和说明文档。把他们喂给AI,应该可以加快你的开发进度。我们会继续尝试其它通讯方式,还有不同的服务器,如果感兴趣欢迎关注我们,留言探讨。
99