张高兴的 .NET Core IoT 入门指南:(五)串口通信入门

在开始之前,首先要说明的是串口通信所用到的 SerialPort 类并不包含在 System.Device.Gpio NuGet 包中,而是在 System.IO.Ports NuGet 包中。之所以在这里介绍串口通信,是因为在嵌入式中串口通信是与其他设备进行交互的一种重要方式,而且在某些没有屏幕的设备中充当着程序调试的工具。

什么是串口

串口是串行接口的简称,这是一个非常大的概念,在嵌入式中串口通常指 UART (Universal Asynchronous Receiver/Transmitter,通用异步收发器)。使用串口进行的通信叫做串行通信,与之相对的一个概念是并行通信。串行通信是指数据一位一位的按顺序传输,而并行通信则是多位数据同时传输。如图1所示,DATA BUS 到 UART 1 之间是并行通信,UART 1 到 UART 2 之间是串行通信。

640?wx_fmt=png

图1:串行通信与并行通信

串口通信的数据帧格式如图2所示,通常一帧共包括 10 位:1 个起始位,8 个数据位和 1 个停止位。有一些特殊的数据帧在停止位前面包含 1 位的奇偶校验位,还有的停止位有 2 个比特。其中起始位为低电平(0),标志着数据传输的开始;停止位为高电平(1),表示数据帧传输结束;数据位则为实际发送的数据,使用高低电平来表示比特信息,如果发送的内容是文本,那么这段数据为字符的二进制编码(ASCII,UTF-8……)。数据传输的速率我们使用波特率(Baud Rate)来表示,即每秒钟传送的码元符号的个数[1]。比如数据传输速率为 9600 字符/s,那么这时的波特率为 9600。

640?wx_fmt=png

图2:串口通信的数据帧

设备进行串口通信时,设备的连线如图3所示,两个设备的信号线,即发送端(TXD)与接收端(RXD)交叉相连,并且需要共地。在 Raspberry Pi 的引脚上共引出了 1 组串口,即 UART 0 ,对应 8 和 10 号引脚。

640?wx_fmt=png

图3:串口设备的连接

相关类

串口操作的相关类位于 System.IO.Ports 命名空间下。

SerialPort

public class SerialPort : Component
{// portName 为串口的名称,可以使用静态方法 GetPortNames() 获取public SerialPort(string portName);// 传输的波特率public int BaudRate { get; set; }// 指定传输内容的编码public Encoding Encoding { get; set; }// 新行格式,即设置换行的字符public string NewLine { get; set; }// 设置停止位的格式public StopBits StopBits { get; set; }// 设置校验位的格式public Parity Parity { get; set; }// 打开串口通信流public void Open();// 关闭串口通信流public void Close();// 向串口通信流中写一行字符public void WriteLine(string text);// 从串口通信流中读一行字符public string ReadLine();// 读取缓冲区中的所有可用内容,一般用于清空缓冲区,防止读取旧的内容public string ReadExisting();// 获取可用的串口名称public static string[] GetPortNames();
}

串口通信的步骤

  1. 配置串口通信参数,如波特率,内容编码,新行格式,超时时间等。

SerialPort sp = new SerialPort(portName: "/dev/ttyUSB0")
{BaudRate = 115200,Encoding = Encoding.UTF8,ReadTimeout = 500,WriteTimeout = 500,
}
  1. 打开串口

sp.Open();
  1. 读取和写入文本

sp.WriteLine($"Text content.");
string content = sp.ReadLine();
  1. 关闭串口

sp.Close();

USB 串口通信实验

硬件需求

名称数量
USB 串口x1
杜邦线若干

USB 串口设备只要 Raspberry Pi 支持即可,这里使用的是 FT232RL

电路

640?wx_fmt=jpeg

  • GND - GND

  • RX - TX (Pin 8)

  • TX - RX (Pin 10)

  • USB - USB

使用 Docker 运行示例

示例地址:https://github.com/ZhangGaoxing/dotnet-core-iot-demo/tree/master/src/SerialCommunication

docker build -t serial-sample -f Dockerfile .
docker run --rm -it --device /dev/ttyUSB0 --device /dev/ttyS0 serial-sample

代码

  1. 打开 Visual Studio ,新建一个 .NET Core 控制台应用程序,项目名称为“SerialCommunication”。

  2. 引入 System.IO.Ports NuGet 包。

  3. 在 Program.cs 中,将主函数代码替换如下:

