最新消息:

Arduino教程:通过HC-06蓝牙让电脑控制Arduino

Arduino 少儿编程 3098浏览 0评论

本文将面向初学者介绍如何通过HC-06蓝牙模块实现计算机与Arduino开发板的通信。

所需物材

Arduino教程:通过HC-06蓝牙让电脑控制Arduino

下载[1]:visualstudio.com/zh-cn/

下载[2]:arduino.cc/en/Main/Soft

第一步,连线

启动计算机。用USB连接线将Arduino
UNO连接至计算机,并检查绿色工作灯是否点亮:

Arduino教程:通过HC-06蓝牙让电脑控制Arduino

连接好了以后Arduino UNO板子上的“ON”绿色LED灯常亮,表示板子工作正常。然后按下图将HC-06连接到Arduino
UNO板子上:

Arduino教程:通过HC-06蓝牙让电脑控制Arduino

连好后HC-06上的红色LED灯以每秒5次的频率快闪,表示工作正常但未与主机连接。

第二步,为Arduino UNO板编写测试程序

运行Arduino软件,点击Sketch->Include
Library->Manage Libraries…,在输入框中输入:“softserial”,然后选中下面的第一项:“AltSoftSerial”,点击右侧的“Install”按扭:

Arduino教程:通过HC-06蓝牙让电脑控制Arduino

请确保计算机连接到互联网。软件会自动安装SoftSerial程序库。安装完成后点击Close。因为HC-06是以串口信号格式与Arduino
UNO板进行通信的,但板上的硬件串口将被我们用于调试输出,因此必须使用SoftSerial程序库将另外的针脚作为软串口与HC-06通信。

第三步,将下列代码复制到Arduino软件中:

#include <SoftwareSerial.h>
// 设置软串口使用的针脚
SoftwareSerial
softSerial(7, 8); //7为RX, 8为TX
void setup() {
  Serial.begin(9600); //设定硬串口波特率
  softSerial.begin(9600); //设定软串口波特率
}
void loop() {
  if (softSerial.available()) { //如果HC-06发来数据
    int k = softSerial.read(); //读取1个字节的数据
    Serial.println(k); //通过硬串口打印输出
  }
}

然后点击Upload按钮(白底右箭头)将程序烧写到Arduino
UNO板子上:

Arduino教程:通过HC-06蓝牙让电脑控制Arduino

如果烧写成功,会出现上图中“Done uploading.”的字样。然后点击Tools->Serial Monitor,启动调试窗口,Arduino UNO从HC-06获得的所有数据将打印输出到这一窗口。当然,目前还不能收到任何数据,我们继续。

第四步,通过蓝牙适配器将电脑与HC-06连接

首先确保计算机上的蓝牙适配器处于开启装态,下面以Windows
8.1系统为例说明,Windows
7系统上的操作与之类似。打开“控制面版”,打开“设备与打印机”,点击“添加设备”:

Arduino教程:通过HC-06蓝牙让电脑控制Arduino

如果出现HC-06,说明蓝牙模块被激活,可以进行连接。点击Next,输入密HC-06的默认密码1234:

Arduino教程:通过HC-06蓝牙让电脑控制Arduino

点击Next后,HC-06将与Windows配对。此时HC-06作为计算机的从属设备,就可以与之进行无线通信了。接下来确定这个设备映射到计算机上的串口的编号。在“设备与打印机”管理器中右键点击这个设备,然后点击属性,再点击服务:

Arduino教程:通过HC-06蓝牙让电脑控制Arduino

这在我的电脑上显示的是COM9,即9号端口,在你的电脑上这个编号可能不同,请记下这个值。

第五步,编写Windows程序

打开Visual
Studio,按如下选项新建一个空项目:

Arduino教程:通过HC-06蓝牙让电脑控制Arduino

点击OK。然后在解决方案管理器中右击项目名称->Add->New item:

Arduino教程:通过HC-06蓝牙让电脑控制Arduino

为程序工程添加一个代码文件:

Arduino教程:通过HC-06蓝牙让电脑控制Arduino

然后输入以下代码,并将第5行里的9改为刚刚记下的蓝牙通信端口编号:

#include <iostream>
#include <Windows.h>
int main()
{
	HANDLE hCom = CreateFile("\\.\COM9", GENERIC_READ | GENERIC_WRITE,
		0, NULL, OPEN_EXISTING, 0, NULL); //与HC-06建立无线连接
	if (hCom == INVALID_HANDLE_VALUE) {
		std::cout << "Port unavailable!" << std::endl;
		return 0;
	}
//以下配置串口通信参数
	DCB dcb;
	GetCommState(hCom, &dcb);
	dcb.BaudRate = 9600;
	dcb.ByteSize = DATABITS_8;
	dcb.Parity = NOPARITY;
	dcb.StopBits = ONESTOPBIT;
	BOOL br = SetCommState(hCom,&dcb);
	COMMTIMEOUTS cto ={MAXDWORD, MAXDWORD, MAXDWORD, MAXDWORD, MAXDWORD};
	br = SetCommTimeouts(hCom, &cto);
//开始等待用户输入
	for (; ; ) {
		int nInput = 0;
		std::cin >> nInput;
		if (nInput > 255 || nInput < 0) {
			break; //如果输入的值大于255或小于0则直接退出程序
		}
		BYTE byVal = (BYTE)nInput;
		DWORD dwTransmitted;
//将输入的值发送给HC-06
		WriteFile(hCom, &byVal, sizeof(byVal), &dwTransmitted, NULL);
	}
	CloseHandle(hCom);
	return 0;
}

按F5键即可运行程序。这一程序的第一步是与HC-06建立连接,如果连接不成功就会直接退出,因此可以多运行几次,直到连接成功。一旦连接成功,HC-06上的红色LED灯将保持常亮。此时在程序中输入的任何数字(大于等于0且小于等于255)将被无线传输给HC-06,HC-06读取该值后会通过硬串口再发给电脑,显示在Arduino软件的串口监视器中。

遇到问题请私信,我将尝试帮你解决。

您必须 登录 才能发表评论!