УДК 004.4
Шмарин В.В.
Магистрант кафедры замкнутых экологических систем Сибирский государственный университет науки и технологий имени академика М.Ф. Решетнева - опорный университет Красноярского края
(Россия, г. Красноярск)
Быкова А.В.
Магистрант кафедры замкнутых экологических систем Сибирский государственный университет науки и технологий имени академика М.Ф. Решетнева - опорный университет Красноярского края
(Россия, г. Красноярск)
РЕАЛИЗАЦИЯ СКРИПТ ЗАПРОСА НА ЯЗЫКЕ PYTHON ДЛЯ ПОЛУЧЕНИЯ ИНФОРМАЦИИ С ВИРТУАЛЬНОГО СОМ-ПОРТА В LINUX СИСТЕМАХ
Аннотация: в данной статье рассматриваются, как при помощи языка Python можно получать и сохранять информацию в текстовом виде, полученную с виртуального COM-порта. В данном примере связка Arduino с датчиком влажности почвы и персональный компьютер с Linux системой.
Ключевые слова: Arduino, UART, сохранение информации, COM-порт, tty, Linux, программирование, датчики Arduino, USB, скрипт запрос, Bpython, Debian, REPL, язык программирования, библиотека pyserial, SSH.
При использовании платформы Arduino [1, 4, 8], либо схожих с ней платформ, имеющих в своей реализации UART [2, 8] интерфейс, которые выступают в роли контроллеров для различных датчиков, например, влажности, давления, температуры, газового состава и т.п. Возникает потребность получать и сохранять значения этих датчиков для дальнейшего анализа и обработки.
198
Существует несколько способов это сделать, как графических, используя специализированное ПО, так и текстовых, используя программирование. О втором методе и будет описано в данной статье.
Описанный пример будет осуществлён с использованием операционной системы Linux Debian 9 [13], REPL - Bpython [3] и библиотеки pyserial, для их установки в терминале системы Debian необходимо ввести apt-get install Bpython и pip3 install pyserial. В роли аппаратной части выступает Arduino UNO, которая по USB порту подключена к компьютеру и аналоговый датчик влажности почвы.
Для того, чтобы определить, на каком виртуальном порту Arduino находится необходимо в терминале ввести команду ls /dev/tty* результат представлен на рисунке 1.
bio@biodeb: ■
,»_j bi0(5192.166.10. 211's password:
Linux biodeb 4.19. 0-6-686-pae #1 SMP Debian 4.19.98-1+deblOul (2020-04-27) "i686
The programs included with the Debian gnl/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/^/copyri ght.
Debian GMU/Linux comes with absolutely no warranty, to the extent permitted by applicable law.
Last login: sat Jun 20 00:01:41 2020 from 192.166.10.219 bio@biodeb:~$ Is /dev/tty*
/dev/tty
/dev/ttyO
/dev/ttyl
/dev/ttyl9 /dev/tty2 /dev/tty20
/dev/ttylO /dev/tty21 /dev/ttyll /dev/tty22
/dev/ttyl2 /dev/ttyl3 /dev/ttyl4 /dev/ttyl5 /dev/ttyl6 /dev/ttyl7 /dev/ttylS bi o@bi odeb :-
/dev/tty23 /dev/tty24 /dev/tty25 /dev/tty26 /dev/tty27 /dev/tty28 /dev/tty29
/dev/tty3 /dev/tty30 /dev/tty31 /dev/tty32 /dev/tty33 /dev/tty34 /dev/tty35 /dev/tty36 /dev/tty37 /dev/tty38
/dev/tty40 /dev/tty41 /dev/tty42 /dev/tty43 /dev/tty44 /dev/tty45 /dev/tty46 /dev/tty47 /dev/tty48 /dev/tty49
/dev/tty39 /dev/tty5
/dev/tty 51 /dev/tty52 /dev/tty53 /dev/tty 54 /dev/tty55 /dev/tty56 /dev/tty57 /dev/tty58 /dev/tty59 /dev/tty6 /dev/tty60
/dev/tty 62
/dev/tty63
/dev/tty7
/dev/tty8
/dev/tty9
/dev/ttyACHO
/dev/ttysO
/dev/ttysi
/dev/ttys2
/dev/ttys3
/dev/tty4 /dev/tty50 /dev/tty61
Рисунок 1 - COM порты в ОС Linux
Arduino в данном случае располагается по пути: /dev/ttyACM0, это путь будет необходим для написания кода.
Для запуска Bpython в терминале необходимо ввести указать его место хранение, в данном случае, это: /usr/bin/bpython в открывшемся REPL Bpython [3] необходимо ввести код на языке Python [5, 6, 7], представленный в таблице 1. Данный код использует библиотеку pyserial [9,10].
Таблица 1 - скрипт на языке Python для получения информации с COM-порта import serial
write_to_sens = "sens.txt"; output_file_sens = open(write_to_sens, "w+");
COM = serial.Serial("/dev/ttyACM0", 9600) # 9600 - баудрейт, прописанный в прошивке Arduino, В прошивке должен быть включен метод класса Serial.begin [1] while 1:
logs_line = COM.readline(); print(logs_line,);
output_file_sens.write(logs_line,);
output_file_sens.close() #эту строку нужно ввести после остановки скрипта, чтобы данные сохранились в файл_
Остановка скрипта осуществляется комбинацией клавиш ^г^, результат работы скрипта с открытым текстовым файлом представлен на рисунке 2.
| 192.163.10.211 - PuTTY
Keyboardinterrupt
»> import serial
»> write_to_sens — "sens.txt";
»> output_fi 1 e_sens = open(write_to_sens, "»+
»> COM = serial. Serial( de. ttyACNO", 9600)
»> while 1:
1ogs_1ine - COM.readline();
pn nt (1 ogs_l i ne,);
output_f 11 e_seris. wr i te (1 ogs_l i ne,);
('448\r\n', C447\r\n' , ('44 5\r\n", ( '448\r\n', ( '444\r\n', ( '443\r\n', ('443\r\n', ( '443\r\n' , C441\r\rT , ( '441\r\n', ('439\r\rT , ('439\rSn' , ('439\r\n' , (ЧЗЭХгЧп' , ( '440\r\n' , ('440\r\n' , C'438\r\n', ( '440\r\n', ( '438\r\n' , ( "438\r\n" , ( '444\r\n' , ('440\r\n',
| File Edit View insert Format Styles Sheet Data Tools
B-B'i - aes %
[ai Zj & X - ¡448
This document is open in read-only mode.
в с D e
E7Щ 4481
2 447
3 445
4 448
5 444
6 443
7 443
8 443
9 44lj
10 441
11 439
12 439 -n
13 439
14 439
15 440
16 440
Рисунок 2 - Результат работы кода для получения данных с COM-порта на языке
Python
В терминале отображается данные по сопротивлению в Ом, полученные с резистивного датчика влажности почвы.
В заключении можно сказать, что данный метод удобен для того, чтобы без лишнего программного обеспечения получить информацию, поступающую с виртуального COM-порт, такой метод может быть осуществлён на системе, не имеющей GUI [12] и выступающей в роли управляющего сервера к которому имеется удалённое подключение с использованием протокола SSH [11].
СПИСОК ЛИТЕРАТУРЫ:
Arduino библиотека Serial [Электронный ресурс] - Режим доступа: URL: https://clck.ru/P7TLW (дата обращения 13.03.2020)
UART - Последовательный интерфейс передачи данных [Электронный ресурс] - Режим доступа: URL: https://voltiq.ru/wiki/uart-interface/ (дата обращения 12.03.2020) REPL - Bpython [Электронный ресурс] - Режим доступа: URL: https://habr.com/ru/post/81158/ (дата обращения 13.03.2020)
Что такое Arduino [Электронный ресурс] - Режим доступа: URL: http://arduino.ru/ (дата обращения 23.02.2020)
Swaroop Chitlur, A Byte of Python. 2013. - 158 С.
МакГрат Майк, Программирование на Python для начинающих. - Москва: Издательство Эскимо, 2015. - 194 С.
Доусон Майкл, Программирование на Phyton. - Санкт-Петербург: Питер, 2019. - 416 С. UART в Arduino [Электронный ресурс] - Режим доступа: URL: https://robotclass.ru/tutorials/arduino-uart/3/ (дата обращения 15.01.2020)
Система управления пакетами pip [Электронный ресурс] - Режим доступа: URL: https://pyneng.readthedocs.io/ru/latest/book/01_intro/pip.html (дата обращения (дата обращения 05.03.2020)
Библиотека pyserial [Электронный ресурс] - Режим доступа: URL: https://pyserial.readthedocs.io/en/latest/shortintro.html (дата обращения 15.03.2020) Что такое SSH [Электронный ресурс] - Режим доступа: URL: https://www.dmosk.ru/terminus.php?object=ssh (дата обращения 01.02.2020) Что такое GUI [Электронный ресурс] - Режим доступа: URL: https://animatika.ru/info/gloss/GUI.html (дата обращения 06.01.2020)
Операционная система Debian [Электронный ресурс] - Режим доступа: URL: https://www.debian.org/index.ru.html (дата обращения 16.03.2020)