ORSSerialport es una biblioteca de puerto serial Objective-C fácil de usar para MacOS. Es útil para los programadores que escriben aplicaciones Objective-C o Swift Mac que se comunican con dispositivos externos a través de un puerto serie (más comúnmente RS-232). Puede usar Orserialport para escribir aplicaciones que se conecten a proyectos Arduino, robots, dispositivos de adquisición de datos, radios de jamón y todo tipo de otros dispositivos. El uso de Orserialport para abrir un puerto y enviar datos puede ser tan simple como este:
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 portO, en 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 se libera bajo una licencia MIT, lo que significa que puede usarla en proyectos de código abierto y de código abierto. Sin embargo, incluso en un proyecto de origen cerrado, debe incluir una copia pública accesible del aviso de derechos de autor de Orserialport, que puede encontrar en el archivo de licencia.
Si tiene alguna pregunta, sugerencias o contribuciones a Orserialport, contácteme. También me encantaría saber sobre cualquier proyecto genial en los que lo esté utilizando.
Este ReadMe proporciona una visión general de la Biblioteca Orserialport y está destinada a proporcionar suficiente información para ponerse en funcionamiento rápidamente. Puede leer la documentación técnica completa para OrsSerialport en http://cocoadocs.org/docsets/orsserialport/. El Wiki de Orserialport también contiene documentación detallada.
La mayor parte del código de ejemplo en este ReadMe está en Swift. Sin embargo, Orserialport también se puede usar fácilmente desde el código Objective-C. La carpeta de ejemplos contiene versiones rápidas y objetivas de los cuatro proyectos de ejemplo. Consulte la sección de proyectos de ejemplo a continuación para obtener más información.
Hay varias formas de agregar Orserialport a su proyecto. Puede usar el proyecto de marco incluido, Carthage, Cocoapods o el Swift Package Manager. Consulte la guía para instalar Orserialport para obtener instrucciones detalladas para cada uno de estos métodos.
Puede obtener una instancia ORSSerialPort de dos maneras. Lo más fácil es utilizar la propiedad de availablePorts de ORSSerialPortManager (explicada a continuación). La otra forma es obtener una nueva instancia ORSSerialPort utilizando la ruta del dispositivo BSD del puerto serie:
let port = ORSSerialPort ( path : " /dev/cu.KeySerial1 " ) Tenga en cuenta que debe dar ORSSerialPort.init(path:) la ruta completa al dispositivo, como se muestra en el ejemplo anterior.
Después de tener una instancia portuaria, puede abrirla con el método open() . Cuando haya terminado de usar el puerto, cierre el método close() .
La configuración del puerto, como la velocidad de baudios, el número de bits de parada, la paridad y la configuración de control de flujo, se pueden establecer utilizando las diversas propiedades que proporciona ORSSerialPort :
port . baudRate = 9600
port . parity = . none
port . numberOfStopBits = 1
port . usesRTSCTSFlowControl = truePara obtener más información, consulte la Guía de Getting Start.
Envíe datos sin procesar pasando un objeto Data al método send(_:)
let dataToSend = " Hello " . data ( using : . utf8 )
port . send ( dataToSend ) Para recibir datos, puede implementar el Método ORSSerialPortDelegate Protocole serialPort(_:, didReceive:) ORSSerialPort Como se indica a continuación, este método siempre se llama en la cola principal. A continuación se incluye una implementación de ejemplo:
func serialPort ( _ serialPort : ORSSerialPort , didReceive data : Data ) {
let string = String ( data : data , encoding : . utf8 )
print ( " Got ( string ) from the serial port! " )
} ORSSerialPort incluye una propiedad delegada y un protocolo delegado llamado ORSSerialPortDelegate . Un puerto informa a su delegado de eventos, incluida la recepción de datos, los eventos de apertura/cierre del puerto, la eliminación del sistema y los errores. Para obtener más información, consulte la Guía de inicio o lea la documentación en Orserialport.h.
ORSSerialPortManager es una clase Singleton (una instancia por aplicación) que se puede utilizar para obtener una lista de los puertos serie disponibles. Utilice la propiedad availablePorts del gerente para obtener una lista de puertos:
let ports = ORSSerialPortManager . shared ( ) . availablePorts availablePorts de OrserialPortManager se pueden observar con el valor clave de la observación para ser notificados cuando un adaptador USB a serial está conectado o eliminado. Además, publica nsnotificaciones cuando ocurren estos eventos. También manejará el cierre de puertos seriales abiertos cuando la Mac se duerma y los reabra automáticamente en la vigilia. Esto evita los problemas que he visto con los controladores de puertos seriales que pueden colgar si el puerto se deja abierto al poner la máquina a dormir. Tenga en cuenta que usar ORSSerialPortManager es opcional. Proporciona una buena funcionalidad, pero solo es necesario ORSSerialPort para simplemente enviar y recibir datos.
Para obtener más información sobre OrserialPortManager, consulte la Guía Getting Start o lea la documentación en OrsserialPortManager.h.
Los datos en serie entrantes se entregan a su aplicación tal como se recibe. Una biblioteca de bajo nivel como Orserialport no tiene forma de saber nada sobre la estructura y el formato de los datos que está enviando y recibiendo. Por ejemplo, puede estar esperando un paquete completo de datos, pero recibir devoluciones de llamada para cada byte. Normalmente, esto requiere que mantenga un búfer que llene con datos entrantes, solo procesándolo cuando se ha recibido un paquete completo. Para eliminar la necesidad de la gestión manual y el almacenamiento en búfer de los datos entrantes, Orserialport incluye una API de análisis de paquetes. Esto es implementado por ORSSerialPacketDescriptor y métodos asociados en ORSSerialPort .
Para obtener más información sobre la API de análisis de paquetes de Orserialport, consulte la Guía de la API de análisis de paquetes, lea la documentación en OrserialPacketDescriptor.h, y consulte la aplicación de ejemplo PacketParsingDemo.
A menudo, las aplicaciones querrán enviar un comando a un dispositivo, luego esperar para recibir una respuesta específica antes de continuar. Para aliviar la implementación de este tipo de escenario, Orserialport incluye una API de solicitud/respuesta. Esto es implementado por ORSSerialRequest y métodos asociados en ORSSerialPort .
Por ejemplo, un programa que lee la temperatura de un dispositivo conectado podría hacer lo siguiente:
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! " )
}Para obtener más información sobre la API de solicitud/respuesta de Orserialport, consulte la Guía de API de solicitud/respuesta, lea la documentación en OrsserialRequest.h, y consulte la aplicación de ejemplo de SolicingResponseDeMo.
Se incluye con Orserialport una carpeta llamada ejemplos, que contiene proyectos de XCode para pequeños programas que demuestran el uso de Orserialport. Cada ejemplo está disponible en Objective-C y Swift. Se incluyen las siguientes aplicaciones de ejemplo:
Puede leer más sobre estos ejemplos en el Wiki de Orserialport.
Las contribuciones a Orserialport son muy bienvenidas. Sin embargo, se alienta a los contribuyentes a leer las pautas de contribución antes de comenzar a trabajar en cualquier contribución. También no dude en abrir un problema o correo electrónico de GitHub con preguntas sobre contribuciones específicas.