Orsserialport เป็นไลบรารีพอร์ตอนุกรม Objective-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หรือใน 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 ได้รับการปล่อยตัวภายใต้ใบอนุญาต MIT ซึ่งหมายความว่าคุณมีอิสระที่จะใช้งานได้ทั้งในโครงการปิดและโอเพนซอร์ส อย่างไรก็ตามแม้ในโครงการปิดคุณจะต้องมีสำเนาประกาศลิขสิทธิ์ของ Orsserialport ที่เข้าถึงได้สาธารณะซึ่งคุณสามารถค้นหาได้ในไฟล์ใบอนุญาต
หากคุณมีคำถามใด ๆ เกี่ยวกับคำแนะนำสำหรับหรือการมีส่วนร่วมกับ Orsserialport โปรดติดต่อฉัน ฉันชอบที่จะได้ยินเกี่ยวกับโครงการเจ๋ง ๆ ที่คุณใช้
readme นี้ให้ภาพรวมของไลบรารี Orsserialport และมีความหมายที่จะให้ข้อมูลเพียงพอที่จะดำเนินการและทำงานได้อย่างรวดเร็ว คุณสามารถอ่านเอกสารทางเทคนิคที่สมบูรณ์สำหรับ orsserialport บน http://cocoadocs.org/docsets/orsserialport/ Wiki Orsserialport ยังมีเอกสารรายละเอียด
รหัสตัวอย่างส่วนใหญ่ใน readMe นี้อยู่ใน Swift อย่างไรก็ตาม Orsserialport ยังสามารถใช้งานได้ง่ายจากรหัสวัตถุประสงค์ C โฟลเดอร์ตัวอย่างมีรุ่น Swift และ Objective-C ของโครงการตัวอย่างทั้งสี่โครงการ ดูส่วนตัวอย่างโครงการด้านล่างสำหรับข้อมูลเพิ่มเติม
มีหลายวิธีในการเพิ่ม orsserialport ในโครงการของคุณ คุณสามารถใช้โครงการเฟรมเวิร์กที่รวมอยู่ในคาร์เธจ Cocoapods หรือ Swift Package Manager ดูคำแนะนำในการติดตั้ง orsserialport สำหรับคำแนะนำโดยละเอียดสำหรับแต่ละวิธีเหล่านี้
คุณสามารถรับอินสแตนซ์ ORSSerialPort ได้สองวิธี วิธีที่ง่ายที่สุดคือใช้คุณสมบัติ availablePorts ของ ORSSerialPortManager (อธิบายด้านล่าง) อีกวิธีหนึ่งคือการได้รับอินสแตนซ์ ORSSerialPort ใหม่โดยใช้เส้นทางอุปกรณ์ BSD ของพอร์ตอนุกรม:
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 ) ในการรับข้อมูลคุณสามารถใช้ SerialPort ของโปรโตคอล 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 เป็นคลาส Singleton (หนึ่งอินสแตนซ์ต่อแอปพลิเคชัน) ที่สามารถใช้เพื่อรับรายการพอร์ตอนุกรมที่มีอยู่ ใช้คุณสมบัติ availablePorts ของผู้จัดการเพื่อรับรายการพอร์ต:
let ports = ORSSerialPortManager . shared ( ) . availablePorts availablePorts ของ OrsserialportManager สามารถสังเกตได้ด้วยค่าคีย์ที่สังเกตได้ว่าจะได้รับแจ้งเมื่อเสียบอะแดปเตอร์อนุกรมหรือลบออก นอกจากนี้ยังโพสต์ nsnotifications เมื่อเหตุการณ์เหล่านี้เกิดขึ้น นอกจากนี้ยังจะจัดการกับการปิดพอร์ตอนุกรมแบบเปิดเมื่อ Mac เข้าสู่การนอนหลับและเปิดใหม่โดยอัตโนมัติเมื่อตื่น สิ่งนี้จะช่วยป้องกันปัญหาที่ฉันเคยเห็นด้วยไดรเวอร์พอร์ตอนุกรมที่สามารถแขวนได้หากพอร์ตเปิดทิ้งไว้เมื่อวางเครื่องนอน โปรดทราบว่าการใช้ ORSSerialPortManager เป็นทางเลือก มันมีฟังก์ชั่นที่ดีบางอย่าง แต่มีเพียง ORSSerialPort เท่านั้นที่จำเป็นในการส่งและรับข้อมูล
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ orsserialportmanager ดูคู่มือการเริ่มต้นใช้งานหรืออ่านเอกสารใน orsserialportmanager.h
ข้อมูลอนุกรมที่เข้ามาจะถูกส่งไปยังแอปพลิเคชันของคุณตามที่ได้รับ ห้องสมุดระดับต่ำเช่น Orsserialport ไม่มีทางรู้อะไรเกี่ยวกับโครงสร้างและรูปแบบของข้อมูลที่คุณส่งและรับ ตัวอย่างเช่นคุณอาจคาดหวังว่าจะมีแพ็คเก็ตข้อมูลที่สมบูรณ์ แต่ได้รับการเรียกกลับสำหรับแต่ละไบต์ โดยปกติแล้วคุณจะต้องรักษาบัฟเฟอร์ที่คุณเติมด้วยข้อมูลขาเข้าเพียงประมวลผลเฉพาะเมื่อได้รับแพ็กเก็ตที่สมบูรณ์ เพื่อขจัดความจำเป็นในการจัดการด้วยตนเองและการบัฟเฟอร์ของข้อมูลที่เข้ามา Orsserialport รวมถึง Packet Parsing API สิ่งนี้ถูกนำมาใช้โดย ORSSerialPacketDescriptor และวิธีการที่เกี่ยวข้องกับ ORSSerialPort
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Packet Parsing Parsing API ของ Orsserialport โปรดดูคู่มือ API Packet Parsing 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! " )
}สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ API คำขอ/การตอบกลับของ Orsserialport โปรดดูคู่มือการร้องขอ/ตอบสนอง API อ่านเอกสารใน orsserialrequest.h และดูแอปตัวอย่างคำขอ RequestResponsedemo
รวมอยู่ใน Orsserialport เป็นโฟลเดอร์ที่เรียกว่าตัวอย่างที่มีโครงการ XCode สำหรับโปรแกรมขนาดเล็กที่แสดงให้เห็นถึงการใช้ Orsserialport แต่ละตัวอย่างมีอยู่ ทั้ง ใน Objective-C และ Swift แอพตัวอย่างต่อไปนี้รวมอยู่ด้วย:
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับตัวอย่างเหล่านี้ใน Wiki Orsserialport
การมีส่วนร่วมใน Orsserialport ยินดีเป็นอย่างยิ่ง อย่างไรก็ตามผู้มีส่วนร่วมได้รับการสนับสนุนให้อ่านแนวทางการบริจาคก่อนเริ่มงานในการมีส่วนร่วมใด ๆ โปรดอย่าลังเลที่จะเปิดปัญหา GitHub หรืออีเมลพร้อมคำถามเกี่ยวกับการมีส่วนร่วมเฉพาะ