Orssserialport é uma biblioteca de porta serial Objective-C fácil de usar para MacOS. É útil para os programadores que escrevem os aplicativos Mac Objective-C ou Swift que se comunicam com dispositivos externos através de uma porta serial (mais comumente RS-232). Você pode usar o ORSSerialPort para escrever aplicativos que se conectem a projetos Arduino, robôs, dispositivos de aquisição de dados, rádios HAM e todos os tipos de outros dispositivos. O uso do ORSSerialport para abrir uma porta e enviar dados pode ser tão simples quanto 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 portOu, no 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 portOrssserialport é liberado sob uma licença do MIT, o que significa que você está livre para usá -la em projetos de código aberto e de código aberto. No entanto, mesmo em um projeto de código fechado, você deve incluir uma cópia acessível ao público do aviso de direitos autorais da Orsserialport, que pode encontrar no arquivo de licença.
Se você tiver alguma dúvida sobre, sugestões ou contribuições para Orsserialport, entre em contato comigo. Eu também adoraria ouvir sobre quaisquer projetos legais em que você esteja usando.
Este ReadMe fornece uma visão geral da biblioteca OrssSerialPort e deve fornecer informações suficientes para subir e funcionar rapidamente. Você pode ler a documentação técnica completa do ORSSERIALPORT em http://cocoadocs.org/docsets/orserrialport/. O Wiki Orsserialport também contém documentação detalhada.
A maior parte do código de exemplo neste ReadMe está em Swift. No entanto, o ORSSerialport também pode ser facilmente usado no código Objective-C. A pasta Exemplos contém versões Swift e Objective-C de todos os quatro projetos de exemplo. Veja a seção de projetos de exemplo abaixo para obter mais informações.
Existem várias maneiras de adicionar orsserialport ao seu projeto. Você pode usar o projeto da estrutura incluído, Cartago, Cocoapods ou o Swift Package Manager. Consulte o guia para a instalação do ORSSerialPort para obter instruções detalhadas para cada um desses métodos.
Você pode obter uma instância ORSSerialPort de duas maneiras. O mais fácil é usar a propriedade availablePorts da ORSSerialPortManager (explicada abaixo). A outra maneira é obter uma nova instância ORSSerialPort usando o caminho do dispositivo BSD da porta serial:
let port = ORSSerialPort ( path : " /dev/cu.KeySerial1 " ) Observe que você deve dar ORSSerialPort.init(path:) o caminho completo para o dispositivo, conforme mostrado no exemplo acima.
Depois de receber uma instância da porta, você pode abri -la com o método open() . Quando terminar de usar a porta, feche -a usando o método close() .
Configurações de porta como taxa de transmissão, número de bits de parada, paridade e configurações de controle de fluxo podem ser definidas usando as várias propriedades ORSSerialPort fornece:
port . baudRate = 9600
port . parity = . none
port . numberOfStopBits = 1
port . usesRTSCTSFlowControl = truePara mais informações, consulte o guia de início.
Envie dados brutos passando um objeto de Data para o send(_:) método:
let dataToSend = " Hello " . data ( using : . utf8 )
port . send ( dataToSend ) Para receber dados, você pode implementar o serialport do protocolo ORSSerialPortDelegate serialPort(_:, didReceive:) Método e definir a propriedade Delegate da Instância de ORSSerialPort . Como observado abaixo, esse método é sempre chamado na fila principal. Um exemplo de implementação está incluído abaixo:
func serialPort ( _ serialPort : ORSSerialPort , didReceive data : Data ) {
let string = String ( data : data , encoding : . utf8 )
print ( " Got ( string ) from the serial port! " )
} ORSSerialPort inclui uma propriedade delegada e um protocolo de delegado chamado ORSSerialPortDelegate . Uma porta informa seu delegado de eventos, incluindo o recebimento de dados, eventos de abertura/fechamento da porta, remoção do sistema e erros. Para obter mais informações, consulte o guia de início ou leia a documentação em orsserialport.h.
ORSSerialPortManager é uma classe singleton (uma instância por aplicativo) que pode ser usada para obter uma lista de portas seriais disponíveis. Use a propriedade availablePorts do gerente para obter uma lista de portas:
let ports = ORSSerialPortManager . shared ( ) . availablePorts availablePorts do OrssSerialPortManager podem ser observadas com o valor da chave observando a ser notificado quando um adaptador USB para serial é conectado ou removido. Além disso, ele publica NSNotificações quando esses eventos ocorrem. Ele também lidará com o fechamento de portas seriais abertas quando o Mac dormir e reabrirá -las automaticamente ao despertar. Isso evita problemas que eu já vi com drivers de porta serial que podem pendurar se a porta for deixada aberta ao colocar a máquina para dormir. Observe que o uso ORSSerialPortManager é opcional. Ele fornece uma boa funcionalidade, mas apenas ORSSerialPort é necessário para simplesmente enviar e receber dados.
Para obter mais informações sobre o ORSSerialPortManager, consulte o guia de início ou leia a documentação em orsserialportManager.h.
Os dados seriais recebidos são entregues ao seu aplicativo conforme o recebimento. Uma biblioteca de baixo nível como o ORSSerialport não tem como saber nada sobre a estrutura e o formato dos dados que você está enviando e recebendo. Por exemplo, você pode estar esperando um pacote completo de dados, mas receba retornos de chamada para cada byte. Normalmente, isso exige que você mantenha um buffer que você preencha com dados recebidos, processando -os apenas quando um pacote completo foi recebido. Para eliminar a necessidade de gerenciamento manual e buffer de dados recebidos, o ORSSerialport inclui uma API de análise de pacotes. Isso é implementado pelo ORSSerialPacketDescriptor e métodos associados no ORSSerialPort .
Para obter mais informações sobre a API de análise de pacotes da ORSSERIALPORT, consulte o Guia da API de análise de pacotes, leia a documentação no OrssSerialPacketDescriptor.h e consulte o aplicativo PacketParSingDemo Exemplo.
Freqüentemente, os aplicativos desejam enviar um comando para um dispositivo e aguarde para receber uma resposta específica antes de continuar. Para facilitar a implementação desse tipo de cenário, o ORSSerialport inclui uma API de solicitação/resposta. Isso é implementado pelo ORSSerialRequest e métodos associados no ORSSerialPort .
Por exemplo, um programa que leu a temperatura de um dispositivo conectado pode fazer o seguinte:
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 obter mais informações sobre a API de solicitação/resposta do ORSSERIALPORT, consulte o Guia da API de solicitação/resposta, leia a documentação no aplicativo orssserialrequest.h e consulte o aplicativo RequestResponsedemo.
Incluído no ORSSerialPort está uma pasta chamada exemplos, contendo projetos Xcode para pequenos programas demonstrando o uso do ORSSerialPort. Cada exemplo está disponível no Objective-C e Swift. Os aplicativos de exemplo a seguir estão incluídos:
Você pode ler mais sobre esses exemplos no Wiki Orssserialport.
As contribuições para o ORSSerialport são muito bem -vindas. No entanto, os colaboradores são incentivados a ler as diretrizes de contribuição antes de começar a trabalhar em quaisquer contribuições. Sinta -se à vontade para abrir um problema do GitHub ou e -mail com perguntas sobre contribuições específicas.