论文部分内容阅读
摘要:本文详细地介绍了一种远程控制的温湿度数据采集器的设计。采集器的主控芯片采用STM32F103RBT6,温湿度采集模块采用常用DHT11模块或高精度的SHT30传感器,远程数据传输采用ESP8266模块。本文通过研究这些模块的工作流程,具体实现了就地数据采集功能、数据收发功能及远程控制功能。
关键字:DHT11温湿度传感器;STM32F103;WiFi AT指令
该远程数据采集/控制器的具体实现路线为:采集到的数据通过TCP/IP协议发送给远程服务端(PC或其他嵌入式系统设备),由服务端后台处理后根据数据处理反馈信息进行报警或设备启动/停止操作。采用的关键技术为基于AT指令的TCP/IP协议远程数据收发及远程控制技术。
该数据采集器,将远程数据传输和控制技术有机融合,并将结合现代移动设备端开发技术,为PC端、移动设备应用端和云平台端的具体应用设计提供了温湿度数据采集和远程被控的可靠数据来源及硬件支持。
1、引言
单片机技术的持续发展,使得单片机的性能和可靠性得到了巨大提升。以ARM内核为基础设计的STM32系列单片机在芯片性能和器件成本之间达到了一定平衡。本文研究了一种以STM32单片机技术开发的远程温湿度采集器,集合单片机控制的数据采集技术和WiFi环境下的TCP/IP数据传输技术,为远程温湿度数据采集/控制系统提供了一种性价比较高、结构简单、可靠性较好的终端数据采集/被控设备。为相关产业的远程采集和控制系统的终端设计提供了一种有效技术路线。
2、系统硬件结构设计
经过可行性分析后,将整个采集器前端划分为多个模块进行功能设计及实现。其中处理器选型为STM32F103RBT6。现场数据采集使用DHT11,用于简单验证采集器功能,后期可换为SHT30,配合编写驱动程序代码进行高精度温湿度数据采集。无线传输模块采用技术成熟的WiFi模块ESP8266,现场显示模块采用IIC总线的OLED屏,便于编写显示模块。现场控制采用独立按键进行,仅需进行简单控制即可。
2.1 处理器选型及引脚连接
STM32系列单片机,有着具有合理的性价比。其中STM32F103RBT6所具有的IO及功能引脚个数足以满足数据采集、现场显示、现场控制所需。
进行必要的电源和晶振引脚连接后以及STlink调试器连接后,根据外围电路功能需求,采用PC1-PC3引脚连接LED灯,用于开机测试,PC10使用GPIO功能连接DHT11温湿度传感器,PA2-PA3引脚,使用串口2功能,用于WiFi模块的控制。PB6-PB7引脚,使用I2C功能,用于连接I2C总线控制的OLED液晶屏进行现场数据显示。PC7连接有源蜂鸣器实现报警功能。PC8 PC9 以及PA0連接3个独立按键,用于现场控制功能实现,最后引出PA9 PA10的串口1功能,用于现场调试输出。完成单片机的引脚分配。
2.2 温湿度传感器模块
本文暂时只涉及温湿度采集器功能,采用最常用的DHT11温湿度传感器模块作为数据采集单元,若需使用高精度SHT30传感器,可先预留SHT30的I2C引脚。
DHT11数字模拟温湿度信号传感器由一个感温和一个感湿的自动控制元件模块组成,一个数位测温自动控制元件,并与数控单片机IO引脚直接连接,使整个系统的功能集成化以及操作过程变得更加简易快捷。
此处采用STM32F103的PC10引脚直连DHT11的DATA引脚,根据数据手册时序,进行数据采集命令及数据的传输。
2.3 显示OLED模块
现场显示模块不需要太多功能和较高分辨率,本文采用一个0.98寸的128*64点阵OLED屏作为现场数据显示模块,此类模块的连接可以采用多个IO引脚进行命令和数据传输,也可采用I2C总线进行命令和数据传输。为了节约IO引脚资源,本文采用PB6 PB7引脚,并配置为I2C总线功能进行命令和数据传输。
2.4 WiFi通讯模块
ESP8266模块是一款天线芯片一体的成熟WiFi模块,模块的WiFi数据传输功能,可通过串口、I2C总线、内部固件烧写等方式操作AT指令进行命令和数据传输。
AT指令集是从终端设备向终端适配器或数据电路终端设备发送的,带有AT两个字符的控制指令。一般除AT两个字符外,最多可以接收1056个字符的长度(包括最后的空字符)。
AT指令集常用于各种数据传输模块的数据传输和控制,例如GSM、WiFi模块等。
本文采用单片机的串口2作为AT指令发送端口,所以将ESP8266的对应引脚连接在STM32的PA2 PA3引脚,并配置为串口2功能。
2.5 其他功能模块
除上述主要功能模块外,MCU还连接了3个独立按键,用于控制和输入功能,另外引出了串口1的引脚,用于现场调试信息的输入输出。
3、系统软件功能实现
3.1 温湿度数据采集模块驱动
DHT11采用IO口直接与STM32进行通信,后期换成精度较高的SHT30的通信方式与DHT11完全不同,采用I2C总线进行数据通讯,因此可根据需要,将DHT11的驱动程序更换为SHT30驱动,并预留SHT30的I2C引脚接口即可。
DHT11通讯过程如图1所示
STM32与DHT11之间一次通讯时间4ms左右,数据分小数部分和整数部分,当前小数部分用于以后扩展,先读出为零。总线在主机空闲工作状态下就会变成一个高电平,主机将它的总线高度拉低并等待DHT11响应。DHT11接收器得到启停信号后,等待主机终端启动和运行停止并将信号传到终端,然后向主机终端发送一个主机响应。主机向总线前端发送开始响应信号主机终止,延时主机等待,读取DHT11的主机响应开始信号,主机向前端发送主机启动信号开始响应信号,可以直接将它切换为主机总线上的输入电压模式,或者主机输出一个小的高电平,总线从下向上将主机输出的输入电阻拉高。总线为低电平,DHT11发送响应信号,DHT11发送响应信号后,再把整个总线拉高,准备发送数据,每一个bit数据都以低电平时隙作为起点,高电平的长短决定了数据位是0还是1。最后一个bit数据传送完毕后,DHT11将总线拉低,总线由上将电阻拉高并进入空闲状态。 3.2 WiFi通讯模块驱动
本文采用ESP8266直连STM32的串口2,并控制串口2对WiFi模块发送AT指令的方式来进行WiFi数据通讯。其中驱动程序中使用了大量的AT指令。具体指令原型如下:
(1)设置 WiFi 模式: AT+CWMODE=3 // softAP+station mode Response :OK
(2)连接路由: AT+CWJAP="SSID","password" // SSID and password of router Response :OK
(3)查询设备 IP 地址: AT+CIFSR Response :192.168.101.105 // Device’s IP that got from router.
(4)设备作为 TCP client 连接 TCP server: AT+CIPSTART="TCP","192.168.101.110",8080 // protocol、server IP & port Response :OK Linked
(5)使能透传模式: AT+CIPMODE=1 Response :OK
(6)发送数据: AT+CIPSEND Response: >
//From now on,data received from UART will be transparent transmitted to server.
(7)接收数据: +IPD,0,n: xxxxxxxxxx // received n bytes,data = xxxxxxxxxx
(8)断开 TCP 连接:AT+CIPCLOSE=0 // Delete NO.0 connection. Response :0,CLOSED OK 。数据采集端采用STM32串口2发送AT指令,WiFi模块的驱动程序编写实际上转化为对了串口2进行数据及指令收发函数的编写和功能实现。
3.3 现场控制及现场显示驱动程序
数据采集端的现场数据显示,其显示器件采用I2C接口的OLED屏,驱动的编写需要将连接的引脚PB6 PB7配置为I2C功能,然后根据数据手册,实现打点函数,分别调用打点函数编写字符显示函数及图形显示函数即可。
现场控制采用独立按键,驱动程序对PC8 PC9 PA0引脚功能配置为IO功能,然后对这3个引脚的高低电平进行读操作,即可判断键值,并根据键值实现功能函数。
3.4 主程序设计
主程序功能需将各个器件的功能整合,并实现具体数据采集、WiFi传输及现场显示和控制功能。本文采用有限状态机思想,将具体功能进行模块化划分,主要算法思想如下:
(1)上电后进行各个器件的初始化,配置STM32各引脚功能。
(2)初始化有限状态机的初始状态为未收到主控端命令字符串,无按键输入状态。
(3)显示并连接可搜索的WiFi信号,返回连接状态。
(4)根据状态值,显示不同显示界面,包括控制界面和数据采集及发送界面。
(5)获取温湿度数值,将数值在OLED现场显示,并通过WiFi模块发送给远端。若温湿度值超阈值或者远程命令包含警报指令则启动警报器。
(6)获取远端控制指令。根据获取的指令字符改变状态机状态。
(7)获取按键键值,根据按键键值改变状态机状态。若检查到远程关闭指令,或者现场关閉网络的按键状态则执行关闭WiFi操作并关机。
(8)跳转到(4)并重复逐条向下执行。
4、系统测试
主程序中,为了避免数据传输过于频繁,每次数据发送后添加了8秒延时。数据采集端,除了需要定时发送温湿度数据给远程控制端外,还需要检测远程控制端发回的控制指令以及现场按键控制的状态,本文采用第三方公司提供的物联网云平台对此数据采集器进行了功能和性能测试。采集器调用了该平台提供的API函数将温湿度数据传给云服务器并能接收云端的远程控制指令。其数据传输效果如图2所示。
从功能和性能上分析,该数据采集器符合通用远程温湿度数据传输端的功能和性能要求。
5、总结与展望
本文采用STM32F103RBT6配合常用的DHT11温湿度传感器、OLED显示屏、ESP8266模块等,设计和实现了一款远程温湿度数据采集器,研究了传感器的数据采集流程,学习了WiFi模块的AT控制指令的控制方法,编写了模块驱动程序,实现了数据采集并远程收发及远程控制等功能。为后期远程PC端、移动设备端、云平台端的开发提供了一种性价比高、可靠性好、可扩充功能、可扩展精度的数据采集来源。为后期设计并实现一整台多端多平台的远程温湿度数据采集控制系统提供了坚实的数据来源。
参考文献
[1]孙忠富,杜克明,尹首一.智能家居发展趋势与农业应用展望[J].农业网络信息,2010,(5):6-8
[2]王鑫,赵文鑫,卫国唯,李建航.基于STM32单片机的物料搬运小车[J].科技风,2019(19):9.
[3]郭兴,魏立明,郭庆伟.基于STM32的综合管廊中燃气泄漏的检测系统设计[J].北方建筑,2019,4(03):79-82.
[4]李道亮.智能家居与智慧农业[J].农业工程,2012,(1):1-8
[5]王美确,陈明霞,李顺艳,陆志颖.基于智能家居的APP红外控制系统[J].科技风,2019(18):83-84.
关键字:DHT11温湿度传感器;STM32F103;WiFi AT指令
该远程数据采集/控制器的具体实现路线为:采集到的数据通过TCP/IP协议发送给远程服务端(PC或其他嵌入式系统设备),由服务端后台处理后根据数据处理反馈信息进行报警或设备启动/停止操作。采用的关键技术为基于AT指令的TCP/IP协议远程数据收发及远程控制技术。
该数据采集器,将远程数据传输和控制技术有机融合,并将结合现代移动设备端开发技术,为PC端、移动设备应用端和云平台端的具体应用设计提供了温湿度数据采集和远程被控的可靠数据来源及硬件支持。
1、引言
单片机技术的持续发展,使得单片机的性能和可靠性得到了巨大提升。以ARM内核为基础设计的STM32系列单片机在芯片性能和器件成本之间达到了一定平衡。本文研究了一种以STM32单片机技术开发的远程温湿度采集器,集合单片机控制的数据采集技术和WiFi环境下的TCP/IP数据传输技术,为远程温湿度数据采集/控制系统提供了一种性价比较高、结构简单、可靠性较好的终端数据采集/被控设备。为相关产业的远程采集和控制系统的终端设计提供了一种有效技术路线。
2、系统硬件结构设计
经过可行性分析后,将整个采集器前端划分为多个模块进行功能设计及实现。其中处理器选型为STM32F103RBT6。现场数据采集使用DHT11,用于简单验证采集器功能,后期可换为SHT30,配合编写驱动程序代码进行高精度温湿度数据采集。无线传输模块采用技术成熟的WiFi模块ESP8266,现场显示模块采用IIC总线的OLED屏,便于编写显示模块。现场控制采用独立按键进行,仅需进行简单控制即可。
2.1 处理器选型及引脚连接
STM32系列单片机,有着具有合理的性价比。其中STM32F103RBT6所具有的IO及功能引脚个数足以满足数据采集、现场显示、现场控制所需。
进行必要的电源和晶振引脚连接后以及STlink调试器连接后,根据外围电路功能需求,采用PC1-PC3引脚连接LED灯,用于开机测试,PC10使用GPIO功能连接DHT11温湿度传感器,PA2-PA3引脚,使用串口2功能,用于WiFi模块的控制。PB6-PB7引脚,使用I2C功能,用于连接I2C总线控制的OLED液晶屏进行现场数据显示。PC7连接有源蜂鸣器实现报警功能。PC8 PC9 以及PA0連接3个独立按键,用于现场控制功能实现,最后引出PA9 PA10的串口1功能,用于现场调试输出。完成单片机的引脚分配。
2.2 温湿度传感器模块
本文暂时只涉及温湿度采集器功能,采用最常用的DHT11温湿度传感器模块作为数据采集单元,若需使用高精度SHT30传感器,可先预留SHT30的I2C引脚。
DHT11数字模拟温湿度信号传感器由一个感温和一个感湿的自动控制元件模块组成,一个数位测温自动控制元件,并与数控单片机IO引脚直接连接,使整个系统的功能集成化以及操作过程变得更加简易快捷。
此处采用STM32F103的PC10引脚直连DHT11的DATA引脚,根据数据手册时序,进行数据采集命令及数据的传输。
2.3 显示OLED模块
现场显示模块不需要太多功能和较高分辨率,本文采用一个0.98寸的128*64点阵OLED屏作为现场数据显示模块,此类模块的连接可以采用多个IO引脚进行命令和数据传输,也可采用I2C总线进行命令和数据传输。为了节约IO引脚资源,本文采用PB6 PB7引脚,并配置为I2C总线功能进行命令和数据传输。
2.4 WiFi通讯模块
ESP8266模块是一款天线芯片一体的成熟WiFi模块,模块的WiFi数据传输功能,可通过串口、I2C总线、内部固件烧写等方式操作AT指令进行命令和数据传输。
AT指令集是从终端设备向终端适配器或数据电路终端设备发送的,带有AT两个字符的控制指令。一般除AT两个字符外,最多可以接收1056个字符的长度(包括最后的空字符)。
AT指令集常用于各种数据传输模块的数据传输和控制,例如GSM、WiFi模块等。
本文采用单片机的串口2作为AT指令发送端口,所以将ESP8266的对应引脚连接在STM32的PA2 PA3引脚,并配置为串口2功能。
2.5 其他功能模块
除上述主要功能模块外,MCU还连接了3个独立按键,用于控制和输入功能,另外引出了串口1的引脚,用于现场调试信息的输入输出。
3、系统软件功能实现
3.1 温湿度数据采集模块驱动
DHT11采用IO口直接与STM32进行通信,后期换成精度较高的SHT30的通信方式与DHT11完全不同,采用I2C总线进行数据通讯,因此可根据需要,将DHT11的驱动程序更换为SHT30驱动,并预留SHT30的I2C引脚接口即可。
DHT11通讯过程如图1所示
STM32与DHT11之间一次通讯时间4ms左右,数据分小数部分和整数部分,当前小数部分用于以后扩展,先读出为零。总线在主机空闲工作状态下就会变成一个高电平,主机将它的总线高度拉低并等待DHT11响应。DHT11接收器得到启停信号后,等待主机终端启动和运行停止并将信号传到终端,然后向主机终端发送一个主机响应。主机向总线前端发送开始响应信号主机终止,延时主机等待,读取DHT11的主机响应开始信号,主机向前端发送主机启动信号开始响应信号,可以直接将它切换为主机总线上的输入电压模式,或者主机输出一个小的高电平,总线从下向上将主机输出的输入电阻拉高。总线为低电平,DHT11发送响应信号,DHT11发送响应信号后,再把整个总线拉高,准备发送数据,每一个bit数据都以低电平时隙作为起点,高电平的长短决定了数据位是0还是1。最后一个bit数据传送完毕后,DHT11将总线拉低,总线由上将电阻拉高并进入空闲状态。 3.2 WiFi通讯模块驱动
本文采用ESP8266直连STM32的串口2,并控制串口2对WiFi模块发送AT指令的方式来进行WiFi数据通讯。其中驱动程序中使用了大量的AT指令。具体指令原型如下:
(1)设置 WiFi 模式: AT+CWMODE=3 // softAP+station mode Response :OK
(2)连接路由: AT+CWJAP="SSID","password" // SSID and password of router Response :OK
(3)查询设备 IP 地址: AT+CIFSR Response :192.168.101.105 // Device’s IP that got from router.
(4)设备作为 TCP client 连接 TCP server: AT+CIPSTART="TCP","192.168.101.110",8080 // protocol、server IP & port Response :OK Linked
(5)使能透传模式: AT+CIPMODE=1 Response :OK
(6)发送数据: AT+CIPSEND Response: >
//From now on,data received from UART will be transparent transmitted to server.
(7)接收数据: +IPD,0,n: xxxxxxxxxx // received n bytes,data = xxxxxxxxxx
(8)断开 TCP 连接:AT+CIPCLOSE=0 // Delete NO.0 connection. Response :0,CLOSED OK 。数据采集端采用STM32串口2发送AT指令,WiFi模块的驱动程序编写实际上转化为对了串口2进行数据及指令收发函数的编写和功能实现。
3.3 现场控制及现场显示驱动程序
数据采集端的现场数据显示,其显示器件采用I2C接口的OLED屏,驱动的编写需要将连接的引脚PB6 PB7配置为I2C功能,然后根据数据手册,实现打点函数,分别调用打点函数编写字符显示函数及图形显示函数即可。
现场控制采用独立按键,驱动程序对PC8 PC9 PA0引脚功能配置为IO功能,然后对这3个引脚的高低电平进行读操作,即可判断键值,并根据键值实现功能函数。
3.4 主程序设计
主程序功能需将各个器件的功能整合,并实现具体数据采集、WiFi传输及现场显示和控制功能。本文采用有限状态机思想,将具体功能进行模块化划分,主要算法思想如下:
(1)上电后进行各个器件的初始化,配置STM32各引脚功能。
(2)初始化有限状态机的初始状态为未收到主控端命令字符串,无按键输入状态。
(3)显示并连接可搜索的WiFi信号,返回连接状态。
(4)根据状态值,显示不同显示界面,包括控制界面和数据采集及发送界面。
(5)获取温湿度数值,将数值在OLED现场显示,并通过WiFi模块发送给远端。若温湿度值超阈值或者远程命令包含警报指令则启动警报器。
(6)获取远端控制指令。根据获取的指令字符改变状态机状态。
(7)获取按键键值,根据按键键值改变状态机状态。若检查到远程关闭指令,或者现场关閉网络的按键状态则执行关闭WiFi操作并关机。
(8)跳转到(4)并重复逐条向下执行。
4、系统测试
主程序中,为了避免数据传输过于频繁,每次数据发送后添加了8秒延时。数据采集端,除了需要定时发送温湿度数据给远程控制端外,还需要检测远程控制端发回的控制指令以及现场按键控制的状态,本文采用第三方公司提供的物联网云平台对此数据采集器进行了功能和性能测试。采集器调用了该平台提供的API函数将温湿度数据传给云服务器并能接收云端的远程控制指令。其数据传输效果如图2所示。
从功能和性能上分析,该数据采集器符合通用远程温湿度数据传输端的功能和性能要求。
5、总结与展望
本文采用STM32F103RBT6配合常用的DHT11温湿度传感器、OLED显示屏、ESP8266模块等,设计和实现了一款远程温湿度数据采集器,研究了传感器的数据采集流程,学习了WiFi模块的AT控制指令的控制方法,编写了模块驱动程序,实现了数据采集并远程收发及远程控制等功能。为后期远程PC端、移动设备端、云平台端的开发提供了一种性价比高、可靠性好、可扩充功能、可扩展精度的数据采集来源。为后期设计并实现一整台多端多平台的远程温湿度数据采集控制系统提供了坚实的数据来源。
参考文献
[1]孙忠富,杜克明,尹首一.智能家居发展趋势与农业应用展望[J].农业网络信息,2010,(5):6-8
[2]王鑫,赵文鑫,卫国唯,李建航.基于STM32单片机的物料搬运小车[J].科技风,2019(19):9.
[3]郭兴,魏立明,郭庆伟.基于STM32的综合管廊中燃气泄漏的检测系统设计[J].北方建筑,2019,4(03):79-82.
[4]李道亮.智能家居与智慧农业[J].农业工程,2012,(1):1-8
[5]王美确,陈明霞,李顺艳,陆志颖.基于智能家居的APP红外控制系统[J].科技风,2019(18):83-84.