源碼解析:為什麼我們只寫了一個app.MapGet,卻生成了三個介面 1.ServiceBase 1.AutoMapRoute 源碼如下: AutoMapRoute自動創建map路由,MinimalAPI會根據service中的方法,創建對應的api介面。 比如上文的一個方法: public asy ...
這裡淺說一下藍牙與串口的區別:
藍牙:連接以mac地址為主,顯示名稱可以更改,低功耗藍牙還需要配置服務與特征(服務有讀,寫,可讀可寫區別)
特點:不同設備連接同一臺藍牙設備,mac地址與顯示名稱都是唯一的
串口:連接以埠名稱為主,例如com1,com2,連接時需要配置參數較多
特點:不同設備接入同一個串口模塊,顯示的名稱可能不一樣
串口:SerialPort 繼承於System.IO.Ports
不同串口模塊所需要的驅動不同,使用之前都需要安裝對應模塊驅動,因為電腦安裝的驅動數量不同,就會造成同一個串口驅動在不同電腦中占得位置不同。
舉個例子:電腦相當於菜市場,串口相當於攤位,預設是沒有攤位的,插入串口之後會聲明一個攤位(埠com),攤位區分是以數字標識區分的例如com1,com2,com3(這是比較煩人的),插入串口之後,想要確定這個串口模塊聲明的攤位(埠)名稱就需要在設備管理器中查看
這裡的silicon labs cp210x就是我插入的串口模塊,他聲明瞭埠名稱為com4,連接時就需要選擇com4,配置對應參數(串口模塊的參數發佈之後都是固定的,對於用戶操作可以後臺做成配置文件寫死)。
連接一個串口需要配置以下參數:
_serialPortObject.PortName =串口名稱
_serialPortObject.BaudRate = 波特率
_serialPortObject.DataBits = 數據位
_serialPortObject.Parity = 校驗位
_serialPortObject.StopBits = 停止位
以上任意一個串口參數配置與硬體串口模塊參數不匹配,都會造成連接參數錯誤, 還有一些可配置項如輸入與輸出緩衝區大小,超時配置等等
串口接收數據是訂閱DataReceived方法,屬於觀察者模式
_serialPortObject.DataReceived += PushMessage;
private void PushMessage(object sender, SerialDataReceivedEventArgs e)
{
lock (_objLock)
{
if (_serialPortObject.IsOpen == false) return;
int length = _serialPortObject.BytesToRead; 獲取接收緩衝區的位元組數
byte[] buffer = new byte[length]; //接收數據則位元組數組
if (length <= 0) return;
_serialPortObject.Read(buffer, 0, length); //從緩衝區獲取讀取指定位元組數據
}
}
關於串口遇到的問題記錄:
串口因為是外接模塊所以需要安裝對應驅動,最好從串口官網下載指定相容驅動,不然容易造成藍屏死機等等問題