diff --git a/.forgejo/workflows/push.yaml b/.forgejo/workflows/push.yaml new file mode 100644 index 0000000..cabc4e2 --- /dev/null +++ b/.forgejo/workflows/push.yaml @@ -0,0 +1,136 @@ +name: "BTClock CI" + +on: + push: + tags: + - "*" + workflow_dispatch: + +jobs: + build: + runs-on: docker + container: + image: ghcr.io/catthehacker/ubuntu:js-22.04 + permissions: + contents: write + checks: write + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + - uses: actions/setup-node@v4 + with: + node-version: lts/* + cache: yarn + cache-dependency-path: "**/yarn.lock" + - uses: actions/cache@v4 + with: + path: | + ~/.cache/pip + ~/.platformio/.cache + ~/data/node_modules + .pio + data/node_modules + key: ${{ runner.os }}-pio + - uses: actions/setup-python@v5 + with: + python-version: "3.9" + cache: "pip" + - name: Get current date + id: dateAndTime + shell: bash + run: echo "dateAndTime=$(date +'%Y-%m-%d-%H:%M')" >> $GITHUB_OUTPUT + - name: Install PlatformIO Core + shell: bash + run: pip install --upgrade platformio + - name: Build BTClock firmware + shell: bash + run: pio run + - name: Build BTClock filesystem + shell: bash + run: pio run --target buildfs + - name: Copy bootloader to output folder + run: cp ~/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin .pio + - name: Upload artifacts + uses: https://code.forgejo.org/forgejo/upload-artifact@v4 + with: + include-hidden-files: true + retention-days: 1 + name: prepared-outputs + path: .pio/**/*.bin + merge: + runs-on: docker + container: + image: ghcr.io/catthehacker/ubuntu:js-22.04 + permissions: + contents: write + checks: write + needs: build + continue-on-error: true + strategy: + matrix: + chip: + - name: lolin_s2_mini + version: esp32s2 + - name: lolin_s3_mini + version: esp32s3 + - name: orangeclock + version: esp32s3 + epd_variant: [213epd, 29epd] + exclude: + - chip: { name: orangeclock, version: esp32s3 } + epd_variant: 213epd + steps: + - uses: https://code.forgejo.org/forgejo/download-artifact@v4 + with: + name: prepared-outputs + path: .pio + - name: Install esptools.py + run: pip install --upgrade esptool + - name: Create merged firmware binary + run: mkdir -p ${{ matrix.chip.name }}_${{ matrix.epd_variant }} && esptool.py --chip ${{ matrix.chip.version }} merge_bin -o ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin --flash_mode dio 0x0000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/bootloader.bin 0x8000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/partitions.bin 0xe000 .pio/boot_app0.bin 0x10000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/firmware.bin 0x369000 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/littlefs.bin + + - name: Create checksum for firmware + shell: bash + run: shasum -a 256 .pio/build/${{ matrix.chip.name }}_${{ matrix.epd_variant }}/firmware.bin | awk '{print $1}' > ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}_firmware.bin.sha256 + + - name: Create checksum for merged binary + run: shasum -a 256 ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.bin | awk '{print $1}' > ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/${{ matrix.chip.name }}_${{ matrix.epd_variant }}.sha256 + + - name: Upload artifacts + uses: https://code.forgejo.org/forgejo/upload-artifact@v4 + with: + name: build-${{ matrix.chip.name }}-${{ matrix.epd_variant }} + path: | + ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/*.bin + ${{ matrix.chip.name }}_${{ matrix.epd_variant }}/*.sha256 + release: + runs-on: docker + permissions: + contents: write + checks: write + needs: merge + steps: + - name: Download matrix outputs + uses: https://code.forgejo.org/forgejo/download-artifact@v4 + with: + pattern: build-* + merge-multiple: false + path: temp + - name: Copy files + run: | + mkdir -p release + find temp -type f \( -name "*.bin" -o -name "*.sha256" \) -exec cp -f {} release/ \; + - name: Create release + uses: https://code.forgejo.org/actions/forgejo-release@v2.4.0 + with: + url: "https://git.btclock.dev" + repo: "${{ github.repository }}" + direction: upload + tag: "${{ github.ref_name }}" + sha: "${{ github.sha }}" + release-dir: release + token: ${{ secrets.TOKEN }} + override: ${{ github.ref_type != 'tag' && github.ref_name != 'main' }} + prerelease: ${{ github.ref_type != 'tag' && github.ref_name != 'main' }} + release-notes-assistant: false diff --git a/.gitmodules b/.gitmodules index f9d84d8..55b6d4f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ [submodule "data"] path = data - url = https://github.com/btclock/oc-webui.git + url = https://git.btclock.dev/btclock/oc-webui.git diff --git a/data b/data index b7c4c5f..8332fec 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit b7c4c5ffbadcde44d6578e6a9a3498d40bf8dee6 +Subproject commit 8332fec4a1ec0045d91f063617bb441914e7b67a diff --git a/platformio.ini b/platformio.ini index 09218a2..af5bf0f 100644 --- a/platformio.ini +++ b/platformio.ini @@ -15,6 +15,7 @@ default_envs = lolin_s2_mini_213epd, lolin_s2_mini_29epd, lolin_s3_mini_213epd, [btclock_base] platform = espressif32 framework = arduino +platform_packages = platformio/framework-arduinoespressif32 monitor_speed = 115200 monitor_filters = esp32_exception_decoder, colorize board_build.filesystem = littlefs @@ -24,12 +25,11 @@ build_flags = !python scripts/git_rev.py -DLAST_BUILD_TIME=$UNIX_TIME lib_deps = - zinggjm/GxEPD2@^1.5.6 + zinggjm/GxEPD2@^1.6.1 https://github.com/tzapu/WiFiManager.git#v2.0.17 - bblanchon/ArduinoJson@^7.0.3 - mathieucarbou/ESP Async WebServer - gilmaimon/ArduinoWebsockets@^0.5.3 - fastled/FastLED@^3.6.0 + bblanchon/ArduinoJson@^7.2.1 + mathieucarbou/ESP Async WebServer@^3.0.6 + fastled/FastLED@^3.9.6 [env:lolin_s2_mini] extends = btclock_base board = lolin_s2_mini diff --git a/src/config.cpp b/src/config.cpp index 46c1e7b..3788a9a 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -90,7 +90,6 @@ void setupWifi() randomSeed(seed); // WiFi.begin(, "); - WiFi.setAutoConnect(true); WiFi.setAutoReconnect(true); WiFiManager wm; @@ -154,6 +153,7 @@ void setupWifi() Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); + epdShowIp(); // WiFi.setTxPower(WIFI_POWER_8_5dBm); // enableWiFi(); } @@ -180,7 +180,6 @@ void wakeModemSleep() void enableWiFi() { - adc_power_on(); delay(200); WiFi.disconnect(false); // Reconnect the network @@ -205,7 +204,6 @@ void enableWiFi() void disableWiFi() { - adc_power_off(); WiFi.disconnect(true); // Disconnect from the network WiFi.mode(WIFI_OFF); // Switch WiFi off Serial.println(""); @@ -280,6 +278,7 @@ void HandleButtonTask(void *pvParameters) Serial.println("Button Pressed"); + #ifdef NUM_LEDS leds[0] = CRGB::SkyBlue; leds[1] = CRGB::Black; @@ -298,6 +297,7 @@ void HandleButtonTask(void *pvParameters) leds[1] = CRGB::Black; FastLED.show(); + #endif } } } diff --git a/src/config.hpp b/src/config.hpp index fc4f7ca..8a1aaa4 100644 --- a/src/config.hpp +++ b/src/config.hpp @@ -3,7 +3,6 @@ #include #include #include "shared.hpp" -#include "driver/adc.h" #include #include #include "epd.hpp" diff --git a/src/epd.cpp b/src/epd.cpp index 65a50cf..ec23ee6 100644 --- a/src/epd.cpp +++ b/src/epd.cpp @@ -22,14 +22,14 @@ void setupDisplay() display.setRotation(1); display.setFont(&Antonio_SemiBold20pt7b); display.setTextColor(GxEPD_WHITE); - int16_t tbx, tby; - uint16_t tbw, tbh; - display.getTextBounds("OrangeBTClock", 0, 0, &tbx, &tby, &tbw, &tbh); - // center the bounding box by transposition of the origin: - uint16_t x = ((display.width() - tbw) / 2) - tbx; - uint16_t y = ((display.height() - tbh) / 2) - tby; + // int16_t tbx, tby; + // uint16_t tbw, tbh; + // display.getTextBounds("OrangeBTClock", 0, 0, &tbx, &tby, &tbw, &tbh); + // // center the bounding box by transposition of the origin: + // uint16_t x = ((display.width() - tbw) / 2) - tbx; + // uint16_t y = ((display.height() - tbh) / 2) - tby; display.fillScreen(GxEPD_BLACK); - display.setCursor(x, y); + // display.setCursor(x, y); // display.print("OrangeBTClock"); // display.drawImage(epd_bitmap_allArray[0], GxEPD_WHITE, 0,0 250,37); @@ -39,6 +39,9 @@ void setupDisplay() display.drawBitmap(xPos,yPos, epd_bitmap_oclogo, 250, 37, GxEPD_WHITE); display.display(false); + display.setCursor(0, 37); + + // display.fillScreen(GxEPD_WHITE); // display.drawLine(0, 10, display.width(), 10, GxEPD_BLACK); // display.drawLine(0, row2, display.width(), row2, GxEPD_BLACK); @@ -70,6 +73,22 @@ void setupDisplay() // display.display(true); } +void epdShowIp() { + display.setRotation(1); + display.setFont(&LibreFranklin_SemiBold10pt7b); + display.setTextColor(GxEPD_WHITE); + String ipStr = WiFi.localIP().toString(); + int16_t tbx, tby; + uint16_t tbw, tbh; + display.getTextBounds(ipStr, 0, 0, &tbx, &tby, &tbw, &tbh); + // center the bounding box by transposition of the origin: + uint16_t x = ((display.width() - tbw) / 2) - tbx; + uint16_t y = ((display.height() - tbh) / 2) - tby + 37; + display.setCursor(x, y); + display.println(WiFi.localIP()); + display.display(true); +} + void updateRow2(String c, char icon) { if (c.equals(currentRow2) && icon == currentIcon2) diff --git a/src/epd.hpp b/src/epd.hpp index 44d00b2..c566001 100644 --- a/src/epd.hpp +++ b/src/epd.hpp @@ -9,4 +9,5 @@ void showSetupText(String t); void updateRow1(String c, char icon); void updateRow2(String c, char icon); void updateRow3(String c, char icon); -void updateRows(String row1Content, String row2Content, String row3Content); \ No newline at end of file +void updateRows(String row1Content, String row2Content, String row3Content); +void epdShowIp(); \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index ce78854..3cf7b1b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -29,19 +29,19 @@ typedef void (*MethodPtr)(String, char); MethodPtr methods[] = {nullptr, updateRow1, updateRow2, updateRow3}; -WiFiClientSecure client; +WiFiClient client; uint currentPrice = 0; String currentBlock = ""; String currentFees = ""; +#ifdef NUM_LEDS CRGB leds[NUM_LEDS]; +#endif void setup() { // setCpuFrequencyMhz(40); Serial.begin(115200); - delay(2500); - Serial.println("Hello"); #ifndef IS_ORANGECLOCK pinMode(LED_BUILTIN, OUTPUT); @@ -71,7 +71,7 @@ void setup() setupWebserver(); setupOTA(); } - client.setInsecure(); + // client.setInsecure(); #ifndef IS_ORANGECLOCK digitalWrite(LED_BUILTIN, LOW); @@ -103,7 +103,7 @@ void loop() return; } - client.setInsecure(); + // client.setInsecure(); // diff --git a/src/shared.hpp b/src/shared.hpp index 4321542..dd17f5b 100644 --- a/src/shared.hpp +++ b/src/shared.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include #include @@ -10,6 +10,7 @@ #include #include #include +#include #ifdef VERSION_EPD_2_13 #define EPD_CLASS GxEPD2_213_B74 @@ -91,7 +92,7 @@ const int LINE_DATE = 100; #define CURRENCY_AUD "AUD" #define CURRENCY_JPY "JPY" -extern WiFiClientSecure client; +extern WiFiClient client; extern GxEPD2_BW display; extern Preferences preferences; extern bool isUpdating; @@ -104,5 +105,7 @@ extern char currentIcon1; extern char currentIcon2; extern char currentIcon3; +#ifdef NUM_LEDS extern CRGB leds[NUM_LEDS]; +#endif extern volatile bool buttonPressed; \ No newline at end of file diff --git a/src/utils.hpp b/src/utils.hpp index 8c32d47..80419f0 100644 --- a/src/utils.hpp +++ b/src/utils.hpp @@ -4,6 +4,7 @@ #include #include #include "shared.hpp" +#include namespace ArduinoJson { template <>