前几天我写了年度总结,然后有人说让我教一下他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. PAT——1058. 选择题

    批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多. 输入格式: 输入在第一行给出两个正整数N(<=1000)和M(<=100),分别是学生人数和多 ...

  2. 树莓派 4G模块 PPP 拨号 NDIS 拨号

    资料参考:树莓派使用4G模块(华为ME909s-821)亲身尝试的可行方法(上)

  3. SVG图形的简单修改

    svg格式的图片是一种矢量图片,最近我就喜欢使用这种图片在做html的元素.网上也有很多现成的svg图片,比如:http://www.sfont.cn这个网站,就能很快的找到各种您想要的图片.但是下载 ...

  4. OO第三次博客作业——规格

    OO第三次博客作业——规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...

  5. vdbench 数据校验测试方法

    [root@dntosu001 vdbench]# cat pbd.conf*SD: Storage Definition*WD: Workload Definition*RD: Run Defini ...

  6. 如何用GDI+画个验证码

    如何使用GDI+来制作一个随机的验证码 绘制验证码之前先要引用 using System.Drawing; using System.Drawing.Drawing2D; 首先,先写一个方法来取得验证 ...

  7. jQuery实现导航栏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 新增时json类型报错

    新增时出错:如下 实体类中字段类型没有对应上,vue页面中修改跳转页面的路径:使用params...

  9. java.io.FileNotFoundException:file:\D:\code\xml-load\target\XX.jar!\XXX(文件名、目录名或卷标语法不正确。)

    1.当使用Spring Boot将应用打成jar时,需要读取resources目录下配置文件时,通常使用ClassLoader直接读取,通常建议使用这种方式,直接将xml文件读成流传入 // 加载xm ...

  10. python3配置文件的增删改查,记录一下

    #!/usr/bin/env python3 import json #json模块,用于将像字典的字符串转换为字典 import re #re模块,查找替换 import shutil #copy文 ...