问题标签 [orsserialport]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - ORSSerialPort serialRead in swift
我正在尝试在 Swift 中使用 ORSSerialPort。但是我从串口读取数据有问题。问题是错误的serialPort函数实现。也许这部分会有所帮助:
- (void)serialPort:(ORSSerialPort *)serialPort didReceiveResponse:(NSData *)responseData toRequest:(ORSSerialRequest *)request;
macos - ORSSerialPort 中的虚拟串口
我正在使用ORSSerialPort重写一个 OSX 控件应用程序。在某些情况下,我想控制一个没有直接连接到我的机器的串口设备,或者在本地模拟该设备的通信以进行测试。使用socat one 可以创建虚拟串行端口,例如在本地或通过网络从真实串行设备进行通信。
例如,在这里我创建了一对虚拟设备/dev/master
和/dev/slave
:
sudo socat -d -d -d -d -lf /tmp/socat pty,link=/dev/master,ixoff=0,ixon=0,ispeed=9600,ospeed=9600,echo=0,crtscts=0,user=gerwin,group=staff pty,link=/dev/slave,rawer,echo=0,user=gerwin,group=staff
使用这样的设置,我可以使用 pySerial 连接到虚拟端口。但是,使用 ORSSerialPort 对我不起作用。
单步执行代码时,这似乎源于 ORSSerialPort 仅依赖于 IOKit,其中“虚拟”设备不会出现在其雷达上。同样,当使用路径初始化实例时,例如/dev/master
,对应的io_object_t
不存在 - 并且初始化返回 nil。
我想避免深入研究 IOKit 和内核的东西(如此处所建议的)。
查看我看到的代码,sendData 写入文件描述符。是否有一种方法可以用“普通”文件描述符初始化 ORSSerialPort,跳过详细的 ioctl 设置,并将其视为普通字符流(假设这是 pySerial 将其拉下来的方式)。有什么选择吗?
2016 年 2 月 10 日更新:
我在ORSSerialPort github 问题列表中与创建者 armadsen 讨论了这种情况:
我认为基本方法是“交换” InternalSerialPort 和 SerialPort 中的初始化程序,以便路径初始化程序是指定/必需的,而 IOKit 初始化程序是可选的。已经是这种情况(正如您所指出的),路径(而不是 io_object_t)在内部用于获取文件描述符并从端口读/写。换句话说,我希望这不是一个非常复杂的变化。
我在下面发布了对最终结果的答案...
xcode - Mac App 无法在 Xcode 之外运行,缺少库?使用库 ORSerial
我的应用程序构建时没有错误或警告,并且在 Xcode 7.2.1 中运行良好。但是当我将它存档并尝试在 Xcode 之外打开它时,图标会短暂闪烁,并且出现此错误:
如何编译我的应用程序以使其在 Xcode 之外工作?当我尝试在没有 XCODE 环境的情况下打开已编译的 .app 时会出现此问题。
该应用程序是使用 swift 制作的。
swift - 如何用这个 [Swift] 编写带有类的体面代码
我正在制作一个 OSX 应用程序来通过串行控制设备,为此我正在使用 ORSSerialPort 库。但是我在编码方面遇到了一些麻烦。我是(非常)编码新手,我不知道如何正确编码,这在尝试使某些东西工作时会导致一些问题。我将展示我的三个“类”,并描述它们的功能,然后描述我遇到的问题。
主类,库委托连接到该类,我从该类与串行设备进行所有通信(AE20125Controller.swift)
数据处理器类,所有可能的消息都存储在其中,我要组装要发送的数据和所有当前设置的形式(DataProcessor.swift)
menuItems 类,它应该处理 GUI 中的所有更改和操作。(MenuItems.swift)
我省略了 AppDelegate,因为其中没有任何内容,而是用于构建视图的设置(例如,将视图的背景更改为白色)。
我无法在类之间进行通信,例如我需要使用 DataProcessor 类的 AE20125Controller 类中的 sendData 方法发送数据,但我需要启动它。但是DataProcessor类是在AE20125Controller类中发起的?这也适用于 MenuItems 类,当按下 updateFreq 按钮时,应该调用 DataProcessor 类中的方法 setData,但我需要启动它。
老实说,我不知道我在做什么,不知道如何正确地使用这个系统,以便一切正常,而不是将所有内容放在一个文件中,这样我就可以保持它的井井有条。同样,我是编程新手,但是(如果我自己可以这么说的话)我确实有一些编程知识。请帮助我组织我的(蹩脚的)代码,并给我一些关于如何在未来避免这种情况的提示。
(如果你知道一个好的高级 Swift OSX 编程指南/课程,请告诉我。(它不一定是免费的))
提前致谢
swift - 使用 ORSSerialPort 时,类型“AppDelegate”不符合协议“ORSSerialPortDelegate”
我创建了一个全新的 Xcode 项目,我做的第一件事是按照此页面上的“使用 Xcode 子项目”步骤操作:https : //github.com/armadsen/ORSSerialPort/wiki/Installing-ORSSerialPort 导入了 ORSSerialPort 源进入我的项目供我使用并且工作正常。然后我进入 AppDelegate.swift 并添加import ORSSerial
,项目仍然可以构建。
接下来我添加ORSSerialPortDelegate
到 AppDelegate 类声明class AppDelegate: NSObject, NSApplicationDelegate, ORSSerialPortDelegate {
(
我不明白为什么会发生这个错误,因为我已经检查了 ORSSerialPort 的演示项目,这正是他们所做的。我想做的就是创建一个简单的程序来读取 Arduino 的输出,为什么这么难?我已按照所有说明进行操作,并且到处都看过,但没有任何效果。我唯一能看到的可能会有所不同的是,演示项目不使用 AppDelegate 做任何事情,而是有一个名为的单独文件SerialPortDemoController
,接口使用该文件并将所有代码放入其中。但是,我不想这样做,我只想直接在 AppDelegate 中使用 ORSSerial 库,就像使用 CLLocationManagerDelegate、NSUserNotificationCenterDelegate 或其他任何东西一样。
swift - 应该是单行的 ORSSerialPort 数据通过多行传入
我有一个 arduino,它每半秒在串行线路上吐出一行 GPS 数据,我知道这是有效的,因为我可以查看 arduino IDE 中的串行监视器,每半秒就会出现一条新的单行数据。
我现在正在使用 Swift 编写一个 Mac 程序,它将通过串行端口输入的每个坐标放在地图上,并使用 ORSSerialPort 库连接到 arduino 并接收其数据。这工作正常,我有一个早期工作的基本版本,但是我注意到 GPS 数据中存在间隙(它们在地图上以小组的形式出现,当它应该是一条恒定线时,它们之间有一个明显的空间) .
在我得到地图之前,我有一个文本字段,每条 GPS 数据线都会在它进入时添加到其中,它产生与 arduino IDE 串行监视器完全相同的输出,所以我认为一切正常。
为了尝试解决地图问题,我删除了地图代码,并print()
在 XCode IDE 中通过串行端口进入时将每一行简单地删除。令我惊讶的是,数据中有随机换行符,我不明白为什么。我觉得这可能会导致我遇到的问题(在每个逗号处拆分字符串,以便我可以提取各个值)所以想知道为什么它在 arduino IDE 和文本字段中以单行形式出现,但不是在 XCode IDE 中,大概是在我使用字符串的时候。
编辑:我在 XCode IDE 的打印和输出的文本字段前加上五个加号并用五个破折号作为后缀,然后在发送单个报告后将串行端口设置为关闭(应该是单行数据)。我对这两件事的输出最终都是三行,每行都以加号和破折号作为前缀和后缀。请参见下面的照片,它显示了应该是单行的内容:
为什么我的单行数据通过多行传递并且表现得像单个变量(如获取行的最后一个字符返回三行中第一行的最后一个字符,而不是分号)?
swift - 从 arduino 读取的 Swift 3 ORSSerialPort
所以我正在尝试使用 ORSSerialPort 库读取一些 arduino 输出。如果我使用名为 ORSSerialPortDemo 的 lib 示例代码,一切正常。现在我在演示中唯一想念的是他们如何在 viewController 中使用 SerialPortDemoController.swift。
我创建了一个具有 ViewController.swift 的标准项目。桥头导入完成,所有引用都编译。但我喜欢在代码中设置它们,而不是使用 GUI 来选择 USB 端口和波特率。
像这样的东西:
然后我需要从端口读取。这应该已经可以使用了,函数:func serialPort(_ serialPort: ORSSerialPort, didReceive data: Data)? 所以在这个功能中我可以做这样的事情:
我环顾四周,但似乎没有任何效果。如果有人能指出我正确的方向,那就太好了。
谢谢!
swift - 使用 ORSSerialPort 从 Swift 4 中的串行端口读取
我一直想制作一个通过串行向我的 LED 控制器发送指令的应用程序。为此,我需要读取控制器在发送命令后发回的内容。我在以下功能中找到了ORSSerialPort
:
但是,有类似的东西ORSSerialPort.read()
吗?
swift - 使用 ANSI 彩色数据包解析数据包有意外行为
我的序列有混合数据格式,一些输出有
\[0;32m...\[0m
,其中一些是纯文本。
我的完整输出在这里https://pastebin.ubuntu.com/p/WTtJmGS9y5/
根据代码,您可以看到通过serialPort didReceivePacket
具有 >>> <<< 标记的数据,但不是全部....
它似乎didReceivePacket
做出了异步响应,因为我的输出必须以
但有时在这些行之后会有一些额外的文字
macos - ORSSerialPort 不发送数据
我是初级 Swift 用户,但在这个阶段,我需要在我的项目中使用串行连接。当我寻找可用端口时,我看到它们没有问题,但是当我尝试发送一些东西时我有问题,为什么?
我的代码对 ORSSerial 有疑问: