BH1750

Форк
0
/
base_sensor.py 
70 строк · 2.5 Кб
1
# micropython
2
# MIT license
3
# Copyright (c) 2022 Roman Shevchik   goctaprog@gmail.com
4
import micropython
5
import ustruct
6
from sensor_pack import bus_service
7

8

9
@micropython.native
10
def check_value(value: int, valid_range, error_msg: str) -> int:
11
    if value not in valid_range:
12
        raise ValueError(error_msg)
13
    return value
14

15

16
class Device:
17
    """Base device class"""
18

19
    def __init__(self, adapter: bus_service.BusAdapter, address: int, big_byte_order: bool):
20
        """Базовый класс Устройство.
21
        Если big_byte_order равен True -> порядок байтов в регистрах устройства «big»
22
        (Порядок от старшего к младшему), в противном случае порядок байтов в регистрах "little"
23
        (Порядок от младшего к старшему)
24
        address - адрес устройства на шине.
25

26
        Base device class. if big_byte_order is True -> register values byteorder is 'big'
27
        else register values byteorder is 'little'
28
        address - address of the device on the bus."""
29
        self.adapter = adapter
30
        self.address = address
31
        self.big_byte_order = big_byte_order
32

33
    def _get_byteorder_as_str(self) -> tuple:
34
        """Return byteorder as string"""
35
        if self.is_big_byteorder():
36
            return 'big', '>'
37
        else:
38
            return 'little', '<'
39

40
    def unpack(self, fmt_char: str, source: bytes, redefine_byte_order: str = None) -> tuple:
41
        """распаковка массива, считанного из датчика.
42
        Если redefine_byte_order != None, то bo (смотри ниже) = redefine_byte_order
43
        fmt_char: c, b, B, h, H, i, I, l, L, q, Q. pls see: https://docs.python.org/3/library/struct.html"""
44
        if not fmt_char:
45
            raise ValueError(f"Invalid length fmt_char parameter: {len(fmt_char)}")
46
        bo = self._get_byteorder_as_str()[1]
47
        if redefine_byte_order is not None:
48
            bo = redefine_byte_order[0]
49
        return ustruct.unpack(bo + fmt_char, source)
50

51
    @micropython.native
52
    def is_big_byteorder(self) -> bool:
53
        return self.big_byte_order
54

55

56
class BaseSensor(Device):
57
    """Base sensor class"""
58
    def get_id(self):
59
        raise NotImplementedError
60

61
    def soft_reset(self):
62
        raise NotImplementedError
63

64

65
class Iterator:
66
    def __iter__(self):
67
        return self
68

69
    def __next__(self):
70
        raise NotImplementedError
71

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.