在C++中,你可以使用POSIX的串行通信API(如open()
, read()
, write()
等)或者使用第三方庫(如Boost.Asio、libserial等)來打開串口并進行通信
#include<iostream>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
#include<string>
int main() {
// 打開串口
int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd == -1) {
std::cerr << "無法打開串口"<< std::endl;
return 1;
}
// 配置串口參數
struct termios options;
tcgetattr(fd, &options);
cfsetispeed(&options, B9600);
cfsetospeed(&options, B9600);
options.c_cflag |= (CLOCAL | CREAD);
options.c_cflag &= ~PARENB;
options.c_cflag &= ~CSTOPB;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
options.c_iflag &= ~(IXON | IXOFF | IXANY);
options.c_oflag &= ~OPOST;
options.c_cc[VMIN] = 0;
options.c_cc[VTIME] = 10;
tcsetattr(fd, TCSANOW, &options);
// 發送數據
std::string send_data = "Hello, World!";
write(fd, send_data.c_str(), send_data.size());
// 接收數據
char buffer[256];
ssize_t received = read(fd, buffer, sizeof(buffer));
if (received > 0) {
std::cout << "接收到的數據: "<< std::string(buffer, received)<< std::endl;
} else {
std::cerr << "未接收到數據"<< std::endl;
}
// 關閉串口
close(fd);
return 0;
}
這個示例代碼展示了如何打開一個名為/dev/ttyS0
的串口,配置其參數(波特率、數據位、停止位等),發送一些數據,然后接收回復。請注意,你需要根據實際情況修改串口設備名稱和參數。
編譯并運行此程序時,確保你有足夠的權限訪問串口設備。在Linux系統上,你可能需要使用sudo
命令運行程序。