PyOR
Материал из roboforum.ru Wiki
PyOR — это библиотека на языке Python для работы с шлюз-контроллером Open Robotics с прошивкой i2c-gate.
Предоставляет простой интерфейс для рпботы с регистрами, поддерживает мульти-старт.
Системные требования
- Интерпретатор python
- Библиотека pyserial
Установка
Скачайте архив http://hg.vehq.ru/pyor/archive/0.1.0.tar.gz Распакуйте куда угодно, в директории pyor-0.1.0 запустите в консоли:
python setup.py install
При этом вы должны обладать правами на запись в системные каталоги питона.
Shell:
cd /tmp wget http://hg.vehq.ru/pyor/archive/0.1.0.tar.gz tar xf pyor-0.1.0.tar.gz cd pyor-0.1.0 sudo python setup.py install
Примеры
В качестве примера можно посмотреть testio.py или даже запустить
python testio.py /dev/or-serial-port
# Первое необходимое действие — подключить нужные библиотеки: import serial import pyor from pyor import testio # За тем открыть последовательный порт (для примера bluetooth com на линуксе — /dev/rfcomm0): ser = serial.Serial('/dev/rfcomm0', 9600) # для логирования чтения/записи в порт можно воспользоваться LogIO logio = testio.LogIO(ser) # собственно создание основного элемента системы — объект запросов req = pyor.Request(logio) # настройка параметров i2c-gate: # 1. установить адрес внутреннего логического устройства на шине I2C # для присвоения будет послан запрос на смену адреса — L40 req.localhost = 0x40 # 2. установить частоту тактовых импульсов шины I2C # будет послан запрос на смену частоты — C0064 req.busfreq = 100 # кГц # 3. можно проверить версию протокола ver = req.protocol_version # -> '1.0' # 4. можно выполнить сброс шины req.clearbus() # теперь можно оперировать с регистрами и делать I2C запросы # 1. Примеры работы с регистрами: # записать в регистр 42h(PORTC) FFh req.set_reg(register=0x42, data=0xff) # прочитать состояние регистра 42h(PINC) port = req.get_reg(register=0x42) # -> [0xff] # прочитать ячейку 01h на устройстве 20h (I2C-It) range = req.get_reg(0x20, 0x01) # 2. Примеры простых запросов I2C: # запрос на чтение одного байта из устройства 20h req.i2cread_req(0x21, 1) range = req.response() # -> ['SR', [0x54]] # запрос на запись в устройство 20h req.i2cwrite_req(0x20, [0x00, 0x01, ]) req.response() # -> ['SW', [True, True]] # 3. Мульти-старт запросы # записать параметры мотора одним махом: l = req.localhost with req.transaction(): req.i2cwrite_req(l, [0x62, 0]) req.i2cwrite_req(l, [0x63, 0]) req.i2cwrite_req(l, [0x60, 0x50]) req.i2cwrite_req(l, [0x61, 0x50]) req.response() # -> [['SW', [True, True]], ['SW', [True, True]], ['SW', [True, True]], ['SW', [True, True]]] # прочитать состояния портов за одинзапрос: l = req.localhost with req.transaction(): req.i2cwrite_req(l, 0x40) req.i2cread_req(l) req.i2cwrite_req(l, 0x41) req.i2cread_req(l) req.i2cwrite_req(l, 0x42) req.i2cread_req(l) req.i2cwrite_req(l, 0x43) req.i2cread_req(l) req.response() # -> [['SW', [True]], ['SR', [0x00]], ['SW', [True]], ['SR', [0x00]], # ['SW', [True]], ['SR', [0x00]], ['SW', [True]], ['SR', [0x00]]] # в конце программы не забудьте освободить ресурсы # иначе на некоторых ОС могут быть проблемы с повторным открытием порта res.close()
Пример оконной программы можно получить тут: qtiger.py
