OrsserialPortは、MacOSの使いやすいObjective-Cシリアルポートライブラリです。これは、シリアルポート(最も一般的にRS-232)を介して外部デバイスと通信するObjective-CまたはSwift Macアプリを作成するプログラマに役立ちます。 OrsserialPortを使用して、Arduinoプロジェクト、ロボット、データ収集デバイス、ハムラジオ、その他のあらゆる種類のデバイスに接続するアプリを作成できます。 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の提案、または貢献について質問がある場合は、私に連絡してください。また、あなたがそれを使用しているクールなプロジェクトについても聞きたいです。
このREADMEは、OrsserialPort Libraryの概要を提供し、迅速に稼働するのに十分な情報を提供することを目的としています。 http://cocoadocs.org/docsets/orsserialport/でOrsserialportの完全な技術文書を読むことができます。 OrsserialPort Wikiには、詳細なドキュメントも含まれています。
このREADMEの例のほとんどのコードはSwiftです。ただし、OrsserialPortはObjective-Cコードからも簡単に使用できます。例フォルダーには、4つの例プロジェクトすべてのSwiftおよびObjective-Cバージョンが含まれています。詳細については、以下のプロジェクトの例を参照してください。
OrsserialPortをプロジェクトに追加する方法はいくつかあります。付属のフレームワークプロジェクト、カルタゴ、ココアポッド、またはSwiftパッケージマネージャーを使用できます。これらの各方法の詳細な手順については、OrsserialPortのインストールガイドを参照してください。
2つの方法のいずれかのいずれかのいずれかのORSSerialPortインスタンスを入手できます。最も簡単なのは、 ORSSerialPortManagerのavailablePortsプロパティを使用することです(以下で説明します)。もう1つの方法は、シリアルポートの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詳細については、Getting Guideを参照してください。
Dataオブジェクトをsend(_:)メソッドに渡すことにより、生データを送信します:
let dataToSend = " Hello " . data ( using : . utf8 )
port . send ( dataToSend )データを受信するには、 ORSSerialPortDelegate ProtocolのserialPort(_:, didReceive:)メソッドを実装し、 ORSSerialPort InstanceのDelegateプロパティを設定できます。以下に示すように、この方法は常にメインキューで呼び出されます。実装の例を以下に示します。
func serialPort ( _ serialPort : ORSSerialPort , didReceive data : Data ) {
let string = String ( data : data , encoding : . utf8 )
print ( " Got ( string ) from the serial port! " )
} ORSSerialPortは、代表財産とORSSerialPortDelegateと呼ばれる代表的なプロトコルが含まれています。ポートは、データの受領、ポートオープン/クローズイベント、システムからの削除、エラーなどのイベントを代表者に通知します。詳細については、Getting Guide Guideを参照するか、orsserialport.hのドキュメントをお読みください。
ORSSerialPortManager 、利用可能なシリアルポートのリストを取得するために使用できるSingletonクラス(アプリケーションごとに1つのインスタンス)です。マネージャーのavailablePortsプロパティを使用して、ポートのリストを取得します。
let ports = ORSSerialPortManager . shared ( ) . availablePorts orsserialportmanagerのavailablePorts 、USBからシリアルアダプターへの接続または削除された場合に通知するキー値を観察することで観察できます。さらに、これらのイベントが発生したときにnsnotificationを投稿します。また、Macがスリープ状態になったときに開いたシリアルポートの閉鎖を処理し、Wakeで自動的に再開します。これにより、シリアルポートドライバーで見た問題が防止されます。これは、マシンを寝かせるときにポートが開いたままにしておくことができる場合に吊るすことができます。 ORSSerialPortManagerの使用はオプションであることに注意してください。いくつかの優れた機能を提供しますが、データを送信して受信するにはORSSerialPortのみが必要です。
OrsserialPortmanagerの詳細については、Getting Guideを参照するか、OrsserialPortmanager.Hのドキュメントをご覧ください。
着信シリアルデータは、受信されるとアプリケーションに配信されます。 OrsserialPortのような低レベルのライブラリには、送信および受信しているデータの構造と形式について何も知る方法がありません。たとえば、データの完全なパケットを期待しているかもしれませんが、各バイトのコールバックを受信します。通常、これには、着信データで満たされたバッファーを維持する必要があり、完全なパケットが受信された場合にのみ処理する必要があります。手動管理の必要性を排除し、着信データのバッファリングを排除するために、OrsserialPortにはパケット解析APIが含まれています。これは、 ORSSerialPortのORSSerialPacketDescriptorおよびAssociated Methodによって実装されています。
OrsserialPortのパケット解析APIの詳細については、パケット解析APIガイドを参照して、orsserialPacketdescriptor.hのドキュメントを読んで、packetparsingdemoの例アプリを参照してください。
多くの場合、アプリケーションはデバイスにコマンドを送信し、継続する前に特定の応答を受信するのを待ちます。この種のシナリオの実装を容易にするために、OrsserialPortにはリクエスト/応答APIが含まれています。これは、 ORSSerialPortのORSSerialRequestと関連する方法によって実装されています。
たとえば、接続されたデバイスから温度を読み取るプログラムは、次のことを行う場合があります。
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の詳細については、Request/Response APIガイドを参照して、orsserialRequest.hのドキュメントをお読みください。リクエストResponsededemoの例アプリを参照してください。
OrsserialPortには、OrsserialPortの使用を示す小さなプログラム用のXcodeプロジェクトを含むExamplesというフォルダーが含まれています。各例は、Objective-CとSwiftの両方で使用できます。次の例が含まれています。
これらの例の詳細については、OrsserialPort Wikiをご覧ください。
OrsserialPortへの貢献は大歓迎です。ただし、貢献者は、貢献の作業を開始する前に、貢献ガイドラインを読むことをお勧めします。また、GitHubの問題を自由に開いたり、特定の貢献に関する質問をメールで送信してください。