ORSSERIALPORT는 MACOS 용 사용하기 쉬운 Objective-C 직렬 포트 라이브러리입니다. 직렬 포트 (가장 일반적으로 RS-232)를 통해 외부 장치와 통신하는 Objective-C 또는 Swift MAC 앱을 작성하는 프로그래머에게 유용합니다. 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 라이브러리의 개요를 제공하며 빠르게 일어나고 실행하기에 충분한 정보를 제공하기위한 것입니다. http://cocoadocs.org/docsets/orsserialport/에서 Orsserialport에 대한 전체 기술 문서를 읽을 수 있습니다. Orsserialport Wiki에는 자세한 문서도 포함되어 있습니다.
이 readme의 대부분의 예제 코드는 신속합니다. 그러나 ORSSERIALPORT는 Objective-C 코드에서 쉽게 사용할 수 있습니다. 예제 폴더에는 네 가지 예제 프로젝트의 신속하고 객관적인 C 버전이 포함되어 있습니다. 자세한 내용은 아래 예제 프로젝트 섹션을 참조하십시오.
프로젝트에 OrsSerialport를 추가하는 방법에는 여러 가지가 있습니다. 포함 된 프레임 워크 프로젝트, Carthage, Cocoapods 또는 Swift 패키지 관리자를 사용할 수 있습니다. 이러한 각 방법에 대한 자세한 지침은 Orsserialport 설치 안내서를 참조하십시오.
두 가지 방법 중 하나를 ORSSerialPort 인스턴스를 얻을 수 있습니다. 가장 쉬운 것은 ORSSerialPortManager 의 availablePorts 속성을 사용하는 것입니다 (아래 설명). 다른 방법은 직렬 포트의 BSD 장치 경로를 사용하여 새로운 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:) 메소드를 구현하고 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 사용 가능한 일련 포트 목록을 얻는 데 사용할 수있는 싱글 톤 클래스 (응용 프로그램 당 1 인스턴스)입니다. 관리자의 availablePorts 속성을 사용하여 포트 목록을 얻으십시오.
let ports = ORSSerialPortManager . shared ( ) . availablePorts ORSSERIALPORTMANAGER의 availablePorts USB에서 직렬 어댑터를 연결하거나 제거 할 때 알림을 받도록 주요 값을 관찰하여 관찰 할 수 있습니다. 또한 이러한 사건이 발생하면 NSNotifications를 게시합니다. 또한 Mac이 잠들 때 마감 된 직렬 포트를 폐쇄하고 자동으로 재개 할 때 깨어납니다. 이것은 기계를 잠들 때 포트를 열어두면 매달릴 수있는 직렬 포트 드라이버에서 본 문제를 방지합니다. ORSSerialPortManager 사용하는 것은 선택 사항입니다. 그것은 몇 가지 좋은 기능을 제공하지만 단순히 데이터를 보내고 받으려면 ORSSerialPort 만 필요합니다.
OrsserialportManager에 대한 자세한 내용은 시작 안내서를 참조하거나 OrsserialportManager.h의 문서를 읽으십시오.
들어오는 일련의 데이터는 수신대로 응용 프로그램에 전달됩니다. Orsserialport와 같은 저수준 라이브러리는 보내고받는 데이터의 구조와 형식에 대해 아무것도 알 수 없습니다. 예를 들어, 완전한 데이터 패킷을 기대할 수 있지만 각 바이트에 대해 콜백을받습니다. 일반적으로 수신 데이터로 채우는 버퍼를 유지해야하며 전체 패킷을 수신 한 경우에만 처리해야합니다. 들어오는 데이터의 수동 관리 및 버퍼링이 필요하지 않도록 ORSERIALPORT에는 패킷 구문 분석 API가 포함됩니다. 이것은 ORSSerialPacketDescriptor 와 ORSSerialPort 의 관련 메소드에 의해 구현됩니다.
ORSERIALPORT의 패킷 구문 분석 API에 대한 자세한 내용은 패킷 구문 분석 API 안내서를 참조하고 OrsSerialPacketDescriptor.h의 문서를 읽고 PacketParsingDemo 예제 앱을 참조하십시오.
종종 응용 프로그램은 장치에 명령을 보내고 싶고 계속하기 전에 특정 응답을 받기를 기다립니다. 이러한 종류의 시나리오를 쉽게 구현하기 위해 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! " )
}ORSERIALPORT의 요청/응답 API에 대한 자세한 내용은 요청/응답 API 안내서를 참조하고 OrsSerialRequest.h의 문서를 읽고 RequestresteDemo 예제 앱을 참조하십시오.
Orsserialport에는 Orsserialport 사용을 보여주는 소규모 프로그램을위한 Xcode 프로젝트가 포함 된 예라고하는 폴더가 포함되어 있습니다. 각 예제는 Objective-C와 Swift 에서 사용할 수 있습니다. 다음 예제 앱이 포함되어 있습니다.
Orsserialport Wiki 에서이 예에 대한 자세한 내용을 읽을 수 있습니다.
Orsserialport에 대한 기여는 매우 환영합니다. 그러나 기부자들은 기부금에 대한 작업을 시작하기 전에 기여 지침을 읽는 것이 좋습니다. 또한 특정 기부금에 대한 질문이있는 GitHub 문제 또는 이메일을 자유롭게 열어주십시오.