使用STM32和ESP8266实现温度显示功能,并通过OneNet平台实现数据传输

STM32F103+ESP8266+OneNet温度显示

这次实验对应的是我的本科毕业设计,目标是完成一个温度测试平台,具有本地显示,远程显示,算法后台校正的功能。为了适应当前信息化的物联网发展方向,本文选择一款分辨率可调的高线性度CMOS温度传感器作为感温芯片,运用STM32F103C8T6作为微控制器主控芯片,使用WiFi传输作为无线传输方案,结合OLED显示,以及中国移动的OneNET平台,共同设计了一个温度传感器的应用平台,并在立创投板PCB完成实物。在考虑功能的同时,也对性能有更高的要求。综合对比单点校正,两点校正,线性神经网络,复合线性神经网络和径向基函数神经网络校正算法,最后选择基于高斯函数的径向基函数神经网络算法对温度传感器的码字进行校正将本温度传感器应用平台的测量误差降至±0.15摄氏度。

硬件设计

学习使用AD进行绘板,嘉立创投板。
整体硬件框图如下所示:

设计的原理图如下所示:

设计完成后的实际图如下所示:

软件设计

学习了使用Keil5结合CubeMX进行编程,学习IIC和UART编程,未使用中断,直接用的轮询的方式,也导致功耗较高。并且软件设计思路为先连接OneNET网站,连接成功再显示数据。
选择的TCP透传方式,采用AT指令控制ESP8266连接OneNET官方服务器。设计思路如下:

具体的ESP8266设计思路如下:

最后OneNet设计界面如下:

校正算法

学习了使用Anacoda配置环境,还特地搞了一个2070配合cuda进行计算,算法环境选择的pytorch,编程IDE使用的Jupyter Noteboot和Pycharm。对比一些简单的两点校正,径向基函数的神经网络函数拟合的曲线更好。
径向基函数的基函数可以有多种选择,本次基函数采用高斯函数,对应隐藏层H的函数关系为:
█(h_n=e^(-(|(|x-c_n |)|2/(2〖r_n〗2 )) )#(3-20) )
||x-c_n ||称为欧几里得距离。输出的y_pre为:
█(y_pre=∑_(n=1)^n▒〖w_nh_n 〗#(3-21) )
得到前向传播函数后和前几节的方式一样,利用梯度下降的反向传播算法,对系统神经网络的RBF网络进行参数训练和跟新。经过实验后具体的得N=4。
█(y_pred=∑_(n=1)^4▒〖w_n
h_n 〗#(3-22) )
█(loss=∑▒(y_data-y_pred ) ^2#(3-23) )
接着根据反向传播函数跟新权重:(其中c,r,都为4×1的矩阵)
█(c=c-μ ∂loss/∂c#(3-24) )
█(r=r-μ ∂loss/∂r#(3-25) )
得到4组c,r,w的值,完成校正函数的搭建。
对应神经网络的框架如下:

对应测试结果如下:

综合对比多种校正算法如下:

                   代价函数  最大误差 温度范围
单点校正	           696.888	10.53℃	0℃~100℃
两点校正	           6.09	    1.34℃	0℃~100℃
线性神经网络	       3.81	    0.77℃  0℃~100℃
复合线性神经网络	   1.1191	0.27℃	0℃~100℃
径向基函数的神经网络  0.032   -0.14℃	0℃~100℃
物联沃分享整理
物联沃-IOTWORD物联网 » 使用STM32和ESP8266实现温度显示功能,并通过OneNet平台实现数据传输

发表回复