用C++实现读写蓝牙串口,进而与单片机通信

在做项目的时候需要实现这样一个功能,在网上没有找到很好的答案,突然有一天误打误撞实现了。这里记录一下,方便大家也能够实现。

备注:

1、单片机使用模块:HC-05蓝牙模块;
2、蓝牙通信其实也是利用了串口,所以这里先介绍一下对串口的读写:
3、主要使用API:CreateFile(),WriteFile(),ReadFile()。

代码展示:

(这里提供对串口进行读写操作的函数定义,可直接移植)

头函数定义

# ifndef __uart_
#define __uart_

#include

#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
#define ZeroMemory RtlZeroMemory

BOOL Write(char *write_data, DWORD contentLen, DCB &dcb);
BOOL Read(char *read_data, DCB &dcb);
void DCB_init(DCB &dcb);

#endif // !__uart_

.c文件定义

#include "uart.h"
#include 

void DCB_init(DCB &dcb)
{
 dcb.BaudRate = 9600;
 dcb.ByteSize = 8;
 dcb.Parity = 0;
 dcb.StopBits = 1;
}

BOOL Write(char *write_data, DWORD contentLen,DCB &dcb)
{
 HANDLE hcom;
 char *tmpBuf;
 DWORD dwBytesWrite = 0;
 int dwBytesToWrite;

 hcom = CreateFile(L"COM6", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if (hcom == INVALID_HANDLE_VALUE)
 {
  printf("create file error!\n");
  CloseHandle(hcom);
  return FALSE;
 }

 SetupComm(hcom, 1024, 1024);
 GetCommState(hcom, &dcb);
 SetCommState(hcom, &dcb);

 dwBytesToWrite = contentLen;
 dwBytesWrite = 0;

 tmpBuf = write_data;
 do {                                       //循环写文件,确保完整的文件被写入  
  WriteFile(hcom, tmpBuf, dwBytesToWrite, &dwBytesWrite, NULL);
  dwBytesToWrite -= dwBytesWrite;
  tmpBuf += dwBytesWrite;
 } while (dwBytesToWrite > 0);

 if (hcom != INVALID_HANDLE_VALUE)
 {
  CloseHandle(hcom);
  hcom = INVALID_HANDLE_VALUE;
 }

 return TRUE;
}

BOOL Read(char *read_data,DCB &dcb)
{
 HANDLE hcom;
 DWORD fileSize;
 char *buffer;
 DWORD dwBytesRead, dwBytesToRead, tmpLen;

 hcom = CreateFile(L"COM5", GENERIC_WRITE | GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

 if (hcom == INVALID_HANDLE_VALUE)
 {
  printf("open file error!\n");
  CloseHandle(hcom);
  return FALSE;
 }

 fileSize = GetFileSize(hcom, NULL);          //得到文件的大小
 buffer = (char *)malloc(fileSize);
 ZeroMemory(buffer, fileSize);
 dwBytesToRead = fileSize;
 dwBytesRead = 0;
 read_data = buffer;

 do {                                       //循环读文件,确保读出完整的文件    
  ReadFile(hcom, read_data, dwBytesToRead, &dwBytesRead, NULL);
  if (dwBytesRead == 0)
   break;
  dwBytesToRead -= dwBytesRead;
  read_data += dwBytesRead;
 } while (dwBytesToRead > 0);

 //  TODO 处理读到的数据 buffer
 free(buffer);
 CloseHandle(hcom);

 return TRUE;
}

电脑蓝牙串口的设置

1、打开电脑蓝牙设置界面,勾选更多蓝牙选项
用C++实现读写蓝牙串口,进而与单片机通信_第1张图片

2、勾选下面箭头指向的选项
用C++实现读写蓝牙串口,进而与单片机通信_第2张图片
3、点击添加
用C++实现读写蓝牙串口,进而与单片机通信_第3张图片
4、设置一个传入和传出的虚拟串口
用C++实现读写蓝牙串口,进而与单片机通信_第4张图片

最后记得设置的串口要与上面代码中CreateFile指定的串口相符!

希望对读者有所帮助,喜欢的话可以关注一下我的公众号,我会把学习笔记发在上面,大家可以一起共同学习!

用C++实现读写蓝牙串口,进而与单片机通信_第5张图片

Alt

你可能感兴趣的:(C++)