任务6-3 红外测温蓝牙智控系统设计与实现_第1页
任务6-3 红外测温蓝牙智控系统设计与实现_第2页
任务6-3 红外测温蓝牙智控系统设计与实现_第3页
任务6-3 红外测温蓝牙智控系统设计与实现_第4页
任务6-3 红外测温蓝牙智控系统设计与实现_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

STM32EMBEDDEDTECHNOLOGYSTM32嵌入式技术及应用任务6-3多模块协同嵌入式系统开发项目六

红外测温蓝牙智控系统设计与实现红外测温蓝牙通信智能控制CONTENTS目录01任务目标明确学习任务与能力培养目标,了解多模块协同系统的设计要求02知识储备掌握蓝牙通信原理、JDY-31模块应用及AT指令配置方法03任务实施从硬件电路设计到程序开发,完成系统联调与功能验证04任务总结回顾核心知识点、技能提升及绿色低碳设计理念05提升训练与评价通过知识问答、实践操作巩固所学,完成任务评价01任务目标明确学习任务与能力培养目标构建多模块协同的嵌入式系统TASKOBJECTIVES任务目标核心目标设计并实现基于STM32微处理器的多模块协同系统,具备红外测温、蓝牙通信、OLED显示、语音播报、按键设置及阈值报警等功能。红外测温非接触式温度测量精度±0.5℃蓝牙通信无线数据传输手机APP远程控制OLED显示实时温度显示阈值参数可视化绿色低碳理念通过以下措施实现节能减排:选用低功耗器件智能电源管理优化通信协议环保材料应用02知识储备掌握蓝牙通信原理与模块应用理解串口透传与AT指令配置BLUETOOTHCOMMUNICATION基于串口透传的蓝牙通信无线通信技术多种无线通信技术都可以通过串行UART接口与微控制器进行通信:移动通信(GPRS、4GLTE)蓝牙串口通信串口无线网络(WiFi)ZigBee通信开发优势1硬件差异:主要依赖于硬件模块的不同来实现2软件一致:软件层通常无需做大幅修改3代码复用:使用相应的串口通信程序代码即可实现数据传输通信架构示意STM32微控制器主控芯片UART串口通信蓝牙模块JDY-31/HC-05蓝牙无线传输手机APP远程监控与控制JDY-31BLUETOOTHMODULEJDY-31蓝牙模块简介图6-15JDY-31蓝牙模块实物图模块特性基于蓝牙3.0SPP协议支持Windows/Linux/Android数据透传功能引脚定义VCC电源输入3.6V~6VGND地线接地TXD信号输出端发送数据RXD信号输入端接收数据通信连接STM32通过蓝牙模块与手机APP实现远程通信,通信协议为UART通信协议STM32RX←接收JDY-31TX→发送STM32TX→发送JDY-31RX←接收ATCOMMANDSCONFIGURATIONJDY-31蓝牙模块设置(一)AT指令简介AT指令是一种用于控制调制解调器、蓝牙模块、Wi-Fi模块等通信设备的文本命令语言指令格式:AT+指令参数+回车/换行使用前准备在使用蓝牙模块前,需要进行AT指令测试来验证模块是否通信正常设置模块名称便于识别多个模块配置波特率匹配通信速率设置配对密码保障通信安全AT指令测试步骤1硬件连接用USB到TTL的转接口实现蓝牙模块和PC的连接。连线时,将转接口的RXD、TXD分别与蓝牙模块的TX、RX相连2打开串口调试助手连接好硬件后,打开计算机上的串口调试助手软件3配置串口参数在"串口选择"栏选择串口号,设置波特率为9600(蓝牙模块默认波特率),单击"打开串口"按钮,选择"DTR"选项4发送测试指令在字符输入框中输入"AT",单击"发送"按钮,若模块通信正常,则返回"OK"信息提示:若未返回"OK"信息,请检查硬件连接、串口选择和波特率设置ATCOMMANDSSETTINGJDY-31蓝牙模块设置(二)设置模块波特率设置模块波特率的指令为AT+BAUD查询当前波特率:发送:AT+BAUD返回:+BAUD=4(表示9600)设置波特率为115200:发送:AT+BAUD8返回:OK设置蓝牙模块名称设置蓝牙模块名称的指令为AT+NAME示例:将模块名称改为"TempSensor"发送:AT+NAMETempSensor返回:OK出厂默认名称:JDY-31-SPP设置蓝牙配对密码设置蓝牙配对密码的指令为AT+PIN示例:将配对密码改为"5678"发送:AT+PIN5678返回:OK出厂初始密码:1234数值与波特率对应关系数值波特率数值波特率49600(默认)75760051920081152006384009230400ATCOMMANDSREFERENCEAT指令总集指令功能默认/说明AT测试启动,检查模块通信状态返回OKAT+BAUD波特率设置与查询9600AT+NAME蓝牙模块名称设置与查询JDY-31-SPPAT+PIN蓝牙配对密码设置与查询1234AT+RESET软复位,重启模块-AT+DISC断开连接(连接状态下有效)-AT+DEFAULT恢复出厂设置-AT+ENLOG串口状态使能-AT+VERSION查询版本号-指令格式统一AT+指令+参数响应标准成功返回OK安全保障密码配对机制COMMUNICATIONPROCESS蓝牙通信过程1初始化模块初始化发送AT指令完成JDY-31蓝牙模块初始化USART配置在main函数中调用USART初始化函数,配置USART外设2数据发送写入缓冲区STM32将数据写入USART的发送缓冲区自动发送USART外设自动将数据通过TXD引脚发送到蓝牙模块3数据接收接收数据蓝牙模块通过RXD引脚将数据发送到STM32的USART接收缓冲区读取数据通过USART中断或轮询方式读取接收缓冲区中的数据4数据处理执行操作根据接收到的数据执行相应操作,如控制外设、处理用户输入数据回传如需向手机端发送数据,写入发送缓冲区由蓝牙模块发送通信流程示意STM32主控芯片TX→RXJDY-31蓝牙模块蓝牙手机APP远程控制03任务实施从设计到实现完整项目开发硬件电路设计、程序开发、系统联调IMPLEMENTATIONREQUIREMENTS任务实现要求硬件设计要求使用STM32F103单片机作为主控芯片,集成MLX90614红外测温模块、OLED显示屏、蓝牙HC-05模块、按键和蜂鸣器,并设计各模块的接口电路,确保通信稳定可靠。程序设计需要初始化I2C接口,编写各模块的初始化函数和数据读写函数,包括红外测温、OLED显示、蓝牙通信、按键扫描和报警处理等功能模块。功能验证搭建实物作品,验证系统的各个功能模块,包括红外测温、OLED显示、蓝牙通信、按键设置和报警功能,并调整系统参数,确保测温精度和通信稳定性。系统联调运行程序以观察OLED显示屏和蓝牙APP的显示结果,记录并修复可能出现的问题,确保系统稳定可靠。SYSTEMDESIGN系统功能分析系统框图红外测温模块精确测温,非接触式测量蓝牙模块与手机或其他设备实现无线通信语音播报模块提供语音提示功能OLED显示模块显示系统状态和温度数据按键设置模块用户进行系统配置阈值报警模块温度超标时发出报警提示主控芯片STM32F103C8T6微控制器工作电压3.3V按键数量4个指示灯3个状态通信方式蓝牙整个系统通过STM32微处理器进行逻辑控制和数据处理,实现智能化控制OLEDDISPLAYMODULEOLED显示模块引脚定义VCC电源正极(3.3V/5V)GND地线SCLI2C时钟线SDAI2C数据线模块特性本设计选用0.96寸OLED屏,用于显示当前温度值和设定值SSD1306芯片OLED显示模块的驱动芯片,支持多种接口与微控制器通信,用于控制OLED像素点发光显示内容GT20L16S1Y芯片汉字库存储芯片,存储GB2312国标简体汉字和ASCII字符的点阵信息,通过I2C接口与STM32通信通信接口STM32I2C通信OLEDINFRAREDTEMPERATUREMODULE红外测温模块引脚定义VIN电源输入接5VGND地线接地SCL时钟线接单片机SDA数据线接单片机GY-906模块特性GY-906模块是基于MLX90614的高精度非接触红外温度计体积小巧易集成,适合嵌入式应用工作电压3V~5V,宽电压范围通信接口支持I2C通信和PWM输出分辨率0.02℃/0.14℉测温范围最低温度-20℃最高温度120℃VOICEBROADCASTMODULE语音播报模块模块特性本设计选用YF017系列语音芯片,这是一款具有PWM输出的OTP语音标准模块内置电阻,外围电路简单只需一个104电容即可稳定工作工作电压2.2V~5.5V3个I/O口控制控制方式系统运用模拟串行方式,通过发送脉冲选择并播放最多32段声音RST复位复位播放指针DATA数据接收脉冲BUSY状态工作状态指示脉冲宽度建议设为1ms左右播放示例播放第10段语音:先向RST发送复位脉冲,再向DATA发送10个脉冲播放第5段语音:先复位再发送5个脉冲至DATAVOICECONTENTTABLEYF017模块语音播报内容地址内容地址内容地址内容地址内容109817月25音乐2110918日26整3211十19星期27今天是4312百20度28上午5413点21百分之29下午6514分22现在北京时间是30晚上7615秒23现在温度是31负8716年24现在湿度是32滴32段语音丰富播报内容温度播报地址23:现在温度是数字播报0-9完整支持SYSTEMPROGRAMDESIGN系统程序设计概述模块化编程思想本设计采用模块化编程思想实现基于蓝牙的红外测温智控系统的核心功能。将系统功能分解为多个独立的模块,每个模块负责特定的功能,便于开发、调试和维护。初始化模块各硬件模块初始化配置红外测温模块温度数据采集与处理蓝牙模块数据发送与接收OLED显示模块温度信息可视化语音播报模块温度语音播报模块间协作关系红外测温数据STM32处理OLED蓝牙语音INITIALIZATIONMODULE初始化模块System_Init()函数在系统启动前,需完成各硬件模块的初始化voidSystem_Init(void){

delay_init();

//

初始化延时函数//

设置NVIC中断分组为第2组//

2位抢占优先级,2位响应优先级NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);uart_init(9600);

