河南公司网站制作咨询/网站seo检测工具
文章目录
- 目的
- 使用入门
- 总结
目的
串口是非常常用的一种电脑与设备交互的接口。这篇文章将介绍golang中相关功能的使用。
本文使用的包为 :go.bug.st/serial
https://pkg.go.dev/go.bug.st/serial
https://github.com/bugst/go-serial
另外还有一些常见的包如:tarm/serial
https://pkg.go.dev/github.com/tarm/serial
https://github.com/tarm/serial
使用入门
这个包使用很简单,按照官方说明来其实就差不多了,这里稍微做下记录。
搜索串口
搜索电脑上的串口是最基本的操作:
package mainimport ("log""go.bug.st/serial"
)func main() {ports, err := serial.GetPortsList()if err != nil {log.Fatal(err)}if len(ports) == 0 {log.Fatal("No serial ports found!")}for _, port := range ports {log.Printf("Found port: %v\n", port)}
}
上面只能搜索到串口设备,如果是USB模拟的串口设备等的还可以使用别的方式在搜索的同时获取到设备的VID&PID信息:
package mainimport ("log""go.bug.st/serial/enumerator"
)func main() {ports, err := enumerator.GetDetailedPortsList()if err != nil {log.Fatal(err)}if len(ports) == 0 {log.Fatal("No serial ports found!")return}for _, port := range ports {log.Printf("Found port: %s\n", port.Name)if port.IsUSB {log.Printf(" VID&PID: %s&%s\n", port.VID, port.PID)log.Printf(" SerialNumber: %s\n", port.SerialNumber)log.Printf(" Product: %s\n", port.Product)}}
}
配置与打开
有了上面的串口名后就可以打开串口,打开时可以设置一些参数,大多数时候只要改个波特率即可:
package mainimport ("log""go.bug.st/serial"
)func main() {mode := &serial.Mode{// default is 9600_8N1BaudRate: 115200,// DataBits int // Size of the character (must be 5, 6, 7 or 8)// Parity Parity // Parity (see Parity type for more info)// StopBits StopBits // Stop bits (see StopBits type for more info)// InitialStatusBits *ModemOutputBits // Initial output modem bits status (if nil defaults to DTR=true and RTS=true)}port, err := serial.Open("COM3", mode)if err != nil {log.Fatal(err)}// err := port.SetMode(mode) // 模式也可以在使用过程中更改// if err != nil {// log.Fatal(err)// }// port.Close() // 关闭串口
}
读写数据
下面是串口读写操作:
package mainimport ("log""time""go.bug.st/serial"
)func main() {// c := make(chan os.Signal)// signal.Notify(c)mode := &serial.Mode{BaudRate: 115200,}port, err := serial.Open("COM3", mode)if err != nil {log.Fatal(err)}// 下面读写测试时将用来测试的串口的RX和TX引脚外部进行短接,发送什么数据就会收到什么数据// 启用一个协程进行读取go func() {buff := make([]byte, 8)for {n, err := port.Read(buff) // 开始读取直到至少收到一字节数据if err != nil {log.Fatal(err)}log.Printf("Received %v bytes: %X\n", n, buff[:n])}}()// 启用一个协程定期发送数据go func() {for {n, err := port.Write([]byte{0xAA, 0xBB, 0xCC, 0xDD})// port.Drain() // 等待数据发送完成if err != nil {log.Fatal(err)}log.Printf("Sent %v bytes\n", n)time.Sleep(2 * time.Second)}}()select {}// <-c
}
上面测试可以看到串口数据接收可能会分多次触发。
流控制
这个包的使用很简单,最主要的就是上面一些,剩下的主要还有些流控制相关的操作,这个目前来说用的很少。最常见的是有些用流控制配合晶体管实现自复位电路的应用,这种时候需要特别注意控制串口打开时流控制的设置情况。
总结
用Golang来操作串口还是比较简单的,很多时候比单纯的用C语言来操作要方便很多。不过这其实是麻烦的地方包的开发者都处理封装好了,去查看源码时可以看到各个平台实现串口操作时该麻烦的还是麻烦,不过我们只是拿来用不用关心这么多。
相关文章:

Golang笔记:使用serial包进行串口通讯
文章目录 目的使用入门总结 目的 串口是非常常用的一种电脑与设备交互的接口。这篇文章将介绍golang中相关功能的使用。 本文使用的包为 :go.bug.st/serial https://pkg.go.dev/go.bug.st/serial https://github.com/bugst/go-serial 另外还有一些常见的包如&…...

EasyExcel 导出批注信息
1. 批注信息 package com.xxx.demo;import lombok.Getter;/*** This class represents the comment information associated with a specific cell in an Excel sheet.* The columnIndex field specifies the column number of the cell, and the comment field stores the te…...

HttpServletRequest・getContentLeng・getContentType区别
getContentLength(): 获取客户端发送到服务器的HTTP请求主体内容的字节数(长度) 如果请求没有正文内容(如GET),或者请求头中没有包含Content-Length字段,则该方法返回 -1 getContentType()&am…...

Matlab|【防骗帖】考虑时空相关性的风电功率预测误差建模与分析
目录 1 主要内容 2 部分程序 3 下载链接 1 主要内容 这个程序《考虑时空相关性的风电功率预测误差建模与分析》画的图片非常漂亮,和原文献基本一致,但是实际上内容并未实现出来,主要就是利用现有的风电预测的数据和结果做了相关的图&#…...

【Android面试八股文】说一说ListView卡顿的原因以及相对应的优化策略
文章目录 一、ListView卡顿的原因1.1 Item没有复用1.2 布局的层级过深1.3 数据绑定逻辑过多1.4 滑动时不必要的图片刷新1.5 频繁的notifyDataSetChanged二、优化策略2.1 使用 ViewHolder 进行视图复用2.2 优化布局结构2.3 优化数据绑定逻辑过多2.4 图片加载优化2.5 避免频繁调用…...

Kotlin 中的内联函数
1 inline 内联函数:消除 Lambda 带来的运行时开销。 举例来说: fun main() {val num1 100val num2 80val result num1AndNum2(num1, num2) { n1, n2 ->n1 n2} }fun num1AndNum2(num1: Int, num2: Int, operation: (Int, Int) -> Int): Int …...

KALI LINUX 开启ssh免登录服务及固定ip及
SSH以进行远程登录 在Kali Linux中启用SSH以进行远程登录,请按照以下步骤操作: 安装SSH服务:sudo apt update sudo apt install openssh-server 已安装可忽略 sudo systemctl start ssh 启动SSH服务 sudo systemctl enable ssh 确保SSH服务设置为开机启动: (可选)如…...

亮数据,一款新的低代码爬虫利器!
在当今数据驱动型时代,数据采集和分析能力算是个人和企业的核心竞争力。然而,手动采集数据耗时费力且效率低下,而且容易被网站封禁。 我之前使用过一个爬虫工具,亮数据(Bright Data) ,是一款低…...

配置OSPF认证(华为)
#交换设备 配置OSPF认证-基于华为路由器 OSPF(开放最短路径优先)是一种内部网关协议(IGP),用于在单一自治系统(AS)内决策路由。OSPF认证功能是路由器中的一项安全措施,它的主要用途…...

关于ip地址的网页无法访问navigator的gpu、媒体、蓝牙等设备的解决方法
在使用threejs的WebGPURenderer渲染器时,发现localhost以及127.0.0.1才能访问到navigator.gpu,直接使用ip会变成undefined,原因是为了用户的隐私安全,只能在安全的上下文中使用,非安全的上下文就会是undefined,安全上下…...

深入理解外观模式(Facade Pattern)及其实际应用
引言 在软件开发中,复杂的系统往往由多个子系统组成,这些子系统之间的交互可能非常复杂。外观模式(Facade Pattern)通过为这些子系统提供一个统一的接口,简化了它们的交互。本篇文章将详细介绍外观模式的概念、应用场…...

为什么永远不会有语言取代 C/C++?
每个 CPU 都带有一种称为 ISA(指令集架构)汇编的电路语言。ISA 程序集是一种硬件语言,由基本数据操作、数学计算和结构化编程(即 jmp)的操作组成。但是,为每个计算需求编写汇编代码无疑是耗时的,…...

Python 全栈体系【四阶】(六十一)
第五章 深度学习 十三、自然语言处理(NLP) 5. NLP应用 5.2 文本情感分析 目标:利用训练数据集,对模型训练,从而实现对中文评论语句情感分析。情绪分为正面、负面两种 数据集:中文关于酒店的评论&#…...

工控必备C#
微软的C# 语言? QT 熟了以后,Qt 更方便些 方法Signal Slot 感觉上一样 现在更推荐PyQt 来构建,底层还是Qt C 的那些库,Qt 的开源协议有点狗...

【设计模式之基于特性的动态路由映射模式】
在ASP.NET Core中,路由是核心功能之一,用于将HTTP请求映射到相应的控制器操作。虽然“路由驱动设计模式”是一个我刚杜撰出来的设计模式名称,但我们可以基于ASP.NET Core的路由特性,构建一种以路由为中心的设计模式。 以下是一个…...

GB 16807-2009 防火膨胀密封件
防火膨胀密封件是指在火灾时遇火或高温作用能够膨胀,且能辅助建筑构配件使之具有隔火、隔烟、隔热等防火密封性能的产品。 GB 16807-2009 防火膨胀密封件测试项目 测试要求 测试标准 外观 GB 16807 尺寸允许偏差 GB 16807 膨胀性能 GB 16807 产烟毒性 GB …...

从零开始做题:老照片中的密码
老照片中的密码 1.题目 1.1 给出图片如下 1.2 给出如下提示 这张老照片中的人使用的是莫尔斯电报机,莫尔斯电报机分为莫尔斯人工电报机和莫尔斯自动电报机(简称莫尔斯快机)。莫尔斯人工电报机是一种最简单的电报机,由三个部分组…...

考研数学|张宇和武忠祥,强化能不能同时跟?
可以说你跟武老师学明白了,120完全没问题!如果追求更高,宇哥的怀抱也想你敞开! 学长我21年一战数学83,总分没过线,22年二战143,逆袭上岸211!市面上的老师我基本都听过,最…...

【机器学习】——【线性回归模型】——详细【学习路线】
目录 1. 引言 2. 线性回归理论基础 2.1 线性模型概述 2.2 最小二乘法 3. 数学基础 3.1 矩阵运算 3.2 微积分 3.3 统计学 4. 实现与应用 4.1 使用Scikit-learn实现线性回归 4.2 模型评估 5. 深入理解 5.1 多元线性回归 5.2 特征选择 5.3 理解模型内部 6. 实战与项…...

【mysql】常用操作:维护用户/开启远程/忘记密码/常用命令
一、维护用户 1.1 创建用户 -- 语法 > CREATE USER [username][host] IDENTIFIED BY [password];-- 例子: -- 添加用户user007,密码123456,并且只能在本地可以登录 > CREATE USER user007localhost IDENTIFIED BY 123456; -- 添加用户…...

引领AI新时代:深度学习与大模型的关键技术
文章目录 📑前言一、内容概述二、作者简介三、书籍特色四、学习平台与资源 📑前言 在数字化浪潮席卷全球的今天,人工智能(AI)和深度学习技术已经渗透到我们生活的方方面面。从智能手机中的智能语音助手,到…...

STL——常用算法(二)
一、常用拷贝和替换算法 1.copy #include <iostream> #include <vector> #include <algorithm> using namespace std; void printVector(int val) {cout << val << " "; } void test01() {vector<int>v1;for (int i 0; i <…...

MyCAT 2 底层原理
MyCAT 2 底层原理 1. MyCAT 2 架构概述 MyCAT 2 是一款开源的数据库中间件,它通过分库分表、读写分离、动态路由等机制提升数据库系统的性能和扩展性。MyCAT 2 的架构设计灵活,适用于多种数据库类型,包括 MySQL、PostgreSQL 和 SQL Server …...

操作系统实训复习笔记(第7关:生产者消费者问题实践)
目录 第7关:生产者消费者问题实践 第1关:生产者消费者问题实践 1、在主线程中初始化锁为解锁状态 2、访问对象时的加锁操作与解锁操作 3、(生产和消费进程操作后)信号量操作实现进程同步 4、先等待(生产还是消费…...

通过物联网管理多台MQTT设备-基于全志T527开发板
一、系统概述 基于米尔-全志 T527设计一个简易的物联网网关,该网关能够管理多台MQTT设备,通过MQTT协议对设备进行读写操作,同时提供HTTP接口,允许用户通过HTTP协议与网关进行交互,并对设备进行读写操作。 二、系统架…...

Python学习前简介
1.python简介 2.python特点 3.python解释器 4.pyCharm简介 一、python简介 Python是一种高级编程语言,用于多种应用,包括网站开发、数据科学、人工智能、机器学习、桌面应用、网络应用、软件开发、网络爬虫等。它由Guido van Rossum于1991年首次发布&am…...

【Text2SQL 论文】MAGIC:为 Text2SQL 任务自动生成 self-correction guideline
论文:MAGIC: Generating Self-Correction Guideline for In-Context Text-to-SQL ⭐⭐⭐ 莱顿大学 & Microsoft, arXiv:2406.12692 一、论文速读 DIN-SQL 模型中使用了一个 self-correction 模块,他把 LLM 直接生成的 SQL 带上一些 guidelines 的 p…...

2024 年 8 款最佳建筑 3D 渲染软件
你现在使用的3D 渲染软件真得适合你吗? 在建筑和室内渲染当中,市面上有许多3D渲染软件可供选择。然而,并不是每款软件都适合你的需求。本指南将重点介绍2024年精选的8款最佳建筑3D渲染软件,帮助你了解不同的选项,并选…...

MAB规范(3):Chapter6 Glossary 术语表
第6章 - 术语表 此章不做过多的批注,都是些简单的术语解释。...

40python数据分析numpy基础之diag处理矩阵对角线元素
1 python数据分析numpy基础之diag处理矩阵对角线元素 python的numpy库的diag(v,k0)函数,以一维数组的形式返回方阵的对角线元素,或将一维数组转换为方阵(非对角线元素为0)。 方阵:方形矩阵,行数和列数相等…...