MikrofonSensor und TemperaturSenor die zwei Python programme funktionieren. mit den jeweiligen 2 json Datein. Beim TemperaturSensor wird im Terminal keine Wertre ausgegeben aber in der json Datei kann man die Temp und Hum sehen.
This commit is contained in:
parent
4c654ec969
commit
1751076592
2614 changed files with 349009 additions and 0 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,33 @@
|
|||
# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
"""A Chip class for use with libgpiod 1.x."""
|
||||
import gpiod
|
||||
|
||||
|
||||
# pylint: disable=too-many-branches,too-many-statements
|
||||
class Chip:
|
||||
"""Abstraction for handling all breaking changes over the lifecycle of gpiod"""
|
||||
|
||||
_CONSUMER = "adafruit_blinka"
|
||||
|
||||
id: str = None
|
||||
num_lines: int
|
||||
|
||||
def __init__(self, chip_id: str):
|
||||
self.id = chip_id
|
||||
if hasattr(gpiod, "Chip"):
|
||||
self._chip = gpiod.Chip(self.id)
|
||||
else:
|
||||
self._chip = gpiod.chip(self.id)
|
||||
|
||||
if callable(self._chip.num_lines):
|
||||
self.num_lines = self._chip.num_lines()
|
||||
else:
|
||||
self.num_lines = self.num_lines
|
||||
|
||||
def __repr__(self):
|
||||
return self.id
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.id == other
|
|
@ -0,0 +1,29 @@
|
|||
# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
"""A Chip class for use with libgpiod 2.x."""
|
||||
import gpiod
|
||||
|
||||
|
||||
# pylint: disable=too-many-branches,too-many-statements
|
||||
class Chip:
|
||||
"""Abstraction for handling all breaking changes over the lifecycle of gpiod"""
|
||||
|
||||
_CONSUMER = "adafruit_blinka"
|
||||
|
||||
id: str = None
|
||||
num_lines: int
|
||||
|
||||
def __init__(self, chip_id: str):
|
||||
self.id = chip_id
|
||||
path = f"/dev/gpiochip{self.id}"
|
||||
self._chip = gpiod.Chip(path)
|
||||
|
||||
info = self._chip.get_info()
|
||||
self.num_lines = info.num_lines
|
||||
|
||||
def __repr__(self):
|
||||
return self.id
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.id == other
|
|
@ -0,0 +1,127 @@
|
|||
# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
"""A Pin class for use with libgpiod 1.x."""
|
||||
import gpiod
|
||||
|
||||
|
||||
# pylint: disable=too-many-branches,too-many-statements
|
||||
class Pin:
|
||||
"""Pins dont exist in CPython so...lets make our own!"""
|
||||
|
||||
IN = 0
|
||||
OUT = 1
|
||||
LOW = 0
|
||||
HIGH = 1
|
||||
PULL_NONE = 0
|
||||
PULL_UP = 1
|
||||
PULL_DOWN = 2
|
||||
_CONSUMER = "adafruit_blinka"
|
||||
|
||||
id = None
|
||||
_value = LOW
|
||||
_mode = IN
|
||||
|
||||
def __init__(self, pin_id):
|
||||
self.id = pin_id
|
||||
if isinstance(pin_id, tuple):
|
||||
self._num = int(pin_id[1])
|
||||
if hasattr(gpiod, "Chip"):
|
||||
self._chip = gpiod.Chip(str(pin_id[0]), gpiod.Chip.OPEN_BY_NUMBER)
|
||||
else:
|
||||
self._chip = gpiod.chip(str(pin_id[0]), gpiod.chip.OPEN_BY_NUMBER)
|
||||
else:
|
||||
self._num = int(pin_id)
|
||||
if hasattr(gpiod, "Chip"):
|
||||
self._chip = gpiod.Chip("gpiochip0", gpiod.Chip.OPEN_BY_NAME)
|
||||
else:
|
||||
self._chip = gpiod.chip("gpiochip0", gpiod.chip.OPEN_BY_NAME)
|
||||
self._line = None
|
||||
|
||||
def __repr__(self):
|
||||
return str(self.id)
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.id == other
|
||||
|
||||
def init(self, mode=IN, pull=None):
|
||||
"""Initialize the Pin"""
|
||||
if not self._line:
|
||||
self._line = self._chip.get_line(int(self._num))
|
||||
# print("init line: ", self.id, self._line)
|
||||
|
||||
if mode is not None:
|
||||
if mode == self.IN:
|
||||
flags = 0
|
||||
self._line.release()
|
||||
if pull is not None:
|
||||
if pull == self.PULL_UP:
|
||||
if hasattr(gpiod, "LINE_REQ_FLAG_BIAS_PULL_UP"):
|
||||
flags |= gpiod.LINE_REQ_FLAG_BIAS_PULL_UP
|
||||
else:
|
||||
raise NotImplementedError(
|
||||
"Internal pullups not supported in this version of libgpiod, "
|
||||
"use physical resistor instead!"
|
||||
)
|
||||
elif pull == self.PULL_DOWN:
|
||||
if hasattr(gpiod, "line") and hasattr(
|
||||
gpiod, "LINE_REQ_FLAG_BIAS_PULL_DOWN"
|
||||
):
|
||||
flags |= gpiod.LINE_REQ_FLAG_BIAS_PULL_DOWN
|
||||
else:
|
||||
raise NotImplementedError(
|
||||
"Internal pulldowns not supported in this version of libgpiod, "
|
||||
"use physical resistor instead!"
|
||||
)
|
||||
elif pull == self.PULL_NONE:
|
||||
if hasattr(gpiod, "line") and hasattr(
|
||||
gpiod, "LINE_REQ_FLAG_BIAS_DISABLE"
|
||||
):
|
||||
flags |= gpiod.LINE_REQ_FLAG_BIAS_DISABLE
|
||||
else:
|
||||
raise NotImplementedError(
|
||||
"Internal pulldowns not supported in this version of libgpiod, "
|
||||
"use physical resistor instead!"
|
||||
)
|
||||
else:
|
||||
raise RuntimeError(f"Invalid pull for pin: {self.id}")
|
||||
|
||||
self._mode = self.IN
|
||||
self._line.release()
|
||||
if hasattr(gpiod, "LINE_REQ_DIR_IN"):
|
||||
self._line.request(
|
||||
consumer=self._CONSUMER, type=gpiod.LINE_REQ_DIR_IN, flags=flags
|
||||
)
|
||||
else:
|
||||
config = gpiod.line_request()
|
||||
config.consumer = self._CONSUMER
|
||||
config.request_type = gpiod.line_request.DIRECTION_INPUT
|
||||
self._line.request(config)
|
||||
|
||||
elif mode == self.OUT:
|
||||
if pull is not None:
|
||||
raise RuntimeError("Cannot set pull resistor on output")
|
||||
self._mode = self.OUT
|
||||
self._line.release()
|
||||
if hasattr(gpiod, "LINE_REQ_DIR_OUT"):
|
||||
self._line.request(
|
||||
consumer=self._CONSUMER, type=gpiod.LINE_REQ_DIR_OUT
|
||||
)
|
||||
else:
|
||||
config = gpiod.line_request()
|
||||
config.consumer = self._CONSUMER
|
||||
config.request_type = gpiod.line_request.DIRECTION_OUTPUT
|
||||
self._line.request(config)
|
||||
else:
|
||||
raise RuntimeError("Invalid mode for pin: %s" % self.id)
|
||||
|
||||
def value(self, val=None):
|
||||
"""Set or return the Pin Value"""
|
||||
if val is None:
|
||||
return self._line.get_value()
|
||||
|
||||
if val in (self.LOW, self.HIGH):
|
||||
self._value = val
|
||||
self._line.set_value(val)
|
||||
return None
|
||||
raise RuntimeError("Invalid value for pin")
|
|
@ -0,0 +1,99 @@
|
|||
# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
"""A Pin class for use with libgpiod 2.x."""
|
||||
import gpiod
|
||||
|
||||
|
||||
# pylint: disable=too-many-branches,too-many-statements
|
||||
class Pin:
|
||||
"""Pins dont exist in CPython so...lets make our own!"""
|
||||
|
||||
IN = 0
|
||||
OUT = 1
|
||||
LOW = 0
|
||||
HIGH = 1
|
||||
PULL_NONE = 0
|
||||
PULL_UP = 1
|
||||
PULL_DOWN = 2
|
||||
_CONSUMER = "adafruit_blinka"
|
||||
|
||||
id = None
|
||||
_value = LOW
|
||||
_mode = IN
|
||||
|
||||
_value_map = (gpiod.line.Value.INACTIVE, gpiod.line.Value.ACTIVE)
|
||||
|
||||
def __init__(self, pin_id):
|
||||
self.id = pin_id
|
||||
chip_id = 0
|
||||
if isinstance(pin_id, tuple):
|
||||
chip_id, self._num = pin_id
|
||||
if isinstance(chip_id, int):
|
||||
chip_id = f"/dev/gpiochip{chip_id}"
|
||||
self._chip = gpiod.Chip(chip_id)
|
||||
self._line_request = None
|
||||
|
||||
def __del__(self):
|
||||
if self._line_request:
|
||||
self._line_request.release()
|
||||
|
||||
def __repr__(self):
|
||||
return str(self.id)
|
||||
|
||||
def __eq__(self, other):
|
||||
return self.id == other
|
||||
|
||||
def init(self, mode=IN, pull=None):
|
||||
"""Initialize the Pin"""
|
||||
# Input,
|
||||
if not self._line_request:
|
||||
self._line_request = self._chip.request_lines(
|
||||
config={int(self._num): None},
|
||||
consumer=self._CONSUMER,
|
||||
)
|
||||
# print("init line: ", self.id, self._line)
|
||||
|
||||
if mode is not None:
|
||||
line_config = gpiod.LineSettings()
|
||||
if mode == self.IN:
|
||||
line_config.direction = gpiod.line.Direction.INPUT
|
||||
if pull is not None:
|
||||
if pull == self.PULL_UP:
|
||||
line_config.bias = gpiod.line.Bias.PULL_UP
|
||||
elif pull == self.PULL_DOWN:
|
||||
line_config.bias = gpiod.line.Bias.PULL_DOWN
|
||||
elif pull == self.PULL_NONE:
|
||||
line_config.bias = gpiod.line.Bias.DISABLED
|
||||
else:
|
||||
raise RuntimeError(f"Invalid pull for pin: {self.id}")
|
||||
|
||||
self._mode = self.IN
|
||||
self._line_request.reconfigure_lines(
|
||||
{
|
||||
int(self._num): line_config,
|
||||
}
|
||||
)
|
||||
elif mode == self.OUT:
|
||||
if pull is not None:
|
||||
raise RuntimeError("Cannot set pull resistor on output")
|
||||
self._mode = self.OUT
|
||||
line_config.direction = gpiod.line.Direction.OUTPUT
|
||||
self._line_request.reconfigure_lines(
|
||||
{
|
||||
int(self._num): line_config,
|
||||
}
|
||||
)
|
||||
else:
|
||||
raise RuntimeError("Invalid mode for pin: %s" % self.id)
|
||||
|
||||
def value(self, val=None):
|
||||
"""Set or return the Pin Value"""
|
||||
if val is None:
|
||||
return bool(self._value_map.index(self._line_request.get_value(self._num)))
|
||||
|
||||
if val in (self.LOW, self.HIGH):
|
||||
self._value = val
|
||||
self._line_request.set_value(self._num, self._value_map[int(val)])
|
||||
return None
|
||||
raise RuntimeError("Invalid value for pin")
|
Loading…
Add table
Add a link
Reference in a new issue