PyOR — различия между версиями
Vooon (обсуждение | вклад) |
Vooon (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
[[Категория:Open Robotics]] | [[Категория:Open Robotics]] | ||
+ | {{устаревшая статья}} | ||
PyOR — это библиотека на языке [[Python]] для работы с шлюз-контроллером [[Open Robotics]] с прошивкой [[i2c-gate]]. | PyOR — это библиотека на языке [[Python]] для работы с шлюз-контроллером [[Open Robotics]] с прошивкой [[i2c-gate]]. | ||
Строка 98: | Строка 99: | ||
l = req.localhost | l = req.localhost | ||
with req.transaction(): | with req.transaction(): | ||
− | req. | + | req.i2cwrite_req(l, 0x40) |
− | req. | + | req.i2cread_req(l) |
− | req. | + | req.i2cwrite_req(l, 0x41) |
− | req. | + | req.i2cread_req(l) |
− | req. | + | req.i2cwrite_req(l, 0x42) |
− | req. | + | req.i2cread_req(l) |
− | req. | + | req.i2cwrite_req(l, 0x43) |
− | req. | + | req.i2cread_req(l) |
req.response() # -> [['SW', [True]], ['SR', [0x00]], ['SW', [True]], ['SR', [0x00]], | req.response() # -> [['SW', [True]], ['SR', [0x00]], ['SW', [True]], ['SR', [0x00]], | ||
# ['SW', [True]], ['SR', [0x00]], ['SW', [True]], ['SR', [0x00]]] | # ['SW', [True]], ['SR', [0x00]], ['SW', [True]], ['SR', [0x00]]] | ||
Строка 113: | Строка 114: | ||
res.close() | res.close() | ||
</source> | </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