//

初始化串口1,用于调试uart3_init(9600);

//

初始化串口3,用于蓝牙LED_Init();

//

初始化LED端口KEY_Init();

//

初始化按键接口KEY_Exti_Init();

//

初始化按键外部中断SMBus_Init();

//

初始化红外测温模块OLED_Init();

//

初始化OLED显示模块

temp

=

SMBus_ReadTemp();

//

读取初始温度}初始化流程1延时函数初始化delay_init()2NVIC中断分组配置2位抢占+2位响应优先级3串口初始化串口1调试+串口3蓝牙4外设初始化LED、按键、外部中断5功能模块初始化红外测温+OLED显示初始化顺序很重要,确保依赖关系正确TEMPERATUREMODULECODE红外测温模块程序GetTemperature()函数GY-906传感器利用I2C总线采集温度数据,主控芯片对数据进行解析并发送至显示模块和蓝牙模块floatGetTemperature(void){

float

temp;

int

times

=

0;

temp

=

SMBus_ReadTemp();

//

读取当前温度while

(times

<

10)

//

循环10次读取温度

{

temp

=

SMBus_ReadTemp();

float

temp2

=

SMBus_ReadTemp();

float

scaledTemp

=

SMBus_ReadTemp()

*

10;

//

上传温度数据到APPu3_printf("E");

//

发送标志位Echar

tempStr[10];

sprintf(tempStr,

"%.2f",

temp);

u3_printf(tempStr);

//

上传温度值到APP

times++;

delay_ms(1);

}//

通过串口接收指令,调整阈值switch

(Usart3_RxCounter){

case'W':

temp_max_sta++;

//

增加最大阈值break;

case'N':

temp_max_sta--;

//

减小最大阈值break;

case'J':

temp_min_sta++;

//

增加最小阈值break;

case'K':

temp_min_sta--;

//

减小最小阈值break;

case'M':

Speech();

//

语音播报break;

default:

break;}Usart3_RxCounter

=

'

';

//

清空接收缓冲区OLED_Show();

//

更新OLED显示return

temp;

//

返回温度值}代码说明1使用SMBus_ReadTemp()函数从SMBus读取温度传感器数据,以浮点数存储2循环10次读取温度,通过u3_printf()上传数据到上位机,格式化为小数点后2位3通过串口接收指令(W/N/J/K/M),动态调整温度阈值,支持语音播报4调用OLED_Show()函数更新屏幕显示,函数最终返回读取到的温度值BLUETOOTHMODULECODE蓝牙模块程序(一)u3_printf()发送函数自定义串口打印函数,支持格式化输出voidu3_printf(char

*fmt,

...){

unsigned

int

i,

length;

va_list

ap;

va_start(ap,

fmt);

vsprintf(Usart3_TxBuff,

fmt,

ap);

va_end(ap);

length

=

strlen((constchar

*)Usart3_TxBuff);

//

等待发送完成标志位(TXE=1)while((USART3->SR

&

0X40)

==

0);

//

逐字节发送数据for(i

=

0;

i

<

length;

i++)

{

USART3->DR

=

Usart3_TxBuff[i];

while((USART3->SR

&

0X40)

==

0);

}}函数说明可变参数处理使用va_list、va_start、va_end处理可变参数,支持格式化字符串字符串格式化使用vsprintf将格式化后的字符串写入发送缓冲区Usart3_TxBuff发送完成检测通过检测USART3状态寄存器的TXE标志位,确保发送完成逐字节发送将缓冲区数据逐字节写入数据寄存器DR,实现串口数据发送BLUETOOTHMODULECODE(CONT.)蓝牙模块程序(二)USART3_IRQHandler()中断服务函数串口接收中断处理流程voidUSART3_IRQHandler(void){

//

检查接收数据寄存器非空中断标志位if((USART_GetITStatus(USART3,

USART_IT_RXNE)

!=

RESET))

{

//

清除接收中断标志位USART_ClearITPendingBit(USART3,

USART_IT_RXNE);

if(USART3->DR)

{

//

将接收到的数据存入缓冲区

Usart3_RxBuff[Usart3_RxCounter]

=

USART3->DR;

Usart3_RxCounter++;

}

}

//

检查空闲中断标志位if((USART_GetITStatus(USART3,

USART_IT_IDLE)

!=

RESET))

{

Usart3_RxCompleted

=

1;

//

标记接收完成//

清除空闲中断标志位

Usart3_RxCounter

=

USART3->SR;

//

读取状态寄存器

Usart3_RxCounter

=

USART3->DR;

//

读取数据寄存器

}}中断处理流程1检测接收中断检查USART_IT_RXNE标志位,判断是否有数据接收2清除中断标志调用USART_ClearITPendingBit清除接收中断标志位3存储数据将接收到的数据存入Usart3_RxBuff缓冲区,计数器加14检测空闲中断检查USART_IT_IDLE标志位,标记接收完成,清除标志OLEDDISPLAYCODEOLED显示模块程序OLED_Show()函数OLED显示功能实现,显示温度信息和阈值voidOLED_Show(){

OLED_show_str(32,

0,

"温度计");

OLED_show_str(0,

16,

"当前温度:");

OLED_Show_float_Num(72,

16,

temp,

3,

1,

16);

OLED_show_str(108,

16,

"℃");

OLED_show_str(0,

32,

"温度上限:");

OLED_Show_float_Num(72,

32,

(float)temp_max_sta/10,

3,

1,

16);

OLED_show_str(0,

48,

"温度下限:");

OLED_Show_float_Num(72,

48,

(float)temp_min_sta/10,

3,

1,

16);

if(choose==1)

OLED_show_str(120,

32,

"<<");

//

选择上限if(choose==2)

OLED_show_str(120,

48,

"<<");

//

选择下限OLED_Refresh();

//

OLED刷新LED_Alarm();

//

报警处理}显示内容说明当前温度显示实时温度值,带℃单位温度上限显示设定的温度上限值温度下限显示设定的温度下限值选择标记用"<<"标记当前选择的阈值项VOICEBROADCASTCODE语音播报模块程序Speech()语音播报函数实现温度值的语音播报,包括整数部分、小数部分和单位voidSpeech(){

temp

=

SMBus_ReadTemp();

temp2

=

SMBus_ReadTemp();

scaledTemp

=

SMBus_ReadTemp()

*

10;

//

上传温度数据到APPu3_printf("E");

sprintf(tem,

"%.2f",

temp);

u3_printf(tem);

OLED_show();

times

=

0;

read(23);

//

播报"现在温度是“

while

(!busy);

//

等待忙碌状态解除//

百位部分的语音播报if

(temp2/100

!=

0)

{

read(temp2/100%10+1);

//

播报百位数值while

(!busy);

read(12);

//

播报"百"字while

(!busy);

}播报逻辑说明启动播报先播报"现在温度是"(地址23),等待模块就绪百位播报如果温度≥100,播报百位数值+"百"字十位播报根据十位数值播报,10-19特殊处理个位播报播报个位数值,0时播报"点"字单位播报播报"度"字(地址20)完成温度播报SYSTEMINTEGRATION系统联调及运行1.硬件联调检查各模块的电路连接

温馨提示

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

最新文档

评论

0/150

提交评论