OrsSerialPort est une bibliothèque de ports série d'objectifs-C d'objectif-C facile pour macOS. Il est utile pour les programmeurs écrivant des applications Mac Objective-C ou Swift qui communiquent avec des dispositifs externes via un port série (le plus souvent RS-232). Vous pouvez utiliser OrsSerialPort pour écrire des applications qui se connectent aux projets Arduino, aux robots, aux dispositifs d'acquisition de données, aux radios de jambon et à toutes sortes d'autres appareils. L'utilisation d'OrsSerialPort pour ouvrir un port et envoyer des données peut être aussi simple que celle-ci:
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 portOu, dans 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 est publié sous une licence MIT, ce qui signifie que vous êtes libre de l'utiliser dans des projets fermés et open source. Cependant, même dans un projet à source fermée, vous devez inclure une copie publique accessible de l'avis de droit d'auteur d'Orsserialport, que vous pouvez trouver dans le fichier de licence.
Si vous avez des questions, des suggestions ou des contributions à Orsserialport, veuillez me contacter. J'adorerais aussi entendre parler de tous les projets sympas dans lesquels vous l'utilisez.
Cette lecture donne un aperçu de la bibliothèque Orsserialport et est destinée à fournir suffisamment d'informations pour se présenter rapidement. Vous pouvez lire une documentation technique complète pour OrsSerialport sur http://cocoadocs.org/docsets/orsserialport/. Le Wiki Orsserialport contient également une documentation détaillée.
La plupart de l'exemple de code de ce lecture est en Swift. Cependant, OrsSerialPort peut également être facilement utilisé à partir du code objectif-C. Le dossier Exemples contient des versions Swift et Objective-C des quatre exemples de projets. Voir la section des projets d'exemples ci-dessous pour plus d'informations.
Il existe un certain nombre de façons d'ajouter OrsSerialport à votre projet. Vous pouvez utiliser le projet Framework inclus, Carthage, Cocoapods ou le Swift Package Manager. Voir le guide pour installer OrsSerialport pour des instructions détaillées pour chacune de ces méthodes.
Vous pouvez obtenir une instance ORSSerialPort de deux manières. Le plus simple est d'utiliser la propriété availablePorts de Ports ORSSerialPortManager (expliqué ci-dessous). L'autre moyen est d'obtenir une nouvelle instance ORSSerialPort en utilisant le chemin du périphérique BSD du port série:
let port = ORSSerialPort ( path : " /dev/cu.KeySerial1 " ) Notez que vous devez donner ORSSerialPort.init(path:) le chemin complet vers l'appareil, comme indiqué dans l'exemple ci-dessus.
Après avoir une instance de port, vous pouvez l'ouvrir avec la méthode open() . Lorsque vous avez terminé à l'aide du port, fermez-le à l'aide de la méthode close() .
Les paramètres du port tels que le taux de bauds, le nombre de bits d'arrêt, la parité et les paramètres de contrôle de flux peuvent être définis en utilisant les différentes propriétés ORSSerialPort fournit:
port . baudRate = 9600
port . parity = . none
port . numberOfStopBits = 1
port . usesRTSCTSFlowControl = truePour plus d'informations, consultez le Guide de démarrage.
Envoyer des données brutes en passant un objet Data à la méthode send(_:) :
let dataToSend = " Hello " . data ( using : . utf8 )
port . send ( dataToSend ) Pour recevoir des données, vous pouvez implémenter le serialPort(_:, didReceive:) du protocole ORSSerialPortDelegate (_ :, DiDeceive :) et définir la propriété déléguée de l'instance ORSSerialPort . Comme indiqué ci-dessous, cette méthode est toujours appelée dans la file d'attente principale. Un exemple d'implémentation est inclus ci-dessous:
func serialPort ( _ serialPort : ORSSerialPort , didReceive data : Data ) {
let string = String ( data : data , encoding : . utf8 )
print ( " Got ( string ) from the serial port! " )
} ORSSerialPort comprend une propriété déléguée et un protocole délégué appelé ORSSerialPortDelegate . Un port informe son délégué d'événements, y compris la réception des données, les événements ouverts / clôtures, la suppression du système et les erreurs. Pour plus d'informations, consultez le Guide de démarrage ou lisez la documentation dans Orsserialport.h.
ORSSerialPortManager est une classe singleton (une instance par application) qui peut être utilisée pour obtenir une liste des ports série disponibles. Utilisez la propriété availablePorts du gestionnaire pour obtenir une liste de ports:
let ports = ORSSerialPortManager . shared ( ) . availablePorts availablePorts d'OrsserialPortManager peut être observé avec une valeur clé observant à notifier lorsqu'un adaptateur USB vers série est branché ou supprimé. De plus, il affiche des NSNotifications lorsque ces événements se produisent. Il gérera également la fermeture des ports en série ouverts lorsque le Mac s'endort et les réouverture automatiquement sur le sillage. Cela empêche les problèmes que j'ai vus avec les pilotes de port série qui peuvent suspendre si le port est ouvert lors de l'endorance de la machine. Notez que l'utilisation ORSSerialPortManager est facultative. Il offre de belles fonctionnalités, mais seul ORSSerialPort est nécessaire pour simplement envoyer et recevoir des données.
Pour plus d'informations sur OrsSerialPortManager, consultez le Guide de démarrage ou lisez la documentation dans OrsserialportManager.h.
Les données sérieuses entrantes sont fournies à votre demande au fur et à mesure de leur reçue. Une bibliothèque de bas niveau comme Orsserialport n'a aucun moyen de savoir quoi que ce soit sur la structure et le format des données que vous envoyez et recevez. Par exemple, vous pouvez vous attendre à un paquet complet de données, mais recevoir des rappels pour chaque octet. Normalement, cela vous oblige à maintenir un tampon que vous remplissez de données entrantes, ne le traitant que lorsqu'un paquet complet a été reçu. Afin d'éliminer le besoin de gestion manuelle et de mise en mémoire tampon des données entrantes, Orsserialport comprend une API d'analyse de paquets. Ceci est mis en œuvre par ORSSerialPacketDescriptor et méthodes associées sur ORSSerialPort .
Pour plus d'informations sur l'API d'analyse de paquets d'OrsSerialport, consultez le guide de l'API d'analyse des paquets, lisez la documentation dans OrsserialPacketDescriptor.h, et consultez l'application PacketParsingDemo Exemple.
Souvent, les applications souhaiteront envoyer une commande à un appareil, puis attendre pour recevoir une réponse spécifique avant de continuer. Pour faciliter la mise en œuvre de ce type de scénario, OrsSerialPort comprend une API de demande / réponse. Ceci est mis en œuvre par ORSSerialRequest et les méthodes associées sur ORSSerialPort .
Par exemple, un programme qui lisait la température à partir d'un dispositif connecté peut effectuer ce qui suit:
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! " )
}Pour plus d'informations sur l'API de demande / réponse d'OrsSerialport, consultez le guide de l'API de demande / réponse, lisez la documentation dans OrsSerialRequest.h et consultez l'exemple de demande de typeSpedeMo.
Inclus avec OrsSerialPort est un dossier appelé Exemples, contenant des projets Xcode pour de petits programmes démontrant l'utilisation d'OrsSerialport. Chaque exemple est disponible dans l' objectif-C et Swift. L'exemple suivant est inclus:
Vous pouvez en savoir plus sur ces exemples sur le wiki Orsserialport.
Les contributions à Orsserialport sont les bienvenues. Cependant, les contributeurs sont encouragés à lire les directives de contribution avant de commencer à travailler sur toute contribution. N'hésitez pas également à ouvrir un problème GitHub ou un e-mail avec des questions sur des contributions spécifiques.