使用Xamarin實現串口通訊


前幾天我寫了年度總結,然后有人說讓我教一下他Xamarin串口通訊怎么做,其實跟java沒有多大區別。

記得我剛開始接到公司這個項目的時候很懵逼,我去看了別的安卓串口工具,都不行我當時是RS232串口,后來我就去Google Pay 下載了個串口工具,試了一下,正好可以,然后我看了它用了哪些開源庫,終於被我發現了,於是我就像Xamarin有這個庫嗎,果不其然,老天救了我,我找到了。

第一步:使用Nuget去獲取一個包:LusoVU.XamarinUsbSerialForAndroid 就是這個包!哈哈 哈哈 

 LusoVU.XamarinUsbSerialForAndroid

第二步:

在OnCreate() 生命周期中進行如下操作:


//獲取所有USB服務和已經連接的USB設備

 

UsbManager manager = GetSystemService(Context.UsbService) as UsbManager;
IList<IUsbSerialDriver> availableDrivers = UsbSerialProber.DefaultProber.FindAllDrivers(manager);

 

最后一步:

寫一個串口通訊的方法: 

#region 串口通訊
///<summary>
///串口通訊
///</summary>
void UsbSerial() 
{
//打開USB連接
IUsbSerialDriver driver = availableDrivers[0];
UsbDeviceConnection connection = manager.OpenDevice(driver.Device);
if (connection == null) 
{
RunOnUiThread(() =>
                    {
                        ConnUsbOrBluetooth.Text = "失敗";
}
);
sc.TextSpeak("USB連接失敗,請重啟設備重試。");
return;
}
RunOnUiThread(() =>
                {
                    ConnUsbOrBluetooth.Text = "成功";
ConnUsbOrBluetooth.Enabled = false;
}
);
sc.TextSpeak("USB連接成功!");
Thread t = new Thread(Query);
t.Priority = System.Threading.ThreadPriority.Highest;
t.Start();
//讀取USB數據
IUsbSerialPort port = driver.Ports[0];
//串口信息  波特率 數據位 停止位 流控
serialIoManager = new SerialInputOutputManager(port) 
{
BaudRate = 9600,
                    DataBits = 7,
                    StopBits = StopBits.One,
                    Parity = Parity.None,
                };
serialIoManager.Open(manager, 1024);
StringBuilder sb = new StringBuilder();
//獲取數據
serialIoManager.DataReceived += (sender, e) =>
                {
                    sb.Append(System.Text.Encoding.Default.GetString(e.Data));
if (sb.Length >= 30) 
{
BlueData bd = UiBlueData;
bd(sb.ToString());
sb.Clear();
}
}
;
}
;
#endregion

 

 解釋:

 availableDrivers[0] 這里這個0就是說打開usb中的第一個設備。

 //然后這里有部分是可以忽略的 像:TextSpeak() 與RunOnUiThread里的東西。一個是TTS的代碼,另一個是為UI線程賦值的代碼。

 重新開啟現成的代碼:

Thread t = new Thread(Query);
t.Priority = System.Threading.ThreadPriority.Highest;
t.Start();

這部分也可以忽略,是我項目里要用到的。

 接下來就是重點了,讀取USB的數據,設置串口的信息:如波特率BaudRate,數據位:DataBits和停止位:StopBits,流控:Parity。

下面就是我接受數據的代碼了,

由於串口不斷發來數據,所以發放到 DataReceived事件中:並把獲取到的數據30個長度一切割,從而拿到想要的數據。

 

至此Xamarin的串口通訊就可以實現了,還有什么疑問,大家可以留言。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM