tags: true
install:
+ - pip install -r requirements.txt
- pip install --force-reinstall pylint==1.9.2
- pip install circuitpython-build-tools Sphinx sphinx-rtd-theme
-Adafruit-GPIO
+Adafruit-PlatformDetect
RPi.GPIO; platform_machine=='armv7l' or platform_machine=='armv6l'
rpi_ws281x>=4.0.0; platform_machine=='armv7l' or platform_machine=='armv6l'
+spidev
# If your package is a single module, use this instead of 'packages':
py_modules=['bitbangio', 'board', 'busio', 'digitalio', 'micropython', 'neopixel_write'],
install_requires=[
- 'Adafruit-GPIO',
+ "Adafruit-PlatformDetect",
"RPi.GPIO; platform_machine=='armv7l' or platform_machine=='armv6l'",
- "rpi_ws281x>=4.0.0; platform_machine=='armv7l' or platform_machine=='armv6l'"
+ "rpi_ws281x>=4.0.0; platform_machine=='armv7l' or platform_machine=='armv6l'",
+ "spidev"
],
license='MIT',
classifiers=[
* Author(s): cefn
"""
-class Enum(object):
+class Enum():
"""
Object supporting CircuitPython-style of static symbols
as seen with Direction.OUTPUT, Pull.UP
def __exit__(self, exc_type, exc_value, traceback):
self.deinit()
+ # pylint: disable=no-self-use
def deinit(self):
"""Free any hardware used by the object."""
- pass
+ return
+ # pylint: enable=no-self-use
class Lockable(ContextManaged):
common modules and operations, depending on platform support
"""
import sys
+import adafruit_platformdetect
# We intentionally are patching into this namespace as module names so skip the name check.
# pylint: disable=invalid-name
-platform = sys.platform
-board_id = None
+# We'll define board and chip id values in agnostic rather than accessing
+# detector directly elsewhere, just in case additional indirection is necessary
+# at some later point:
-if platform is not None:
- if platform == "esp8266": # TODO more conservative board-guessing
- board_id = "feather_huzzah"
- elif platform == "samd21":
- board_id = "feather_m0_express"
- elif platform == "pyboard":
- platform = "stm32"
- board_id = "pyboard"
- elif platform == "linux":
- import re
- # we're going to redo the Platform detection, this is a terrible hack
- # for now.
- try:
- # lets see if we're an armbian board
- for line in open("/etc/armbian-release", 'r'):
- #print(line)
- m = re.search('BOARD=(.*)', line)
- if m:
- board_id = m.group(1)
- except:
- from Adafruit_GPIO import Platform
- if Platform.platform_detect() == Platform.RASPBERRY_PI:
- if Platform.pi_version() == 1:
- board_id = "raspi_1"
- elif Platform.pi_version() == 2:
- board_id = "raspi_2"
- elif Platform.pi_version() == 3:
- board_id = "raspi_3"
- elif Platform.platform_detect() == Platform.BEAGLEBONE_BLACK:
- board_id = "beaglebone_black"
+detector = adafruit_platformdetect.Detector()
+chip_id = detector.chip.id
+board_id = detector.board.id
implementation = sys.implementation.name
if implementation == "micropython":
from utime import sleep
-elif implementation == "circuitpython" or implementation == "cpython":
+elif implementation in ("circuitpython", "cpython"):
from time import sleep
-from adafruit_blinka.microcontroller.beaglebone_black import pin
+from adafruit_blinka.microcontroller.am335x import pin
# initial pins, to mimic bonescript demo
P8_3 = pin.P8_3
LED_USR3 = pin.USR3
# I2C and SPI pins from:
-# src/adafruit_blinka/board/raspi_23.py
+# src/adafruit_blinka/board/raspi_40pin.py
# SDA = pin.SDA
# SCL = pin.SCL
# CE1 = pin.D7
-from adafruit_blinka.microcontroller.raspi_23 import pin
+from adafruit_blinka.microcontroller.bcm283x import pin
D2 = pin.D2
SDA = pin.SDA
# Initialize the channel in use
count = 0
- if len(buf) % 3 == 0:
+ if len(buf) % 3 == 0:
# most common, divisible by 3 is likely RGB
LED_STRIP = ws.WS2811_STRIP_RGB
count = len(buf)//3
# Initialize the controller
ws.ws2811_t_freq_set(_led_strip, LED_FREQ_HZ)
ws.ws2811_t_dmanum_set(_led_strip, LED_DMA_NUM)
-
+
resp = ws.ws2811_init(_led_strip)
if resp != ws.WS2811_SUCCESS:
if resp == -5:
w = buf[bpp*i+3]
pixel = (w << 24) | (r << 16) | (g << 8) | b
ws.ws2811_led_set(channel, i, pixel)
-
+
resp = ws.ws2811_render(_led_strip)
if resp != ws.WS2811_SUCCESS:
message = ws.ws2811_get_return_t_str(resp)
"""
from adafruit_blinka import Lockable, agnostic
+import adafruit_platformdetect.board as ap_board
class I2C(Lockable):
def __init__(self, scl, sda, frequency=400000):
- if agnostic.microcontroller == "stm32":
+ # TODO: This one is a bit questionable:
+ if agnostic.board_id == ap_board.PYBOARD:
raise NotImplementedError("No software I2C on {}".format(agnostic.board_id))
self.init(scl, sda, frequency)
"""
import sys
-from adafruit_blinka.agnostic import board_id
+from adafruit_blinka.agnostic import board_id, detector
+import adafruit_platformdetect.board as ap_board
-if board_id == "feather_huzzah":
+# pylint: disable=wildcard-import,unused-wildcard-import,ungrouped-imports
+
+if board_id == ap_board.FEATHER_HUZZAH:
from adafruit_blinka.board.feather_huzzah import *
-elif board_id == "nodemcu":
+
+elif board_id == ap_board.NODEMCU:
from adafruit_blinka.board.nodemcu import *
-elif board_id == "pyboard":
+
+elif board_id == ap_board.PYBOARD:
from adafruit_blinka.board.pyboard import *
-elif board_id == "raspi_2" or board_id == "raspi_3":
- from adafruit_blinka.board.raspi_23 import *
-elif board_id == "beaglebone_black":
+
+elif detector.board.any_raspberry_pi_40_pin:
+ from adafruit_blinka.board.raspi_40pin import *
+
+elif board_id == ap_board.BEAGLEBONE_BLACK:
from adafruit_blinka.board.beaglebone_black import *
-elif board_id == "orangepipc":
+
+elif board_id == ap_board.ORANGE_PI_PC:
from adafruit_blinka.board.orangepipc import *
+
elif "sphinx" in sys.modules:
pass
+
else:
raise NotImplementedError("Board not supported")
"""
from adafruit_blinka import Enum, Lockable, agnostic
-from adafruit_blinka.agnostic import board_id
+from adafruit_blinka.agnostic import board_id, detector
+import adafruit_platformdetect.board as ap_board
class I2C(Lockable):
def __init__(self, scl, sda, frequency=400000):
def init(self, scl, sda, frequency):
self.deinit()
- if board_id in ("raspi_3", "raspi_2", "beaglebone_black", "orangepipc"):
+ if detector.board.any_embedded_linux:
from adafruit_blinka.microcontroller.generic_linux.i2c import I2C as _I2C
else:
from machine import I2C as _I2C
self._i2c = _I2C(portId, mode=_I2C.MASTER, baudrate=frequency)
break
else:
- raise NotImplementedError("No Hardware I2C on (scl,sda)={}\nValid UART ports".format(
- (scl, sda), i2cPorts))
+ raise NotImplementedError(
+ "No Hardware I2C on (scl,sda)={}\nValid UART ports: {}".format((scl, sda), i2cPorts)
+ )
def deinit(self):
try:
class SPI(Lockable):
def __init__(self, clock, MOSI=None, MISO=None):
self.deinit()
- if board_id in ("raspi_3", "raspi_2", "beaglebone_black", "orangepipc"):
+ if detector.board.any_embedded_linux:
from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
else:
from machine import SPI as _SPI
format((clock, MOSI, MISO), spiPorts))
def configure(self, baudrate=100000, polarity=0, phase=0, bits=8):
- if board_id == "raspi_3" or board_id == "raspi_2":
- from adafruit_blinka.microcontroller.raspi_23.pin import Pin
+ if detector.board.any_raspberry_pi:
+ from adafruit_blinka.microcontroller.bcm283x.pin import Pin
from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
- elif board_id == "beaglebone_black":
- # reuse the raspberry pi class as both boards use Linux spidev
- from adafruit_blinka.microcontroller.beaglebone_black.pin import Pin
+ elif board_id == ap_board.BEAGLEBONE_BLACK:
+ from adafruit_blinka.microcontroller.am335x.pin import Pin
from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
- elif board_id == "orangepipc":
+ elif board_id == ap_board.ORANGE_PI_PC:
from adafruit_blinka.microcontroller.allwinner_h3.pin import Pin
from adafruit_blinka.microcontroller.generic_linux.spi import SPI as _SPI
else:
if flow is not None: # default 0
raise NotImplementedError(
"Parameter '{}' unsupported on {}".format(
- "flow", agnostic.board))
+ "flow", agnostic.board_id))
# translate parity flag for Micropython
if parity is UART.Parity.ODD:
break
else:
raise NotImplementedError(
- "No Hardware UART on (tx,rx)={}\nValid UART ports".format(
- (tx, rx), uartPorts))
+ "No Hardware UART on (tx,rx)={}\nValid UART ports: {}".format((tx, rx), uartPorts)
+ )
def deinit(self):
self._uart = None
* Author(s): cefn
"""
-from adafruit_blinka.agnostic import board_id
-if board_id == "raspi_3" or board_id == "raspi_2":
- from adafruit_blinka.microcontroller.raspi_23.pin import Pin
-elif board_id == "beaglebone_black":
- from adafruit_blinka.microcontroller.beaglebone_black.pin import Pin
-elif board_id == "orangepipc":
+from adafruit_blinka.agnostic import board_id, detector
+
+# pylint: disable=ungrouped-imports,wrong-import-position
+
+if detector.chip.BCM2XXX:
+ from adafruit_blinka.microcontroller.bcm283x.pin import Pin
+elif detector.chip.AM33XX:
+ from adafruit_blinka.microcontroller.am335x.pin import Pin
+elif detector.chip.SUN8I:
from adafruit_blinka.microcontroller.allwinner_h3.pin import Pin
-elif board_id == "pyboard":
+elif detector.chip.STM32:
from machine import Pin
from adafruit_blinka import Enum, ContextManaged
self._pin.init(mode=Pin.IN, pull=Pin.PULL_DOWN)
else:
raise NotImplementedError("{} unsupported on {}".format(
- Pull.DOWN, boardId))
+ Pull.DOWN, board_id))
elif pul is None:
self._pin.init(mode=Pin.IN, pull=None)
else:
"""Microcontroller pins"""
+from adafruit_platformdetect import chip as ap_chip
from adafruit_blinka import Enum
-from adafruit_blinka.agnostic import board_id, platform
+from adafruit_blinka.agnostic import board_id, chip_id
class Pin(Enum):
"""Reference Pin object"""
return repr(self)
# We intentionally are patching into this namespace so skip the wildcard check.
-# pylint: disable=unused-wildcard-import,wildcard-import
+# pylint: disable=unused-wildcard-import,wildcard-import,ungrouped-imports
-if platform == "esp8266":
+if chip_id == ap_chip.ESP8266:
from adafruit_blinka.microcontroller.esp8266 import *
-elif platform == "stm32":
+elif chip_id == ap_chip.STM32:
from adafruit_blinka.microcontroller.stm32 import *
-elif platform == "linux":
- if board_id == "raspi_3" or board_id == "raspi_2":
- from adafruit_blinka.microcontroller.raspi_23 import *
- elif board_id == "beaglebone_black":
- from adafruit_blinka.microcontroller.beaglebone_black import *
- elif board_id == "orangepipc":
- from adafruit_blinka.microcontroller.allwinner_h3 import *
- else:
- raise NotImplementedError("Board not supported:", board_id)
+elif chip_id == ap_chip.BCM2XXX:
+ from adafruit_blinka.microcontroller.bcm283x import *
+elif chip_id == ap_chip.AM33XX:
+ from adafruit_blinka.microcontroller.am335x import *
+elif chip_id == ap_chip.SUN8I:
+ from adafruit_blinka.microcontroller.allwinner_h3 import *
else:
- raise NotImplementedError("Platform not supported:", platform)
+ raise NotImplementedError("Microcontroller not supported:", chip_id)
"""Pins named after their chip name."""
-from adafruit_blinka import agnostic
+import adafruit_platformdetect.chip as ap_chip
+from adafruit_blinka.agnostic import chip_id
# We intentionally are patching into this namespace so skip the wildcard check.
-# pylint: disable=unused-wildcard-import,wildcard-import
-if agnostic.platform == "esp8266":
+# pylint: disable=unused-wildcard-import,wildcard-import,ungrouped-imports
+
+if chip_id == ap_chip.ESP8266:
from adafruit_blinka.microcontroller.esp8266.pin import *
-elif agnostic.platform == "stm32":
+elif chip_id == ap_chip.STM32:
from adafruit_blinka.microcontroller.stm32.pin import *
-elif agnostic.platform == "linux":
- if agnostic.board_id == "raspi_3" or agnostic.board_id == "raspi_2":
- from adafruit_blinka.microcontroller.raspi_23.pin import *
- elif agnostic.board_id == "beaglebone_black":
- from adafruit_blinka.microcontroller.beaglebone_black.pin import *
- elif agnostic.board_id == "orangepipc":
- from adafruit_blinka.microcontroller.allwinner_h3.pin import *
- else:
- raise NotImplementedError("Board not supported: ", agnostic.board_id)
+elif chip_id == ap_chip.BCM2XXX:
+ from adafruit_blinka.microcontroller.bcm283x.pin import *
+elif chip_id == ap_chip.AM33XX:
+ from adafruit_blinka.microcontroller.am335x.pin import *
+elif chip_id == ap_chip.SUN8I:
+ from adafruit_blinka.microcontroller.allwinner_h3.pin import *
else:
- raise NotImplementedError("Microcontroller not supported")
+ raise NotImplementedError("Microcontroller not supported: ", chip_id)
import sys
-from adafruit_blinka.agnostic import board_id
+from adafruit_blinka.agnostic import detector
-if board_id == "raspi_2" or board_id == "raspi_3":
- from adafruit_blinka.microcontroller.raspi_23 import neopixel as _neopixel
+if detector.board.any_raspberry_pi:
+ from adafruit_blinka.microcontroller.bcm283x import neopixel as _neopixel
elif "sphinx" in sys.modules:
pass
else:
-import sys
-from adafruit_blinka.agnostic import board_id
+from adafruit_blinka.agnostic import detector
-
-if board_id == "raspi_2" or board_id == "raspi_3":
- from adafruit_blinka.microcontroller.raspi_23.pulseio.PulseIn import PulseIn as PulseIn
+if detector.board.any_raspberry_pi:
+ from adafruit_blinka.microcontroller.bcm283x.pulseio.PulseIn import PulseIn