Skip to content

Commit f128bd8

Browse files
FabianSchwartauj000bsamandel
authored
Add OBSPro support (#357)
* Switch to U8g2 display library * OpenSans fonts were reconverted for U8g2. * Remove remnant from VL53 ToF sensor * Rename class `SSD1306DisplayDevice` to `DisplayDevice` * Added .vscode to gitignore * Set ports and build type in platformio.ini * Add OBSPro support with button and variant selection * CI build for classic and pro variant * No SQ for now * Next release is 0.21 which includes obs classic and obs pro --------- Co-authored-by: j000bs <[email protected]> Co-authored-by: amandel <[email protected]>
1 parent a834e5c commit f128bd8

38 files changed

+3406
-2427
lines changed

.github/workflows/ci.yml

Lines changed: 139 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,13 @@ jobs:
9797
run: |
9898
mkdir sonarqube-out
9999
./sonarqube/build-wrapper-linux-x86/build-wrapper-linux-x86-64 --out-dir sonarqube-out \
100-
platformio ci --build-dir="./bin" --keep-build-dir --project-conf=platformio.ini ./src/
100+
platformio ci --environment obspro --environment obs --build-dir ./bin --keep-build-dir --project-conf platformio.ini ./src/
101101
102-
- name: Package firmware
102+
- name: Package firmware OBS classic
103103
run: |
104104
set -eux
105+
mkdir -p obs-classic
106+
cd obs-classic
105107
if [ -f "/github/home/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/bin/bootloader_dio_40m.elf" ]; then
106108
cp /github/home/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/bin/bootloader_dio_40m.elf 0x01000.elf
107109
elif [ -f "/github/home/.platformio/packages/framework-arduinoespressif32/tools/sdk/bin/bootloader_dio_40m.bin" ]; then
@@ -112,10 +114,10 @@ jobs:
112114
find /github/home/.platformio/ -name "bootloader*.elf"
113115
exit 1
114116
fi
115-
cp bin/.pio/build/esp32dev/partitions.bin 0x08000.bin
117+
cp ../bin/.pio/build/obs/partitions.bin 0x08000.bin
116118
cp /github/home/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin 0x0e000.bin
117-
cp bin/.pio/build/esp32dev/firmware.bin 0x10000.bin
118-
cp bin/.pio/build/esp32dev/firmware.bin firmware.bin
119+
cp ../bin/.pio/build/obs/firmware.bin 0x10000.bin
120+
cp ../bin/.pio/build/obs/firmware.bin firmware.bin
119121
ESPTOOL=/github/home/.platformio/packages/tool-esptoolpy/esptool.py
120122
chmod +x ${ESPTOOL}
121123
# CMD to create a merged binary (still missing flash.app)
@@ -138,23 +140,81 @@ jobs:
138140
0x01000 0x01000.bin.org
139141
echo OpenBikeSensor bootloader params
140142
${ESPTOOL} --chip esp32 image_info --version 2 0x01000.bin || echo image_info failed
141-
cp src/fonts/LICENSE.txt LICENSE-OpenSans.txt
143+
cp ../src/fonts/LICENSE.txt LICENSE-OpenSans.txt
142144
wget --no-verbose -O COPYRIGHT-ESP.html https://docs.espressif.com/projects/esp-idf/en/latest/esp32/COPYRIGHT.html
143145
wget --no-verbose -O LICENSE-ARDUINO-ESP32.md https://github.com/espressif/arduino-esp32/raw/master/LICENSE.md
144-
zip --junk-paths obs-${{ env.OBS_VERSION }}-initial-flash.zip \
146+
zip --junk-paths ../obs-${{ env.OBS_VERSION }}-initial-flash.zip \
145147
0x*.bin \
146148
COPYRIGHT-ESP.html \
147149
LICENSE-ARDUINO-ESP32.md \
148150
LICENSE-OpenSans.txt \
149151
LICENSE
150-
zip --junk-paths obs-${{ env.OBS_VERSION }}.zip \
152+
zip --junk-paths ../obs-${{ env.OBS_VERSION }}.zip \
153+
firmware.bin \
154+
COPYRIGHT-ESP.html \
155+
LICENSE-ARDUINO-ESP32.md \
156+
LICENSE-OpenSans.txt \
157+
LICENSE
158+
159+
- name: Package firmware OBS pro
160+
run: |
161+
set -eux
162+
mkdir -p obs-pro
163+
cd obs-pro
164+
if [ -f "/github/home/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/bin/bootloader_dio_40m.elf" ]; then
165+
cp /github/home/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/bin/bootloader_dio_40m.elf 0x01000.elf
166+
elif [ -f "/github/home/.platformio/packages/framework-arduinoespressif32/tools/sdk/bin/bootloader_dio_40m.bin" ]; then
167+
cp /github/home/.platformio/packages/framework-arduinoespressif32/tools/sdk/bin/bootloader_dio_40m.bin 0x01000.bin
168+
else
169+
echo could not find bootloader_dio_40m.bin, new location?
170+
find /github/home/.platformio/ -name "bootloader*.bin"
171+
find /github/home/.platformio/ -name "bootloader*.elf"
172+
exit 1
173+
fi
174+
cp ../bin/.pio/build/obspro/partitions.bin 0x08000.bin
175+
cp /github/home/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin 0x0e000.bin
176+
cp ../bin/.pio/build/obspro/firmware.bin 0x10000.bin
177+
cp ../bin/.pio/build/obspro/firmware.bin firmware.bin
178+
ESPTOOL=/github/home/.platformio/packages/tool-esptoolpy/esptool.py
179+
chmod +x ${ESPTOOL}
180+
# CMD to create a merged binary (still missing flash.app)
181+
# ${ESPTOOL} --trace --chip esp32 merge_bin --output merged.bin \
182+
# --flash_freq keep --flash_mode dio --flash_size 4MB \
183+
# 0x01000 0x01000.bin \
184+
# 0x08000 0x08000.bin \
185+
# 0x0e000 0x0e000.bin \
186+
# 0x10000 0x10000.bin
187+
${ESPTOOL} --trace --chip esp32 elf2image \
188+
--dont-append-digest \
189+
--flash_freq 40m --flash_mode dio \
190+
0x01000.elf
191+
echo Original bootloader params after elf2image
192+
${ESPTOOL} --chip esp32 image_info --version 2 0x01000.bin || echo image_info for converted bootloader failed
193+
mv 0x01000.bin 0x01000.bin.org
194+
${ESPTOOL} --trace --chip esp32 merge_bin --output 0x01000.bin \
195+
--flash_freq 40m --flash_mode dio --flash_size 4MB \
196+
--target-offset 0x01000 \
197+
0x01000 0x01000.bin.org
198+
echo OpenBikeSensor bootloader params
199+
${ESPTOOL} --chip esp32 image_info --version 2 0x01000.bin || echo image_info failed
200+
cp ../src/fonts/LICENSE.txt LICENSE-OpenSans.txt
201+
wget --no-verbose -O COPYRIGHT-ESP.html https://docs.espressif.com/projects/esp-idf/en/latest/esp32/COPYRIGHT.html
202+
wget --no-verbose -O LICENSE-ARDUINO-ESP32.md https://github.com/espressif/arduino-esp32/raw/master/LICENSE.md
203+
zip --junk-paths ../obspro-${{ env.OBS_VERSION }}-initial-flash.zip \
204+
0x*.bin \
205+
COPYRIGHT-ESP.html \
206+
LICENSE-ARDUINO-ESP32.md \
207+
LICENSE-OpenSans.txt \
208+
LICENSE
209+
zip --junk-paths ../obspro-${{ env.OBS_VERSION }}.zip \
151210
firmware.bin \
152211
COPYRIGHT-ESP.html \
153212
LICENSE-ARDUINO-ESP32.md \
154213
LICENSE-OpenSans.txt \
155214
LICENSE
156215
157216
- name: Analyze with SonarCloud
217+
if: false
158218
env:
159219
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
160220
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -186,26 +246,50 @@ jobs:
186246
with:
187247
name: obs-${{ env.OBS_VERSION }}
188248
path: |
189-
firmware.bin
190-
COPYRIGHT-ESP.html
191-
LICENSE-ARDUINO-ESP32.md
192-
LICENSE-OpenSans.txt
193-
LICENSE
249+
obs-classic/firmware.bin
250+
obs-classic/COPYRIGHT-ESP.html
251+
obs-classic/LICENSE-ARDUINO-ESP32.md
252+
obs-classic/LICENSE-OpenSans.txt
253+
obs-classic/LICENSE
194254
if-no-files-found: error
195255

196256
- name: Upload Build Asset Initial Flash
197257
uses: actions/upload-artifact@v4
198258
with:
199259
name: obs-${{ env.OBS_VERSION }}-initial-flash
200260
path: |
201-
0x*.bin
202-
COPYRIGHT-ESP.html
203-
LICENSE-ARDUINO-ESP32.md
204-
LICENSE-OpenSans.txt
205-
LICENSE
261+
obs-classic/0x*.bin
262+
obs-classic/COPYRIGHT-ESP.html
263+
obs-classic/LICENSE-ARDUINO-ESP32.md
264+
obs-classic/LICENSE-OpenSans.txt
265+
obs-classic/LICENSE
206266
sonarqube-out/build-wrapper-dump.json
207267
if-no-files-found: error
208268

269+
- name: Upload Build Asset obspro
270+
uses: actions/upload-artifact@v4
271+
with:
272+
name: obspro-${{ env.OBS_VERSION }}
273+
path: |
274+
obs-pro/firmware.bin
275+
obs-pro/COPYRIGHT-ESP.html
276+
obs-pro/LICENSE-ARDUINO-ESP32.md
277+
obs-pro/LICENSE-OpenSans.txt
278+
obs-pro/LICENSE
279+
if-no-files-found: error
280+
281+
- name: Upload Build Asset Initial Flash obspro
282+
uses: actions/upload-artifact@v4
283+
with:
284+
name: obspro-${{ env.OBS_VERSION }}-initial-flash
285+
path: |
286+
obs-pro/0x*.bin
287+
obs-pro/COPYRIGHT-ESP.html
288+
obs-pro/LICENSE-ARDUINO-ESP32.md
289+
obs-pro/LICENSE-OpenSans.txt
290+
obs-pro/LICENSE
291+
if-no-files-found: error
292+
209293
- name: Generate changelog
210294
id: changelog
211295
if: ${{ env.OBS_PREPARE_RELEASE == 'true' }}
@@ -275,6 +359,42 @@ jobs:
275359
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
276360
with:
277361
upload_url: ${{ steps.create_release.outputs.upload_url }}
278-
asset_path: ./bin/.pio/build/esp32dev/firmware.bin
362+
asset_path: ./bin/.pio/build/obs/firmware.bin
279363
asset_name: firmware.bin
280364
asset_content_type: application/x-esp32
365+
366+
- name: Upload Release Asset obspro
367+
id: upload-obspro-release-asset
368+
if: ${{ env.OBS_PREPARE_RELEASE == 'true' }}
369+
uses: actions/upload-release-asset@v1
370+
env:
371+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
372+
with:
373+
upload_url: ${{ steps.create_release.outputs.upload_url }}
374+
asset_path: ./obspro-${{ env.OBS_VERSION }}.zip
375+
asset_name: obspro-${{ env.OBS_VERSION }}.zip
376+
asset_content_type: application/zip
377+
378+
- name: Upload Release Asset Initial Flash pro
379+
id: upload-obspro-release-asset-initial-flash
380+
if: ${{ env.OBS_PREPARE_RELEASE == 'true' }}
381+
uses: actions/upload-release-asset@v1
382+
env:
383+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
384+
with:
385+
upload_url: ${{ steps.create_release.outputs.upload_url }}
386+
asset_path: ./obspro-${{ env.OBS_VERSION }}-initial-flash.zip
387+
asset_name: obspro-${{ env.OBS_VERSION }}-initial-flash.zip
388+
asset_content_type: application/zip
389+
390+
- name: Upload Release Asset app bin pro
391+
id: upload-obspro-release-asset-app-bin
392+
if: ${{ env.OBS_PREPARE_RELEASE == 'true' }}
393+
uses: actions/upload-release-asset@v1
394+
env:
395+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
396+
with:
397+
upload_url: ${{ steps.create_release.outputs.upload_url }}
398+
asset_path: ./bin/.pio/build/obspro/firmware.bin
399+
asset_name: firmware-obspro.bin
400+
asset_content_type: application/x-esp32

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ docs/.jekyll-metadata
2424
docs/vendor
2525

2626
.DS_Store
27+
.vscode
2728

2829
# for people installing pio venv style
2930
venv

custom_config.ini.example

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,8 @@
11
; This file should contain your local modifications to the PlatformIO.ini file.
22

3-
[env:esp32dev]
3+
[env:myObs]
44
build_flags =
5-
; settings needed by the build
6-
-DHTTPS_REQUEST_MAX_REQUEST_LENGTH=1024
7-
; reduce probability of https://github.com/fhessel/esp32_https_server/pull/123
8-
-DHTTPS_CONNECTION_DATA_CHUNK_SIZE=1024
9-
; custom default configuration
10-
;
5+
${env.build_flags}
116
; you can specify a custom config json (see docs/software/firmware/obs_cfg.md)
127
; here which will be used for fresh installs based on this firmware
138
-DCUSTOM_OBS_DEFAULT_CONFIG='"{ obs: [ { displayConfig: 15, offset: [ 30, 30 ], httpPin: \\"12345678\\", wifiSsid: \\"SID\\", wifiPassword: \\"87654321\\" } ] }"'
@@ -18,6 +13,9 @@ build_flags =
1813
-DDEVELOP
1914
; http lib loglevel
2015
-DHTTPS_LOGLEVEL=3
16+
; select OBS Variant
17+
-DOBSCLASSIC
18+
; -DOBSPRO
2119

2220

2321
; === upload_port ===

platformio.ini

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,8 @@
3737
src_dir = src
3838
extra_configs = custom_config.ini
3939

40-
[env:esp32dev]
41-
platform = espressif32 @ 6.6.0
42-
; 5.4.0
40+
[env]
41+
platform = espressif32 @ 6.8.1
4342
board = esp32dev
4443
framework = arduino
4544
monitor_speed = 115200
@@ -52,7 +51,9 @@ lib_deps =
5251
; https://arduinojson.org/v6/api/
5352
bblanchon/ArduinoJson @ ^6.21.5
5453
rlogiacco/CircularBuffer @ ^1.4.0
55-
thingpulse/ESP8266 and ESP32 OLED driver for SSD1306 displays @ ^4.5.0
54+
; olikraus/U8g2 @ ^2.35.9
55+
https://codeberg.org/j000bs/U8g2_Arduino.git#jhd-fix
56+
; replaced by U8g2 thingpulse/ESP8266 and ESP32 OLED driver for SSD1306 displays @ ^4.5.0
5657
adafruit/Adafruit BMP280 Library@^2.6.8
5758
pololu/VL53L0X@^1.3.1
5859
; https://github.com/fhessel/esp32_https_server
@@ -67,3 +68,13 @@ build_flags =
6768
-DHTTPS_CONNECTION_DATA_CHUNK_SIZE=1024
6869
; build number "-dev" will be replaced in github action
6970
-DBUILD_NUMBER=\"-dev\"
71+
72+
[env:obs]
73+
build_flags =
74+
${env.build_flags}
75+
-DOBSCLASSIC
76+
77+
[env:obspro]
78+
build_flags =
79+
${env.build_flags}
80+
-DOBSPRO

0 commit comments

Comments
 (0)