Merge pull request #6 from adafruit/xiao-breakout

Update boards, CI methods, Add Xiao breakout/camera SD defs
This commit is contained in:
Tyeth Gundry 2025-08-15 16:58:59 +01:00 committed by GitHub
commit 0158a39fc6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 8585 additions and 8476 deletions

View file

@ -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
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]"

@ -1 +1 @@
Subproject commit 66d399578444320a039514f1a41160a0c2357212
Subproject commit 07c6667a1d21e1b2561db2a73d8da23f04504546

@ -1 +1 @@
Subproject commit 275d46b221cae3e2b8a886640f18c8d16e530ada
Subproject commit 8bcce192da5dfde56cb084814948eab8151b8f3b

View file

@ -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}")

View file

@ -1,4 +1,4 @@
// Auto-generated on 2025-08-15 00:21:21
// Auto-generated on 2025-08-15 16:54:43
const FIRMWARE_DATA = {
"releaseInfo": {
"version": "1.0.0-offline-beta.3",

View file

@ -314,7 +314,8 @@
<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">
@ -358,6 +359,7 @@
<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>
@ -508,7 +510,7 @@
<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>

View file

@ -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 = {
@ -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

View file

@ -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'
}
};
@ -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;
}
@ -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');
}
@ -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
@ -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: []
};

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff