遥想吾师行道处,天香桂子落纷纷。
——唐代·白居易《寄韬光禅师》
摘要
鉴于蓝牙技术在嵌入式系统应用的广泛性,设计微控制器与PC机蓝牙通信实验。硬件上选用蓝牙模块实现微控制器与PC机串口透明传输,可有效降低学习门槛,缩短研发周期;软件上独立完成微控制器程序设计和上位机软件开发两部分工作,灵活性更好,扩展性更强。项目实验在微控制器与PC机之间组建了一个无线通信网,在微控制器端实现一个“云”数字电子钟功能,在PC端实现对工业现场参数的实时监测与远程控制功能,经反复测试,各项预期功能均很好实现。实验设计综合性强,扩展性好,工程应用面广,是理工科专业蓝牙模块教学和嵌入式工程师构建无线监控系统的经典实例。
关键词:蓝牙通信;透明传输;时间同步;微控制器
引 言
蓝牙作为一种近距离无线通信技术,由于其具有低功耗、低成本、高传输速率、组网简单以及可同时管理数据和语音传输等诸多优点而深受嵌入式工程师的青睐。蓝牙的工作频段为全球通用的2.4GHz ISM频段,数据传输速率为1Mbit/s,理想的通信范围为10cm~10m,通过建立通用的无线空中接口及其控制软件的公开标准,使不同厂家的生产的便携设备可以无线互联互通,手机、PAD、无线音箱、汽车电子、笔记本电脑等众多设备都在使用蓝牙扳术。随着蓝牙技术的进步和自动化领域的对便携性需求急剧增加,蓝牙技术也将用于更多检测仪器仪表和工业自动化控制系统中。
蓝牙透明传输原理
使用蓝牙技术组建近距离无线通信网实现数据互联互通有两种开发方式,一种是基于蓝牙芯片的一次开发,其需要了解复杂的蓝牙底层协议,在SDK环境下设计芯片代码并进行测试封装。虽然该方式在成本、灵活性方面具有明显优势,但也存在需要蓝牙认证,开发难度大,研发周期长,对设计人员要求高等缺点。另外一种是基于蓝牙模块的二次开发,在蓝牙芯片设计公司提供的蓝牙模块中已完成蓝牙认证和底层协议封装,对外提供一个操作接口,一般是串口,用户在使用蓝牙模块时只需要将其当成一个串口设备即可,而不用关心数据是如何接收和发送的,这就是蓝牙模块的串口透明传输方式。使用蓝牙模块虽然需要在成本和灵活性上做出一定的牺牲,但换来的是高可靠性和研发周期大幅缩短,普通嵌入式工程师可以很快将蓝牙技术应用于其研发产品当中。基于上述分析,本设计选用蓝牙模块实现近距离无线传输网络组建,其工作于串口透明传输模式。
串口即通用同步/异步收发器USART作为一种板级有线通信方式被广泛应用于各类嵌入式系统当中,如果需要连接两个具有USART接口的设备,则每个设备至少通过三个引脚与其他设备连接在一起,分别为接收数据输入(RxD)、发送数据输出(TxD)、两个设备之间的共地信号(GND),其连接方式如图1所示,需要注意的是两个USART设备的TxD和RxD必须是交叉相连的。
图1 两个USART设备之间的互连
两个具备USART串口的设备组建蓝牙无线通信网简单、高效的方式是选用蓝牙模块采用串口透传方式进行数据通信。其硬件连接方式如图2所示,每个通信设备分别使用串口连接各自蓝牙模块,此时至少需要连接4根线,分别为接收数据输入(RxD)、发送数据输出(TxD)以及两个设备之间的电源信号(VCC)和共地信号(GND),如有必要还可以连接蓝牙模块的按键复位和状态指示信号,此时仍然需要注意通信设备和蓝牙模块的RxD信号与TxD信号交叉相连。完成图2所示硬件连接之后,蓝牙模块可以看成通信设备一个串口设备,数据发送和接收均是通过访问串口来实现的,至于数据如何在蓝牙模块之间无线传输已无需用户关心,传输过程对通信设备来说是完全透明的。
图2 两个通信设备蓝牙模块互连
上述通信连接方式常见于各种工业控制过程中,但是作为嵌入式系统课程的蓝牙模块组网教学案例,实施起来却有些不便,主要表现为一名同学需要准备两块开发板,在两台计算机上完成编程再下载分别运行,教师在课堂通过投影进行原理讲解和功能演示则更加困难!所以考虑将上述通信终端的一方更改为智能设备,可选的方案主要有手机、PAD和PC机,PAD不具备普遍性首先排除,手机应用广泛但屏幕较小且非软件专业学生掌握Android和iOS通信APP开发是一种低概率事件,应用起来有一定难度,所以最终选择PC机作为通信另一终端。
如图3所示,微控制器与PC机通讯的微控制端的硬件连接方式不变,还是采用串口交叉连接方式,PC端的不需要蓝牙模块,因为蓝牙设备已经集成到电脑硬件系中了。为了更便捷地使用PC蓝牙设备收发数据,并考虑到嵌入式系统的开发传统,即绝大多数嵌入式工程师有过RS232串口通信或USB转串口通信开发经历并积累大量例程,使用起来也是得心应手。所以在PC端将蓝牙设备虚拟成串口,这一过程一般会在电脑搜索到蓝牙模块时自动完成的,如果未能成功能添加蓝牙虚拟串口,也可以在蓝牙设置选项中手动添加。
图3 微控制器与PC机蓝牙连接
蓝牙通信硬件设计
蓝牙通信实验微控制器终端硬件电路连接如图4所示,其主控CPU为一个STM32F103RBT6微控制器,外部设备包括4个输入按键B1~B4,8个LED指示灯LD1~LD8,2.4寸TFT LCD显示屏,1个模拟电位器R37,1个单总线温湿度传感器DHT11,扩展了一片E2PROM存储器芯片AT24C02,通过串行接口USART1连接一个蓝牙模块HC-04。
图4 蓝牙通信终端硬件结构框图
模拟电位器R37位于主控板,阻值为10K,构成简单分压电路,输出电压连接至微控器的PB0引脚。程序运行时,该引脚被配置成模拟电压输入模式,连接至微控制器内部12位逐次逼近型ADC的通道8,由此可知转换结果若配置成右对齐模式,将是一个12位无符号数。
DHT11是单线接口数字温、湿度传感器,温度测量范围是0~50℃,温度测量范围是20%~90%RH,温度测量精度是±2℃,湿度测量精度是±5%。DHT11包含一个电阻式感湿元件和一个NTC(负温度系数)测温元件,通过双向单线输出温、湿度数据,在实验开发板上,DHT11位于扩展板,通过扩展排针连接至微控制器PA7引脚。
蓝牙模块选择BLE4.0 SPP2.0双模串口透传模块HC-04,承袭了SPP的高速率及BLE的优势,实用性更强,兼容性更好,可以实现与Android手机、iOS手机和电脑自带蓝牙的双向通信。HC-04模块外形小巧,尺寸为18.5x13mm,工作频段为2.4GHz ISM,工作电压范围为3.0~3.6V,通信距离为10m,波特率范围为1200~921600bps。HC-04与微控制器串行连接,即模块的TxD引脚接微控器USART1的RxD引脚(PA10),模块的RxD引脚接微控器USART1的TxD引脚(PA9),此外还需将开发板电源和地线连接至蓝牙模块为其提供通讯电源。
新配置笔记本电脑一般自带蓝牙设备,故其硬件无须连接,其虚拟串口一般也是自动完成的,使用十分方便!
蓝牙通信软件设计
论文设计微控制器与PC机蓝牙通信实验,帮助学生理解蓝牙串口透明传输原理,掌握利用蓝牙模块构建近距离无线通信网络方法。实验功能如下:STM32微控制器通过蓝牙模块与PC机自带蓝牙设备建立无线通信连接。上位机实时获取本机时间,连同继电器控制命令,以1秒为周期向微控制器发送;微控制器确认收到上位机完整数据之后,将时间信息更新于LCD显示屏,继电器动作命令模拟于LED指示灯;同时将工业现场采集信息包括温度、湿度、模拟电压值回送到PC机,如此往复就构成了基于蓝牙技术的时间同步与无线监控系统。
3.1MCU端程序设计
微控制器端蓝牙通信程序是采用基于中断的前后台模式,没有数据通信请求时运行主程序,当蓝牙透传数据到来时,即串口接收中断发生,CPU进入中断服务程序,处理串口中断。该模式在数据通信领域比较普遍,有利于提高CPU执行效率和将通信程序集成到其它模块当中。
3.1.1
主程序设计
主程序设计包括外部设备初始化和实时参数循环显示两部分。串口通信是本实验的关键,首先就需要对其初始化,实验中串口选用的是USART1,其初始化流程如图5所示。
图5USART1初始化流程图
除了初始化串口USART1外,还需要初始化DHT11温湿度传感器、ADC转换器,以及LED、LCD、数码管等显示设备。完成所有设备初始化之后,主程序随即进入同步时间LCD显示,传感器参数采集,继电器控制状态更新的无限循环当中。
3.1.2中断服务程序设计
在主程序执行过程中,若蓝牙透传数据到来,CPU响应串口接收中断,运行中断服务程序,接收上位机传来的时间数据及继电器控制命令,完成全局变量更新,并将实时采集的温湿度数据和传感器信号打包成一帧数据,调用串口发送命令,由蓝牙模块无线传输至上位机,完成一次数据通信。中断服务参考程序如下:
void USART1_IRQHandler(void)
{
static unsigned int RecNum=0;
USART_ClearFlag(USART1,USART_FLAG_TC);
RecNum ;
if(RecNum%4==1) hour=USART_ReceiveData(USART1);
else if(RecNum%4==2) minute= USART_ReceiveData(USART1);
else if(RecNum%4==3) second=USART_ReceiveData(USART1);
else LedVal=USART_ReceiveData(USART1);
if(RecNum%4==0)
{
USART_SendData(USART1,temperature_high);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==Bit_RESET);
……
}
}
3.2PC端程序设计
首先在VB6.0软件中新建一个窗体,并添加相应控件,创建完成界面如图6所示。
图6 串口通信窗体创建
上位机通信软件设计主要包括窗体载入,串口发送,串口接收,定时器中断等程序功能。
(1) 窗体载入
窗体载入程序主要是寻找可用串口,并对有效串口进行初始化。寻找有效串口的方法是试图打开一个串口,若成功则有效,否则寻找下一个串口。串口初始化包括设置通讯格式,数据位数,事件产生方法等。特别注意的是需要将串口控件DTREnable和RTSEnable两个属性值设为False,否则系统会强制复位。
(2) 定时器中断
定时器设置为每秒中断一次,每次中断将系统当前时间更新到时间显示标签上,并调用串口发送程序向串口发送时间数据和继电器控制命令。
(3) 串口发送
串口通信以二进制格式进行时,发送数据必须以数组形式,时间的时、分、秒各占一个字节,对应数组的前3个元素,继电器选中用“1”表示,未选中用“0”表示,8个继电器正好也占一个字节,对应数组的第4个元素,更新完时间数据和继电器控制命令,然后调用串口发送方法发送即可。
(4) 串口接收
串口接收程序首先判断事件类型,如果是一个串口接收事件,则接收一个数据数组,然后将数据数组转换成字符串,并显示在相应的文本框中。
此外软件还具有接通或断开通信连接,手动选择串口,指示连接状态,发送接收数据统计,模拟电压转换等附加功能,在此不再赘述。
实验发现,PC自带串口(已很少见)其串口号最小,USB转换的串口号次之,而蓝牙虚拟串口号一般较大,所以软件设计时寻找到可用串口后,自动选择最大的可用串口打开,正好是我们所要找的蓝牙通信虚拟串口。而该虚拟串口打开时会自动连接已配对过的蓝牙模块,此时已经可以进行数据通信,应用起来十分方便。
蓝牙通信调试
本实验的目标为使用蓝牙模块构建无线通信网,实现微控制器与PC机网络时间同步,在微控制器端设计一个无线、精确的“云”数字电子钟;同时PC机实时获取工业现场环境参数,根据内部控制算法,控制继电器闭合,实现“监”和“控”的统一。
4.1
通讯软件调试
4.1.1PC机时间网络同步
单击Windows桌面任务栏日期时间显示区域,选择更改日期和时间设置选项,打开日期和时间对话框,在对话框中单击Internet时间选项框,并进一步单击更改设置按钮,打开Internet时间设置对话框,勾选“与Internet时间服务器同步”复选框,并单击确定,至此,PC机系统时间已经网络同步完成。当然,如果不选择网络时间同步也是可以的,只是此时个人计算机的系统时间设置可能不精确。
4.1.2MCU与PC机通信
上位机开发的通信程序可以生成可执行文件“微控制器与PC机通讯.exe”,具体的文件名和工程名有关,并且可以修改,生成的可执行文件可以独立运行。
打开开发板电源,下载蓝牙通信程序,并复位运行,其运行界面如图7所示,系统上电之后便开始采集温度、湿度、模拟电压等相关参数并在LCD显示屏和数码管进行显示,其中ADC转换结果及其对应的电压值显示于LCD屏幕最后一行。当微控制器与PC未进行数据交换时,LCD显示的时间和LED指示的继电器状态均为编程时给定的初始状态,当微控制器收到PC机发过来的无线数据后,系统时间和继电器状态随即得到更新,实现“云”数字电子钟功能,并将继电器动作状态模拟于LED指示灯。
图7 微控制器端运行界面
在PC机上双击运行“微控制器与PC机通讯.exe”程序,当主窗体载入时,软件已找到蓝牙虚拟串口并将其打开,并与微控制器蓝牙模块建立通信连接,单击“数据通信”按钮,通信双方开始交换数据。上位机将系统时间数值和继电器控制命令发送给微控制器,微控制器回送工控现场采集参数,其通讯界面如图8所示。
图8 PC端蓝牙通讯界面
由上述两图可见微控制器与PC机蓝牙无线通信效果良好,网络稳定,各项功能测试正常,达到了实验设计预期目标。需要说明一下的是两幅图片上的时间有稍许差异,这是因为两张图片的截取时间不同,这也正说明通信持续稳定,时间一直在不停向前走。
4.1.3串口通信控件注册
(1) 百度搜索或到微软官网下载mscomm32.ocx。
(2) 将控件放到相应文件夹内,32位系统路径为:C:\Windows\System32,64位系统路径为:C:\Windows\Syswow64。
(3)然后在对应目录下找到cmd.exe文件,单击鼠标右键,以管理员身份运行(关键),在命令窗口输入regsvr32 mscomm32.ocx。
经过以上3步即可完成控件注册。
4.2串口助手调试
对于很多同学来说,可能没有掌握一门可视化编程语言,解决这一问题较好的方法是使用串口调试助手,需要说明的是各种版本串口调试助手略有差别,但大同小异,可以举一反三。
具体调试步骤如下:
(1) 打开开发板电源,运行微控制器程序
(2) 运行串口调试助手,并打开串口通讯设置对话框,将其设置为“96 N 8 1”,无硬件流控制格式,默认即为该选项。
(3) 串口调试选项设置,设置结果如图9所示,其中重要选项如红色框线所示。
图9 串口设置及收发数据界面
(4) 蓝牙收发通信,采用两种方式进行实验,第一种方式4个数值分开发送,第二种方式4个数值一起发送(用空格分隔),操作过程如图9所示。若我们要设定数值如图8所示,即时间为“12:36:14”,继电器2、4、6、8动作,则需要发送16进制数据“0C 24 0E AA”,此处要注意我们发送和接收数据均为16进制,且输入和显示均没有“0x”或“H”等附加格式。
结束语
论文设计了微控制器与PC机蓝牙通信教学实验,其包括硬件设计和软件设计两部分,硬件部分选用蓝牙模块连接微控制器串行接口与PC机蓝牙设备之间建立透明传输通道,简化了电路连接,降低了开发门槛。软件设计包括微控制器程序设计和上位机软件开发两部分,微控制器端持续采集工业现场参数并进行本地显示,当蓝牙透传数据到来时,响应中断接收数据,提取数值并解释执行,同时回传传感器数据。PC端利用可视化编程工具开发蓝牙通讯程序,其主要功能包括接收微控制器现场采集数据,并在主控界面显示;获取系统时间与继电器控制命令共同组成发送数组,利用定时器不间断发送至微控制器。项目实验在微控制器与PC机之间组建了一个无线通信网,在微控制器端实现一个“云”数字电子钟功能,在PC端实现对工业现场物理量的实时监测与远程控制功能。该项目实验具有综合性强,扩展性好,工程应用面广等优点,通过该实验的学习和应用,学生基本可以掌握微控制器蓝牙串口透明传输的原理和使用方法。
相关图书
赠书活动
书名:ARM Cortex-M3嵌入式原理及应用——基于STM32F103微控制器
书号:9787302538615
定价:69.00
高校教师(普通高校/职业院校教师)
其他读者(科研/工程人员/大学生)
按下述步骤抽奖获样书