Передача даних на Android через COM порт, Magora Systems
Кілька місяців тому мене попросили розробити інструментальну панель для пристрою Android, яка могла б відображати Інформацію про роботу електричної мережі в цеху. Тут я зіткнувся з проблемою, що пристрій, який збирає інформацію, встановлено окремо, і повинен приєднуватися до обладнання Android через Serial port.
У цій короткій статті я опишу можливість використання COM-порту в додатках для OS Android. Це може знадобитися, коли Ваша програма повинна отримувати або надсилати дані з іншого пристрою, який має як комунікацію лише Serial port RS 232.
Що нам знадобиться?
- По-перше, необхідно завантажити Android NDK - засіб для роботи з нативним кодом Java. Щоб працювати з serial port, нам необхідно буде викликати код на C;
- По-друге, необхідно викачати вихідний код проекту svn для роботи з Serial port RS 232: android-serialport-api.
Організація проекту
Далі в Android проекті нам необхідно створити папку/jni і скопіювати в неї вміст папки /jni проекту, викачаного з svn (або просто скопіювати всю папку/jni ) у проект Android. Потім необхідно додати такі файли з викачаного проекту:
- SerialPort.java
- Application.java
- SerialPortActivity.java
- SerialPortFinder.java
Дані файли дозволяють працювати з COM портом, але Вам потрібно їх відредагувати під потреби свого проекту. Як відомо, всі пристрої в nix подібних системах знаходяться на шляху/dev. Щоб встановити шлях до пристрою і baud rate, необхідно у файліApplication.java встановити відповідні значення полів.
КласSerialPortActivity.java є розширенням класу Activity і містить абстрактний методprotected abstract void onDataReceived(final byte[] buffer, final int size). Ви можете успадковувати від цього класу свої Activity, в яких буде працювати з Serial Port, і, перевизначивши метод onDataReceived, обробити отримання даних з порту.
Можна винести логіку роботи з портом у власні клас або класи і не використовувати успадкування відSerialPortActivity.java.
За допомогою класуSerialPortFinder.java з його методамиgetAllDevices() таgetAllDevicesPath() ви можете отримати списки всіх пристроїв та їх шляхів відповідно.
Запис у порт здійснюється за допомогою простого запису в OutputStream, створеного за допомогою класу SerialPort.java, COM порту.
Доступ до SerialPort
Завантаження нативного коду в Android додаток міститься в класіSerialPort.java за допомогою викликуSystem.loadLibrary(«serial_port») :
Параметрserial_port - це модуль, що вийшов у результаті компіляції коду C за допомогою NDK. Він вказаний у make файлі/jni/Android.mk. Файл SerialPort.c у папці /jni містить виклик нативних функцій системи для роботи з Serial port. Такі параметри COM порту якData bits,Parity,Stop bits та інші можна змінити в цьому файлі за допомогою структури termios, наприклад, так:
Після зміни файлу SerialPort.c необхідно скомпілювати необхідні бібліотеки таким чином:
- Відкрити командний рядок
- Зайти до папки з NDK
- Встановити шлях до проекту:set NDK_PROJECT_PATH=
Бібліотеки будуть скомпільовані та доданіу папку /libs вашого проекту.
Після цього для встановлення Android програми на пристрій можна виконати таку команду:
Таким чином, у нас є всі інструменти, які можуть з'єднати будь-який пристрій, розташований окремо через Serial Port. Використання цих інструментів для надсилання та отримання інформації допомагає керувати будь-якими пристроями та реалізувати найнесподіваніші бізнес-ідеї.