Skip to content

Jupyter notebook installation

Edgar K edited this page Apr 13, 2019 · 25 revisions

Автор: Казиахмедов Эдгар

Для удобной работы с модулем USART вам потребуется клиент на компьютере, с помощью которого можно будет обмениваться данными с микроконтроллером. Существуют разные клиенты под различные платформы, такие как gtkterm под Linux, Serial под MacOS и т.д. Но для более гибкой работы с полученными данными предлагается использовать собственные скрипты, написанные на Python.

Википедия: Python - высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.

В первую очередь необходимо установить сам интерпретатор языка.

Установка Python

Ubuntu-based

sudo apt-get install python3

MacOS

brew install python3

После установки запустите следующую команду, чтобы убедиться, что все работает:

python --version

Версия должна быть вида 3.x.x.

Установка PySerial

Теперь необходимо установить библиотеку для работы с последовательным портом:

python -m pip install pyserial

Подробную информацию о библиотеке PySerial можно найти по ссылке

Пример

Для работы с модулем USART в МК предлагается использовать преобразователь USB<->UART (здесь именно UART, а не USART), который эмулирует COM-порт. На рисунке представлен его внешний вид.

uart_adapter.jpg

Рис. 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

В большинстве случаев предыдущего метода с написанием скриптов и их последующим запуском достаточно, но в последующих примерах нам может понадобится удобная визуализация данных. Для этих целей можно установить Jupyter Notebook, это некоторая интерактивная командная оболочка, которая умеет хранить не только код, но и другие элементы (например, результат работы программы, различные графики):

ipython.png

Рис. 2. Интерфейс Jupyter Notebook (credits: Wikipedia)

Видно, что одновременно можно хранить формулы, графики и код (клетка Out - результат выполнения клетки In).

Для установки необходимо выполнить следующую команду:

python -m pip install jupyter

После установки запуск производится одной командой, после выполнения которой, откроется браузер с окном Jupyter:

jupyter-notebook

jupyter.png

Рис. 3. Окно запуска Jupyter Notebook

Далее необходимо нажать справа New и выбрать Python 3. Далее откроется следующее окно:

jupyter1.png

Рис. 4. Проект

Теперь попробуем все то же самое, но теперь в новой среде. Вставим в первую клетку подключение библиотек. Для выполнения кода в клетке нужно нажать Run. Далее необходимо создать новую клетку (слева сверху - значок плюс) и вставить функции-обертки, запустить, а в третьей - оставшийся код и также запустить.

Установка matplotlib

Для отрисовки различных графиков (что будет использовано в теме в АЦП) используется библиотека 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()

Должно получиться следующее:

jupyter3.png

Рис. 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

Данного набора программ должно быть достаточно для последующего выполнения лабораторных работ.