OrsSerialport ist eine benutzerfreundliche objektive serielle Port-Portbibliothek für macOS. Es ist nützlich, wenn Programmierer objektive C- oder Swift-Mac-Apps schreiben, die über einen seriellen Port mit externen Geräten kommunizieren (am häufigsten RS-232). Sie können OrsSerialport verwenden, um Apps zu schreiben, die eine Verbindung zu Arduino -Projekten, Robotern, Datenerfassungsgeräten, Schinkenfunkgeräten und allen Arten anderer Geräte herstellen. Die Verwendung von OrsSerialport zum Öffnen eines Ports und Senden von Daten kann so einfach sein wie folgt:
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 portOder in 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 wird unter einer MIT -Lizenz veröffentlicht, was bedeutet, dass Sie es sowohl in geschlossenen als auch in Open -Source -Projekten verwenden können. Selbst in einem geschlossenen Quellprojekt müssen Sie jedoch eine öffentlich zugängliche Kopie der Urheberrechtsanzeige von OrsSerialport aufnehmen, die Sie in der Lizenzdatei finden können.
Wenn Sie Fragen zu Vorschlägen für oder Beiträge zu OrsSerialport haben, kontaktieren Sie mich bitte. Ich würde auch gerne über coole Projekte hören, in denen Sie es verwenden.
Dieser Readme bietet einen Überblick über die OrsSerialport -Bibliothek und soll genügend Informationen bereitstellen, um schnell aufzusteigen. Sie können die vollständige technische Dokumentation für OrsSerialport unter http://cocoadocs.org/docsets/orSserialport/ lesen. Das Orsserialport -Wiki enthält auch detaillierte Dokumentation.
Der größte Teil des Beispielcodes in diesem Readme ist in Swift. OrsSerialport kann jedoch auch leicht aus dem Objektiv-C-Code verwendet werden. Der Beispiel-Ordner enthält schnelle und objektive C-Versionen aller vier Beispielprojekte. Weitere Informationen finden Sie im Abschnitt Beispielprojekte unten.
Es gibt eine Reihe von Möglichkeiten, um Ihrem Projekt OrsSerialport hinzuzufügen. Sie können das mitgelieferte Framework -Projekt, Karthago, Cocoapods oder den Swift -Paketmanager verwenden. Ausführliche Anweisungen für jede dieser Methoden finden Sie in der Anleitung zur Installation von OrsSerialport.
Sie können eine ORSSerialPort -Instanz auf zwei Möglichkeiten erhalten. Am einfachsten ist es, ORSSerialPortManager availablePorts Eigenschaft zu verwenden (unten erläutert). Die andere Möglichkeit besteht darin, eine neue ORSSerialPort -Instanz mit dem BSD -Gerätepfad des seriellen Ports zu erhalten:
let port = ORSSerialPort ( path : " /dev/cu.KeySerial1 " ) Beachten Sie, dass Sie ORSSerialPort.init(path:) den vollständigen Pfad zum Gerät geben müssen, wie im obigen Beispiel gezeigt.
Nachdem Sie eine Portinstanz erhalten haben, können Sie sie mit der open() -Methode öffnen. Wenn Sie mit dem Port fertig sind, schließen Sie ihn mit der Methode close() .
Porteinstellungen wie Baud -Rate, Anzahl der Stoppbits, Parität und Durchflusssteuerungseinstellungen können mit den verschiedenen Eigenschaften festgelegt werden, ORSSerialPort enthält:
port . baudRate = 9600
port . parity = . none
port . numberOfStopBits = 1
port . usesRTSCTSFlowControl = trueWeitere Informationen finden Sie im Erstensanleitung.
Senden Sie Rohdaten, indem Sie ein Data an die send(_:) Methode übergeben:
let dataToSend = " Hello " . data ( using : . utf8 )
port . send ( dataToSend ) Um Daten zu erhalten, können Sie das Serialport des ORSSerialPortDelegate Protocol serialPort(_:, didReceive:) implementieren und die Delegate -Eigenschaft der ORSSerialPort -Instanz festlegen. Wie unten erwähnt, wird diese Methode immer in der Hauptwarteschlange aufgerufen. Eine Beispielimplementierung ist unten enthalten:
func serialPort ( _ serialPort : ORSSerialPort , didReceive data : Data ) {
let string = String ( data : data , encoding : . utf8 )
print ( " Got ( string ) from the serial port! " )
} ORSSerialPort umfasst eine Delegierte Eigenschaft und ein Delegierprotokoll namens ORSSerialPortDelegate . Ein Port informiert seinen Delegierten über Ereignisse, einschließlich Erhalt von Daten, Ereignissen öffnen/schließen, das System aus dem System und Fehler. Weitere Informationen finden Sie im Leitfaden für Erste Schritte oder lesen Sie die Dokumentation in OrsSerialport.h.
ORSSerialPortManager ist eine Singleton -Klasse (eine Instanz pro Anwendung), mit der eine Liste der verfügbaren seriellen Ports erhalten werden kann. Verwenden Sie die availablePorts Eigenschaft des Managers, um eine Liste der Ports zu erhalten:
let ports = ORSSerialPortManager . shared ( ) . availablePorts availablePorts von OrsSerialPortManager können beobachtet werden, wobei die Beobachtung von Key -Wert beobachtet werden kann, um benachrichtigt zu werden, wenn ein USB -an -serieller Adapter eingesteckt oder entfernt wird. Zusätzlich veröffentlicht es NSNotifikationen, wenn diese Ereignisse auftreten. Es wird auch das Schließen der offenen seriellen Anschlüsse im Schlafengehen erledigen, wenn der Mac eingeschlafen ist, und sie automatisch bei Wake wiedereröffnen. Dies verhindert Probleme, die ich bei seriellen Port -Treibern gesehen habe, die hängen können, wenn der Anschluss offen bleibt, wenn die Maschine in den Schlaf gelegt wird. Beachten Sie, dass die Verwendung ORSSerialPortManager optional ist. Es bietet einige gute Funktionen, aber nur ORSSerialPort ist erforderlich, um Daten einfach zu senden und zu empfangen.
Weitere Informationen zu OrsSerialPortmanager finden Sie im Erste -Start -Leitfaden oder lesen Sie die Dokumentation in OrsSerialPortmanager.h.
Eingehende serielle Daten werden an Ihre Anwendung geliefert, wie sie empfangen werden. Eine Bibliothek auf niedriger Ebene wie OrsSserialport hat keine Möglichkeit, etwas über die Struktur und das Format der Daten zu wissen, die Sie senden und empfangen. Beispielsweise erwarten Sie möglicherweise ein vollständiges Datenpaket, erhalten jedoch Rückrufe für jedes Byte. Normalerweise müssen Sie einen Puffer beibehalten, den Sie mit eingehenden Daten ausfüllen und ihn nur dann verarbeiten, wenn ein vollständiges Paket empfangen wurde. Um die Notwendigkeit des manuellen Managements und der Pufferung eingehender Daten zu beseitigen, enthält OrsSerialport eine Paket -Parsen -API. Dies wird von ORSSerialPacketDescriptor und zugehörigen Methoden zu ORSSerialPort implementiert.
Weitere Informationen zu OrsSerialports Paket -Parsing -API finden Sie im Paket -Parsen -API -Handbuch finden Sie in der Dokumentation in OrsSerialPacketDescriptor.h und in der PacketParsingDemo -Beispiel -App.
Oft möchten Bewerbungen einen Befehl an ein Gerät senden und dann darauf warten, eine bestimmte Antwort zu erhalten, bevor Sie fortfahren. Um die Implementierung dieser Art von Szenario zu erleichtern, enthält OrsSerialport eine Anfrage/Antwort -API. Dies wird durch ORSSerialRequest und die damit verbundenen Methoden auf ORSSerialPort implementiert.
Beispielsweise kann ein Programm, das die Temperatur von einem angeschlossenen Gerät liest, Folgendes ausführen:
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! " )
}Weitere Informationen zur Anfrage/Antwort -API von OrsSerialport finden Sie im Anforderungs-/Antwort -API -Handbuch finden Sie in der Dokumentation in OrsSerialRequest.h und finden Sie in der RequestResponsedemo -Beispiel -App.
In OrsSerialport enthalten ist ein Ordner mit dem Namen Beispiele mit Xcode -Projekten für kleine Programme, die die Verwendung von OrsSerialport demonstrieren. Jedes Beispiel ist sowohl in Objective C als auch in Swift verfügbar. Die folgenden Beispiel -Apps sind enthalten:
Sie können mehr über diese Beispiele zum OrsSerialport -Wiki lesen.
Beiträge zu OrsSerialport sind sehr willkommen. Mitwirkenden werden jedoch aufgefordert, die Beitragsrichtlinien zu lesen, bevor sie an Beiträgen beginnen. Bitte zögern Sie auch, ein Github -Problem oder eine E -Mail mit Fragen zu bestimmten Beiträgen zu öffnen.