Skip to content

Update boards, CI methods, Add Xiao breakout/camera SD defs #6

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 19 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/daily-update.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ jobs:
git submodule init
git submodule update --recursive
cd Wippersnapper_Boards
git reset --hard origin/rp2040_datalogger_feather
git reset --hard origin/offline-mode
cd ../Wippersnapper_Components
git reset --hard origin/main
Comment on lines -45 to -47
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Double check old branches versus new ones, for any missing boards / settings / components

git reset --hard origin/offline-mode
cd ..
git add Wippersnapper_Boards Wippersnapper_Components
git diff --staged --quiet || git commit -m "Update submodules to latest versions [skip ci]"
Expand Down
2 changes: 1 addition & 1 deletion Wippersnapper_Boards
Submodule Wippersnapper_Boards updated 50 files
+170 −0 boards/dfrobot-beetle-esp32c3/definition.json
+1,653 −0 boards/dfrobot-beetle-esp32c3/image.svg
+29 −0 boards/dfrobot-beetle-esp32c3/magic.json
+431 −0 boards/esp32s3-devkitc-1-n8/definition.json
+ boards/esp32s3-devkitc-1-n8/image.jpg
+31 −0 boards/esp32s3-devkitc-1-n8/magic.json
+0 −1 boards/feather-esp32-v2/definition.json
+0 −1 boards/feather-esp32/definition.json
+0 −1 boards/feather-esp32c6/definition.json
+14 −2 boards/feather-esp32s2-reverse-tft/definition.json
+14 −2 boards/feather-esp32s2-tft/definition.json
+15 −2 boards/feather-esp32s2/definition.json
+14 −2 boards/feather-esp32s3-4mbflash-2mbpsram/definition.json
+14 −2 boards/feather-esp32s3-reverse-tft/definition.json
+14 −2 boards/feather-esp32s3-tft/definition.json
+1 −1 boards/feather-esp32s3/definition.json
+0 −1 boards/feather-esp8266/definition.json
+0 −262 boards/feather-rp2040-adalogger/definition.json
+0 −73 boards/feather-rp2040-adalogger/magic.json
+1 −1 boards/funhouse/definition.json
+0 −1 boards/itsybitsy-esp32/definition.json
+14 −2 boards/magtag/definition.json
+0 −1 boards/metro-m4-airliftlite-tinyusb/definition.json
+0 −203 boards/metro-rp2040/definition.json
+0 −49 boards/metro-rp2040/magic.json
+0 −270 boards/metro-rp2350/definition.json
+0 −50 boards/metro-rp2350/magic.json
+14 −2 boards/metroesp32s2/definition.json
+2 −2 boards/metroesp32s3/definition.json
+0 −1 boards/microchip-mcp2221/definition.json
+0 −2 boards/pyportal-tinyusb/definition.json
+0 −2 boards/pyportal-titano-tinyusb/definition.json
+0 −1 boards/qtpy-esp32/definition.json
+0 −1 boards/qtpy-esp32c3/definition.json
+14 −2 boards/qtpy-esp32s2/definition.json
+14 −2 boards/qtpy-esp32s3-n4r2/definition.json
+1 −1 boards/qtpy-esp32s3/definition.json
+0 −1 boards/rpi-pico-2w/definition.json
+0 −1 boards/rpi-pico-w/definition.json
+6 −5 boards/schema.json
+68 −0 boards/sparklemotionstick-esp32/definition.json
+1 −0 boards/sparklemotionstick-esp32/image.svg
+60 −0 boards/sparklemotionstick-esp32/magic.json
+218 −0 boards/xiao-esp32s3/definition.json
+ boards/xiao-esp32s3/image.png
+ boards/xiao-esp32s3/images/boot-drive.png
+ boards/xiao-esp32s3/images/drag-drop.png
+ boards/xiao-esp32s3/images/reset.png
+ boards/xiao-esp32s3/images/usb.png
+21 −0 boards/xiao-esp32s3/magic.json
6 changes: 3 additions & 3 deletions convert_components_to_json.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,12 +268,12 @@ def convert_components_to_json():

