OrsSerialPort是MacOS的易于使用的Objective-C串行端口库。对于编写Objective-C或Swift Mac应用程序的程序员很有用,该应用程序通过串行端口与外部设备通信(最常见的是RS-232)。您可以使用OrsSerialPort来编写连接到Arduino项目,机器人,数据采集设备,HAM收音机和各种其他设备的应用程序。使用orsserialport打开端口并发送数据可以很简单:
let serialPort = ORSSerialPort ( path : " /dev/cu.KeySerial1 " )
serialPort . baudRate = 4800
serialPort . open ( )
serialPort . send ( someData ) // someData is an NSData object
serialPort . close ( ) // Later, when you're done with the port或者,在Objective-C中:
ORSSerialPort *serialPort = [ORSSerialPort serialPortWithPath: @" /dev/cu.KeySerial1 " ];
serialPort.baudRate = @ 4800 ;
[serialPort open ];
[serialPort sendData: someData]; // someData is an NSData object
[serialPort close ]; // Later, when you're done with the portOrsserialport是根据MIT许可发布的,这意味着您可以在封闭和开源项目中免费使用它。但是,即使在一个封闭的源项目中,您也必须包含Orsserialport的版权通知的公开副本,您可以在许可证文件中找到。
如果您对Orsserialport有任何疑问,建议或贡献,请与我联系。我也很想听听您正在使用的任何酷项目。
此读数提供了OrsSerialPort库的概述,旨在提供足够的信息来快速启动和运行。您可以在http://cocoadocs.org/docsets/orsserialport/上阅读ORSSERIALPORT的完整技术文档。 Orsserialport Wiki还包含详细的文档。
此读取中的大多数示例代码都在迅速。但是,ORSSERIALPORT也可以轻松地从Objective-C代码中使用。这些示例文件夹包含所有四个示例项目的迅速和目标-C版本。有关更多信息,请参见下面的示例项目部分。
有多种方法可以将OrsSerialPort添加到您的项目中。您可以使用随附的框架项目,迦太基,可可录或Swift Package Manager。有关每种方法的详细说明,请参见安装OrsSerialPort的指南。
您可以在两种方式中获得一个ORSSerialPort实例。最简单的是使用ORSSerialPortManager的availablePorts属性(如下所述)。另一种方法是使用串行端口的BSD设备路径获取新的ORSSerialPort实例:
let port = ORSSerialPort ( path : " /dev/cu.KeySerial1 " )请注意,您必须给出ORSSerialPort.init(path:)设备的完整路径,如上示例所示。
拥有端口实例后,您可以使用open()方法将其打开。使用端口完成后,请使用close()方法将其关闭。
可以使用各种属性ORSSerialPort提供诸如波特率,停车位,奇偶校验和流控制设置之类的端口设置:
port . baudRate = 9600
port . parity = . none
port . numberOfStopBits = 1
port . usesRTSCTSFlowControl = true有关更多信息,请参阅“入门指南”。
通过将Data对象传递到send(_:)方法:
let dataToSend = " Hello " . data ( using : . utf8 )
port . send ( dataToSend )要接收数据,您可以实现ORSSerialPortDelegate协议的serialPort(_:, didReceive:)方法,并设置ORSSerialPort实例的委托属性。如下所述,此方法总是在主队列上调用。下面包括一个示例实现:
func serialPort ( _ serialPort : ORSSerialPort , didReceive data : Data ) {
let string = String ( data : data , encoding : . utf8 )
print ( " Got ( string ) from the serial port! " )
} ORSSerialPort包括代表属性和称为ORSSerialPortDelegate的代表协议。一个港口将其委托告知其事件,包括收到数据,端口打开/关闭事件,从系统中删除以及错误。有关更多信息,请参见“入门指南”,或在Orsserialport.h中阅读文档。
ORSSerialPortManager是一个单例类(每个应用程序一个实例),可用于获取可用串行端口的列表。使用经理的availablePorts属性获取端口列表:
let ports = ORSSerialPortManager . shared ( ) . availablePorts可以观察到OrsSerialPortManager的availablePorts ,当USB到串行适配器被插入或删除时,要观察到的关键值可以被通知。此外,当这些事件发生时,它发布了NSnotification。当Mac入睡时,它还将处理关闭的串行端口,并在唤醒时自动重新打开它们。这样可以防止我在串行端口驱动程序中看到的问题,如果将机器入睡时,如果端口打开,可以悬挂的串行端口驱动程序。请注意,使用ORSSerialPortManager是可选的。它提供了一些不错的功能,但是仅发送和接收数据ORSSerialPort必要。
有关OrsSerialPortManager的更多信息,请参阅“入门指南”,或在OrsserialportManager.h中阅读文档。
传入的序列数据将在收到的情况下传递到您的应用程序。像Orsserialport这样的低级库无法了解您发送和接收数据的结构和格式。例如,您可能期待完整的数据包,但会为每个字节接收回调。通常,这需要您维护一个缓冲区,您只需在收到完整的数据包时将其填充的缓冲区。为了消除对传入数据的手动管理和缓冲的需求,OrsSerialPort包括数据包解析API。这是由ORSSerialPacketDescriptor和ORSSerialPort上的相关方法实现的。
有关Orsserialport的数据包解析API的更多信息,请参阅《数据包解析API指南》,在orsserialpacketdescriptor.h中阅读文档,并参见PacketParsingDemo示例应用程序。
通常,应用程序需要将命令发送到设备,然后等待在继续之前接收特定响应。为了简化实施这种情况,OrsSerialPort包括一个请求/响应API。这是由ORSSerialRequest和ORSSerialPort上的相关方法实现的。
例如,从连接设备读取温度的程序可能会执行以下操作:
func readTemperature ( ) {
let command = " $TEMP?; " . data ( using : String . Encoding . ascii ) !
let responseDescriptor = ORSSerialPacketDescriptor ( prefixString : " !TEMP " , suffixString : " ; " , maximumPacketLength : 10 , userInfo : nil )
let request = ORSSerialRequest ( dataToSend : command ,
userInfo : SerialBoardRequestType . readTemperature . rawValue ,
timeoutInterval : 0.5 ,
responseDescriptor : responseDescriptor )
serialPort ? . send ( request )
}
func serialPort ( _ serialPort : ORSSerialPort , didReceiveResponse responseData : Data , to request : ORSSerialRequest ) {
temperature = temperatureFromResponsePacket ( responseData ) !
}
func serialPort ( _ serialPort : ORSSerialPort , requestDidTimeout request : ORSSerialRequest ) {
print ( " Command timed out! " )
}有关OrsSerialPort的请求/响应API的更多信息,请参见“请求/响应API指南”,请阅读OrsSerialRequest.h中的文档,并参见requestResresponsedemo示例应用程序。
Orserialport随附一个名为示例的文件夹,其中包含用于使用Orsserialport的小程序的XCode项目。每个示例都可以在Objective-C和Swift中获得。包括以下示例应用程序:
您可以在Orsserialport Wiki上阅读有关这些示例的更多信息。
非常欢迎对Orsserialport的贡献。但是,鼓励贡献者在开始任何贡献工作之前阅读贡献指南。还请随时打开有关特定贡献的问题的GitHub问题或电子邮件。