c++跨平台串口库(serial)
serial资源链接
创建工程
工程目录如下:
- .vscode: 使用vsocde自动生成的
- 3rd: 里面放第三方库
- include: 放源代码的头文件
- src:放源代码
这里我创建了一个简单的demo工程,只有一个main.cpp。
编写CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(MAIN)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# 编译serial库(可见内部头文件,无需手动添加)
add_subdirectory(${PROJECT_SOURCE_DIR}/3rd/serial)
include_directories(${PROJECT_SOURCE_DIR}/include)
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_FILES)
add_executable(${PROJECT_NAME} ${SRC_FILES})
# 链接serial
target_link_libraries(${PROJECT_NAME} serial)
对于一个已经使用cmake编译的工程,增加serial库只需要增加这两个命令
add_subdirectory(${PROJECT_SOURCE_DIR}/3rd/serial)
target_link_libraries(${PROJECT_NAME} serial)
使用serial
使用serial就很简单了,在serial::Serial构造函数里就可以设置好串口的参数,一般只需要调用read()或write()函数即可。
#include <iostream>
#include <serial/serial.h>
int main()
{
// 打开串口
serial::Serial serial("COM1", 9600, serial::Timeout::simpleTimeout(1000));
if (!serial.isOpen())
{
std::cout << "serial open failed" << std::endl;
return -1;
}
// 读取数据
while(1)
{
int len = serial.available();
if (len > 0)
{
std::string data = serial.read(len);
std::cout << "read data: " << data << std::endl;
}
}
return 0;
}