《基于STM32的远程实时温度监控系统设计》由会员分享,可在线阅读,更多相关《基于STM32的远程实时温度监控系统设计(17页珍藏版)》请在金锄头文库上搜索。
1、河南大学物理与电子学院单片机课程设计论文河南大学物理与电子学院2015级单片机课程设计论文题目:基于STM32的远程实时温度监控系统设计论文作者姓名:作 者 学 号:合作者姓名:所 在 学 院:所 学 专 业:任 课 老 师:论文完成时间:目录一、 前言2二、 系统组成与功能32.1 系统组成32.2 STM32最小系统板42.3DS18B20模块42.4 ESP8266模块52.5 手机APP62.5系统功能7三、系统原理73.1电路仿真图73.2扩展仿真图73.3 实物照片7四、系统程序94.1 程序流程94.2 主要程序源代码10五、 器材清单列表14六、结论15七、扩展部分设计心得15
2、参考文献16基于STM32的远程实时温度监控系统设计一、 前言这两年内,无线AP的数量呈迅猛的增长,无线网络的方便与高效使其能够得到迅速的普及。除了在目前的一些公共地方有AP之外,国外已经有先例以无线标准来建设城域网,因此,WiFi的无线地位将会日益牢固。WiFi是目前无线接入的主流标准,但是,WiFi会走多远呢?在Intel的强力支持下,WiFi已经有了接班人。它就是全面兼容现有WiFi的WiMAX,对比于WiFi的802.11X标准,WiMAX就是802.16x。与前者相比,WiMAX具有更远的传输距离、更宽的频段选择以及更高的接入速度等等,预计会在未来几年间成为无线网络的一个主流标准,I
3、ntel计划将来采用该标准来建设无线广域网络。这相比于现时的无线局域网或城域网,是质的变革,而且现有设备仍能得到支持,保护人们的每一分钱投资。总而言之,家庭和小型办公网络用户对移动连接的需求是无线局域网市场增长的动力,虽然到目前为止,美国、日本等发达国家仍然是目前WiFi用户最多的地区,但随着电子商务和移动办公的进一步普及,廉价的WiFi,必将成为那些随时需要进行网络连接用户的必然之选。在本学期的单片机在课程设计中,我们两个人一组共同讨论并设计了基于STM32的远程实时温度监控系统。而且设计出了实际的成品,经过调试后能实现预期的功能,同时我们两个人在能实现其基本功能的基础上进行了一定程度的功能
4、扩展。二、 系统组成与功能2.1 系统组成本系统主要有STM32最小系统板、DS18B20、ESP8266、手机App等部分组成2.1.1系统实现图:2.1.2硬件结构图:2.2 STM32最小系统板STM32最小系统版主要参数:内核:Cortex-M3 32-bit RISC;工作频率:72MHz,1.25 DMIPS/MHz;工作电压:2-3.6V;封装:LQFP64;I/O 口数量:51个;存储资源:256K Flash,48K RAM;接口资源:2 x SPI,5 x USART,2 x I2S,2 x I2C; 1 x SDIO,1 x USB,1 x CAN;模数转换:3xADC(
5、12位),2xDA(12位,1us,分时16通道);调试下载:支持 JTAG/SWD 接口的调试下载,支持 IAP2.3 DS18B20模块 DS18820美国DSLIAS公司推出的单总线数字温度传感器,具有微型化、低功耗、高性能、抗干扰能力强、易匹配处理器等优点。处理器与DS18820通信只需要一根数据线即可,同时该数据线还可以向挂接的DS18820供电。DS18820内部自带AD转换器,通过内部的温度采集、AD转换等一系列过程,将温度值以规定的格式转换为数据并输出,用户可以通过一些简单的算法,将数据还原为温度值。其分辨率可以达到12位,满足一般情况下对温度采集的需要。与模拟温度传感器相比,
6、DS18B20省去了信号调理、A/D转换等通道处理电路,从而使得系统线路简单,成本低廉。主要性能指标如下:1.电压范围:+3.O+5.5V(可用数据线供电)。2.测温范围:-55+125。3.通过编程可实现912位的数字读数方式,测温分辨率可达0.0625。具体的模块引脚图如图12所示。图12 DS18b20引脚图 2.4 ESP8266模块ESP8266是上海乐鑫信息科技设计的低功耗WiFi芯片,集成完整的TCP/IP协议栈和MCU。而ESP8266模块是深圳安信可公司基于ESP8266芯片研发(增加必要外围电路、串口flash、板载天线等)的串口WiFi模块,成本低、使用简便、功能强大。2
7、.4.1串口无线配置方法本系统用到的模式为串口无线WIFI AP模式TCP服务器。配置方法如图:WIFI AP模式TCP配置图2.4.2芯片引脚及功能ESP8266引脚功能图图13 ESP8266引脚图。2.5 手机APP在此系统中手机APP作为上位机,接收下位机测得的温度,并显示在界面。手机APP是人机交互的重点,实现了在同一局域网下的温度监测。在连接上下位机的WIFI前提下,输入IP地址和端口号,点击连接按钮可实现互连,下位机数据将不断上传至上位机,刷新编辑框的温度数值,实现监测。2.5系统功能本设计的主要功能是通过DS18B20温度采集模块采集温度,并将温度发送给单片机,实现实时监控。
8、扩展后的系统增加了远程监控,即通过WIFI模块(ESP8266)将温度数据发送到上位机(App),可实现在同一局域网内的远程温度监控系统。三、系统原理本系统设计的主要原理是通过WIFI把DS18B20采集到的温度数据发送给上位机。其中STM32单片机是整个系统的核心,负责数据的汇入与发送。当检测到有温度数据输入时,通过单片机把程序转换后的相应数据传送到对应的wifi模块,WIFI将数据发送到手机App,实现远程通信与温度的实时监控。3.1电路仿真图3.2扩展仿真图3.3 实物照片 3.3.1 硬件实物:具体的实物照片如图3-3-1图3-3-13.3.2 App界面App界面如图3-3-2所示
9、图3-3-2四、系统程序41 程序流程图24 程序流程图 4.2 主要程序源代码4.2.1下位机部分程序DS18B20获取温度:/从ds18b20得到温度值/精度:0.1C/返回值:温度值 (-5501250) short DS18B20_Get_Temp(void) u8 temp; u8 TL,TH; /定义u8类型的字节高、低八位short tem; DS18B20_Start (); / ds1820 开始转换 DS18B20_Rst();/复位DS18B20 DS18B20_Check(); /等待DS18B20的回应 返回1: DS18B2不存在 返回0:存在 DS18B20_Wr
10、ite_Byte(0xcc);/ skip rom 写一个字节到DS18B20 DS18B20_Write_Byte(0xbe);/ convert TL=DS18B20_Read_Byte(); / 从DS18B20读取一个字节 LSB TH=DS18B20_Read_Byte(); / 从DS18B20读取一个字节MSB if(TH7) TH=TH; TL=TL; temp=0;/温度为负 else temp=1;/温度为正 tem=TH; /获得高八位 tem=8; tem+=TL;/获得低八位 tem=(float)tem*0.625;/转换 if(temp)return tem; /
11、返回温度值else return -tem; STM32 main函数int main(void) u8 t=0; u8 *p;u8 temperature; DS18B20_Init(); /DS18B20初始化 delay_init(); /延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200); /串口初始化为115200/接下来是给esp8266发送指令来设置esp8266的模式(作为服务器端,tcp传输模式)atk_8266_send_c
12、md(AT+CWMODE=2,OK,200); atk_8266_send_cmd(AT+RST,OK,200);atk_8266_send_cmd(AT+CIPMUX=1,OK,200);atk_8266_send_cmd(AT+CIPSERVER=1,8085,OK,200);delay_ms(500); while(1) atk_8266_send_cmd(AT+CIPSEND=0,3,OK,200); /发送指定长度的数据delay_ms(500);temperature=DS18B20_Get_Temp();/获取DS18B20的温度数值*p=temperature; /转成指针地址
13、,满足发送函数需求atk_8266_send_data(p,OK,100); /发送指定长度的数据printf(n); 4.2.2上位机部分程序程序目录如图: 界面设计的程序不再赘述,所见即所得 部分主程序:public void Connect_onClick(View v) /点击连接wifi if (isConnect = true) /标志位 = true表示连接 isConnect = false;/置为false ConnectButton.setText(断开);/按钮上显示-断开 /启动连接线程 Connect_Thread connect_Thread = new Connect_Thread(); connect_Thread.start(); else /标志位 = false表示退出连接 isConnect = true;/置为true ConnectButton.setText(连接);/按钮上显示连接 if (null != socket) /socket不为空 try