學習備忘-源自 https://mp.weixin.qq.com/s/hDVD9Ij22KSHm7TUmETcmQ
前言
物聯網(IoT)和嵌入式系統的開發中,串列埠通訊是一項不可或缺的技術。C# 作為一種廣泛使用的程式語言,同樣支援多種方式進行串列埠通訊。其中,SerialPortStream
庫因其簡單易用的API和強大的功能成為了眾多開發者的首選。本文將詳細介紹如何使用 SerialPortStream
庫來進行高效的串列埠通訊,並探討其在實際專案中的應用。RJCP.DLL.SerialPortStream庫RJCP.DLL.SerialPortStream庫為C#串列埠通訊提供強大支援,跨平臺、高度可定製,整合基礎功能如開啟、配置串列埠和資料讀寫,以及高階功能包括事件處理、超時設定等,極大簡化串列埠開發流程,適用於不同平臺和複雜通訊需求。為什麼選擇 SerialPortStream?SerialPortStream
是一個開源的 C# 庫,它為開發者提供了一個簡單而強大的 API 來處理序列通訊。相比於傳統的 System.IO.Ports.SerialPort
類,SerialPortStream
提供了更多的靈活性和效能改進,包括但不限於:支援非同步非阻塞模式資料緩衝機制錯誤處理和異常報告自定義資料幀結束符跨平臺支援: 適用於Windows、Linux和macOS等多個平臺。高度可定製性: 提供靈活的配置選項,可滿足不同串列埠通訊需求。開源社群支援: 在GitHub上積極維護,可獲取最新版本和社群支援。基礎功能
高階功能
1、事件處理
// 新增資料接收事件處理程式
serialPort.DataReceived += (sender, e) => {
byte[] receivedData = new byte[serialPort.BytesToRead];
serialPort.Read(receivedData, 0, receivedData.Length);
Console.WriteLine($"Received: {Encoding.UTF8.GetString(receivedData)}");
};
2、超時設定
// 設定讀取超時時間為100毫秒
serialPort.ReadTimeout = 100;
3、自定義流控制
// 自定義流控制為RTS/CTS
serialPort.Handshake = Handshake.RequestToSend;
完整示例以下是一個結合基礎和高階功能的完整示例:
using System;
using System.Text;
using RJCP.IO.Ports;
class Program {
static void Main() {
using (SerialPortStream serialPort = new SerialPortStream("COM1")) {
// 基礎功能:開啟串列埠、配置引數
serialPort.Open();
serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
// 高階功能:資料接收事件處理
serialPort.DataReceived += (sender, e) => {
byte[] receivedData = new byte[serialPort.BytesToRead];
serialPort.Read(receivedData, 0, receivedData.Length);
Console.WriteLine($"Received: {Encoding.UTF8.GetString(receivedData)}");
};
// 傳送資料
byte[] dataToSend = Encoding.UTF8.GetBytes("Hello, Serial!");
serialPort.Write(dataToSend, 0, dataToSend.Length);
// 等待一段時間以接收資料
Console.WriteLine("Waiting for data...");
Console.ReadLine();
}
}
}