C ++, lectura Bluetooth de serie y escritura, y más en comunicación con el microcontrolador

Al hacer la necesidad de proyecto para implementar una función tal, que no se encuentra una buena respuesta en Internet, de repente un día alcanzado accidentalmente. Aquí el registro acerca, puede alcanzar fácilmente.

observaciones:

; HC-05 módulo Bluetooth: 1, módulo MCU
: 2, la comunicación Bluetooth realmente utilizan un puerto serie, por lo que aquí para decirnos acerca de la lectura y la escritura en el puerto serie
del API 3, utilizado principalmente: CreateFile (), WriteFile ( ), ReadFile () .

muestra en el código:

(Definidos en este documento proporciona funciones para leer y escribir en el puerto serie, puede ser trasplantado directamente)

definición de la función de cabeza

# ifndef __uart_
#define __uart_

#include<windows.h>

#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_

definición de archivo .c

#include "uart.h"
#include <iostream>

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;
}

configuración del puerto serie Bluetooth del ordenador

1. Encienda la pantalla del ordenador de Bluetooth configuración, seleccione la opción Bluetooth más
Aquí Insertar imagen Descripción

2, comprobar las siguientes opciones flecha apuntando
Aquí Insertar imagen Descripción
3, haga clic en Agregar
Aquí Insertar imagen Descripción
4, configurar un puerto serie virtual entrantes y salientes
Aquí Insertar imagen Descripción

Por último, recuerde que debe coincidir con la configuración del puerto serie que se especificarán en el CreateFile el código de seguridad!

Los lectores quieren ser útiles, como se puede ver mi público, entonces voy a estudiar anotaciones hechas en el anterior, vamos a ser capaces de aprender juntos!

Aquí Insertar imagen Descripción

alt

Se han publicado 19 artículos originales · ganado elogios 12 · vistas 6102

Supongo que te gusta

Origin blog.csdn.net/Rosen_er/article/details/104548145
Recomendado
Clasificación