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

    Design Tutorial: Inverse the Problem CodeForces - 472D 给你了一个 n × n最短距离矩阵.(即矩阵中dis[u][v]为u点到v点的最短距离), ...

  2. vim使用四个空格代替TAB键

    让VIM可以在你写程序的时候自动缩进,并用4个空格代替TAB键. 编辑 ~/.vimrc 保存这四行: “set smartindent”, “set tabstop=4”, “set shiftwi ...

  3. HDU 1272小希的迷宫(裸并查集,要判断是否构成环,是否是连通图)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1272 小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    ...

  4. sharepoint 搜索报错

    配置sharepoint 拓扑架构,将两台服务器一起来爬网. 配置如下: $hostA = Get-SPEnterpriseSearchServiceInstance -Identity " ...

  5. 自定义view(结合刻度盘学习)

    先上效果图 一.View的测量(刻度盘的大小测量) 在现实生活中,我们如果要去画一个图形,那么便要知道它的大小和位置.所以android绘图时需要我们对view进行测量.android为我们提供了on ...

  6. duplicate symbol _OBJC_IVAR

    duplicate symbol _OBJC_IVAR - Kingdev - 博客园 代码合并问题 git合并提示冲突文件为project.pbxproj,先去掉所有冲突提示<<< ...

  7. RHS 和 LHS

    不成功的的RHS 引用会导致抛出 ReferenceError异常 不成的的LHS 引用会导致自动隐式地创建一个全局变量(非严格模式下)   function foo(a) { var b = a; ...

  8. 需求:promise执行买菜做饭过程

    需求:promise执行买菜做饭过程 1.买菜 2.洗菜 3.做饭 4.吃饭 <!DOCTYPE html> <html lang="en"> <he ...

  9. Python - 入门基础(一)

    1.解释器路径 #!/usr/bin/env python 2.编码 # -*- coding:utf8 -*- 1.ascill ---00000000  (8个位表示) 缺点:表示不了英文 2.u ...

  10. EDID的简介和解析

    去年对EDID做了一个解析,下面是学习EDID过程中整理的资料. 一.EDID简介 EDID: Extended Display Identification Data (外部显示设备标识数据)--- ...