基于STM32的远程实时温度监控系统的设计_第1页
基于STM32的远程实时温度监控系统的设计_第2页
基于STM32的远程实时温度监控系统的设计_第3页
基于STM32的远程实时温度监控系统的设计_第4页
基于STM32的远程实时温度监控系统的设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河南大学物理与电子学院2015级单片机课程设计论文题目:基于stm32的远程实时温度监控系统设计论文作者姓名:作 者 学 号:合作者姓名:所 在 学 院:所 学 专 业:任 课 老 师:论文完成时间:目录一、主要元件资料11.1 STM32单片机11.2 DS18B20测温模块11.3 esp8266模块2二、最后程序32.1下位机程序3 2.1.1Main.c3 2.1.2Usart.c6 2.1.3ds18b20.c92.1上位机手机App主要程序12一、主要元件资料1.1 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(12位),2xDA(12位,1us,分时16通道);调试下载:支持 JTAG/SWD 接口的调试下载,支持 IAP1.2 DS18B20测温模块DS18820美国DSLIAS公司推出的单总线数字温度传感器,具有微型化、低功耗、高性能、抗干扰能力强、易匹配处理器等优点。处理器与DS18820通信只需要一根数据线即可,同时该数据线还可以向挂接的DS18820供电。DS18820内部自带AD转换器,通过内部的温度采集、AD转换等一系列过程,将温度值以规定的格式转换为数据并输出,用户可以通过一些简单的算法,将数据还原为温度值。其分辨率可以达到12位,满足一般情况下对温度采集的需要。与模拟温度传感器相比,DS18820省去了信号调理、A/D转换等通道处理电路,从而使得系统线路简单,成本低廉。主要性能指标如下:1.电压范围:+3.O+5.5V(可用数据线供电)。2.测温范围:-55+125。3.通过编程可实现912位的数字读数方式,测温分辨率可达0.0625。具体的模块引脚图如图12所示。图12 DS18b20引脚图 1.3 esp8266模块ESP8266是上海乐鑫信息科技设计的低功耗WiFi芯片,集成完整的TCP/IP协议栈和MCU。而ESP8266模块是深圳安信可公司基于ESP8266芯片研发(增加必要外围电路、串口flash、板载天线等)的串口WiFi模块,成本低、使用简便、功能强大。芯片引脚图如图1-3所示。图13 ESP8266引脚图二、最后程序2.1下位机程序程序结构:2.1.1Main.c#include sys.h#include delay.h#include usart.h#include stdarg.h#include string.h#include DS18B20.hu8 USART1_RX_BUF15; u8 USART1_TX_BUF15; void u1_printf(char* fmt,.) u16 i,j; va_list ap; va_start(ap,fmt);vsprintf(char*)USART1_TX_BUF,fmt,ap);va_end(ap);i=strlen(const char*)USART1_TX_BUF);for(j=0;jSR&0X40)=0); USART1-DR = (u8) ch; return ch;#endif #if EN_USART1_RX u8 USART_RX_BUFUSART_REC_LEN; u16 USART_RX_STA=0; void uart_init(u32 bound) GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; /PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure); USART_InitStructure.USART_BaudRate = bound;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);USART_Cmd(USART1, ENABLE); void USART1_IRQHandler(void) u8 Res;#if SYSTEM_SUPPORT_OS OSIntEnter(); #endifif(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) Res =USART_ReceiveData(USART1);if(USART_RX_STA&0x8000)=0)if(USART_RX_STA&0x4000)if(Res!=0x0a)USART_RX_STA=0;else USART_RX_STA|=0x8000; else if(Res=0x0d)USART_RX_STA|=0x4000;elseUSART_RX_BUFUSART_RX_STA&0X3FFF=Res ;USART_RX_STA+;if(USART_RX_STA(USART_REC_LEN-1)USART_RX_STA=0; #if SYSTEM_SUPPORT_OS OSIntExit(); #endif #endif2.1.3ds18b20.c#include ds18b20.h#include delay.hvoid DS18B20_Rst(void) DS18B20_IO_OUT(); /SET PA0 OUTPUT DS18B20_DQ_OUT=0; delay_us(750); DS18B20_DQ_OUT=1; delay_us(15); u8 DS18B20_Check(void) u8 retry=0;DS18B20_IO_IN();/SET PA0 INPUT while (DS18B20_DQ_IN&retry=200)return 1;else retry=0; while (!DS18B20_DQ_IN&retry=240)return 1; return 0;u8 DS18B20_Read_Bit(void) u8 data;DS18B20_IO_OUT();/SET PA0 OUTPUT DS18B20_DQ_OUT=0; delay_us(2); DS18B20_DQ_OUT=1; DS18B20_IO_IN();delay_us(12);if(DS18B20_DQ_IN)data=1; else data=0; delay_us(50); return data;u8 DS18B20_Read_Byte(void) u8 i,j,dat; dat=0;for (i=1;i=8;i+) j=DS18B20_Read_Bit(); dat=(j1); return dat;void DS18B20_Write_Byte(u8 dat) u8 j; u8 testb;DS18B20_IO_OUT(); for (j=1;j1; if (testb) DS18B20_DQ_OUT=0; delay_us(2); DS18B20_DQ_OUT=1; delay_us(60); else DS18B20_DQ_OUT=0; delay_us(60); DS18B20_DQ_OUT=1; delay_us(2); void DS18B20_Start(void)/ ds1820 start convert DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc);/ skip rom DS18B20_Write_Byte(0x44);/ convert u8 DS18B20_Init(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_0); DS18B20_Rst();return DS18B20_Check(); short DS18B20_Get_Temp(void) u8 temp; u8 TL,TH; short tem;DS18B20_Start (); DS18B20_Rst(); DS18B20_Check(); DS18B20_Write_Byte(0xcc); DS18B20_Write_Byte(0xbe); TL=DS18B20_Read_Byte(); TH=DS18B20_Read_Byte(); 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; else return -tem; 2.1上位机手机App主要程序(界面程序略,所见即所得编程方式,代码略去)2.1.1注意给app权限(在AndroidManifests.xml程序里更改)2.1.2MainActivitypackage com.example.chao.wifiapplication123;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import .InetAddress;import .Socket;public class MainActivity extends AppCompatActivity boolean isConnect=true; Button ConnectButton; Button SendButton; EditText IPEditText; EditText PortText; EditText MsgEditText; EditText RrceiveEditText; Socket socket = null; private OutputStream outputStream=null; private InputStream inputStream=null; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ConnectButton = (Button) findViewById(R.id.Connect_Bt); SendButton = (Button) findViewById(R.id.Send_Bt); IPEditText = (EditText) findViewById(R.id.ip_ET); PortText = (EditText) findViewById(R.id.Port_ET); MsgEditText = (EditText) findViewById(R.id.Send_ET); RrceiveEditText = (EditText) findViewById(R.id.Receive_ET); public void Connect_onClick(View v) if (isConnect = true) isConnect = false; ConnectButton.setText(断开); Connect_Thread connect_Thread = new Connect_Thread(); connect_Thread.start(); else isConnect = true; ConnectButton.setText(连接); if (null != socket) try ConnectButton.setEnabled(true); SendButton.setEnabled(false); socket.close(); socket = null; catch (IOException e) / TODO Auto-generated catch block e.printStackTrace(); public void Send_onClick(View v) try outputStream = socket.getOutputStream(); outputStream.write(MsgEditText.getText().toString().getBytes(); catch (Exception e) / TODO Auto-generated catch block e.printStackTrace(); class Connect_Thread extends Thread public void run() try if (s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论