Orsserialport adalah pustaka port serial objektif-C yang mudah digunakan untuk macOS. Ini berguna untuk pemrogram yang menulis aplikasi Mac Objective-C atau Swift yang berkomunikasi dengan perangkat eksternal melalui port serial (paling umum RS-232). Anda dapat menggunakan orsserialport untuk menulis aplikasi yang terhubung ke proyek Arduino, robot, perangkat akuisisi data, radio ham, dan semua jenis perangkat lain. Menggunakan orsserialport untuk membuka port dan mengirim data bisa sesederhana ini:
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 portAtau, di 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 dirilis di bawah lisensi MIT, yang berarti Anda bebas menggunakannya dalam proyek open source dan open source. Namun, bahkan dalam proyek sumber tertutup, Anda harus memasukkan salinan pemberitahuan hak cipta Orsserialport yang dapat diakses secara publik, yang dapat Anda temukan dalam file lisensi.
Jika Anda memiliki pertanyaan tentang, saran untuk, atau kontribusi ke Orsserialport, silakan hubungi saya. Saya juga ingin mendengar tentang proyek keren yang Anda gunakan.
ReadMe ini memberikan gambaran umum perpustakaan Orsserialport dan dimaksudkan untuk memberikan informasi yang cukup untuk bangun dan berjalan dengan cepat. Anda dapat membaca dokumentasi teknis lengkap untuk Orsserialport di http://cocoadocs.org/docsets/orsserialport/. Wiki Orsserialport juga berisi dokumentasi terperinci.
Sebagian besar kode contoh dalam readme ini dalam Swift. Namun, orsserialport juga dapat dengan mudah digunakan dari kode Objective-C. Folder Contoh berisi versi Swift dan Objective-C dari keempat contoh proyek. Lihat bagian Contoh Proyek di bawah untuk informasi lebih lanjut.
Ada sejumlah cara untuk menambahkan orsserialport ke proyek Anda. Anda dapat menggunakan proyek kerangka kerja yang disertakan, Carthage, Cocoapods, atau Swift Package Manager. Lihat panduan untuk menginstal orsserialport untuk instruksi terperinci untuk masing -masing metode ini.
Anda bisa mendapatkan instance ORSSerialPort salah satu dari dua cara. Yang termudah adalah menggunakan properti ORSSerialPortManager 's availablePorts (dijelaskan di bawah). Cara lain adalah mendapatkan instance ORSSerialPort baru menggunakan jalur perangkat BSD port serial:
let port = ORSSerialPort ( path : " /dev/cu.KeySerial1 " ) Perhatikan bahwa Anda harus memberikan ORSSerialPort.init(path:) Jalur lengkap ke perangkat, seperti yang ditunjukkan pada contoh di atas.
Setelah Anda memiliki instance port, Anda dapat membukanya dengan metode open() . Setelah selesai menggunakan port, tutup menggunakan metode close() .
Pengaturan port seperti baud rate, jumlah bit stop, paritas, dan pengaturan kontrol aliran dapat diatur menggunakan berbagai properti ORSSerialPort menyediakan:
port . baudRate = 9600
port . parity = . none
port . numberOfStopBits = 1
port . usesRTSCTSFlowControl = trueUntuk informasi lebih lanjut, lihat Panduan Memulai.
Kirim Data Mentah Dengan Meneruskan Objek Data ke send(_:) Metode:
let dataToSend = " Hello " . data ( using : . utf8 )
port . send ( dataToSend ) Untuk menerima data, Anda dapat ORSSerialPort Serialport Protokol ORSSerialPortDelegate serialPort(_:, didReceive:) Seperti disebutkan di bawah ini, metode ini selalu dipanggil pada antrian utama. Contoh implementasi disertakan di bawah ini:
func serialPort ( _ serialPort : ORSSerialPort , didReceive data : Data ) {
let string = String ( data : data , encoding : . utf8 )
print ( " Got ( string ) from the serial port! " )
} ORSSerialPort mencakup properti delegasi, dan protokol delegasi yang disebut ORSSerialPortDelegate . Port menginformasikan delegasi acara termasuk penerimaan data, acara port terbuka/tutup, penghapusan dari sistem, dan kesalahan. Untuk informasi lebih lanjut, lihat panduan memulai, atau baca dokumentasi di orsserialport.h.
ORSSerialPortManager adalah kelas singleton (satu contoh per aplikasi) yang dapat digunakan untuk mendapatkan daftar port serial yang tersedia. Gunakan properti manajer availablePorts untuk mendapatkan daftar port:
let ports = ORSSerialPortManager . shared ( ) . availablePorts ORSSerialPortManager's availablePorts dapat diamati dengan nilai kunci yang mengamati untuk diberitahu ketika adaptor USB ke serial dicolokkan atau dihapus. Selain itu, ia memposting nSnotification ketika peristiwa ini terjadi. Ini juga akan menangani penutupan port serial terbuka ketika Mac tidur, dan membuka kembali mereka secara otomatis saat bangun. Ini mencegah masalah yang saya lihat dengan driver port serial yang dapat menggantung jika port dibiarkan terbuka saat meletakkan mesin untuk tidur. Perhatikan bahwa menggunakan ORSSerialPortManager adalah opsional. Ini memberikan beberapa fungsi yang bagus, tetapi hanya ORSSerialPort yang diperlukan untuk hanya mengirim dan menerima data.
Untuk informasi lebih lanjut tentang orsserialportManager, lihat panduan memulai, atau baca dokumentasi di orsserialportManager.h.
Data seri yang masuk dikirimkan ke aplikasi Anda saat diterima. Perpustakaan tingkat rendah seperti Orsserialport tidak memiliki cara untuk mengetahui apa pun tentang struktur dan format data yang Anda kirim dan terima. Misalnya, Anda mungkin mengharapkan paket data yang lengkap, tetapi menerima panggilan balik untuk setiap byte. Biasanya, ini mengharuskan Anda mempertahankan buffer yang Anda isi dengan data yang masuk, hanya memprosesnya ketika paket lengkap telah diterima. Untuk menghilangkan kebutuhan manajemen manual dan buffering data yang masuk, Orsserialport mencakup API parsing paket. Ini diimplementasikan oleh ORSSerialPacketDescriptor dan Metode Terkait pada ORSSerialPort .
Untuk informasi lebih lanjut tentang Paket Parsing Paket Orsserialport, lihat panduan Paket Parsing API, baca dokumentasi di orsserialpacketDescriptor.h, dan lihat aplikasi contoh PacketParsingDemo.
Seringkali, aplikasi akan ingin mengirim perintah ke perangkat, lalu tunggu untuk menerima respons khusus sebelum melanjutkan. Untuk memudahkan penerapan skenario semacam ini, Orsserialport mencakup API permintaan/respons. Ini diimplementasikan oleh ORSSerialRequest dan metode terkait pada ORSSerialPort .
Misalnya, program yang membaca suhu dari perangkat yang terhubung mungkin melakukan hal berikut:
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! " )
}Untuk informasi lebih lanjut tentang API Permintaan/Respons Orsserialport, lihat Panduan API Permintaan/Respons, baca dokumentasi di orsserialRequest.h, dan lihat Aplikasi Contoh RequestResponsedemo.
Termasuk dengan orsserialport adalah folder yang disebut contoh, berisi proyek XCODE untuk program kecil yang menunjukkan penggunaan orsserialport. Setiap contoh tersedia di Objective -C dan Swift. Contoh aplikasi berikut disertakan:
Anda dapat membaca lebih lanjut tentang contoh -contoh ini di wiki Orsserialport.
Kontribusi untuk Orsserialport sangat disambut. Namun, kontributor didorong untuk membaca pedoman kontribusi sebelum memulai pekerjaan pada setiap kontribusi. Silakan juga untuk membuka masalah github atau email dengan pertanyaan tentang kontribusi spesifik.