├── .clang-format ├── .editorconfig ├── .git-blame-ignore-revs ├── .gitconfig ├── .github └── workflows │ ├── clang-format-check.yml │ └── test-builds.yml ├── .gitignore ├── .travis.yml ├── .vscode ├── extensions.json └── settings.json ├── CMakeLists.txt ├── Hardware-Plaforms ├── ESP32-A1S-Audiokit │ ├── README.md │ └── docs │ │ ├── A1S.pdf │ │ ├── ESP32-A1S Product Specification.pdf │ │ ├── ESP32-A1S-Pinout.jpg │ │ └── ESP32-Audio-Kit2.2 ff.png ├── MRFC522-RC522-RFID.jpg └── drill.jpg ├── LICENSE ├── PCBs ├── AZDelivery_ESP32_NodeMCU │ ├── README.md │ ├── gerber │ │ └── gerber_rev2.zip │ └── pictures │ │ ├── 3d-model-back.png │ │ ├── 3d-model_front.png │ │ ├── Schematics_rev2.pdf │ │ ├── Soldered_with_peripherals.jpg │ │ ├── Soldered_with_peripherals2.jpg │ │ └── Soldered_with_peripherals3.jpg ├── Headphone with MS6324 and TDA1308 │ └── README.md ├── Headphone with PCM5102a and TDA1308 │ ├── KiCad │ │ └── Kicad-Files.zip │ ├── Pictures │ │ ├── 3D-model_downside.jpeg │ │ ├── 3D-model_upside.jpeg │ │ ├── Headphone-pcb.pdf │ │ ├── Headphone-pcb_downside.jpg │ │ └── Headphone-pcb_upside.jpg │ ├── README.md │ └── gerber │ │ └── gerber.zip ├── Wemos Lolin D32 │ ├── Gerber │ │ └── gerber.zip │ ├── Infos │ │ └── sch_d32_v1.0.0.pdf │ ├── Pictures │ │ ├── ESPuino D32_downside.png │ │ ├── ESPuino D32_upside.png │ │ ├── Schematics_D32.pdf │ │ ├── Soldered 1.jpg │ │ ├── Soldered 2.jpg │ │ └── Soldered 3.jpg │ └── README.md ├── Wemos Lolin D32pro │ └── README.md ├── Wemos Lolin32 SD_MMC PN5180 │ ├── Gerber │ │ └── gerber.zip │ ├── Pictures │ │ ├── 3d_Model_down.png │ │ ├── 3d_Model_up.png │ │ └── Schematics.pdf │ └── README.md └── Wemos Lolin32 │ ├── Gerber │ └── gerber.zip │ ├── Infos │ └── LOLIN32_Circuit.png │ ├── Pictures │ ├── ESPuino V2-Schematics.pdf │ ├── ESPuino V2_down.png │ ├── ESPuino V2_up.png │ ├── Soldered with peripherals1_rev1.jpg │ ├── Soldered with peripherals2_rev1.jpg │ ├── Soldered1_rev1.jpg │ └── Soldered2_rev1.jpg │ ├── README.md │ └── _Archiv │ └── rev1 │ ├── Gerber │ └── gerber.zip │ ├── KiCad │ └── Kicad-files.zip │ └── Pictures │ ├── 3d-Model downside.jpg │ ├── 3d-Model upside.jpg │ ├── Soldered with peripherals1.jpg │ ├── Soldered with peripherals2.jpg │ ├── Soldered1.jpg │ ├── Soldered2.jpg │ └── Tonuino-Lolin32-Schematics.pdf ├── README.md ├── REST-API.yaml ├── changelog.md ├── custom_16mb_ota.csv ├── custom_4mb_noota.csv ├── custom_8mb_ota.csv ├── datasheets └── PCA9555.pdf ├── dependencies.lock ├── gitVersion.py ├── html ├── accesspoint.html ├── js │ ├── i18next.min.js │ ├── i18nextHttpBackend.min.js │ ├── loc_i18next.min.js │ └── swaggerInitializer.js ├── locales │ ├── de.json │ ├── en.json │ └── fr.json ├── management.html └── swagger.html ├── include └── README ├── lib └── README ├── openHAB ├── README.md ├── items │ └── Home.items ├── pictures │ ├── openhab_overview.jpg │ ├── openhab_sleepTimer.jpg │ ├── openhab_sleeping.jpg │ └── openhab_trackSelection.jpg ├── sitemaps │ └── Home.sitemap ├── things │ └── mqttConntections.things └── transform │ └── playmodes.map ├── pictures ├── Mgmt-GUI1.jpg ├── Mgmt-GUI2.jpg ├── Mgmt-GUI3.jpg ├── Mgmt-GUI4.jpg ├── Mgmt-GUI5.jpg ├── Mgmt-GUI6.jpg ├── Mgmt-GUI7.jpg ├── Mgmt-GUI_connection_broken.jpg ├── Mgmt_GUI_action_ok.jpg └── Pullup-removal.jpg ├── platformio-override.ini.sample ├── platformio.ini ├── processHtml.py ├── sdkconfig.defaults ├── src ├── AudioPlayer.cpp ├── AudioPlayer.h ├── Battery.cpp ├── Battery.h ├── BatteryMax17055.cpp ├── BatteryMeasureVoltage.cpp ├── Bluetooth.cpp ├── Bluetooth.h ├── Button.cpp ├── Button.h ├── CMakeLists.txt ├── Cmd.cpp ├── Cmd.h ├── Common.cpp ├── Common.h ├── EnumUtils.h ├── Ftp.cpp ├── Ftp.h ├── HallEffectSensor.cpp ├── HallEffectSensor.h ├── IrReceiver.cpp ├── IrReceiver.h ├── Led.cpp ├── Led.h ├── Log.cpp ├── Log.h ├── LogMessages_DE.cpp ├── LogMessages_EN.cpp ├── LogMessages_FR.cpp ├── MemX.cpp ├── MemX.h ├── Mqtt.cpp ├── Mqtt.h ├── Playlist.h ├── Port.cpp ├── Port.h ├── Power.cpp ├── Power.h ├── Queues.cpp ├── Queues.h ├── Rfid.h ├── RfidCommon.cpp ├── RfidMfrc522.cpp ├── RfidPn5180.cpp ├── RotaryEncoder.cpp ├── RotaryEncoder.h ├── SdCard.cpp ├── SdCard.h ├── System.cpp ├── System.h ├── Web.cpp ├── Web.h ├── Wlan.cpp ├── Wlan.h ├── logmessages.h ├── main.cpp ├── main.h ├── revision.h ├── settings-azdelivery_sdmmc.h ├── settings-complete.h ├── settings-custom.h ├── settings-espa1s.h ├── settings-lolin32.h ├── settings-lolin_d32.h ├── settings-lolin_d32_pro.h ├── settings-lolin_d32_pro_sdmmc_pe.h ├── settings-lolin_d32_sdmmc_pe.h ├── settings-override.h.sample ├── settings-ttgo_t8.h ├── settings.h └── values.h ├── svg ├── README.md ├── holes_n_ring.svg └── inner ring.svg ├── test ├── README └── webpage │ ├── package-lock.json │ ├── package.json │ └── server.js └── updateSdkConfig.py /.clang-format: -------------------------------------------------------------------------------- 1 | --- 2 | BasedOnStyle: WebKit 3 | AlignArrayOfStructures: Right 4 | AlignConsecutiveBitFields: 5 | Enabled: true 6 | AlignConsecutiveMacros: 7 | Enabled: true 8 | AllowShortEnumsOnASingleLine: false 9 | AllowShortFunctionsOnASingleLine: InlineOnly 10 | BreakBeforeBraces: Attach 11 | Cpp11BracedListStyle: true 12 | FixNamespaceComments: true 13 | IncludeBlocks: Regroup 14 | IncludeCategories: 15 | - Regex: Arduino.h 16 | Priority: -1 17 | SortPriority: -2 18 | CaseSensitive: true 19 | - Regex: settings.h 20 | Priority: -1 21 | SortPriority: -1 22 | CaseSensitive: true 23 | - Regex: ^" 24 | Priority: 1 25 | SortPriority: 0 26 | CaseSensitive: false 27 | - Regex: .* 28 | Priority: 4 29 | SortPriority: 0 30 | CaseSensitive: false 31 | IncludeIsMainRegex: (_test)?$ 32 | IndentCaseLabels: true 33 | IndentPPDirectives: BeforeHash 34 | InsertBraces: true 35 | InsertNewlineAtEOF: true 36 | NamespaceIndentation: None 37 | PointerAlignment: Right 38 | SpaceAfterCStyleCast: true 39 | Standard: Auto 40 | TabWidth: 4 41 | UseTab: Always 42 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | [*] # Loosely following the kernel coding style: https://www.kernel.org/doc/html/v4.10/process/coding-style.html 5 | charset = utf-8 6 | end_of_line = lf 7 | indent_size = 4 8 | indent_style = tab 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.py] # Loosely following PEP-8: https://peps.python.org/pep-0008/ 13 | indent_size = 4 14 | indent_style = space 15 | 16 | [*.{html,htm}] 17 | indent_size = 4 18 | insert_final_newline = false 19 | 20 | [*.csv] 21 | indent_size = unset 22 | indent_style = unset 23 | insert_final_newline = false 24 | 25 | [*.md] 26 | max_line_length = 100 27 | 28 | [platformio.ini] 29 | indent_size = 4 30 | indent_style = space 31 | -------------------------------------------------------------------------------- /.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | # Code re-formatting with clang 2 | d1f82a7c93f160f9197c8b4e14e5a984ac6f9449 3 | 4 | # Code re-formatting with editorconf 5 | 3a562b67e3ca0f98ed128650440323c3b2d5fc78 6 | 7 | # Code re-formatting for html+json 8 | ee16ea64767c28420d3711bfe7b4a81c71f1e8bf 9 | -------------------------------------------------------------------------------- /.gitconfig: -------------------------------------------------------------------------------- 1 | [blame] 2 | ignoreRevsFile = .git-blame-ignore-revs 3 | -------------------------------------------------------------------------------- /.github/workflows/clang-format-check.yml: -------------------------------------------------------------------------------- 1 | name: clang-format-check 2 | run-name: Clang-format Check 3 | on: [workflow_dispatch, push, pull_request] 4 | jobs: 5 | formatting-check: 6 | name: Formatting Check 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v3 10 | - name: Run clang-format style check for C/C++/Protobuf programs. 11 | uses: jidicula/clang-format-action@v4.11.0 12 | with: 13 | clang-format-version: '16' 14 | check-path: 'src' 15 | fallback-style: 'LLVM' # optional -------------------------------------------------------------------------------- /.github/workflows/test-builds.yml: -------------------------------------------------------------------------------- 1 | name: build-all 2 | run-name: Build all boards 3 | on: 4 | workflow_dispatch: 5 | push: 6 | pull_request: 7 | paths: 8 | - 'src/*' 9 | - 'html/*' 10 | - 'test/*' 11 | - '**.ini' 12 | - '**.py' 13 | - '**.csv' 14 | 15 | jobs: 16 | test_builds: 17 | name: Run all Tests 18 | runs-on: ubuntu-latest 19 | strategy: 20 | matrix: 21 | variant: 22 | - esp32-a1s 23 | - lolin32 24 | - lolin_d32 25 | - lolin_d32_pro 26 | - lolin_d32_pro_sdmmc_pe 27 | - nodemcu-32s 28 | - az-delivery-devkit-v4 29 | - ttgo_t8 30 | - complete 31 | 32 | steps: 33 | - uses: actions/checkout@v3 34 | - name: Cache pip 35 | uses: actions/cache@v3 36 | with: 37 | path: ~/.cache/pip 38 | key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} 39 | restore-keys: | 40 | ${{ runner.os }}-pip- 41 | 42 | - name: Cache PlatformIO 43 | uses: actions/cache@v3 44 | with: 45 | path: ~/.platformio 46 | key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} 47 | 48 | - name: Setup Python 3.9 49 | uses: actions/setup-python@v4 50 | with: 51 | python-version: '3.9' 52 | - name: Install PlatformIO Core 53 | run: | 54 | pip install -U setuptools platformio 55 | pio upgrade --dev 56 | pio pkg update --global 57 | - name: Build ${{ matrix.variant }} 58 | run: platformio run -e ${{ matrix.variant }} 59 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .pio 2 | venv/ 3 | .vscode/.browse.c_cpp.db* 4 | .vscode/c_cpp_properties.json 5 | .vscode/launch.json 6 | .vscode/ipch 7 | .DS_Store 8 | .idea/ 9 | CMakeListsPrivate.txt 10 | cmake-build-az-delivery-devkit-v4/ 11 | cmake-build-debug/ 12 | platformio-override.ini 13 | sdkconfig.* 14 | !sdkconfig.defaults 15 | src/settings-override.h 16 | src/settings-custom-override.h 17 | node_modules/ 18 | html/REST_API.yaml 19 | html/*.min.html 20 | html/locales/*.min.json 21 | html/js/*.min.min.js 22 | html/js/swaggerInitializer.min.js 23 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # Continuous Integration (CI) is the practice, in software 2 | # engineering, of merging all developer working copies with a shared mainline 3 | # several times a day < https://docs.platformio.org/page/ci/index.html > 4 | # 5 | # Documentation: 6 | # 7 | # * Travis CI Embedded Builds with PlatformIO 8 | # < https://docs.travis-ci.com/user/integration/platformio/ > 9 | # 10 | # * PlatformIO integration with Travis CI 11 | # < https://docs.platformio.org/page/ci/travis.html > 12 | # 13 | # * User Guide for `platformio ci` command 14 | # < https://docs.platformio.org/page/userguide/cmd_ci.html > 15 | # 16 | # 17 | # Please choose one of the following templates (proposed below) and uncomment 18 | # it (remove "# " before each line) or use own configuration according to the 19 | # Travis CI documentation (see above). 20 | # 21 | 22 | 23 | # 24 | # Template #1: General project. Test it using existing `platformio.ini`. 25 | # 26 | 27 | # language: python 28 | # python: 29 | # - "2.7" 30 | # 31 | # sudo: false 32 | # cache: 33 | # directories: 34 | # - "~/.platformio" 35 | # 36 | # install: 37 | # - pip install -U platformio 38 | # - platformio update 39 | # 40 | # script: 41 | # - platformio run 42 | 43 | 44 | # 45 | # Template #2: The project is intended to be used as a library with examples. 46 | # 47 | 48 | # language: python 49 | # python: 50 | # - "2.7" 51 | # 52 | # sudo: false 53 | # cache: 54 | # directories: 55 | # - "~/.platformio" 56 | # 57 | # env: 58 | # - PLATFORMIO_CI_SRC=path/to/test/file.c 59 | # - PLATFORMIO_CI_SRC=examples/file.ino 60 | # - PLATFORMIO_CI_SRC=path/to/test/directory 61 | # 62 | # install: 63 | # - pip install -U platformio 64 | # - platformio update 65 | # 66 | # script: 67 | # - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N 68 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "platformio.platformio-ide" 6 | ], 7 | "unwantedRecommendations": [ 8 | "ms-vscode.cpptools-extension-pack" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmake.configureOnOpen": false, 3 | "gitlens.advanced.blame.customArguments": [ 4 | "--ignore-revs-file", ".git-blame-ignore-revs" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.16.0) 2 | include($ENV{IDF_PATH}/tools/cmake/project.cmake) 3 | project(ESPuino) 4 | -------------------------------------------------------------------------------- /Hardware-Plaforms/ESP32-A1S-Audiokit/README.md: -------------------------------------------------------------------------------- 1 | ## Things to know 2 | * As there's a lack of GPIOs, it's necessary to share a single SPI-instance by SD and RFID. 3 | * The board provides 6 keys but due to lack of free GPIOs, we need them for other purposes. Additionaly the problem is, that all keys are equipped with capacitors (maybe to debounce) which makes it hard to use those GPIOs for other purposes. That's why I unsoldered R66, 67, 68, 69, 70 (all 0 Ohms) to free these GPIOs from the capacitors. 4 | * Please note: key1 still works but if you additionaly want to use keys2-6, you can use GPIO36 along with analogRead() by using voltage-dividers. But first one has to calculate + solder resistor-pairs 56/61, 57/62, 58/63, 59/64 to 'build' those voltage-dividers. Without doing that online Key1 is usable as it doesn't need resistors. However, didn't solder/test dividers so far. 5 | * When switching over to use analogRead() one has to modify Button_Cyclic() in my code. 6 | * Additionaly I unsoldered resistor R14 in order to deactivate LED D4 (probably not necessary) 7 | 8 | ## GPIOs (outdated! Best have a look at settings-espa1s.h) 9 | Please note: You need to unsolder R66, 67, 68, 69, 70 first to use the board that way! 10 | 11 | | GPIO | Usage | Pin | Comment | 12 | | ------------- | -----------------| ----------- | ------------------------------------------------------------ | 13 | | 0 | internal (I2S) | MCLK | | 14 | | 2 | SD (int.) + RFID | SPI.MISO | Solder wire to SD.7 for RFID | 15 | | 4 | Rot. Encoder | BUTTON | Solder wire to SD.8 | 16 | | 5 | Rot. Encoder | CLK | Via 14-pin-header | 17 | | 12 | RFID | SPI.CS | Via JT_MTDI | 18 | | 13 | internal (SD) | SPI.CS | CS for SD | 19 | | 14 | SD (int.) + RFID | SPI.SCK | Via JT_MTMS | 20 | | 15 | SD (int.) + RFID | SPI.MOSI | Via JT_MTDO | 21 | | 18 | Rot. Encoder | DT | Via 14-pin-header | 22 | | 19 | Power | | For switch on/off external hardware via MOSFET (optional) | 23 | | 21 | internal (amp) | | To switch on/off amp | 24 | | 22 | unused? | | Via 14-pin-header | 25 | | 23 | Neopixel | DI | Via 14-pin-header | 26 | | 25 | internal (I2S) | DSIN | | 27 | | 26 | internal (I2S) | LRC | | 28 | | 27 | internal (I2S) | BCLK | | 29 | | 32 | internal (I2C) | CLK | | 30 | | 33 | internal (I2C) | DATA | | 31 | | 34 | internal (SD) | DETECT | To detect if SD is present (not used) | 32 | | 35 | internal (I2S) | DOUT | | 33 | | 36 | internal (Key) | A/D | Analog read for keys 1-6 or digial read for only key 1 | 34 | | 39 | internal (HP) | DETECT | Detects if headphone is plugged in | 35 | 36 | 37 | Now, question is what to do with GPIO22. Could be used to externally connect keys for analogRead() via voltage-dividers. 38 | 39 | ## Power-consumption 40 | * IDLE: 105 mA 41 | * Deepsleep (without RFID + Neopixel): 30 mA 42 | 43 | ## Things to consider 44 | * I didn't battery-power this board (guess it works but didn't test). But as current in deepsleep still is 30 mA, this probably doesn't make sense. 45 | * When using a switch (instead of putting 'only' to deepsleep), GPIO 19 (power) could be omitted. Along with GPIO 22, these buttons could be used as buttons 'previous' and 'next'. Third button could be omitted by assigning short-press-action of rotary-encoder for 'pause/play'. 46 | * In order to safe energy consider the unsolder LEDs. 47 | 48 | ## Please note 49 | * Some additional informations regarding this board can be found [here](https://www.mikrocontroller.net/topic/474383?goto=6429727) and [here] (https://www.mikrocontroller.net/topic/492149). -------------------------------------------------------------------------------- /Hardware-Plaforms/ESP32-A1S-Audiokit/docs/A1S.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/Hardware-Plaforms/ESP32-A1S-Audiokit/docs/A1S.pdf -------------------------------------------------------------------------------- /Hardware-Plaforms/ESP32-A1S-Audiokit/docs/ESP32-A1S Product Specification.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/Hardware-Plaforms/ESP32-A1S-Audiokit/docs/ESP32-A1S Product Specification.pdf -------------------------------------------------------------------------------- /Hardware-Plaforms/ESP32-A1S-Audiokit/docs/ESP32-A1S-Pinout.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/Hardware-Plaforms/ESP32-A1S-Audiokit/docs/ESP32-A1S-Pinout.jpg -------------------------------------------------------------------------------- /Hardware-Plaforms/ESP32-A1S-Audiokit/docs/ESP32-Audio-Kit2.2 ff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/Hardware-Plaforms/ESP32-A1S-Audiokit/docs/ESP32-Audio-Kit2.2 ff.png -------------------------------------------------------------------------------- /Hardware-Plaforms/MRFC522-RC522-RFID.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/Hardware-Plaforms/MRFC522-RC522-RFID.jpg -------------------------------------------------------------------------------- /Hardware-Plaforms/drill.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/Hardware-Plaforms/drill.jpg -------------------------------------------------------------------------------- /PCBs/AZDelivery_ESP32_NodeMCU/README.md: -------------------------------------------------------------------------------- 1 | # ESPuino-PCB based on AZ Delivery's ESP32 NodeMCU / Devkit C 2 | 3 | ## Features 4 | For complete feature-list and explanations please have a look [here](https://forum.espuino.de/t/az-delivery-esp32-nodemcu-devkit-c-mit-sd-mmc-und-pn5180-als-rfid-leser/634). In the past I wrote everything in English, too, but as it turns out (surprise surprise) it's too much work. 5 | 6 | Feel free to order this PCB yourself using the Gerber-files provided or contact me via forum (linked above). -------------------------------------------------------------------------------- /PCBs/AZDelivery_ESP32_NodeMCU/gerber/gerber_rev2.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/AZDelivery_ESP32_NodeMCU/gerber/gerber_rev2.zip -------------------------------------------------------------------------------- /PCBs/AZDelivery_ESP32_NodeMCU/pictures/3d-model-back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/AZDelivery_ESP32_NodeMCU/pictures/3d-model-back.png -------------------------------------------------------------------------------- /PCBs/AZDelivery_ESP32_NodeMCU/pictures/3d-model_front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/AZDelivery_ESP32_NodeMCU/pictures/3d-model_front.png -------------------------------------------------------------------------------- /PCBs/AZDelivery_ESP32_NodeMCU/pictures/Schematics_rev2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/AZDelivery_ESP32_NodeMCU/pictures/Schematics_rev2.pdf -------------------------------------------------------------------------------- /PCBs/AZDelivery_ESP32_NodeMCU/pictures/Soldered_with_peripherals.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/AZDelivery_ESP32_NodeMCU/pictures/Soldered_with_peripherals.jpg -------------------------------------------------------------------------------- /PCBs/AZDelivery_ESP32_NodeMCU/pictures/Soldered_with_peripherals2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/AZDelivery_ESP32_NodeMCU/pictures/Soldered_with_peripherals2.jpg -------------------------------------------------------------------------------- /PCBs/AZDelivery_ESP32_NodeMCU/pictures/Soldered_with_peripherals3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/AZDelivery_ESP32_NodeMCU/pictures/Soldered_with_peripherals3.jpg -------------------------------------------------------------------------------- /PCBs/Headphone with MS6324 and TDA1308/README.md: -------------------------------------------------------------------------------- 1 | # Headphone-PCB 2 | This is a pcb, that was developed by myself. It makes use of a DAC named 'MS6324' with a TDA1308 as amp. It's described in detail with pictures [here](https://forum.espuino.de/t/kopfhoererplatine-basierend-auf-ms6324-und-tda1308/1099). Please contact me via my forum in case you need one fully soldered and ready-to-use or as assembly kit (to be soldered by yourself). 3 | It's compatible with all PCBs carrying a IDC-connector with 6 pins. -------------------------------------------------------------------------------- /PCBs/Headphone with PCM5102a and TDA1308/KiCad/Kicad-Files.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Headphone with PCM5102a and TDA1308/KiCad/Kicad-Files.zip -------------------------------------------------------------------------------- /PCBs/Headphone with PCM5102a and TDA1308/Pictures/3D-model_downside.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Headphone with PCM5102a and TDA1308/Pictures/3D-model_downside.jpeg -------------------------------------------------------------------------------- /PCBs/Headphone with PCM5102a and TDA1308/Pictures/3D-model_upside.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Headphone with PCM5102a and TDA1308/Pictures/3D-model_upside.jpeg -------------------------------------------------------------------------------- /PCBs/Headphone with PCM5102a and TDA1308/Pictures/Headphone-pcb.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Headphone with PCM5102a and TDA1308/Pictures/Headphone-pcb.pdf -------------------------------------------------------------------------------- /PCBs/Headphone with PCM5102a and TDA1308/Pictures/Headphone-pcb_downside.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Headphone with PCM5102a and TDA1308/Pictures/Headphone-pcb_downside.jpg -------------------------------------------------------------------------------- /PCBs/Headphone with PCM5102a and TDA1308/Pictures/Headphone-pcb_upside.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Headphone with PCM5102a and TDA1308/Pictures/Headphone-pcb_upside.jpg -------------------------------------------------------------------------------- /PCBs/Headphone with PCM5102a and TDA1308/README.md: -------------------------------------------------------------------------------- 1 | # Headphone-PCB 2 | This is a pcb, that was kindly provided by a user of my ESPuino. It makes use of a DAC named 'PCM5102A' with a TDA1308 as amp. PCM5102A supports I2S, so it can connected in parallel to MAX98357a to the I2S-pins BCLK, LRC and DIN. Of course, it needs 3.3V and GND, too. Please note that SMD-technique is used.
3 | The 6th pin of connector J1 is used to indicate whether there's a plug or not. That means if there is a plug, this pin is pulled to GND and therefore can be used to connect to MAX98357.SD. Doing so will mute MAX's amp and vice versa. Of course you need a special [headphone jack](https://www.conrad.de/de/p/cliff-fcr1295-klinken-steckverbinder-3-5-mm-buchse-einbau-horizontal-polzahl-3-stereo-schwarz-1-st-705830.html) to use this feature. Additionaly this 6th pin can be connected to the ESP32 in order to make use of the feature `HEADPHONE_ADJUST_ENABLE`. Doing so can optionally limit the headphone's maximum volume (configureable via GUI).
4 | 5 | Please note: the files in my GitHub-repository may be outdated regarding this PCB. Please have a look [here](https://u.pcloud.link/publink/show?code=kZjJVKkZOYso9U99qILNOMm5ehliaFtxldWX). 6 | 7 | ## Disclaimer 8 | PCB-circuit is provided 'as is' without warranty. As previously stated it was kindly provided by a user and I only can give limited support to it. However: it runs fine without any problems in my ESPuinos. 9 | 10 | ## Note 11 | Do you need a headphone-PCB that is ready to use? No problem! There's an [alternative](https://forum.espuino.de/t/kopfhoererplatine-basierend-auf-ms6324-und-tda1308/1099) available that's 100% compatible with the one described above and already fully soldered. Please contact me via my forum in case you need such one (or more, hehe). 12 | -------------------------------------------------------------------------------- /PCBs/Headphone with PCM5102a and TDA1308/gerber/gerber.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Headphone with PCM5102a and TDA1308/gerber/gerber.zip -------------------------------------------------------------------------------- /PCBs/Wemos Lolin D32/Gerber/gerber.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin D32/Gerber/gerber.zip -------------------------------------------------------------------------------- /PCBs/Wemos Lolin D32/Infos/sch_d32_v1.0.0.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin D32/Infos/sch_d32_v1.0.0.pdf -------------------------------------------------------------------------------- /PCBs/Wemos Lolin D32/Pictures/ESPuino D32_downside.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin D32/Pictures/ESPuino D32_downside.png -------------------------------------------------------------------------------- /PCBs/Wemos Lolin D32/Pictures/ESPuino D32_upside.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin D32/Pictures/ESPuino D32_upside.png -------------------------------------------------------------------------------- /PCBs/Wemos Lolin D32/Pictures/Schematics_D32.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin D32/Pictures/Schematics_D32.pdf -------------------------------------------------------------------------------- /PCBs/Wemos Lolin D32/Pictures/Soldered 1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin D32/Pictures/Soldered 1.jpg -------------------------------------------------------------------------------- /PCBs/Wemos Lolin D32/Pictures/Soldered 2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin D32/Pictures/Soldered 2.jpg -------------------------------------------------------------------------------- /PCBs/Wemos Lolin D32/Pictures/Soldered 3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin D32/Pictures/Soldered 3.jpg -------------------------------------------------------------------------------- /PCBs/Wemos Lolin D32pro/README.md: -------------------------------------------------------------------------------- 1 | # ESPuino-PCB based on Wemos' 2 | Please refer [this link](https://forum.espuino.de/t/espuino-minid32pro-lolin-d32-pro-mit-sd-mmc-und-port-expander-smd/866/3). It's described there in detail (in German). -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32 SD_MMC PN5180/Gerber/gerber.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32 SD_MMC PN5180/Gerber/gerber.zip -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32 SD_MMC PN5180/Pictures/3d_Model_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32 SD_MMC PN5180/Pictures/3d_Model_down.png -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32 SD_MMC PN5180/Pictures/3d_Model_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32 SD_MMC PN5180/Pictures/3d_Model_up.png -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32 SD_MMC PN5180/Pictures/Schematics.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32 SD_MMC PN5180/Pictures/Schematics.pdf -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/Gerber/gerber.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/Gerber/gerber.zip -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/Infos/LOLIN32_Circuit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/Infos/LOLIN32_Circuit.png -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/Pictures/ESPuino V2-Schematics.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/Pictures/ESPuino V2-Schematics.pdf -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/Pictures/ESPuino V2_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/Pictures/ESPuino V2_down.png -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/Pictures/ESPuino V2_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/Pictures/ESPuino V2_up.png -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/Pictures/Soldered with peripherals1_rev1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/Pictures/Soldered with peripherals1_rev1.jpg -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/Pictures/Soldered with peripherals2_rev1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/Pictures/Soldered with peripherals2_rev1.jpg -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/Pictures/Soldered1_rev1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/Pictures/Soldered1_rev1.jpg -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/Pictures/Soldered2_rev1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/Pictures/Soldered2_rev1.jpg -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/_Archiv/rev1/Gerber/gerber.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/_Archiv/rev1/Gerber/gerber.zip -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/_Archiv/rev1/KiCad/Kicad-files.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/_Archiv/rev1/KiCad/Kicad-files.zip -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/3d-Model downside.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/3d-Model downside.jpg -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/3d-Model upside.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/3d-Model upside.jpg -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered with peripherals1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered with peripherals1.jpg -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered with peripherals2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered with peripherals2.jpg -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered1.jpg -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Soldered2.jpg -------------------------------------------------------------------------------- /PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Tonuino-Lolin32-Schematics.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/PCBs/Wemos Lolin32/_Archiv/rev1/Pictures/Tonuino-Lolin32-Schematics.pdf -------------------------------------------------------------------------------- /custom_16mb_ota.csv: -------------------------------------------------------------------------------- 1 | # 256 kB (instead of 24 kB) for nvs, the rest is used by application 2 | # Infos: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/partition-tables.html 3 | # Name, Type, SubType, Offset, Size, Flags 4 | otadata, data, ota, 0x9000 , 0x2000, 5 | phy_init, data, phy, 0xb000 , 0x1000 6 | app0, app, ota_0, 0x10000, 0x640000, 7 | app1, app, ota_1, , 0x640000, 8 | nvs, data, nvs, , 0x40000, 9 | storage, data, spiffs, , 0x330000, -------------------------------------------------------------------------------- /custom_4mb_noota.csv: -------------------------------------------------------------------------------- 1 | # 256 kB (instead of 24 kB) for nvs, the rest is used by application 2 | # Infos: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/partition-tables.html 3 | # Name, Type, SubType, Offset, Size, Flags 4 | app0, app, factory, 0x10000, 0x3B0000, 5 | nvs, data, nvs, , 0x40000, -------------------------------------------------------------------------------- /custom_8mb_ota.csv: -------------------------------------------------------------------------------- 1 | # 256 kB (instead of 24 kB) for nvs, the rest is used by application 2 | # Infos: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/partition-tables.html 3 | # TOTAL AVAILABLE: 0x800000 4 | # Name, Type, SubType, Offset, Size, Flags 5 | otadata, data, ota, 0x9000 , 0x2000, 6 | phy_init, data, phy, 0xb000 , 0x1000 7 | app0, app, ota_0, 0x10000, 0x3B0000, 8 | app1, app, ota_1, , 0x3B0000, 9 | nvs, data, nvs, , 0x40000, 10 | storage, data, spiffs, , 0x50000, -------------------------------------------------------------------------------- /datasheets/PCA9555.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biologist79/ESPuino/4474081bdecd1197ad806de2f85d35ac95d8a939/datasheets/PCA9555.pdf -------------------------------------------------------------------------------- /dependencies.lock: -------------------------------------------------------------------------------- 1 | dependencies: 2 | idf: 3 | component_hash: null 4 | source: 5 | type: idf 6 | version: 4.4.4 7 | manifest_hash: dcf4d39b94252de130019eadceb989d72b0dbc26b552cfdcbb50f6da531d2b92 8 | target: esp32 9 | version: 1.0.0 10 | -------------------------------------------------------------------------------- /gitVersion.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | """PlatformIO script to generate a gitversion.h file and adds its path to 4 | CPPPATH. 5 | 6 | Note: The PlatformIO documentation suggests to simply add the Git version as 7 | dynamic build flag (=define). This however leads to constant rebuilds of the 8 | complete project. 9 | """ 10 | 11 | import subprocess 12 | from pathlib import Path 13 | 14 | Import("env") # pylint: disable=undefined-variable 15 | 16 | 17 | OUTPUT_PATH = ( 18 | Path(env.subst("$BUILD_DIR")) / "generated" / "gitrevision.h" 19 | ) # pylint: disable=undefined-variable 20 | 21 | TEMPLATE = """ 22 | #ifndef __GIT_REVISION_H__ 23 | #define __GIT_REVISION_H__ 24 | constexpr const char gitRevision[] = "Git-revision: {git_revision}"; 25 | constexpr const char gitRevShort[] = "\\"{git_revision}\\""; 26 | #endif 27 | """ 28 | 29 | 30 | def git_revision(): 31 | """Returns Git revision or unknown.""" 32 | try: 33 | return subprocess.check_output( 34 | ["git", "describe", "--always", "--dirty"], 35 | text=True, 36 | stderr=subprocess.PIPE, 37 | ).strip() 38 | except (subprocess.CalledProcessError, OSError) as err: 39 | print( 40 | f" Warning: Setting Git revision to 'unknown': {err.stderr.split(':', 1)[1].strip()}" 41 | ) 42 | return "unknown" 43 | 44 | 45 | def generate(): 46 | """Generates header file.""" 47 | print("GENERATING GIT REVISION HEADER FILE") 48 | gitrev = git_revision() 49 | print(f' "{gitrev}" -> {OUTPUT_PATH}') 50 | OUTPUT_PATH.parent.mkdir(exist_ok=True, parents=True) 51 | with OUTPUT_PATH.open("w") as output_file: 52 | output_file.write(TEMPLATE.format(git_revision=gitrev)) 53 | 54 | 55 | generate() 56 | env.Append(CPPPATH=OUTPUT_PATH.parent) # pylint: disable=undefined-variable 57 | -------------------------------------------------------------------------------- /html/js/i18nextHttpBackend.min.js: -------------------------------------------------------------------------------- 1 | !function(e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).i18nextHttpBackend=e()}(function(){return function o(i,r,a){function s(t,e){if(!r[t]){if(!i[t]){var n="function"==typeof require&&require;if(!e&&n)return n(t,!0);if(u)return u(t,!0);throw(e=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",e}n=r[t]={exports:{}},i[t][0].call(n.exports,function(e){return s(i[t][1][e]||e)},n,n.exports,o,i,r,a)}return r[t].exports}for(var u="function"==typeof require&&require,e=0;e"),u=t.innerHTML.indexOf("")+11;l>-1&&u>6&&(t.innerHTML=[t.innerHTML.substring(0,l),t.innerHTML.slice(u)].join("")),t.innerHTML=["",e.t(n,c(r,t.innerHTML)),"",t.innerHTML].join("")}else if("append"===i){var f=t.innerHTML.indexOf(""),s=t.innerHTML.indexOf("")+11;f>-1&&s>6&&(t.innerHTML=[t.innerHTML.substring(0,f),t.innerHTML.slice(s)].join("")),t.innerHTML=[t.innerHTML,"",e.t(n,c(r,t.innerHTML),"")].join("")}else if(0===i.indexOf("data-")){var a=i.substr("data-".length),p=e.t(n,c(r,t.getAttribute(a)));t.setAttribute(a,p),t.setAttribute(i,p)}else t.setAttribute(i,e.t(n,c(r,t.getAttribute(i))))}function i(e){return JSON.parse(e.replace(/:\s*"([^"]*)"/g,function(e,t){return': "'+t.replace(/:/g,"@colon@")+'"'}).replace(/:\s*'([^']*)'/g,function(e,t){return': "'+t.replace(/:/g,"@colon@")+'"'}).replace(/(['"])?([a-z0-9A-Z_]+)(['"])?\s*:/g,'"$2": ').replace(/@colon@/g,":"))}function o(e,r){var o=e.getAttribute(u.selectorAttr);if(o){var l=e,c=e.getAttribute(u.targetAttr);if(null!=c&&(l=e.querySelector(c)||e),r||!0!==u.useOptionsAttr||(r=i(e.getAttribute(u.optionsAttr)||"{}")),r=r||{},o.indexOf(";")>=0)for(var f=o.split(";"),s=0,a=f.length;s-1;c--)o(l[c],t);o(i,t)}}var u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};u=t({},r,u);var c=function(e,n){return u.parseDefaultValueFromContent?t({},e,{defaultValue:n}):e};return l}var r={selectorAttr:"data-i18n",targetAttr:"i18n-target",optionsAttr:"i18n-options",useOptionsAttr:!1,parseDefaultValueFromContent:!0,document:document};return{init:n}}); -------------------------------------------------------------------------------- /html/js/swaggerInitializer.js: -------------------------------------------------------------------------------- 1 | window.onload = function() { 2 | window.ui = SwaggerUIBundle({ 3 | url: "../REST_API.yaml", 4 | dom_id: '#swagger-ui', 5 | deepLinking: true, 6 | presets: [ 7 | SwaggerUIBundle.presets.apis, 8 | SwaggerUIStandalonePreset 9 | ], 10 | plugins: [ 11 | SwaggerUIBundle.plugins.DownloadUrl 12 | ], 13 | layout: "StandaloneLayout" 14 | }); 15 | }; 16 | -------------------------------------------------------------------------------- /html/swagger.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Swagger UI 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /include/README: -------------------------------------------------------------------------------- 1 | 2 | This directory is intended for project header files. 3 | 4 | A header file is a file containing C declarations and macro definitions 5 | to be shared between several project source files. You request the use of a 6 | header file in your project source file (C, C++, etc) located in `src` folder 7 | by including it, with the C preprocessing directive `#include'. 8 | 9 | ```src/main.c 10 | 11 | #include "header.h" 12 | 13 | int main (void) 14 | { 15 | ... 16 | } 17 | ``` 18 | 19 | Including a header file produces the same results as copying the header file 20 | into each source file that needs it. Such copying would be time-consuming 21 | and error-prone. With a header file, the related declarations appear 22 | in only one place. If they need to be changed, they can be changed in one 23 | place, and programs that include the header file will automatically use the 24 | new version when next recompiled. The header file eliminates the labor of 25 | finding and changing all the copies as well as the risk that a failure to 26 | find one copy will result in inconsistencies within a program. 27 | 28 | In C, the usual convention is to give header files names that end with `.h'. 29 | It is most portable to use only letters, digits, dashes, and underscores in 30 | header file names, and at most one dot. 31 | 32 | Read more about using header files in official GCC documentation: 33 | 34 | * Include Syntax 35 | * Include Operation 36 | * Once-Only Headers 37 | * Computed Includes 38 | 39 | https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html 40 | -------------------------------------------------------------------------------- /lib/README: -------------------------------------------------------------------------------- 1 | 2 | This directory is intended for project specific (private) libraries. 3 | PlatformIO will compile them to static libraries and link into executable file. 4 | 5 | The source code of each library should be placed in a an own separate directory 6 | ("lib/your_library_name/[here are source files]"). 7 | 8 | For example, see a structure of the following two libraries `Foo` and `Bar`: 9 | 10 | |--lib 11 | | | 12 | | |--Bar 13 | | | |--docs 14 | | | |--examples 15 | | | |--src 16 | | | |- Bar.c 17 | | | |- Bar.h 18 | | | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html 19 | | | 20 | | |--Foo 21 | | | |- Foo.c 22 | | | |- Foo.h 23 | | | 24 | | |- README --> THIS FILE 25 | | 26 | |- platformio.ini 27 | |--src 28 | |- main.c 29 | 30 | and a contents of `src/main.c`: 31 | ``` 32 | #include 33 | #include 34 | 35 | int main (void) 36 | { 37 | ... 38 | } 39 | 40 | ``` 41 | 42 | PlatformIO Library Dependency Finder will find automatically dependent 43 | libraries scanning project source files. 44 | 45 | More information about PlatformIO Library Dependency Finder 46 | - https://docs.platformio.org/page/librarymanager/ldf.html 47 | -------------------------------------------------------------------------------- /openHAB/README.md: -------------------------------------------------------------------------------- 1 | # OpenHAB-integration for ESPuino 2 | 3 | ## Disclaimer 4 | [OpenHAB](https://www.openhab.org/) is a pretty complex software for home automation. I just extracted that parts of my local config, that are necessary for ESPuino. Hopefully I didn't forget anything :-) Said this I want to rule out I didn't test this minimal setup and that this document's aim isn't to provide a fully-featured howto. For further informations please have a look at the project's [documentation](https://www.openhab.org/docs/) or the [community](https://community.openhab.org/). 5 | 6 | ## What's necessary (hardware) 7 | * I always recommend Raspberry Pi as it consumes only a few watts. 8 | * Make sure to at least use model 3b+. If you don't yet own a Raspi, go for Raspi 4b with at least 2 GB of RAM (maybe better 4 GB). 9 | * Important is a good power supply. If in doubts use the [official one](https://www.amazon.de/Raspberry-Pi-offizielles-Netzteil-Model/dp/B07TMPC9FG). Better don't use one from an "old cellphone" as it's hard to know if it fits Raspi's needs. 10 | * Raspberrys usually use µSD-card as main-storage. In general, this is fine and tiny-sized as well, but the problem is, that openHAB logs extensively. And unfortunately this is something, that µSD don't like so this probably leads to fast wear. So better use a SSD instead of µSD. Unfortunately, Raspi4b doesn't support to boot from SSD out-of-the-box. Please refer these [instructions](https://kofler.info/usb-boot-fuer-den-raspberry-pi-4/) to know what's necessary to "persuade" Raspi4b to boot from an USB-drive. Trust me: it's really worth it to use a SSD-drive. Especially with a Raspi4b (that provides USB3) it's much much more faster than µSD. 11 | * Good news for people using Raspi3b+: it supports booting from USB-drive out-of-the-box. 12 | ## What's necessary (software) 13 | * In order to make use of my config-files you need to have a running openHAB-installation. Mine is running on a Raspberry Pi 4b (4GB Ram) with openHAB3. In general there are two ways to install openHAB: 14 | * [Raspberry Pi OS with manual openHAB-installation](https://www.openhab.org/docs/installation/rasppi.html) 15 | * [openHABian](https://www.openhab.org/docs/installation/openhabian.html). After testing it myself I also recommend to use openHABian as it's much simplier. 16 | * Make sure to choose openHAB3 as openHAB2 will be discontinued mid-term. 17 | * After completing the installation, [UI](http://:8080) should be browsable. In order to get ESPuino running you need at least the MQTT-binding (Add-ons -> Bindings) and the Map-transformation (Add-ons -> transformations). And you need to setup items, rules and sitemap. 18 | * Beside of openHAB you need a MQTT-broker. You can use a public one but if there's already a Raspberry Pi running with openHAB, it probably makes sense to install [Mosquitto](https://mosquitto.org/) as MQTT-broker in parallel. 19 | 20 | ## GUI or text? 21 | * When it comes to configuration, there are two possibilities: GUI or txt-Files. 22 | * It seems to be sorta religion of which one to choose :-) However, as of openHAB3, GUI is simplier, but's a lot of stuff to click that would be probably faster to configure as text-file. Refer [this one](https://www.openhab.org/docs/configuration/#textual-vs-graphical-configuration) for further informations. 23 | * Please note: my examples are txt-based and taken from openHAB2. With changing from openHAB2 to openHAB3, I moved over to configuration via GUI. Anyway: the sitemap still needs to be configured as txt-file. 24 | ## MQTT 25 | After your MQTT-broker is set up have look at mqttConnections.things in order to configure the MQTTT-connection between openHAB and the broker. In doubt restart openHAB as changes sometimes don't get recognized immediately without restart. If nothing happens have a look at the logfiles /var/log/openhab/openhab.log or /var/log/openhab/events.log. In general, to debug MQTT-stuff, [MQTT fx](https://mqttfx.jensd.de/) is a good tool to refer. 26 | 27 | ## How does it look like? 28 | Depends on you like it :-) Here's some screenshots of my sitemap-presentation as described in my GitHub-repository. 29 | App's screen when ESPuino is running and playing a music-folder:
30 | 31 | 32 | RFID-tags can also be 'emulated' via app. It's not really comfortable, as this list isn't synced with the RFIDs known to ESPuino, but at least it's possible (+handy for a few RFIDs):
33 | 34 | 35 | Sleep-timer can be adjusted this way:
36 | 37 | 38 | When ESPuino is not online (doesn't matter if deepsleep or totally powered off):
39 | -------------------------------------------------------------------------------- /openHAB/items/Home.items: -------------------------------------------------------------------------------- 1 | // Gruppen 2 | Group Daheim 3 | 4 | // OG 5 | Group Obergeschoss "Obergeschoss" (Daheim) 6 | Group ZimmerTim "Kinderzimmer Tim" (Obergeschoss) 7 | 8 | // Zimmer Kind 9 | Switch Espuino_Sleep { channel="mqtt:topic:MQTT:espuino:espuino_sleep_mqtt", autoupdate="true" } 10 | String Espuino_Rfid { channel="mqtt:topic:MQTT:espuino:espuino_rfid_mqtt", autoupdate="true" } 11 | Number Espuino_Loudness "Lautstärke [%d]" { channel="mqtt:topic:MQTT:espuino:espuino_loudness_mqtt", autoupdate="true" } 12 | String Espuino_SleepTimer { channel="mqtt:topic:MQTT:espuino:espuino_sleeptimer_mqtt", autoupdate="true" } 13 | String Espuino_Status { channel="mqtt:topic:MQTT:espuino:espuino_status_mqtt", autoupdate="true", expire="2m, command=Offline" } 14 | String Espuino_CurrentTrack "Aktueller Track" { channel="mqtt:topic:MQTT:espuino:espuino_current_track_mqtt", autoupdate="true" } 15 | String Espuino_TrackControl "Track-Control" { channel="mqtt:topic:MQTT:espuino:espuino_track_control_mqtt", autoupdate="false" } 16 | String Espuino_IPv4 "IPv4-Adresse" { channel="mqtt:topic:MQTT:espuino:espuino_ipv4_mqtt", autoupdate="true" } 17 | Switch Espuino_LockControls "Bedienung sperren" { channel="mqtt:topic:MQTT:espuino:espuino_lock_controls_mqtt", autoupdate="true" } 18 | Number Espuino_Playmode "Aktueller Playmode [MAP(playmodes.map):%d]" { channel="mqtt:topic:MQTT:espuino:espuino_playmode_mqtt", autoupdate="true" } 19 | Number Espuino_LedBrightness "Helligkeit LEDs" { channel="mqtt:topic:MQTT:espuino:espuino_led_brightness_mqtt", autoupdate="true" } 20 | DateTime Espuino_LastUpdate "Letztes Update [%1$ta %1$tR]"