# Write the consolidated JSON file
with open(OUTPUT_FILE, 'w') as f:
json.dump({"components": components}, f, indent=2)
json.dump({"components": components}, f, ensure_ascii=False, indent=2)

# Write the consolidated JS file
with open(OUTPUT_FILE.replace('.json', '.js'), 'w') as f:
f.write("window.jsonComponentsObject = ")
json.dump({"components": components}, f, indent=2)
json.dump({"components": components}, f, ensure_ascii=False, indent=2)
f.write(";\n")

print(f"Successfully created {OUTPUT_FILE}")
Expand Down
2 changes: 1 addition & 1 deletion firmware-data.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Auto-generated on 2025-08-11 00:22:56
// Auto-generated on 2025-08-11 14:04:12
const FIRMWARE_DATA = {
"releaseInfo": {
"version": "1.0.0-offline-beta.3",
Expand Down
6 changes: 4 additions & 2 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,8 @@ <h2>2. Select Companion Board (Optional)</h2>
<option value="microsd-bff">Adafruit microSD Card BFF Add-On for QT Py and Xiao</option>
<option value="winc1500-shield">Adafruit WINC1500 WiFi Shield</option>
<option value="airlift-shield">Adafruit AirLift Shield - ESP32 WiFi Co-Processor</option>

<option value="seeed-xiao-s3sense-camera-addon">Seeed Studio XIAO ESP32S3 Sense Camera/SD Add-on board</option>
<option value="seeed-xiao-ssd1306-expansion-base">Seeed Studio XIAO Expansion base board</option>
</select>

<div id="companion-details" class="hidden">
Expand Down Expand Up @@ -358,6 +359,7 @@ <h3>Real-time clock (RTC) Configuration</h3>
<select id="rtc-select">
<option value="soft">Software RTC</option>
<option value="PCF8523">PCF8523</option>
<option value="PCF8563">PCF8563</option>
<option value="DS3231">DS3231</option>
<option value="DS1307">DS1307</option>
</select>
Expand Down Expand Up @@ -508,7 +510,7 @@ <h2>6. Selected Components</h2>
<div id="generate-section" class="section hidden">
<h2>7. Generate Configuration</h2>
<button id="generate-config-btn">Generate Configuration</button>
<input type="checkbox" id="use-auto-init" onchange="javascript:appState.enableautoConfig=this.checked;"> <label for="use-auto-init" title="Auto config fallback for I2C sensors that fail to initialise (selects alternative sensors at same address)">Use Auto Init fallback</label>
<input type="checkbox" id="use-auto-init" onchange="javascript:appState.enableautoConfig=this.checked;"> <label for="use-auto-init" title="Auto config fallback for I2C sensors that fail to initialise (selects alternative sensors at same address)">Use Auto Init fallback for failed or unspecified components (default)</label>
<div id="config-output-container" class="hidden">
<h3>Configuration JSON:</h3>
<pre id="config-output" class="config-output"></pre>
Expand Down
6 changes: 3 additions & 3 deletions load-wippersnapper-data.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
// Load Wippersnapper boards and components data

// Configuration - technically unused (instead ./ relative links) but useful for reference
const BOARDS_JSON_URL = 'https://raw.githubusercontent.com/adafruit/Adafruit_Wippersnapper_Offline_Configurator/refs/heads/use_boards_sd_card/wippersnapper_boards.json'; //'wippersnapper_boards.json';
const COMPONENTS_JSON_URL = 'https://raw.githubusercontent.com/adafruit/Adafruit_Wippersnapper_Offline_Configurator/refs/heads/use_boards_sd_card/wippersnapper_components.json'; //'wippersnapper_components.json';
const BOARDS_JSON_URL = 'https://raw.githubusercontent.com/adafruit/Adafruit_Wippersnapper_Offline_Configurator/refs/heads/offline-mode/wippersnapper_boards.json'; //'wippersnapper_boards.json';
const COMPONENTS_JSON_URL = 'https://raw.githubusercontent.com/adafruit/Adafruit_Wippersnapper_Offline_Configurator/refs/heads/offline-mode/wippersnapper_components.json'; //'wippersnapper_components.json';

// Global app state
const appState = {
Expand Down Expand Up @@ -159,7 +159,7 @@ function populateBoardSelect() {

// Filter boards to only include those with UF2 install method
const filteredBoards = Object.entries(appState.boardsData)
.filter(([boardId, board]) => board.installMethod === 'uf2'); //['uf2', 'web-native-usb'].includes(board.installMethod)); //funhouse
.filter(([boardId, board]) => ['uf2', 'web-native-usb'].includes(board.installMethod)); //funhouse

// Sort boards by vendor and name
const sortedBoards = filteredBoards
Expand Down
27 changes: 24 additions & 3 deletions wippersnapper-config-builder.js
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,22 @@ const companionBoardConfigs = {
productURL: 'https://www.adafruit.com/product/4285',
documentationURL: 'https://learn.adafruit.com/adafruit-airlift-shield-esp32-wifi-co-processor',
image: 'https://cdn-shop.adafruit.com/640x480/4285-05.jpg'
},
'seeed-xiao-s3sense-camera-addon': {
rtc: null,
sdCardCS: 21,
extras: 'SD Card, Camera, Microphone, Extra GPIOs D11+D12',
productURL: 'https://www.seeedstudio.com/XIAO-ESP32S3-Sense-p-5639.html',
documentationURL: 'https://wiki.seeedstudio.com/xiao_esp32s3_getting_started/',
image: 'https://files.seeedstudio.com/wiki/SeeedStudio-XIAO-ESP32S3/img/66.jpg'
},
'seeed-xiao-ssd1306-expansion-base': {
rtc: 'PCF8563',
sdCardCS: 'D2',
extras: 'SD Card, Display, Piezo Speaker, LiPo connector',
productURL: 'https://www.seeedstudio.com/Seeeduino-XIAO-Expansion-board-p-4746.html',
documentationURL: 'https://wiki.seeedstudio.com/Seeeduino-XIAO-Expansion-Board/',
image: 'https://files.seeedstudio.com/wiki/Seeeduino-XIAO-Expansion-Board/Update_pic/zheng1.jpg'
}
};

Expand Down Expand Up @@ -249,7 +265,7 @@ document.addEventListener('DOMContentLoaded', function() {
if (boardImageElem) {
if (board.image) {
if (!board.image.startsWith('http')) {
boardImageElem.src = "https://raw.githubusercontent.com/adafruit/Wippersnapper_Boards/refs/heads/rp2040_datalogger_feather/" + board.image;
boardImageElem.src = "https://raw.githubusercontent.com/adafruit/Wippersnapper_Boards/refs/heads/offline-mode/" + board.image;
} else {
boardImageElem.src = board.image;
}
Expand Down Expand Up @@ -365,7 +381,7 @@ document.addEventListener('DOMContentLoaded', function() {
// Mark SD CS pin as used
appState.usedPins.add(pin.number);
} else {
console.warn(`SD card CS pin ${companion.sdCardCS} not found in selected board pins.`);
console.warn(`[${companionId}] SD card CS pin ${companion.sdCardCS} not found in selected board pins.`);
document.getElementById('sd-missing').classList.remove('hidden');
document.getElementById('sd-present').classList.add('hidden');
}
Expand Down Expand Up @@ -437,8 +453,12 @@ document.addEventListener('DOMContentLoaded', function() {
document.getElementById('sd-card-pin-select').classList.remove('hidden');
} else {
document.getElementById('sd-card-pin-select').classList.add('hidden');
appState.usedPins.delete(appState.sdCardCS);
document.getElementById('manual-sd-cs-pin').textContent = '';
document.getElementById('sd-cs-pin').textContent = '';
appState.sdCardCS = null;
}
populatePinsLists();
});

// RTC type selection handler
Expand Down Expand Up @@ -1932,7 +1952,8 @@ function generateConfiguration() {
referenceVoltage: appState.selectedBoard.referenceVoltage,
totalGPIOPins: appState.selectedBoard.totalGPIOPins,
totalAnalogPins: appState.selectedBoard.totalAnalogPins,
statusLEDBrightness: appState.statusLEDBrightness
statusLEDBrightness: appState.statusLEDBrightness,
autoConfig: appState.enableautoConfig
},
components: []
};
Expand Down
Loading