前几天我写了年度总结,然后有人说让我教一下他Xamarin串口通讯怎么做,其实跟java没有多大区别。

记得我刚开始接到公司这个项目的时候很懵逼,我去看了别的安卓串口工具,都不行我当时是RS232串口,后来我就去Google Pay 下载了个串口工具,试了一下,正好可以,然后我看了它用了哪些开源库,终于被我发现了,于是我就像Xamarin有这个库吗,果不其然,老天救了我,我找到了。

第一步:使用Nuget去获取一个包: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的串口通讯就可以实现了,还有什么疑问,大家可以留言。

使用Xamarin实现串口通讯的更多相关文章

  1. C#串口通讯实例

    本文参考<C#网络通信程序设计>(张晓明  编著) 程序界面如下图: 参数设置界面代码如下: using System; using System.Collections.Generic; ...

  2. delphi之动态库调用和串口通讯

    串口通讯: Spcomm 控件属性: CommName  :表示COM1,COM2等串口的名字: BaudRate:设定波特率9600,4800等 StartComm StopComm 函数Write ...

  3. 用SPCOMM 在 Delphi中实现串口通讯 转

      用Delphi 实现串口通讯,常用的几种方法为:使用控件如MSCOMM和SPCOMM,使用API函数或者在Delphi 中调用其它串口通讯程序.利用API编写串口通信程序较为复杂,需要掌握大量通信 ...

  4. 西门子plc串口通讯方式

    西门子plc串口通讯的三种方式 时间:2015-10-25 14:31:55编辑:电工栏目:西门子plc 导读:西门子plc串口通讯的三种方式,分为RS485 串口通信.PPI 通信.MPI 通信,自 ...

  5. 教程-Delphi MSComm 实时串口通讯

    Delphi  MSComm 实时串口通讯 MSComm控件具有丰富的与串口通信密切相关的属性,提供了对串口进行的多种操作,进而使串行通信变得十分简便.MSComm的控件属性较多,常用的属性如下:1) ...

  6. 浅析PC机串口通讯流控制

    转自浅析PC机串口通讯流控制 我们在串行通讯处理中,常常看到RTS/CTS和XON/XOFF这两个选项,这就是两个流控制的选项,目前流控制主要应用于调制解调器的数据通讯中,但对普通RS232编程,了解 ...

  7. STM32F10x 学习笔记6(USART实现串口通讯 2)

    这次讲讲利用串口收发中断来进行串口通讯.STM32 上为每个串口分配了一个中断.也就是说无论是发送完成还是收到数据或是数据溢出都产生同一个中断.程序需在中断处理函数中读取状态寄存器(USART_SR) ...

  8. STM32F10x 学习笔记5(USART实现串口通讯 1)

    STM32F10x 系列单片机中都包含了USART 模块,所谓USART,就是通用同步异步收发器.通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间 ...

  9. Java利用Rxtx进行串口通讯

    最近在做传感器数据采集的工作,底层是基于Zigbee的无线传感网络,所有数据采集到Zigbee协调器上然后通知上位机数据采集完成,上位机通过USB转串口去读取数据就可以了.那么问题来了,如何进行串口通 ...

随机推荐

  1. Vue 子组件调用父组件 $emit

    <!DOCTYPE html><html>    <head>        <meta charset="utf-8">      ...

  2. javascript中获取dom元素高度和宽度

    javascript中获取dom元素高度和宽度的方法如下: 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网 ...

  3. 多线程简单案例 - join( ) -lock()

    join() 在调用结束前,主线程不会结束 不加的话,主线程会在子线程结束前继续执行:加了join(),主线程会等待子线程结束后在继续执行下去 #python3 #main print number ...

  4. Hibernate工作原理及为什么要用?. Struts工作机制?为什么要使用Struts? spring工作机制及为什么要用?

    三大框架是用来开发web应用程序中使用的.Struts:基于MVC的充当了其中的试图层和控制器Hibernate:做持久化的,对JDBC轻量级的封装,使得我们能过面向对象的操作数据库Spring: 采 ...

  5. sharepoint rest 脚本发送邮件

    function processSendEmails() { var from = 'asad@Example.com', to = 'someone@Example.com', body = 'He ...

  6. Linux-- su和sudo 切换用户

    su 切换用户 用法:su [选项] [-] [用户 [参数]... ] - :以 login-shell 方式进行登录 不加 - :以 no-login-shell 方式进行登录 -c:只进行一次在 ...

  7. trunc()

    select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss'), to_char(trunc(sysdate), 'yyyy-mm-dd hh24:mi:ss') f ...

  8. Unity各平台内置宏定义

    属性 方法 UNITY_EDITOR #define directive for calling Unity Editor scripts from your game code. UNITY_EDI ...

  9. iOS 类似微博或朋友圈的信息流

    1.先上图:   image.png   image.png 因为做过了好几次这样的需求,所以这次想到把它拿出来,下次再需要做的时候直接拿过来改改就能用了,节约时间. 2.功能 文字收起和展开,行高自 ...

  10. c#网络传输

    接着前面简单讲的,给大家聊聊服务开发. 网络传输 先说网络传输开发,总体来说,可以看成4中模型 我们把传输过程看做网线,那么在通过传输的过程中.2边就涉及池化问题,也就是我们常见的异步传输. 在业务端 ...