日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

张高兴的 .NET Core IoT 入门指南:(五)串口通信入门

發(fā)布時間:2023/12/4 asp.net 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 张高兴的 .NET Core IoT 入门指南:(五)串口通信入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在開始之前,首先要說明的是串口通信所用到的?SerialPort?類并不包含在?System.Device.Gpio?NuGet 包中,而是在?System.IO.Ports?NuGet 包中。之所以在這里介紹串口通信,是因為在嵌入式中串口通信是與其他設(shè)備進行交互的一種重要方式,而且在某些沒有屏幕的設(shè)備中充當著程序調(diào)試的工具。

什么是串口

串口是串行接口的簡稱,這是一個非常大的概念,在嵌入式中串口通常指 UART (Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)器)。使用串口進行的通信叫做串行通信,與之相對的一個概念是并行通信。串行通信是指數(shù)據(jù)一位一位的按順序傳輸,而并行通信則是多位數(shù)據(jù)同時傳輸。如圖1所示,DATA BUS?到?UART 1?之間是并行通信,UART 1?到?UART 2?之間是串行通信。

圖1:串行通信與并行通信

串口通信的數(shù)據(jù)幀格式如圖2所示,通常一幀共包括 10 位:1 個起始位,8 個數(shù)據(jù)位和 1 個停止位。有一些特殊的數(shù)據(jù)幀在停止位前面包含 1 位的奇偶校驗位,還有的停止位有 2 個比特。其中起始位為低電平(0),標志著數(shù)據(jù)傳輸?shù)拈_始;停止位為高電平(1),表示數(shù)據(jù)幀傳輸結(jié)束;數(shù)據(jù)位則為實際發(fā)送的數(shù)據(jù),使用高低電平來表示比特信息,如果發(fā)送的內(nèi)容是文本,那么這段數(shù)據(jù)為字符的二進制編碼(ASCII,UTF-8……)。數(shù)據(jù)傳輸?shù)乃俾饰覀兪褂?strong>波特率(Baud Rate)來表示,即每秒鐘傳送的碼元符號的個數(shù)[1]。比如數(shù)據(jù)傳輸速率為 9600 字符/s,那么這時的波特率為 9600。

圖2:串口通信的數(shù)據(jù)幀

設(shè)備進行串口通信時,設(shè)備的連線如圖3所示,兩個設(shè)備的信號線,即發(fā)送端(TXD)與接收端(RXD)交叉相連,并且需要共地。在 Raspberry Pi 的引腳上共引出了 1 組串口,即?UART 0?,對應 8 和 10 號引腳。

圖3:串口設(shè)備的連接

相關(guān)類

串口操作的相關(guān)類位于?System.IO.Ports?命名空間下。

SerialPort

public class SerialPort : Component {// portName 為串口的名稱,可以使用靜態(tài)方法 GetPortNames() 獲取public SerialPort(string portName);// 傳輸?shù)牟ㄌ芈蕄ublic int BaudRate { get; set; }// 指定傳輸內(nèi)容的編碼public Encoding Encoding { get; set; }// 新行格式,即設(shè)置換行的字符public string NewLine { get; set; }// 設(shè)置停止位的格式public StopBits StopBits { get; set; }// 設(shè)置校驗位的格式public Parity Parity { get; set; }// 打開串口通信流public void Open();// 關(guān)閉串口通信流public void Close();// 向串口通信流中寫一行字符public void WriteLine(string text);// 從串口通信流中讀一行字符public string ReadLine();// 讀取緩沖區(qū)中的所有可用內(nèi)容,一般用于清空緩沖區(qū),防止讀取舊的內(nèi)容public string ReadExisting();// 獲取可用的串口名稱public static string[] GetPortNames(); }

串口通信的步驟

  • 配置串口通信參數(shù),如波特率,內(nèi)容編碼,新行格式,超時時間等。

  • SerialPort sp = new SerialPort(portName: "/dev/ttyUSB0") {BaudRate = 115200,Encoding = Encoding.UTF8,ReadTimeout = 500,WriteTimeout = 500, }
  • 打開串口

  • sp.Open();
  • 讀取和寫入文本

  • sp.WriteLine($"Text content."); string content = sp.ReadLine();
  • 關(guān)閉串口

  • sp.Close();

    USB 串口通信實驗

    硬件需求

    名稱數(shù)量
    USB 串口x1
    杜邦線若干

    USB 串口設(shè)備只要 Raspberry Pi 支持即可,這里使用的是?FT232RL。

    電路

    • GND - GND

    • RX - TX (Pin 8)

    • TX - RX (Pin 10)

    • USB - USB

    使用 Docker 運行示例

    示例地址:https://github.com/ZhangGaoxing/dotnet-core-iot-demo/tree/master/src/SerialCommunication

    docker build -t serial-sample -f Dockerfile . docker run --rm -it --device /dev/ttyUSB0 --device /dev/ttyS0 serial-sample

    代碼

  • 打開 Visual Studio ,新建一個 .NET Core 控制臺應用程序,項目名稱為“SerialCommunication”。

  • 引入?System.IO.Ports?NuGet 包。

  • 在?Program.cs?中,將主函數(shù)代碼替換如下:

  • static void Main(string[] args) {using (SerialPort usb = new SerialPort(portName: "/dev/ttyUSB0")){usb.BaudRate = 115200;usb.Encoding = Encoding.UTF8;usb.ReadTimeout = 500;usb.WriteTimeout = 500;usb.Open();using (SerialPort rpi = new SerialPort(portName: "/dev/ttyS0")){rpi.BaudRate = 115200;rpi.Encoding = Encoding.UTF8;rpi.ReadTimeout = 500;rpi.WriteTimeout = 500;rpi.Open();for (int i = 0; i < 10; i++){rpi.WriteLine($"Hello {i}!");Console.WriteLine($"USB receive: {usb.ReadLine()}");}rpi.Close();}usb.Close();} }
  • 發(fā)布、拷貝、更改權(quán)限、運行

  • 效果圖


    ??備注

    下一篇文章將談?wù)?Iot.Device.Bindings NuGet 包的使用。

    總結(jié)

    以上是生活随笔為你收集整理的张高兴的 .NET Core IoT 入门指南:(五)串口通信入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。