static void Main(string[] args)
{using (SerialPort usb = new SerialPort(portName: "/dev/ttyUSB0")){usb.BaudRate = 115200;usb.Encoding = Encoding.UTF8;usb.ReadTimeout = 500;usb.WriteTimeout = 500;usb.Open();using (SerialPort rpi = new SerialPort(portName: "/dev/ttyS0")){rpi.BaudRate = 115200;rpi.Encoding = Encoding.UTF8;rpi.ReadTimeout = 500;rpi.WriteTimeout = 500;rpi.Open();for (int i = 0; i < 10; i++){rpi.WriteLine($"Hello {i}!");Console.WriteLine($"USB receive: {usb.ReadLine()}");}rpi.Close();}usb.Close();}
}
  1. 发布、拷贝、更改权限、运行

效果图

640?wx_fmt=jpeg


  备注

下一篇文章将谈谈 Iot.Device.Bindings NuGet 包的使用。

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Caffe 在自己的数据库上训练步骤

回忆ImageNet的步骤&#xff1a;http://caffe.berkeleyvision.org/gathered/examples/imagenet.html Brewing ImageNet This guide is meant to get you ready to train your own model on your own data. If you just want an ImageNet-trained network, then note that sinc…

1024程序员节来啦!!.NET技术圈独家优惠劵,折后再折,赶紧来抢啊

1024程序员节当当网计算机图书每满100减50&#xff01;满200减100&#xff01;满300-150&#xff01;机械工业出版社华章公司联合当当网特意为【DotNET技术圈】用户申请了一批可与满减叠加使用的“满200减30”的图书优惠码&#xff0c;优惠码使用后相当于&#xff1a;400减230 …

你跟最伟大领导的距离,或许只差这一点

译者&#xff1a;宗天琪原文链接&#xff1a;https://www.linkedin.com/pulse/great-leaders-listeners-brigette-hyacinth/?fromgroupmessage&isappinstalled0倾听是领导者需要掌握的最重要的技能&#xff0c;它是很多其它领导才能的基石。然而&#xff0c;要做到精通这项…

Batch_size问题

有关solver.prototxt中的各项解释&#xff1a;http://www.cnblogs.com/denny402/p/5074049.html solver算是caffe的核心的核心&#xff0c;它协调着整个模型的运作。caffe程序运行必带的一个参数就是solver配置文件。运行代码一般为 # caffe train --solver*_slover.prototxt 在…

程序员家的精品大闸蟹:青壳、白底、肉多、爆黄,现在是吃大闸蟹的最佳时期...

其实&#xff0c;我跟大家一样&#xff0c;也是dotNET跨平台和张队长的忠实粉丝&#xff0c;也是一名程序员。上上周&#xff0c;我在dotNET跨平台的优选商城买了队长推荐人生果&#xff0c;也是第一次吃这个人生果&#xff0c;味道鲜甜、汁水也特别多&#xff0c;但由于快递的…

C#刷遍Leetcode面试题系列连载(4): No.633 - 平方数之和

点击蓝字“dotNET匠人”关注我哟加个“星标★”&#xff0c;每日 7:15&#xff0c;好文必达&#xff01;前文传送门:上篇文章中一道数学问题 - 自除数&#xff0c;今天我们接着分析 LeetCode 中的另一道数学题吧~今天要给大家分析的面试题是 LeetCode 上第 633 号问题&#xff…

程序员过关斩将--数据库的乐观锁和悲观锁并非真实的锁

菜菜哥&#xff0c;告诉你一个消息你有男票啦&#xff1f;非也非也&#xff0c;我昨天出去偷偷面试&#xff0c;结果又挂了哦&#xff0c;看来公司是真的不想让你走呀面试官让我说一下乐观锁和悲观锁&#xff0c;我没回答上来&#xff0c;回来之后我查了&#xff0c;数据库没有…

solverstate的使用

http://blog.csdn.net/wang4959520/article/details/51831637 我们在使用caffe训练过程中会生成.caffemodel和.solverstate文件&#xff0c;一个是模型文件&#xff0c;一个是中间状态文件&#xff08;生成多少个取决于你自己设定的snapshot&#xff09;。当训练过程中断&#…

IT从业者的迷思与求解之道——座谈会实录摘选

