zmatt icon

gpio.py

zmatt | PRO | 04/06/20 10:08:37 PM UTC | 0 ⭐ | 464 👁️ | Never ⏰ | []
Python |

1.78 KB

|

None

|

0 👍

/

0 👎

from pathlib import Path
 
class Gpio:
    def __init__( self, path_or_index ):
        if type(path_or_index) is int:
            self.path = Path( '/sys/class/gpio/gpio' + str(path_or_index) )
        else:
            self.path = Path( path_or_index )
 
    def _get_attribute( self, name ):
        return (self.path/name).read_text().rstrip()
 
    def _set_attribute( self, name, value ):
        return (self.path/name).write_text( value )
 
 
    # get current input value or output value (depending on direction)
    @property
    def value( self ):
        return int( self._get_attribute( 'value' ) )
 
    # set output value (direction must already be 'out')
    @value.setter
    def value( self, value ):
        assert value in range( 0, 2 )
        self._set_attribute( 'value', str(value) )
 
 
    # get whether gpio is configured as active-low
    @property
    def active_low( self ):
        return bool( int( self._get_attribute( 'active_low' ) ) )
 
    # set whether gpio is configured as active-low
    @active_low.setter
    def active_low( self, active_low ):
        assert type(active_low) is bool
        self._set_attribute( 'active_low', str(int(active_low)) )
 
 
    # returns 'in' or 'out'
    @property
    def direction( self ):
        return self._get_attribute( 'direction' )
 
    # change direction to input
    def set_input( self ):
        self._set_attribute( 'direction', 'in' )
 
    # change direction to output with given initial value
    def set_output( self, init_value ):
        assert init_value in range( 0, 2 )
        if self.active_low:
            init_level = ('high', 'low')[ init_value ]
        else:
            init_level = ('low', 'high')[ init_value ]
        self._set_attribute( 'direction', init_level )

Comments