本篇效果展示:

曾在第一篇开箱中简要分析过壁虎的外设。在最下侧,配备有1路485,2路继电器和一路韦根。

我已经实现了2路继电器的控制,本篇将进行RS485的串口通讯测试。

首先是物理操作
这里我用到一个USB转485的转接模块,通过接上2根跳线

然后两根跳线跳到壁虎的接线端.接的时候注意AB序

然后基本上就是代码啦。

简单总结一下本篇遇到的问题

Xamarin工程下,对安卓的串口控制属于是安卓系统的特性,无法在.net standard项目,也就是xamarin.forms中去添加。

我的解决方案是:
在安卓工程下,制造主程序入口.然后通过Tab切换通用页和特性页

修改MainActivity,以使得安卓应用入口的Page为TabPage

protected override void OnCreate(Bundle savedInstanceState){TabLayoutResource = Resource.Layout.Tabbar;ToolbarResource = Resource.Layout.Toolbar;base.OnCreate(savedInstanceState);global::Xamarin.Forms.Forms.Init(this, savedInstanceState);//主要修改在这var app = new App();app.MainPage = new TabPage();LoadApplication(app);}

TabPage主要就做了2页,第一页叫常规测试,包含了灯光和继电器控制(因为都是FILE IO操作)。第二页叫特殊测试(包含了安卓系统操作串口的操作器):

private void Button_Clicked(object sender, EventArgs e)
{Container.Children.Clear();Container.Children.Add(new MainPage());
}private void Button_Clicked_1(object sender, EventArgs e)
{Container.Children.Clear();Container.Children.Add(new SerialView());
}

那本篇的重点就变成了:

如何在xamarin项目中使用安卓串口进行通讯!

up主强烈推荐nuget库:Xamarin.Android.SerialPort
该库依赖于monoAndroid,所以一定要在安卓项目下。

这里我新建了一个安卓类库(GoJhou.Gekko.Android.UART)

然后引入了该nuget库。封装了SerialController如下:

public class MessageEventArgs : EventArgs{public readonly string Message;public MessageEventArgs(string msg){Message = msg;}}public class SerialController: BaseController<SerialController>{private SerialPort.SerialPortWrapper.SerialPort sp;public delegate void OnMessageReceivedEventHandler(MessageEventArgs e);public event OnMessageReceivedEventHandler MessageReceived;private string Message=string.Empty;public SerialController(){sp = new SerialPort.SerialPortWrapper.SerialPort("/dev/ttyS4", 9600, Stopbits.One, Parity.None, ByteSize.EightBits, FlowControl.None, Timeout.SimpleTimeout(-1));sp.StartReceive();sp.Flush();sp.OnReceived += Sp_OnReceived;}public void SendMessage(string msg){sp.WriteLine(msg);sp.FlushOutput();}private void Sp_OnReceived(object sender, SerialPort.SerialPortWrapper.SerialPortEventArgs e){var sp = sender as SerialPort.SerialPortWrapper.SerialPort;string message = Encoding.UTF8.GetString(e.Data);Message += message;if(Message.Contains("|")){var command = Message.Split('|');Message = command[1];string msg = command[0];MessageReceived?.Invoke(new MessageEventArgs(msg));}}}

由于研究不透彻,我发现这个库的OnReceived回调不稳定,接收字符长度有波动。只好手动定义了一个命令分隔符’|'来表示一个命令的正式结束。然后自己重新暴露一个MessageReceived的事件表示一个完整的消息。

有了操作类,其他基本上就和之前的一样啦!

在Android项目下新建一个View文件夹,负责放各种内容视图

SerialView:

<ContentView xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"x:Name="SerialContentView"x:Class="GoJhou.Gekko.Droid.SerialView"><ContentView.Content><Grid BindingContext="{x:Reference SerialContentView}"><Grid.RowDefinitions><RowDefinition Height="200"/><RowDefinition /><RowDefinition Height="50"/></Grid.RowDefinitions><Label BackgroundColor="LightGray" x:Name="MessageReceivedLabel" Text="{Binding ReceivedMessage,Mode=OneWay}"/><Editor Grid.Row="1" x:Name="MessageSendingBox" BackgroundColor="DarkGray"  Text="{Binding SendMessage,Mode=TwoWay}"/><Button Grid.Row="2" Text="Send"Command="{Binding SendCommand}"/></Grid></ContentView.Content>
</ContentView>
[XamlCompilation(XamlCompilationOptions.Compile)]public partial class SerialView : ContentView{public SerialController SerialPortController => SerialController.Instance;private string sendMessage;public string SendMessage{get => sendMessage; set{sendMessage = value;OnPropertyChanged();}}private string receivedMessage;public string ReceivedMessage{get => receivedMessage; set{receivedMessage = value;OnPropertyChanged();}}public Command SendCommand{get => new Command(new Action(() =>{SerialPortController.SendMessage(SendMessage);//SendMessage = string.Empty;}));}public SerialView(){InitializeComponent();SerialPortController.MessageReceived += (s) =>{ReceivedMessage +="|"+ s.Message;};}}

最后算是实现了壁虎的RS485通讯测试。

ps:up主第一次触摸到xamarin项目,本篇写的着实有些凌乱,可能不符合xamarin的设计模式。希望up主会再接再厉,在后面的章节中完善他们。

感谢支持!

百度人脸产品套件————壁虎 4.RS485通讯相关推荐

  1. 百度人脸产品套件————壁虎 1.开箱体验

    文章目录 让我来开启这一船新的篇章! 好了不皮了,好戏正式开场 一眨眼已经2019年年底啦,不知不觉我的博客已经接近2周年了. 还记得梦开始的地方~ 呃咳. 近几年,我时不时会受邀参与百度的硬软件新品 ...

  2. 百度人脸产品套件开箱体验-壁虎开机初体验

    壁虎套件早有耳闻,为什么这么说呢?今年的百度开发者大会,相信各位码民都有所耳闻-. 小帅在那时候正好在现场,也正好参加了人脸套件新品的介绍会议.当时PM给展示了产品相关功能介绍等. 在2019年的最后 ...

  3. 你想要精细化美妆美颜这里都有-百度人脸识别

    对于爱美的小姐姐们来说,只要出了门随时随地都要注意自己的妆容,那么如何快速进行精细化美型呢?小编推荐基于百度人脸识别的精细化美型,下面我们来看具体内容: 百度精细化美型:以高精度的人脸关键点检测为基础 ...

  4. flutter 刷脸_GitHub - nnnggel/baidu_face_plugin: 百度人脸识别和活体检测 Flutter 插件(目前版本仅支持 Android)...

    baidu_face_plugin 百度人脸识别和活体检测 Flutter 插件(目前版本仅支持 Android) 使用方式 注册百度开发者账号 前往 百度开发者账号 进行注册. 申请并配置licen ...

  5. 百度人脸检测与识别项目资源

    百度人脸检测与识别项目资源 https://blog.csdn.net/PaddlePaddle/article/details/104386123?depth_1-utm_source=distri ...

  6. php百度人脸识别做登陆,php调用百度人脸识别接口查询数据库人脸信息实现验证登录功能...

    博主在进行鼎食城毕业设计时,需要实现一个人脸识别登录功能,想到可以利用百度的人脸识别接口来完成,于是便去下载了百度的识别SDK,我用的是PHP,需要的的可以去下载其他版本,以下是识别效果: 用户在开始 ...

  7. 【Python7】csv/excel/matplotlib,排序/树遍历,线/进程,文件/xml操作,百度人脸API,aiohttp/hal/restful/curl

    文章目录 1.csv 2.excel 3.matplotlib 4.时间复杂度 5.顺序表/链表 6.六种排序 6.1 选择 6.2 插入 6.3 希尔 6.4 冒泡 6.5 快排 6.6 归并 7. ...

  8. 基于Emgu CV+百度人脸识别,实现视频动态 人脸抓取与识别

    背景 目前AI 处于风口浪尖,作为 公司的CTO,也作为自己的技术专研,开始了AI之旅,在朋友圈中也咨询 一些大牛对于AI 机器学习框架的看法,目前自己的研究方向主要开源的 AI 库,如:Emgu C ...

  9. 通讯可以并联吗_工业控制知识:吃透RS485通讯的连接方式,接485总线就简单多了...

    RS485被广泛使用,可以支持ModBus协议.由于其简单.价优.可靠和成熟,因此,被广泛应用于工业控制.智能仪器和电力通信. 我们来看看RS485的一个典型组网结构: 理论上,RS485总线的传输距 ...

最新文章

  1. python 自定义词典_pyhanlp用户自定义词典添加
  2. 挨踢人生路--记我的10年18家工作经历 - 第16家公司,英国公司――第一次当经理...
  3. java中static代码块与非静态代码块
  4. Leet Code OJ 169. Majority Element [Difficulty: Easy]
  5. 基于深度学习的场景分割算法研究综述
  6. 操作系统之内存管理:2、内存管理的功能(内存分配回收、扩充、地址转化、存储保护)
  7. LeetCode刷题(39)--Set Matrix Zeros
  8. 2020年对我影响最深的观点是下面3个,你呢?
  9. Maven运行Selenium报错org/w3c/dom/ElementTraversal
  10. 自定义函数:删除数组B中与数组A重复的值
  11. log4j2 的使用【超详细图文】
  12. dockerfile的端口映射
  13. 万般皆下品,唯有收租高
  14. elasticsearch倒排索引原理与中文分词器
  15. 【蓝桥杯每日一练】—字符逆序
  16. 电脑上所有文件都打不开的解决方法和过程
  17. 认缴注册资本实缴注册资本的区别是什么
  18. C语言程序设计(理论课)第八章 函数与宏定义
  19. 在计算机上写一封邮件的英文,一封邮件英文怎么写
  20. ng2-pdf-viewer实践

热门文章

  1. 《树莓派项目实战》第十四节 使用L298N驱动板模块驱动直流电机(马达)
  2. 计算机二级C语言-C程序设计题
  3. DBC2000数据库下载,DBC2000怎么安装设置?
  4. python入门之数据库操作
  5. 贾跃亭时隔一年再获执行官身份:掌控多个板块 FF正冲刺量产
  6. 批量导入Excel到sqlserver
  7. 网页设计、web前端、后台的开发流程和注意事项
  8. SQL Server 将JDE日期格式转换成常见日期格式
  9. Thinkcmf伪静态设置,url美化
  10. delphi7在AdvStringGrid中添加ComboBox方法,记录下来