開啟樹莓派3B的串口支持
對(duì)于我來(lái)說(shuō)燕垃,系統(tǒng)必然只選raspbian,因?yàn)镸athematica只在該系統(tǒng)免費(fèi)捆綁發(fā)布井联。另外卜壕,新版本的raspbian可以通過(guò)界面配置就能開啟,網(wǎng)上目前充斥的很多文章都講的是 怎么替換掉藍(lán)牙的沖突串口烙常,要費(fèi)點(diǎn)事轴捎。
串口工具
現(xiàn)存的工具
Linux下必然首推screen。windows下就用putty吧蚕脏。
自己動(dòng)手開發(fā)
使用Qt/QSerialPort
今天本著練練手的目的侦副,寫了點(diǎn)代碼,主要實(shí)現(xiàn)文件只有100行左右:https://github.com/cymatics1717/demoQtSerial
這里面還是有好幾個(gè)細(xì)節(jié)上的坑的驼鞭,只有親自動(dòng)手做的人才能GET的到秦驯。不贅言。
-
基本功能
可以枚舉設(shè)備挣棕,連接译隘,發(fā)送和接受數(shù)據(jù)指令。具備歷史記錄功能洛心。 -
軟件質(zhì)量
保證不崩潰细燎。即在斷開連接,重復(fù)拔插皂甘,重復(fù)打開的情況下依然能正常使用玻驻。
具備錯(cuò)誤反饋。捕捉所有錯(cuò)誤信息偿枕。
示例代碼璧瞬,打開:
void MainWindow::openPort()
{
enumSerials();
QString status;
if(serial_lst.size()==0){
status = "no available serial port";
} else if(ui->pushButton->text()=="Open"){
if(serial.isOpen()) serial.close();
auto port = serial_lst.at(ui->comboBox->currentIndex());
serial.setPort(port);
serial.setBaudRate(ui->comboBox_2->currentText().toInt());
if(serial.open(QIODevice::ReadWrite)){
// serial.setBaudRate(QSerialPort::Baud115200);
// serial.setDataBits(QSerialPort::Data8);
// serial.setParity(QSerialPort::NoParity);
// serial.setStopBits(QSerialPort::OneStop);
// serial.setFlowControl(QSerialPort::NoFlowControl);
ui->pushButton->setText("running");
writeData();
status = QString("current: %1:%2 %3\t\t%4 %5 [%6:%7]").arg(port.description())
.arg(port.portName()).arg(port.manufacturer())
.arg(port.serialNumber()).arg(port.systemLocation())
.arg(port.productIdentifier(),4,16,QChar('0'))
.arg(port.vendorIdentifier(),4,16,QChar('0'));
} else {
status = QString("open failed %1:%2").arg(serial.error()).arg(serial.errorString());
}
}
statusBar()->showMessage(status);
}