OrsserialPort-это простая в использовании последовательные порты объективных Coble-C для MacOS. Это полезно для программистов, пишущих приложения Objective-C или Swift Mac, которые общаются с внешними устройствами через последовательный порт (чаще всего RS-232). Вы можете использовать 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Или в объектив-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 и предназначен для предоставления достаточного количества информации, чтобы быстро работать. Вы можете прочитать полную техническую документацию для OrsserialPort на http://cocoadocs.org/docsets/orsserialport/. Wiki Orsserialport также содержит подробную документацию.
Большая часть примера кода в этом Readme находится в Swift. Однако OrsserialPort также может быть легко использован из кода Objective-C. Папка «Примеры» содержит Swift и Objective-C-версии всех четырех примеров проектов. См. Раздел «Пример проектов» ниже для получения дополнительной информации.
Есть несколько способов добавить OrsserialPort в ваш проект. Вы можете использовать прилагаемый фреймворк -проект, Карфаген, кокопод или менеджер пакетов Swift. См. Руководство по установке OrsserialPort для подробных инструкций для каждого из этих методов.
Вы можете получить экземпляр ORSSerialPort по любому из двух способов. Самым простым является использование availablePorts ORSSerialPortManager (объяснено ниже). Другой способ - получить новый экземпляр 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Для получения дополнительной информации см. Руководство по началу работы.
Отправить необработанные данные, передавая объект Data в send(_:) Метод:
let dataToSend = " Hello " . data ( using : . utf8 )
port . send ( dataToSend ) Для получения данных вы можете реализовать серийный порт ORSSerialPortDelegate serialPort(_:, didReceive:) и установить свойство делегата Extance ORSSerialPort . Как отмечено ниже, этот метод всегда называется в основной очереди. Реализация примера включена ниже:
func serialPort ( _ serialPort : ORSSerialPort , didReceive data : Data ) {
let string = String ( data : data , encoding : . utf8 )
print ( " Got ( string ) from the serial port! " )
} ORSSerialPort включает в себя имущество делегата и протокол делегатов под названием ORSSerialPortDelegate . Порт сообщает своему делегату о событиях, включая получение данных, события открытия/закрытия порта, удаление системы и ошибки. Для получения дополнительной информации см. Руководство по началу работы или прочитайте документацию в orsserialport.h.
ORSSerialPortManager - это односложенный класс (один экземпляр для приложения), который можно использовать для получения списка доступных последовательных портов. Используйте свойство Manager's availablePorts , чтобы получить список портов:
let ports = ORSSerialPortManager . shared ( ) . availablePorts availablePorts OrsserialPortManager можно наблюдать с наблюдением за значением ключа, которое будет уведомлено, когда USB -последовательный адаптер подключен или удаляется. Кроме того, он публикует NSNotifications, когда эти события происходят. Он также будет обрабатывать закрытие открытых последовательных портов, когда Mac будет спать, и автоматически открывает их на Wake. Это предотвращает проблемы, которые я видел с драйверами последовательных портов, которые могут висеть, если порт остается открытым при укладке машины. Обратите внимание, что использование ORSSerialPortManager не является обязательным. Он обеспечивает некоторую хорошую функциональность, но только ORSSerialPort необходим для простого отправки и получения данных.
Для получения дополнительной информации об OrsserialPortManager, см. Руководство по началу работы или прочитайте документацию в OrsserialPortManager.H.
Входящие последовательные данные доставляются в вашу приложение по мере его получения. Библиотека низкого уровня, такая как OrsserialPort, не может ничего узнать о структуре и формате данных, которые вы отправляете и получаете. Например, вы можете ожидать полного пакета данных, но получить обратные вызовы для каждого байта. Обычно это требует от вас поддерживать буфер, который вы заполняете входящими данными, обрабатывая его только после получения полного пакета. Чтобы устранить необходимость ручного управления и буферизации входящих данных, Orsserialport включает API пакета. Это реализовано ORSSerialPacketDescriptor и связанными методами на ORSSerialPort .
Для получения дополнительной информации об API пакета Orsserialport, см.
Часто приложения захотят отправить команду на устройство, а затем подождать, чтобы получить конкретный ответ, прежде чем продолжить. Чтобы облегчить реализацию такого рода сценария, Orsserialport включает API запроса/ответа. Это реализовано ORSSerialRequest и связанными методами на ORSSerialPort .
Например, программа, которая считывает температуру с подключенного устройства, может сделать следующее:
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! " )
}Для получения дополнительной информации об API запроса/ответа Orsserialport см. В Руководстве по API запроса/ответа, прочитайте документацию в orsserialrequest.h и см. Приложение примера RequestResponsedemo.
В OrsserialPort входит папка, называемая примерами, содержащей проекты XCode для небольших программ, демонстрирующих использование OrsserialPort. Каждый пример доступен как в объективном, так и в Swift. Следующие примеры приложения включены:
Вы можете прочитать больше об этих примерах на Wiki Orsserialport.
Вклад в Orsserialport очень приветствуются. Тем не менее, участникам рекомендуется прочитать руководящие принципы взноса, прежде чем начать работу над любыми вкладами. Пожалуйста, также не стесняйтесь открывать проблему GitHub или электронное письмо с вопросами о конкретных вкладах.