gpio.pyをベースにpyftdiでLチカしてみました。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from os import environ
import sys
from pyftdi.gpio import GpioController, GpioException
from time import sleep
class GpioTest(object):
"""
"""
def __init__(self):
self._gpio = GpioController()
self._state = 0 # SW cache of the GPIO output lines
def open(self, out_pins):
"""Open a GPIO connection, defining which pins are configured as
output and input"""
out_pins &= 0xFF
url = environ.get('FTDI_DEVICE', 'ftdi://ftdi:232h/1')
self._gpio.open_from_url(url, direction=out_pins)
def close(self):
"""Close the GPIO connection"""
self._gpio.close()
def set_gpio(self, line, on):
"""Set the level of a GPIO ouput pin.
:param line: specify which GPIO to madify.
:param on: a boolean value, True for high-level, False for low-level
"""
if on:
state = self._state | (1 << line)
else:
state = self._state & ~(1 << line)
self._commit_state(state)
def get_gpio(self, line):
"""Retrieve the level of a GPIO input pin
:param line: specify which GPIO to read out.
:return: True for high-level, False for low-level
"""
value = self._gpio.read_port()
return bool(value & (1 << line))
def _commit_state(self, state):
"""Update GPIO outputs
"""
self._gpio.write_port(state)
# do not update cache on error
self._state = state
if __name__ == '__main__':
gpio = GpioTest()
mask = 0x80 # AD7=Out
gpio.open(mask)
while True:
gpio.set_gpio(7, True)
sleep(0.2)
gpio.set_gpio(7, False)
sleep(0.2)
