159 lines
4.8 KiB
Python
159 lines
4.8 KiB
Python
|
class uPyConfig:
|
||
|
from machine import I2C, Pin
|
||
|
class features:
|
||
|
class connectivity:
|
||
|
wifi = False
|
||
|
bluetooth = False
|
||
|
bluetooth_le = False
|
||
|
lora = False
|
||
|
|
||
|
class display:
|
||
|
oled = False
|
||
|
|
||
|
class sensor:
|
||
|
capacitive = False
|
||
|
temperature = False
|
||
|
hall_effect = False
|
||
|
|
||
|
class _i2c:
|
||
|
from machine import I2C, Pin
|
||
|
|
||
|
def load_handle(self):
|
||
|
self.bus = self.I2C(scl=self.scl, sda=self.sda)
|
||
|
self.bus.init(scl=self.scl, sda=self.sda)
|
||
|
|
||
|
def __init__(self, scl, sda):
|
||
|
self.scl=self.Pin(scl)
|
||
|
self.sda=self.Pin(sda)
|
||
|
self.load_handle()
|
||
|
|
||
|
class _oled:
|
||
|
from machine import Pin
|
||
|
from time import sleep_ms
|
||
|
addr = 0x0
|
||
|
rst = 0
|
||
|
rst_hold = False
|
||
|
height = 0
|
||
|
width = 0
|
||
|
|
||
|
def load_handle(self):
|
||
|
if self.rst_hold:
|
||
|
self.rst = self.Pin(self.rst, self.Pin.OUT)
|
||
|
self.rst.value(0)
|
||
|
self.sleep_ms(2)
|
||
|
self.rst.value(1)
|
||
|
from ssd1306 import SSD1306_I2C
|
||
|
self.handle = SSD1306_I2C(self.width, self.height, self.i2c.bus)
|
||
|
|
||
|
def __init__(self, i2c):
|
||
|
self.i2c = i2c
|
||
|
|
||
|
def __init__(self, board_defs):
|
||
|
self.i2c = self._i2c(board_defs['i2c_scl'], board_defs['i2c_sda'])
|
||
|
if 'has_wifi' in board_defs.keys(): self.features.connectivity.wifi = True
|
||
|
if 'has_bluetooth' in board_defs.keys(): self.features.connectivity.bluetooth = True
|
||
|
if 'has_bluetooth_le' in board_defs.keys(): self.features.connectivity.bluetooth_le = True
|
||
|
if 'sen_capacitive' in board_defs.keys(): self.features.sensor.capacitive = True
|
||
|
if 'sen_temperature' in board_defs.keys(): self.features.sensor.temperature = True
|
||
|
if 'sen_hall' in board_defs.keys(): self.features.sensor.hall_effect = True
|
||
|
if 'has_oled' in board_defs.keys():
|
||
|
self.features.display.oled = True
|
||
|
self.oled = self._oled(self.i2c)
|
||
|
self.oled.addr = board_defs['oled_addr']
|
||
|
if 'oled_hold' in board_defs.keys(): self.oled.rst_hold = board_defs['oled_hold']
|
||
|
if 'oled_rst' in board_defs.keys(): self.oled.rst = board_defs['oled_rst']
|
||
|
self.oled.width = board_defs['oled_width']
|
||
|
self.oled.height = board_defs['oled_height']
|
||
|
self.oled.load_handle()
|
||
|
|
||
|
class esp8266(uPyConfig):
|
||
|
family = 'esp8266'
|
||
|
|
||
|
defaults = {
|
||
|
'has_wifi': True,
|
||
|
'i2c_scl': 4,
|
||
|
'i2c_sda': 5,
|
||
|
'oled_addr': 0x3c,
|
||
|
}
|
||
|
|
||
|
variants = {
|
||
|
'generic': {},
|
||
|
'lolinv3': {
|
||
|
'i2c_scl': 4,
|
||
|
'i2c_sda': 5,
|
||
|
},
|
||
|
'd1-r2': {
|
||
|
'i2c_scl': 5,
|
||
|
'i2c_sda': 4,
|
||
|
},
|
||
|
'heltec': {
|
||
|
'i2c_scl': 5,
|
||
|
'i2c_sda': 4,
|
||
|
'oled_rst': 16,
|
||
|
'has_oled': True,
|
||
|
'oled_hold': True,
|
||
|
'oled_height': 32,
|
||
|
'oled_width': 128,
|
||
|
},
|
||
|
'ttgo': {
|
||
|
'i2c_scl': 14,
|
||
|
'i2c_sda': 2,
|
||
|
'oled_rst': 4,
|
||
|
'has_oled': True,
|
||
|
'oled_hold': True,
|
||
|
'oled_height': 32,
|
||
|
'oled_width': 128,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
def __init__(self, variant='generic'):
|
||
|
if variant in self.variants.keys():
|
||
|
self.variant = variant
|
||
|
defs = self.defaults.copy()
|
||
|
defs.update(self.variants[variant])
|
||
|
super().__init__(defs)
|
||
|
else:
|
||
|
raise ValueError("Board variant '%s' is not known" % variant)
|
||
|
|
||
|
class esp32(uPyConfig):
|
||
|
family = 'esp32'
|
||
|
|
||
|
defaults = {
|
||
|
'has_wifi': True,
|
||
|
'has_bluetooth': True,
|
||
|
'has_bluetooth_le': True,
|
||
|
'sen_capacitive': True,
|
||
|
'sen_temperature': True,
|
||
|
'sen_hall': True,
|
||
|
'i2c_scl': 4,
|
||
|
'i2c_sda': 5,
|
||
|
'oled_addr': 0x3c,
|
||
|
}
|
||
|
|
||
|
variants = {
|
||
|
'generic': {},
|
||
|
'wemos-lolin32': {
|
||
|
'has_oled': True,
|
||
|
'oled_height': 64,
|
||
|
'oled_width': 128,
|
||
|
},
|
||
|
'heltec': {
|
||
|
'i2c_scl': 15,
|
||
|
'i2c_sda': 4,
|
||
|
'oled_rst': 16,
|
||
|
'has_oled': True,
|
||
|
'oled_hold': True,
|
||
|
'oled_height': 64,
|
||
|
'oled_width': 128,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
def __init__(self, variant='generic'):
|
||
|
if variant in self.variants.keys():
|
||
|
self.variant = variant
|
||
|
defs = self.defaults.copy()
|
||
|
defs.update(self.variants[variant])
|
||
|
super().__init__(defs)
|
||
|
else:
|
||
|
raise ValueError("Board variant '%s' is not known" % variant)
|