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還包含詳細的文檔。
此讀取中的大多數示例代碼都在迅速。但是,也可以從Objective-C代碼中輕鬆使用OrsSerialPort。這些示例文件夾包含所有四個示例項目的迅速和目標-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問題或電子郵件。