图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”,具体的文件名和工程名有关,并且可以修改,生成的可执行文件可以独立运行。
打开开发板电源,下载蓝牙通信程序,并复位运行,系统上电之后便开始采集温度、湿度、模拟电压等相关参数并在LCD显示屏和数码管进行显示,其中ADC转换结果及其对应的电压值显示于LCD屏幕最后一行。当微控制器与PC未进行数据交换时,LCD显示的时间和LED指示的继电器状态均为编程时给定的初始状态,当微控制器收到PC机发过来的无线数据后,系统时间和继电器状态随即得到更新,实现“云”数字电子钟功能,并将继电器动作状态模拟于LED指示灯。
在PC机上双击运行“微控制器与PC机通讯.exe”程序,当主窗体载入时,软件已找到蓝牙虚拟串口并将其打开,并与微控制器蓝牙模块建立通信连接,单击“数据通信”按钮,通信双方开始交换数据。上位机将系统时间数值和继电器控制命令发送给微控制器,微控制器回送工控现场采集参数,其通讯界面如图8所示。
图8 PC端蓝牙通讯界面
由上述两图可见微控制器与PC机蓝牙无线通信效果良好,网络稳定,各项功能测试正常,达到了实验设计预期目标。需要说明一下的是两幅图片上的时间有稍许差异,这是因为两张图片的截取时间不同,这也正说明通信持续稳定,时间一直在不停向前走。
4.1.3串口通信控件注册
在很多串口通信软件中都会用到串口通信控件mscomm32.ocx,作者编写的上位机通信软件也不例外,该控件在有些win7或win10系统中没有注册,运行时会提示找不到控件错误,此时需要对控件进行注册。
(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”等附加格式。
该调试方法可以类比到Android和iOS用户下载的手机版串口调试助手,实测效果相同。不过此时需要手动译码返回数据,例如图9中的四个返回数据,第一个数据“0F”表示温度为15℃,第二个数据“37”表示湿度为55%,所以推荐大家自行开发PC端通讯软件或免费下载作者开源程序。
结束语
论文设计了微控制器与PC机蓝牙通信教学实验,其包括硬件设计和软件设计两部分,硬件部分选用蓝牙模块连接微控制器串行接口与PC机蓝牙设备之间建立透明传输通道,简化了电路连接,降低了开发门槛。软件设计包括微控制器程序设计和上位机软件开发两部分,微控制器端持续采集工业现场参数并进行本地显示,当蓝牙透传数据到来时,响应中断接收数据,提取数值并解释执行,同时回传传感器数据。
PC端利用可视化编程工具开发蓝牙通讯程序,其主要功能包括接收微控制器现场采集数据,并在主控界面显示;获取系统时间与继电器控制命令共同组成发送数组,利用定时器不间断发送至微控制器。项目实验在微控制器与PC机之间组建了一个无线通信网,在微控制器端实现一个“云”数字电子钟功能,在PC端实现对工业现场物理量的实时监测与远程控制功能。该项目实验具有综合性强,扩展性好,工程应用面广等优点,通过该实验的学习和应用,学生基本可以掌握微控制器蓝牙串口透明传输的原理和使用方法。
原作者:黄克亚 人工智能科学与威廉希尔官方网站