PyOR — различия между версиями
Vooon (обсуждение | вклад) (Создана новая страница размером Категория:Open Robotics PyOR — это библиотека на языке Python для работы с шлюз-ко...) |
Vooon (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
[[Категория:Open Robotics]] | [[Категория:Open Robotics]] | ||
+ | {{устаревшая статья}} | ||
PyOR — это библиотека на языке [[Python]] для работы с шлюз-контроллером [[Open Robotics]] с прошивкой [[i2c-gate]]. | PyOR — это библиотека на языке [[Python]] для работы с шлюз-контроллером [[Open Robotics]] с прошивкой [[i2c-gate]]. | ||
Предоставляет простой интерфейс для рпботы с регистрами, поддерживает мульти-старт. | Предоставляет простой интерфейс для рпботы с регистрами, поддерживает мульти-старт. | ||
+ | |||
+ | == Системные требования == | ||
+ | * Интерпретатор python | ||
+ | * Библиотека pyserial | ||
== Установка == | == Установка == | ||
Строка 26: | Строка 31: | ||
python testio.py /dev/or-serial-port | python testio.py /dev/or-serial-port | ||
+ | |||
+ | <source lang="python"> | ||
+ | # Первое необходимое действие — подключить нужные библиотеки: | ||
+ | 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() | ||
+ | </source> | ||
+ | |||
+ | Пример оконной программы можно получить тут: [http://roboforum.ru/download/file.php?id=8991 qtiger.py] |
Текущая версия на 06:58, 20 января 2010
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
<source lang="python">
- Первое необходимое действие — подключить нужные библиотеки:
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() </source>
Пример оконной программы можно получить тут: qtiger.py