-
Notifications
You must be signed in to change notification settings - Fork 61
Jupyter notebook installation
Автор: Казиахмедов Эдгар
Для удобной работы с модулем USART вам потребуется клиент на компьютере, с помощью которого можно будет обмениваться данными с микроконтроллером. Существуют разные клиенты под различные платформы, такие как gtkterm
под Linux, Serial
под MacOS и т.д. Но для более гибкой работы с полученными данными предлагается использовать собственные скрипты, написанные на Python.
Википедия: Python - высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.
В первую очередь необходимо установить сам интерпретатор языка.
sudo apt-get install python3
brew install python3
После установки запустите следующую команду, чтобы убедиться, что все работает:
python --version
Версия должна быть вида 3.x.x
.
Теперь необходимо установить библиотеку для работы с последовательным портом:
python -m pip install pyserial
Подробную информацию о библиотеке PySerial можно найти по ссылке
Для работы с модулем USART в МК предлагается использовать преобразователь USB<->UART (здесь именно UART, а не USART), который эмулирует COM-порт. На рисунке представлен его внешний вид.
Рис. 1. Преобразователь USB<->UART
Теперь напишем три простые функции-обертки (в файле uart.py), которые будут использоваться для работы с конвертером: serial_init
, serial_recv
и serial_send
.
# Подключаем необходимый модуль
import serial
def serial_init(speed):
dev = serial.Serial(
# Здесь указывается устройство, с которым будет производится работа
# /dev/ttyUSBx - для Linux
# /dev/tty.SLAB_USBtoUART - для MacOS
port='/dev/ttyUSB0',
# Скорость передачи
baudrate=speed,
# Использование бита четности
parity=serial.PARITY_NONE,
# Длина стоп-бита
stopbits=serial.STOPBITS_ONE,
# Длина пакета
bytesize=serial.EIGHTBITS,
# Максимальное время ожидания устройства
timeout=0.1
)
return dev
def serial_recv(dev):
# Для простоты макс. кол-во символов для чтения - 255. Время ожидания - 0.1
# decode необходим для конвертирования набора полученных байтов в строку
string = dev.read(255).decode()
return string
def serial_send(dev, string):
# encode конвертирует строку в кодировке utf-8 в набор байтов
dev.write(string.encode('utf-8'))
Для проверки работоспособности данного кода проще всего замкнуть TXD и RXD у преобразователя и вызвать написанные функции ниже в том же файле:
dev = serial_init(9600)
serial_send(dev, "Hello, world!")
ans = serial_recv(dev)
print(ans)
Запустим написанный скрипт:
python test.py
Программа завершится с ошибкой, в которой будет сказано, что недостаточно прав для работы с утройством. Для решения данной проблемы необходимо добавить пользователя YOUR_USER_NAME (подставьте свое) в группу dialout
и изменить права на устройство (в зависимости от ОС разное имя устройства):
sudo adduser YOUR_USER_NAME dialout
sudo chmod a+rw /dev/ttyUSB0
После повторного выполнения будет распечатана строка Hello, world!
, то есть мы получили обратно строку, которую отправили в последовательный порт. Необязательно использовать функции-обертки для работы с UART, можно использовать библиотеку напрямую, но это сделано с целью упрощения (которое привносит некоторые ограничения на работу с модулем)
Замечание: для работы с преобразователем в MacOS необходимо поставить дополнительный драйвер по ссылке
В большинстве случаев предыдущего метода с написанием скриптов и их последующим запуском достаточно, но в последующих примерах нам может понадобится удобная визуализация данных. Для этих целей можно установить Jupyter Notebook, это некоторая интерактивная командная оболочка, которая умеет хранить не только код, но и другие элементы (например, результат работы программы, различные графики):
Рис. 2. Интерфейс Jupyter Notebook (credits: Wikipedia)
Видно, что одновременно можно хранить формулы, графики и код (клетка Out - результат выполнения клетки In).
Для установки необходимо выполнить следующую команду:
python -m pip install jupyter
После установки запуск производится одной командой, после выполнения которой, откроется браузер с окном Jupyter:
jupyter-notebook
Рис. 3. Окно запуска Jupyter Notebook
Далее необходимо нажать справа New
и выбрать Python 3
. Далее откроется следующее окно:
Рис. 4. Проект
Теперь попробуем все то же самое, но теперь в новой среде. Вставим в первую клетку подключение библиотек. Для выполнения кода в клетке нужно нажать Run
. Далее необходимо создать новую клетку (слева сверху - значок плюс) и вставить функции-обертки, запустить, а в третьей - оставшийся код и также запустить.
Для отрисовки различных графиков (что будет использовано в теме в АЦП) используется библиотека matplotlib. Для установки необходимо выполнить простую команду:
python -m pip install -U matplotlib
В новой созданной клетке подключите библиотеку:
import matplotlib.pyplot as plt
%matplotlib inline
И для проверки можно отрисовать простой график с линией:
plt.figure(figsize=(14,7))
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()
Должно получиться следующее:
Рис. 5. Отрисовка графика
Также желательно установить следующие библиотеки:
sudo apt-get install libasound-dev portaudio19-dev libportaudio2 libportaudiocpp0
sudo apt-get install ffmpeg libav-tools
python -m pip install pyaudio
python -m pip install numpy
python -m pip install scipy
Данного набора программ должно быть достаточно для последующего выполнения лабораторных работ.