【动手项目一】Qt实现一个树莓派3B的串口通信工具

开启树莓派3B的串口支持

对于我来说,系统必然只选raspbian,因为Mathematica只在该系统免费捆绑发布。另外,新版本的raspbian可以通过界面配置就能开启,网上目前充斥的很多文章都讲的是 怎么替换掉蓝牙的冲突串口,要费点事。

【动手项目一】Qt实现一个树莓派3B的串口通信工具_第1张图片
rasp_config.png

串口工具

现存的工具

Linux下必然首推screen。windows下就用putty吧。

自己动手开发

使用Qt/QSerialPort

今天本着练练手的目的,写了点代码,主要实现文件只有100行左右:https://github.com/cymatics1717/demoQtSerial
这里面还是有好几个细节上的坑的,只有亲自动手做的人才能GET的到。不赘言。

  • 基本功能
    可以枚举设备,连接,发送和接受数据指令。具备历史记录功能。
  • 软件质量
    保证不崩溃。即在断开连接,重复拔插,重复打开的情况下依然能正常使用。
    具备错误反馈。捕捉所有错误信息。
    示例代码,打开:
  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);
  
  }
【动手项目一】Qt实现一个树莓派3B的串口通信工具_第2张图片
3B.png

你可能感兴趣的:(【动手项目一】Qt实现一个树莓派3B的串口通信工具)