本次座谈会于上周六开始&#xff0c;由于网络原因&#xff0c;很多国内的小伙伴们没有能够连进去&#xff0c;挺遗憾的。所以我整理了本次座谈会的部分内容&#xff0c;希望能对大家有所帮助。洞察力主持人&#xff1a;大家好我们来自开源社群&#xff0c;今天举行在线it社区的…

准确率、召回率、F1、mAP、ROC、AUC

https://yongyuan-workbench.rhcloud.com/%E4%BF%A1%E6%81%AF%E6%A3%80%E7%B4%A2ir%E7%9A%84%E8%AF%84%E4%BB%B7%E6%8C%87%E6%A0%87%E4%BB%8B%E7%BB%8D-%E5%87%86%E7%A1%AE%E7%8E%87%E3%80%81%E5%8F%AC%E5%9B%9E%E7%8E%87%E3%80%81f1%E3%80%81map%E3%80%81r/准确率、召回率、F1…

从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用

标题&#xff1a;从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用。 作者&#xff1a;Lamond Lu 地址&#xff1a;https://www.cnblogs.com/lwqlun/p/11717254.html源代码&#xff1a;https://github.com/lamondlu/DynamicPlugins前景回顾•••••简介在前…

小波变换基础

http://blog.csdn.net/GarfieldEr007/article/details/50151845 第十二章 小波变换 目录 1 引言 2 连续小波变换 3 二进小波变换 3.1 Haar变换 4 离散小波变换 4.1 多分辨率分析 4.2 快速小波变换算法 4.3 离散小波变换的…

.Net Core3.0使用gRPC

gRPC是什么gRPC是可以在任何环境中运行的现代开源高性能RPC框架。它可以通过可插拔的支持来有效地连接数据中心内和跨数据中心的服务&#xff0c;以实现负载平衡&#xff0c;跟踪&#xff0c;运行状况检查和身份验证。它也适用于分布式计算的最后一英里&#xff0c;以将设备&am…

单链表逆向

转自&#xff1a;http://blog.csdn.net/heyabo/article/details/7610732 对于单链表的逆置有两种方法可以实现&#xff1a; &#xff08;1&#xff09;利用辅助指针 基本思想&#xff1a;在遍历结点过程中&#xff0c;设置辅助指针&#xff0c;用于记录先前遍历的结点。这样依次…

中国.NET开发者峰会特别活动-基于k8s的微服务和CI/CD动手实践报名

2019.11.9 的中国.NET开发者峰会将在上海举办&#xff0c;到目前为止&#xff0c;大会的主题基本确定&#xff0c;这两天就会和大家会面&#xff0c;很多社区的同学基于对社区的信任在我们议题没有确定的情况下已经购票超过了300张&#xff0c;而且分享的主题都来自于社区&…

高斯混合模型学习

转自&#xff1a;http://blog.csdn.net/jojozhangju/article/details/19182013 1.高斯混合模型概述 高斯密度函数估计是一种参数化模型。高斯混合模型&#xff08;Gaussian Mixture Model, GMM&#xff09;是单一高斯概率密度函数的延伸&#xff0c;GMM能够平滑地近似任意形状的…

[工具]OFFICE插件管理工具-帮助更好地管理及使用电脑安装过的OFFICE插件

在OFFICE软件的世界中&#xff0c;除了由微软提供的OFFICE软件功能外&#xff0c;还有大量的功能由第三方开发者完成&#xff0c;市面上也存在大量的OFFICE插件供用户选择。使用场景有些插件仅在某个特定场景下才会使用&#xff0c;日常办公过程中&#xff0c;无需开启&#xf…

随机梯度下降的实现细节

http://www.miaoerduo.com/deep-learning/%E5%9F%BA%E4%BA%8Ecaffe%E7%9A%84deepid2%E5%AE%9E%E7%8E%B0%EF%BC%88%E4%B8%8A%EF%BC%89.html 最近看了一篇文章&#xff0c;详细说明了随机梯度下降中随机是在create_imagenet.sh中shuffle实现的。 相关资源&#xff1a; DeepID&am…

那位标榜技术驱动的开发者去哪了?

作者&#xff1a;邹溪源&#xff0c;长沙资深互联网从业者&#xff0c;架构师社区合伙人&#xff01;一他是一位曾经标榜技术驱动世界的开发者&#xff0c;在他年轻的时候&#xff0c;一段独特的经历&#xff0c;让他对技术充满了兴趣&#xff0c;并在技术这条道路上走了很远很…