Browse Source
This adds two new UM boards: OMGS3 and RGB Touch Mini. Also fixed the NanoS3 deploy info. Signed-off-by: Seon Rozenblum <seon@unexpectedmaker.com>pull/15848/head
Seon Rozenblum
2 months ago
committed by
Damien George
19 changed files with 410 additions and 2 deletions
@ -0,0 +1,25 @@ |
|||
{ |
|||
"deploy": [ |
|||
"deploy.md" |
|||
], |
|||
"docs": "", |
|||
"features": [ |
|||
"Battery Charging", |
|||
"RGB LED", |
|||
"External RAM", |
|||
"WiFi", |
|||
"BLE" |
|||
], |
|||
"features_non_filterable": [ |
|||
"I2C BAT Fuel Gauge" |
|||
], |
|||
"id": "omgs3", |
|||
"images": [ |
|||
"unexpectedmaker_omgs3.jpg" |
|||
], |
|||
"mcu": "esp32s3", |
|||
"product": "OMGS3", |
|||
"thumbnail": "", |
|||
"url": "https://omgs3.io", |
|||
"vendor": "Unexpected Maker" |
|||
} |
@ -0,0 +1 @@ |
|||
The following files are firmware for the OMGS3. |
@ -0,0 +1,53 @@ |
|||
Program your board using the latest version of the esptool.py program, found [here](https://github.com/espressif/esptool). |
|||
|
|||
To flash or erase your OMGS3, you have to first put it into download mode. |
|||
OMGS3 doesn't include buttons for RESET and IO0, which should be provided by adding external buttons via a carrier board or other method. |
|||
To put the OMGS3 into download, follow these steps: |
|||
|
|||
- Press and hold the [BOOT] button |
|||
- Press and release the [RESET] button |
|||
- Release the [BOOT] button |
|||
|
|||
Now the board is in download mode and the native USB will have enumerated as a serial device. |
|||
|
|||
If you are putting MicroPython on your board for the first time then you should |
|||
first erase the entire flash using: |
|||
|
|||
### Linux |
|||
```bash |
|||
esptool.py --chip esp32s3 --port /dev/ttyACM0 erase_flash |
|||
``` |
|||
|
|||
### Mac |
|||
Please do a `ls /dev/cu.usbm*` to determine the port your board has enumerated as. |
|||
```bash |
|||
esptool.py --chip esp32s3 --port /dev/cu.usbmodem01 erase_flash |
|||
``` |
|||
|
|||
### Windows |
|||
Change (X) to whatever COM port is being used by the board |
|||
```bash |
|||
esptool --chip esp32s3 --port COM(X) erase_flash |
|||
``` |
|||
|
|||
Now download the version of the firmware you would like to install from the options below, |
|||
then use the following command to program the firmware starting at address 0x0, |
|||
remembering to replace `omgs3-micropython-firmware-version.bin` with the name of |
|||
the firmware you just downloaded: |
|||
|
|||
### Linux |
|||
```bash |
|||
esptool.py --chip esp32s3 --port /dev/ttyACM0 write_flash -z 0x0 omgs3-micropython-firmware-version.bin |
|||
``` |
|||
|
|||
### Mac |
|||
Please do a `ls /dev/cu.usbm*` to determine the port your board has enumerated as. |
|||
```bash |
|||
esptool.py --chip esp32s3 --port /dev/cu.usbmodem01 write_flash -z 0x0 omgs3-micropython-firmware-version.bin |
|||
``` |
|||
|
|||
### Windows |
|||
Change (X) to whatever COM port is being used by the board |
|||
```bash |
|||
esptool --chip esp32s3 --port COM(X) write_flash -z 0x0 omgs3-micropython-firmware-version.bin |
|||
``` |
@ -0,0 +1,2 @@ |
|||
include("$(PORT_DIR)/boards/manifest.py") |
|||
freeze("modules") |
@ -0,0 +1,72 @@ |
|||
# Basic MAX17048 library for OMGS3 and other Unexpected Maker products |
|||
# MIT license; Copyright (c) 2024 Seon Rozenblum - Unexpected Maker |
|||
# |
|||
# Project home: |
|||
# https://unexpectedmaker.com |
|||
|
|||
from machine import I2C |
|||
|
|||
|
|||
class MAX17048: |
|||
_MAX17048_ADDRESS = 0x36 |
|||
|
|||
_VCELL_REGISTER = 0x02 |
|||
_SOC_REGISTER = 0x04 |
|||
_MODE_REGISTER = 0x06 |
|||
_VERSION_REGISTER = 0x08 |
|||
_HIBRT_REGISTER = 0x0A |
|||
_CONFIG_REGISTER = 0x0C |
|||
_COMMAND_REGISTER = 0xFE |
|||
|
|||
def __init__(self, i2c, address=_MAX17048_ADDRESS): |
|||
self.i2c = i2c |
|||
self.address = address |
|||
|
|||
def _read_register(self, register, num_bytes): |
|||
result = self.i2c.readfrom_mem(self.address, register, num_bytes) |
|||
return int.from_bytes(result, "big") |
|||
|
|||
def _write_register(self, register, value, num_bytes): |
|||
data = value.to_bytes(num_bytes, "big") |
|||
self.i2c.writeto_mem(self.address, register, data) |
|||
|
|||
@property |
|||
def cell_voltage(self): |
|||
"""The voltage of the connected cell in Volts.""" |
|||
raw_voltage = self._read_register(self._VCELL_REGISTER, 2) |
|||
voltage = (raw_voltage >> 4) * 0.00125 |
|||
return voltage |
|||
|
|||
@property |
|||
def state_of_charge(self): |
|||
"""The state of charge of the battery in percentage.""" |
|||
raw_soc = self._read_register(self._SOC_REGISTER, 2) |
|||
return raw_soc / 256 |
|||
|
|||
@property |
|||
def version(self): |
|||
"""The chip version.""" |
|||
return self._read_register(self._VERSION_REGISTER, 2) |
|||
|
|||
@property |
|||
def hibernate(self): |
|||
"""True if the chip is in hibernate mode, False otherwise.""" |
|||
hib = self._read_register(self._HIBRT_REGISTER, 2) |
|||
return (hib & 0x4000) != 0 |
|||
|
|||
@hibernate.setter |
|||
def hibernate(self, value): |
|||
config = self._read_register(self._CONFIG_REGISTER, 2) |
|||
if value: |
|||
config |= 0x8000 # Set the sleep bit |
|||
else: |
|||
config &= ~0x8000 # Clear the sleep bit |
|||
self._write_register(self._CONFIG_REGISTER, config, 2) |
|||
|
|||
def quick_start(self): |
|||
"""Perform a quick start to reset the SOC calculation in the chip.""" |
|||
self._write_register(self._MODE_REGISTER, 0x4000, 2) |
|||
|
|||
def reset(self): |
|||
"""Reset the chip.""" |
|||
self._write_register(self._COMMAND_REGISTER, 0x5400, 2) |
@ -0,0 +1,57 @@ |
|||
# OMGS3 Helper Library |
|||
# MIT license; Copyright (c) 2024 Seon Rozenblum - Unexpected Maker |
|||
# |
|||
# Project home: |
|||
# https://omgs3.io |
|||
|
|||
# Import required libraries |
|||
from micropython import const |
|||
from machine import Pin, I2C |
|||
from max17048 import MAX17048 |
|||
import time |
|||
|
|||
# Initialize I2C bus |
|||
fg_i2c = I2C(0, scl=Pin.board.I2C_SCL, sda=Pin.board.I2C_SDA) |
|||
|
|||
# Create an instance of the MAX17048 class |
|||
max17048 = MAX17048(fg_i2c) |
|||
|
|||
|
|||
# Helper functions |
|||
def get_bat_voltage(): |
|||
"""Read the battery voltage from the fuel gauge""" |
|||
voltage = max17048.cell_voltage |
|||
print(f"Bat Voltage: {voltage}V") |
|||
return voltage |
|||
|
|||
|
|||
def get_state_of_charge(): |
|||
"""Read the battery state of charge from the fuel gauge""" |
|||
soc = max17048.state_of_charge |
|||
print(f"State of Charge: {soc}%") |
|||
return soc |
|||
|
|||
|
|||
def get_vbus_present(): |
|||
"""Detect if VBUS (5V) power source is present""" |
|||
return Pin(Pin.board.VBUS_SENSE, Pin.IN).value() == 1 |
|||
|
|||
|
|||
def set_pixel_power(state): |
|||
"""Enable or Disable power to the onboard NeoPixel to either show colour, or to reduce power for deep sleep.""" |
|||
Pin(Pin.board.RGB_PWR, Pin.OUT).value(state) |
|||
|
|||
|
|||
# NeoPixel rainbow colour wheel |
|||
def rgb_color_wheel(wheel_pos): |
|||
"""Color wheel to allow for cycling through the rainbow of RGB colors.""" |
|||
wheel_pos = wheel_pos % 255 |
|||
|
|||
if wheel_pos < 85: |
|||
return 255 - wheel_pos * 3, 0, wheel_pos * 3 |
|||
elif wheel_pos < 170: |
|||
wheel_pos -= 85 |
|||
return 0, wheel_pos * 3, 255 - wheel_pos * 3 |
|||
else: |
|||
wheel_pos -= 170 |
|||
return wheel_pos * 3, 255 - wheel_pos * 3, 0 |
@ -0,0 +1,13 @@ |
|||
set(IDF_TARGET esp32s3) |
|||
|
|||
set(SDKCONFIG_DEFAULTS |
|||
boards/sdkconfig.base |
|||
${SDKCONFIG_IDF_VERSION_SPECIFIC} |
|||
boards/sdkconfig.usb |
|||
boards/sdkconfig.ble |
|||
boards/sdkconfig.240mhz |
|||
boards/sdkconfig.spiram_sx |
|||
boards/UM_OMGS3/sdkconfig.board |
|||
) |
|||
|
|||
set(MICROPY_FROZEN_MANIFEST ${MICROPY_BOARD_DIR}/manifest.py) |
@ -0,0 +1,10 @@ |
|||
#define MICROPY_HW_BOARD_NAME "OMGS3" |
|||
#define MICROPY_HW_MCU_NAME "ESP32-S3-PICO-1-N8R2" |
|||
#define MICROPY_PY_NETWORK_HOSTNAME_DEFAULT "OMGS3" |
|||
|
|||
#define MICROPY_HW_I2C0_SCL (9) |
|||
#define MICROPY_HW_I2C0_SDA (8) |
|||
|
|||
#define MICROPY_HW_SPI1_MOSI (6) |
|||
#define MICROPY_HW_SPI1_MISO (5) |
|||
#define MICROPY_HW_SPI1_SCK (4) |
|
@ -0,0 +1,21 @@ |
|||
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y |
|||
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y |
|||
CONFIG_ESPTOOLPY_AFTER_NORESET=y |
|||
|
|||
CONFIG_ESPTOOLPY_FLASHSIZE_4MB= |
|||
CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y |
|||
CONFIG_ESPTOOLPY_FLASHSIZE_16MB= |
|||
CONFIG_SPIRAM_MEMTEST= |
|||
CONFIG_PARTITION_TABLE_CUSTOM=y |
|||
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-8MiB.csv" |
|||
|
|||
CONFIG_LWIP_LOCAL_HOSTNAME="UMOMGS3" |
|||
|
|||
CONFIG_TINYUSB_DESC_CUSTOM_VID=0x303A |
|||
CONFIG_TINYUSB_DESC_CUSTOM_PID=0x8225 |
|||
CONFIG_TINYUSB_DESC_BCD_DEVICE=0x0100 |
|||
CONFIG_TINYUSB_DESC_USE_ESPRESSIF_VID=n |
|||
CONFIG_TINYUSB_DESC_USE_DEFAULT_PID=n |
|||
CONFIG_TINYUSB_DESC_MANUFACTURER_STRING="Unexpected Maker" |
|||
CONFIG_TINYUSB_DESC_PRODUCT_STRING="OMGS3" |
|||
CONFIG_TINYUSB_DESC_SERIAL_STRING="_omgs3_" |
@ -0,0 +1,29 @@ |
|||
{ |
|||
"deploy": [ |
|||
"deploy.md" |
|||
], |
|||
"docs": "", |
|||
"features": [ |
|||
"BLE", |
|||
"Battery Charging", |
|||
"External Flash", |
|||
"External RAM", |
|||
"RGB LED", |
|||
"USB-C", |
|||
"WiFi" |
|||
], |
|||
"features_non_filterable": [ |
|||
"3 Axis IMU", |
|||
"12x12 RGB LED Matrix", |
|||
"Capacitive Touch", |
|||
"I2S Audio Amplifier + Speaker" |
|||
], |
|||
"images": [ |
|||
"unexpectedmaker_rgbtouch_mini.jpg" |
|||
], |
|||
"mcu": "esp32s3", |
|||
"product": "RGB Touch Mini", |
|||
"thumbnail": "", |
|||
"url": "https://rgbtouch.com", |
|||
"vendor": "Unexpected Maker" |
|||
} |
@ -0,0 +1 @@ |
|||
The following files are firmware for the RGB Touch Mini. |
@ -0,0 +1,52 @@ |
|||
Program your board using the latest version of the esptool.py program, found [here](https://github.com/espressif/esptool). |
|||
|
|||
To flash or erase your RGB Touch Mini, you have to first put it into download mode. |
|||
To do this, follow these steps: |
|||
|
|||
- Press and hold the [BOOT] button |
|||
- Press and release the [RESET] button |
|||
- Release the [BOOT] button |
|||
|
|||
Now the board is in download mode and the native USB will have enumerated as a serial device. |
|||
|
|||
If you are putting MicroPython on your board for the first time then you should |
|||
first erase the entire flash using: |
|||
|
|||
### Linux |
|||
```bash |
|||
esptool.py --chip esp32s3 --port /dev/ttyACM0 erase_flash |
|||
``` |
|||
|
|||
### Mac |
|||
Please do a `ls /dev/cu.usbm*` to determine the port your board has enumerated as. |
|||
```bash |
|||
esptool.py --chip esp32s3 --port /dev/cu.usbmodem01 erase_flash |
|||
``` |
|||
|
|||
### Windows |
|||
Change (X) to whatever COM port is being used by the board |
|||
```bash |
|||
esptool --chip esp32s3 --port COM(X) erase_flash |
|||
``` |
|||
|
|||
Now download the version of the firmware you would like to install from the options below, |
|||
then use the following command to program the firmware starting at address 0x0, |
|||
remembering to replace `rgbtouch_mini-micropython-firmware-version.bin` with the name of |
|||
the firmware you just downloaded: |
|||
|
|||
### Linux |
|||
```bash |
|||
esptool.py --chip esp32s3 --port /dev/ttyACM0 write_flash -z 0x0 rgbtouch_mini-micropython-firmware-version.bin |
|||
``` |
|||
|
|||
### Mac |
|||
Please do a `ls /dev/cu.usbm*` to determine the port your board has enumerated as. |
|||
```bash |
|||
esptool.py --chip esp32s3 --port /dev/cu.usbmodem01 write_flash -z 0x0 rgbtouch_mini-micropython-firmware-version.bin |
|||
``` |
|||
|
|||
### Windows |
|||
Change (X) to whatever COM port is being used by the board |
|||
```bash |
|||
esptool --chip esp32s3 --port COM(X) write_flash -z 0x0 rgbtouch_mini-micropython-firmware-version.bin |
|||
``` |
@ -0,0 +1,2 @@ |
|||
include("$(PORT_DIR)/boards/manifest.py") |
|||
freeze("modules") |
@ -0,0 +1,13 @@ |
|||
set(IDF_TARGET esp32s3) |
|||
|
|||
set(SDKCONFIG_DEFAULTS |
|||
boards/sdkconfig.base |
|||
${SDKCONFIG_IDF_VERSION_SPECIFIC} |
|||
boards/sdkconfig.usb |
|||
boards/sdkconfig.ble |
|||
boards/sdkconfig.240mhz |
|||
boards/sdkconfig.spiram_sx |
|||
boards/UM_RGBTOUCH_MINI/sdkconfig.board |
|||
) |
|||
|
|||
set(MICROPY_FROZEN_MANIFEST ${MICROPY_BOARD_DIR}/manifest.py) |
@ -0,0 +1,10 @@ |
|||
#define MICROPY_HW_BOARD_NAME "RGB Touch Mini" |
|||
#define MICROPY_HW_MCU_NAME "ESP32-S3-PICO-1-N8R2" |
|||
#define MICROPY_PY_NETWORK_HOSTNAME_DEFAULT "RGBTouchMini" |
|||
|
|||
#define MICROPY_HW_I2C0_SCL (9) |
|||
#define MICROPY_HW_I2C0_SDA (8) |
|||
|
|||
#define MICROPY_HW_SPI1_MOSI (35) |
|||
#define MICROPY_HW_SPI1_MISO (37) |
|||
#define MICROPY_HW_SPI1_SCK (36) |
|
@ -0,0 +1,21 @@ |
|||
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y |
|||
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y |
|||
CONFIG_ESPTOOLPY_AFTER_NORESET=y |
|||
|
|||
CONFIG_ESPTOOLPY_FLASHSIZE_4MB= |
|||
CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y |
|||
CONFIG_ESPTOOLPY_FLASHSIZE_16MB= |
|||
CONFIG_SPIRAM_MEMTEST= |
|||
CONFIG_PARTITION_TABLE_CUSTOM=y |
|||
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-8MiB.csv" |
|||
|
|||
CONFIG_LWIP_LOCAL_HOSTNAME="UMRGBTouchMini" |
|||
|
|||
CONFIG_TINYUSB_DESC_CUSTOM_VID=0x303A |
|||
CONFIG_TINYUSB_DESC_CUSTOM_PID=0x81FF |
|||
CONFIG_TINYUSB_DESC_BCD_DEVICE=0x0100 |
|||
CONFIG_TINYUSB_DESC_USE_ESPRESSIF_VID=n |
|||
CONFIG_TINYUSB_DESC_USE_DEFAULT_PID=n |
|||
CONFIG_TINYUSB_DESC_MANUFACTURER_STRING="Unexpected Maker" |
|||
CONFIG_TINYUSB_DESC_PRODUCT_STRING="RGBTouchMini" |
|||
CONFIG_TINYUSB_DESC_SERIAL_STRING="_rgbtouch_mini_" |
Loading…
Reference in new issue