Merge branch 'mega' of https://github.com/letscontrolit/ESPEasy into feature/P132-add-support-for-other-INA-chips
@@ -5,7 +5,7 @@ name: Build
|
||||
on:
|
||||
push:
|
||||
branches: [mega]
|
||||
tags-ignore: '**'
|
||||
tags-ignore: ['**']
|
||||
paths-ignore:
|
||||
- 'dist/Release_notes.txt'
|
||||
- 'docs/**'
|
||||
@@ -37,7 +37,7 @@ jobs:
|
||||
make html
|
||||
cd ..
|
||||
zip -r -qq ESPEasy_docs.zip docs/build/*
|
||||
- uses: actions/upload-artifact@v5
|
||||
- uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: Documentation
|
||||
path: ESPEasy_docs.zip
|
||||
@@ -88,7 +88,7 @@ jobs:
|
||||
uses: Entepotenz/change-string-case-action-min-dependencies@v1
|
||||
with:
|
||||
string: ${{ matrix.chip }}
|
||||
- uses: actions/upload-artifact@v5
|
||||
- uses: actions/upload-artifact@v6
|
||||
with:
|
||||
# FIXME Workaround to (temporarily) not use # in the artifact name, see https://github.com/actions/upload-artifact/issues/473
|
||||
name: Bin-${{ steps.string.outputs.uppercase }}-${{ matrix.env }}-${{ steps.date.outputs.builddate }}_PR_${{ github.event.number }}_${{ github.run_id }} # Sort by ESP type
|
||||
@@ -110,7 +110,7 @@ jobs:
|
||||
run: |
|
||||
echo "builddate=$(date +'%Y%m%d')" >> $GITHUB_OUTPUT
|
||||
- name: Download all artifacts
|
||||
uses: actions/download-artifact@v6
|
||||
uses: actions/download-artifact@v7
|
||||
with:
|
||||
path: artifacts/Binaries/bin/
|
||||
pattern: Bin-*
|
||||
@@ -119,7 +119,7 @@ jobs:
|
||||
run: |
|
||||
cd artifacts/Binaries/
|
||||
ls -R
|
||||
- uses: actions/upload-artifact@v5
|
||||
- uses: actions/upload-artifact@v6
|
||||
with:
|
||||
# FIXME Workaround to (temporarily) not use # in the artifact name, see https://github.com/actions/upload-artifact/issues/473
|
||||
name: ESPEasy-all-Binaries-${{ steps.date.outputs.builddate }}_PR_${{ github.event.number }}_${{ github.run_id }}
|
||||
|
||||
@@ -9,8 +9,8 @@ name: Release
|
||||
|
||||
on:
|
||||
push:
|
||||
branches-ignore: '**'
|
||||
tags: 'mega-*'
|
||||
branches-ignore: ['**']
|
||||
tags: ['mega-*']
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -58,7 +58,7 @@ jobs:
|
||||
uses: Entepotenz/change-string-case-action-min-dependencies@v1
|
||||
with:
|
||||
string: ${{ matrix.chip }}
|
||||
- uses: actions/upload-artifact@v5
|
||||
- uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: Bin-${{ steps.string.outputs.uppercase }}-${{ matrix.env }}
|
||||
path: |
|
||||
@@ -71,6 +71,8 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: '3.13'
|
||||
- name: Build documentation
|
||||
run: |
|
||||
cd docs
|
||||
@@ -85,7 +87,7 @@ jobs:
|
||||
cd dist
|
||||
zip -r -qq ../ESPEasy_dist.zip *
|
||||
cd ..
|
||||
- uses: actions/upload-artifact@v5
|
||||
- uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: Distribution
|
||||
path: |
|
||||
@@ -129,13 +131,13 @@ jobs:
|
||||
run: |
|
||||
echo "builddate=$(date +'%Y%m%d')" >> $GITHUB_OUTPUT
|
||||
- name: Download all successfully compiled artifacts
|
||||
uses: actions/download-artifact@v6
|
||||
uses: actions/download-artifact@v7
|
||||
with:
|
||||
path: artifacts/bin/
|
||||
pattern: Bin-*
|
||||
merge-multiple: true
|
||||
- name: Download dist and docs zip files
|
||||
uses: actions/download-artifact@v6
|
||||
uses: actions/download-artifact@v7
|
||||
with:
|
||||
path: distribution/
|
||||
name: Distribution
|
||||
@@ -152,6 +154,7 @@ jobs:
|
||||
find . -name '*ESP32c3*' -print | zip -@ ../ESPEasy_ESP32c3.zip
|
||||
find . -name '*ESP32s3*' -print | zip -@ ../ESPEasy_ESP32s3.zip
|
||||
find . -name '*ESP32c2*' -print | zip -@ ../ESPEasy_ESP32c2.zip
|
||||
find . -name '*ESP32c5*' -print | zip -@ ../ESPEasy_ESP32c5.zip
|
||||
find . -name '*ESP32c6*' -print | zip -@ ../ESPEasy_ESP32c6.zip
|
||||
find . -name '*ESP32solo1*' -print | zip -@ ../ESPEasy_ESP32solo1.zip
|
||||
find . -name '*ESP32_*' -print | zip -@ ../ESPEasy_ESP32.zip
|
||||
@@ -169,6 +172,7 @@ jobs:
|
||||
zipmerge ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32c3_binaries.zip ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32_binaries.zip ESPEasy_ESP32c3.zip
|
||||
zipmerge ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32s3_binaries.zip ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32_binaries.zip ESPEasy_ESP32s3.zip
|
||||
zipmerge ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32c2_binaries.zip ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32_binaries.zip ESPEasy_ESP32c2.zip
|
||||
zipmerge ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32c5_binaries.zip ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32_binaries.zip ESPEasy_ESP32c5.zip
|
||||
zipmerge ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32c6_binaries.zip ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32_binaries.zip ESPEasy_ESP32c6.zip
|
||||
zipmerge ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32solo1_binaries.zip ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32_binaries.zip ESPEasy_ESP32solo1.zip
|
||||
zipmerge ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32_binaries.zip ESPEasy_ESP32.zip
|
||||
@@ -176,6 +180,6 @@ jobs:
|
||||
with:
|
||||
# Upload all separately supported CPU models and the docs zip
|
||||
# TODO if/when available: ESP32h2
|
||||
artifacts: "ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP82xx_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32solo1_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32s2_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32c3_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32s3_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32c2_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32c6_binaries.zip,distribution/*.zip"
|
||||
artifacts: "ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP82xx_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32solo1_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32s2_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32c3_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32s3_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32c2_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32c5_binaries.zip,ESPEasy_mega_${{ steps.date.outputs.builddate }}_ESP32c6_binaries.zip,distribution/*.zip"
|
||||
body: ${{ needs.prepare-notes.outputs.notes }}
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
@@ -89,4 +89,5 @@ dependencies.lock
|
||||
|
||||
src/src/CustomBuild/CompiletimeDefines_generated.h
|
||||
|
||||
bhutan_16m.bin
|
||||
|
||||
sdkconfig.normal_ESP32solo1_4M316k
|
||||
|
||||
@@ -4,6 +4,20 @@
|
||||
|
||||
For ways to *support* us, see [this announcement on the forum](https://www.letscontrolit.com/forum/viewtopic.php?f=14&t=5787), or have a look at the [Patreon](https://www.patreon.com/GrovkillenTDer), [Ko-Fi](https://ko-fi.com/grovkillentder) or [PayPal](https://www.paypal.me/espeasy) links above.
|
||||
|
||||
|
||||
# ESPEasy, Automate (using) Common Sense, No AI.
|
||||
|
||||
The main objective for ESPEasy is to make people realize they can easily control appliances and act on sensor data.
|
||||
|
||||
Anyone can use it and you don't need AI.
|
||||
Only requirement is common sense and appreciate the satisfaction of seeing things just work.
|
||||
|
||||
If you can't build it yourself, you don't 'own' it.
|
||||
So let's make sure YOU control it.
|
||||
|
||||
We are more than willing to assist via our [forum](https://www.letscontrolit.com/forum).
|
||||
|
||||
|
||||
# ESPEasy (development branch)
|
||||
|
||||
|
||||
|
||||
@@ -32,7 +32,9 @@
|
||||
},
|
||||
"espidf": {
|
||||
"custom_sdkconfig": [
|
||||
"CONFIG_FREERTOS_UNICORE=y"
|
||||
"CONFIG_FREERTOS_UNICORE=y",
|
||||
"# CONFIG_BOOTLOADER_SPI_CUSTOM_WP_PIN is not set",
|
||||
"CONFIG_BOOTLOADER_SPI_WP_PIN=7"
|
||||
]
|
||||
},
|
||||
"url": "https://en.wikipedia.org/wiki/ESP32",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"ldscript": "esp32c3_out.ld"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DESP32_16M -DESP32C3 -DUSE_USB_CDC_CONSOLE -DARDUINO_USB_CDC_ON_BOOT=1",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DESP32_16M -DESP32C3 -DUSE_USB_CDC_CONSOLE -DARDUINO_USB_CDC_ON_BOOT=0",
|
||||
"f_cpu": "160000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "dio",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"ldscript": "esp32c3_out.ld"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DESP32_4M -DESP32C3 -DUSE_USB_CDC_CONSOLE -DARDUINO_USB_CDC_ON_BOOT=1",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DESP32_4M -DESP32C3 -DUSE_USB_CDC_CONSOLE -DARDUINO_USB_CDC_ON_BOOT=0",
|
||||
"f_cpu": "160000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "dio",
|
||||
@@ -29,7 +29,6 @@
|
||||
"maximum_ram_size": 327680,
|
||||
"maximum_size": 4194304,
|
||||
"require_upload_port": true,
|
||||
"before_reset": "usb_reset",
|
||||
"speed": 460800
|
||||
},
|
||||
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/hw-reference/esp32c3/user-guide-devkitm-1.html",
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"build": {
|
||||
"arduino":{
|
||||
"ldscript": "esp32c5_out.ld"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_8M -DESP32C5 -DARDUINO_USB_CDC_ON_BOOT=0",
|
||||
"f_cpu": "160000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "qio",
|
||||
"mcu": "esp32c5",
|
||||
"variant": "esp32c5",
|
||||
"partitions": "boards/partitions/esp32_partition_app3520k_spiffs1088k.csv"
|
||||
},
|
||||
"connectivity": [
|
||||
"wifi",
|
||||
"bluetooth"
|
||||
],
|
||||
"debug": {
|
||||
"default_tool": "esp-builtin",
|
||||
"onboard_tools": [
|
||||
"esp-builtin"
|
||||
],
|
||||
"openocd_target": "esp32c5.cfg"
|
||||
},
|
||||
"frameworks": [
|
||||
"arduino",
|
||||
"espidf"
|
||||
],
|
||||
"name": "Espressif Generic ESP32-C5 >= 8M Flash, ESPEasy 3520k Code/OTA 1088k FS",
|
||||
"upload": {
|
||||
"flash_size": "8MB",
|
||||
"maximum_ram_size": 327680,
|
||||
"maximum_size": 8388608,
|
||||
"require_upload_port": true,
|
||||
"speed": 460800
|
||||
},
|
||||
"url": "https://docs.espressif.com/projects/espressif-esp-dev-kits/en/latest/esp32c5/esp32-c5-devkitc-1/index.html",
|
||||
"vendor": "Espressif"
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"build": {
|
||||
"arduino":{
|
||||
"ldscript": "esp32c5_out.ld"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32C5 -DARDUINO_USB_CDC_ON_BOOT=0",
|
||||
"f_cpu": "160000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "qio",
|
||||
"mcu": "esp32c5",
|
||||
"variant": "esp32c5",
|
||||
"partitions": "boards/partitions/esp32_partition_app1810k_spiffs316k.csv"
|
||||
},
|
||||
"connectivity": [
|
||||
"wifi",
|
||||
"bluetooth"
|
||||
],
|
||||
"debug": {
|
||||
"default_tool": "esp-builtin",
|
||||
"onboard_tools": [
|
||||
"esp-builtin"
|
||||
],
|
||||
"openocd_target": "esp32c5.cfg"
|
||||
},
|
||||
"frameworks": [
|
||||
"arduino",
|
||||
"espidf"
|
||||
],
|
||||
"name": "Espressif Generic ESP32-C5 >= 4M Flash, ESPEasy 1810k Code/OTA 316k FS",
|
||||
"upload": {
|
||||
"flash_size": "4MB",
|
||||
"maximum_ram_size": 327680,
|
||||
"maximum_size": 4194304,
|
||||
"require_upload_port": true,
|
||||
"speed": 460800
|
||||
},
|
||||
"url": "https://docs.espressif.com/projects/espressif-esp-dev-kits/en/latest/esp32c5/esp32-c5-devkitc-1/index.html",
|
||||
"vendor": "Espressif"
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"build": {
|
||||
"arduino":{
|
||||
"ldscript": "esp32c61_out.ld"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_8M -DESP32C61 -DARDUINO_USB_CDC_ON_BOOT=0",
|
||||
"f_cpu": "160000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "qio",
|
||||
"mcu": "esp32c61",
|
||||
"variant": "esp32c61",
|
||||
"partitions": "boards/partitions/esp32_partition_app3520k_spiffs1088k.csv"
|
||||
},
|
||||
"connectivity": [
|
||||
"wifi",
|
||||
"bluetooth"
|
||||
],
|
||||
"debug": {
|
||||
"default_tool": "esp-builtin",
|
||||
"onboard_tools": [
|
||||
"esp-builtin"
|
||||
],
|
||||
"openocd_target": "esp32c61.cfg"
|
||||
},
|
||||
"frameworks": [
|
||||
"arduino",
|
||||
"espidf"
|
||||
],
|
||||
"name": "Espressif Generic ESP32-C61 >= 8M Flash, ESPEasy 3520k Code/OTA 1088k FS",
|
||||
"upload": {
|
||||
"flash_size": "8MB",
|
||||
"maximum_ram_size": 327680,
|
||||
"maximum_size": 8388608,
|
||||
"require_upload_port": true,
|
||||
"speed": 460800
|
||||
},
|
||||
"url": "https://docs.espressif.com/projects/espressif-esp-dev-kits/en/latest/esp32c6/esp32-c6-devkitc-1/index.html",
|
||||
"vendor": "Espressif"
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
"ldscript": "esp32c6_out.ld"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_16M -DESP32C6 -DARDUINO_USB_CDC_ON_BOOT=1",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_16M -DESP32C6 -DARDUINO_USB_CDC_ON_BOOT=0",
|
||||
"f_cpu": "160000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "qio",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"ldscript": "esp32c6_out.ld"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_8M -DESP32C6 -DARDUINO_USB_CDC_ON_BOOT=1",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_8M -DESP32C6 -DARDUINO_USB_CDC_ON_BOOT=0",
|
||||
"f_cpu": "160000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "qio",
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"ldscript": "esp32c6_out.ld"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32C6 -DARDUINO_USB_CDC_ON_BOOT=1",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32C6 -DARDUINO_USB_CDC_ON_BOOT=0",
|
||||
"f_cpu": "160000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "qio",
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"build": {
|
||||
"core": "esp32",
|
||||
"extra_flags": [
|
||||
"-DARDUINO_TASMOTA -DESP32P4 -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE"
|
||||
],
|
||||
"f_cpu": "360000000L",
|
||||
"f_flash": "80000000L",
|
||||
"f_psram": "200000000L",
|
||||
"flash_mode": "qio",
|
||||
"mcu": "esp32p4",
|
||||
"chip_variant": "esp32p4_es",
|
||||
"variant": "esp32p4",
|
||||
"partitions": "boards/partitions/esp32_partition_app4096k_spiffs8124k.csv"
|
||||
},
|
||||
"connectivity": [
|
||||
"wifi",
|
||||
"bluetooth",
|
||||
"openthread",
|
||||
"ethernet"
|
||||
],
|
||||
"debug": {
|
||||
"openocd_target": "esp32p4.cfg"
|
||||
},
|
||||
"frameworks": [
|
||||
"arduino",
|
||||
"espidf"
|
||||
],
|
||||
"name": "Espressif ESP32-P4 Function EV Board 16M Flash, ESPEasy 4096k Code/OTA 8M FS",
|
||||
"upload": {
|
||||
"flash_size": "16MB",
|
||||
"maximum_ram_size": 768000,
|
||||
"maximum_size": 16777216,
|
||||
"require_upload_port": true,
|
||||
"speed": 1500000
|
||||
},
|
||||
"url": "https://docs.espressif.com/projects/esp-dev-kits/en/latest/esp32p4/esp32-p4-function-ev-board/index.html",
|
||||
"vendor": "Espressif"
|
||||
}
|
||||
@@ -5,7 +5,7 @@
|
||||
"memory_type": "dio_qspi"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DESP32_4M -DESP32S2 -DCONFIG_IDF_TARGET_ESP32S2=1 -DUSE_USB_CDC_CONSOLE -DARDUINO_USB_CDC_ON_BOOT=1",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DESP32_4M -DESP32S2 -DCONFIG_IDF_TARGET_ESP32S2=1 -DUSE_USB_CDC_CONSOLE -DARDUINO_USB_CDC_ON_BOOT=1 -DCONFIG_TINYUSB_CDC_ENABLED=1",
|
||||
"f_cpu": "240000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "dio",
|
||||
|
||||
@@ -5,10 +5,11 @@
|
||||
"memory_type": "qio_opi"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_16M -DESP32S3 -DARDUINO_USB_CDC_ON_BOOT=1",
|
||||
"f_cpu": "240000000L",
|
||||
"f_flash": "80000000L",
|
||||
"boot": "opi",
|
||||
"flash_mode": "qio",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_16M -DESP32S3 -DARDUINO_USB_CDC_ON_BOOT=0",
|
||||
"hwids": [
|
||||
[
|
||||
"0x303A",
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"memory_type": "qio_opi"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_8M -DESP32S3 -DARDUINO_USB_CDC_ON_BOOT=1",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_8M -DESP32S3 -DARDUINO_USB_CDC_ON_BOOT=0",
|
||||
"f_cpu": "240000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "qio",
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"memory_type": "qio_opi"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3 -DARDUINO_USB_CDC_ON_BOOT=1",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3 -DARDUINO_USB_CDC_ON_BOOT=0",
|
||||
"f_cpu": "240000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "qio",
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"memory_type": "qio_qspi"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_16M -DESP32S3 -DARDUINO_USB_CDC_ON_BOOT=1",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_16M -DESP32S3 -DARDUINO_USB_CDC_ON_BOOT=0",
|
||||
"f_cpu": "240000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "qio",
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"memory_type": "qio_qspi"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_8M -DESP32S3 -DARDUINO_USB_CDC_ON_BOOT=1",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_8M -DESP32S3 -DARDUINO_USB_CDC_ON_BOOT=0",
|
||||
"f_cpu": "240000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "qio",
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
"memory_type": "qio_qspi"
|
||||
},
|
||||
"core": "esp32",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3 -DARDUINO_USB_CDC_ON_BOOT=1",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DBOARD_HAS_PSRAM -DARDUINO_USB_MODE=1 -DUSE_USB_CDC_CONSOLE -DESP32_4M -DESP32S3 -DARDUINO_USB_CDC_ON_BOOT=0",
|
||||
"f_cpu": "240000000L",
|
||||
"f_flash": "80000000L",
|
||||
"flash_mode": "qio",
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"build": {
|
||||
"arduino": {
|
||||
"ldscript": "eagle.flash.4m1m.ld"
|
||||
},
|
||||
"core": "esp8266",
|
||||
"extra_flags": "-DARDUINO_TASMOTA -DESP8266 -DARDUINO_ARCH_ESP8266 -DARDUINO_ESP8266_ESP01 -DESP8266_4M -DESP8266_4M1M",
|
||||
"f_cpu": "120000000L",
|
||||
"f_flash": "40000000L",
|
||||
"flash_mode": "dout",
|
||||
"mcu": "esp8266",
|
||||
"variant": "generic"
|
||||
},
|
||||
"connectivity": [
|
||||
"wifi"
|
||||
],
|
||||
"frameworks": [
|
||||
"arduino"
|
||||
],
|
||||
"name": "Espressif Generic ESP8266 ESPEasy 4M Flash 1M FS",
|
||||
"upload": {
|
||||
"maximum_ram_size": 81920,
|
||||
"maximum_size": 1040316,
|
||||
"require_upload_port": true,
|
||||
"resetmethod": "nodemcu",
|
||||
"speed": 115200
|
||||
},
|
||||
"url": "http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family",
|
||||
"vendor": "Espressif"
|
||||
}
|
||||
|
||||
@@ -1,3 +1,557 @@
|
||||
-------------------------------------------------
|
||||
Changes in release mega-20260108 (since mega-20260107)
|
||||
-------------------------------------------------
|
||||
|
||||
Release date: Thu Jan 8 08:33:12 AM CET 2026
|
||||
|
||||
TD-er (1):
|
||||
Add Python version for prepare-dist in release.yml
|
||||
|
||||
|
||||
-------------------------------------------------
|
||||
Changes in release mega-20260107 (since mega-20250430)
|
||||
-------------------------------------------------
|
||||
|
||||
Release date: Wed Jan 7 11:00:02 PM CET 2026
|
||||
|
||||
Bartłomiej Zimoń (4):
|
||||
Update Flashing.rst
|
||||
Update Flashing.rst
|
||||
Update Flashing.rst
|
||||
Update Flashing.rst
|
||||
|
||||
Fabio Ancona (2):
|
||||
Update LD2410 doc adding info of false positive
|
||||
Update P159.rst
|
||||
|
||||
Jason2866 (8):
|
||||
remove cache use uv
|
||||
Update build.yml
|
||||
Update post_esp32.py
|
||||
Update post_esp32.py
|
||||
add forgotten function
|
||||
missing import os
|
||||
Update post_esp32.py
|
||||
remove cache use uv
|
||||
|
||||
TD-er (55):
|
||||
[Favicon] Serve favicon.ico as inline SVG
|
||||
[settings] Reduce initial default config.dat to 96k on ESP32
|
||||
[JSON] Tweak generating JSON via web requests
|
||||
[Favicon] Tweak blue color in SVG ESPEasy favicon
|
||||
[Time] Speedup printing date/time string
|
||||
[Build] Remove TAR support from LIMIT_BUILD_SIZE builds (saves 5+ kB)
|
||||
[OLED display] Reduce build size for P023
|
||||
[SysVarPage] Fix table layout on builds with excludes features
|
||||
[SysVarPage] Make more clear separation for "Standard Conversions"
|
||||
[Sysvar] Enable %c_random% for all builds
|
||||
[ESP32-S2] Change ADC for ESP32-S2 back to 13 bit
|
||||
[ESPtool] Prepare use of esptool v5.0.0
|
||||
[Build] Get rid of all ESP32-SPIFFS builds
|
||||
[ESPtool] Prepare use of esptool v5.0.0
|
||||
[ESPEasy p2p] Add node-IDs for new Espressif SoC models
|
||||
[ADC] Fix not setting attenuation on internal ADC
|
||||
[Build] Update to latest IDF5.4 build + add C6 builds
|
||||
[ESP32-S3] Revert changes in board defines for ESP32-S3 with OPI PSRAM
|
||||
[Build] Speed up ESP32 builds via CompiletimeDefines_generated.h
|
||||
[WebFlasher] Add missing ESP32-xx MCUs to manifest script
|
||||
[Build] Speed up ESP32 builds via CompiletimeDefines_generated.h
|
||||
[WebFlasher] Add missing ESP32-xx MCUs to manifest script
|
||||
[Rules] Fix processing variables with index > 2^31
|
||||
[MFRC522] Speed-up detecting cards + make error recovery more stable
|
||||
[MFRC522] Improve range of reader
|
||||
[MFRC522] Simplify board reset during init
|
||||
[MFRC522] Allow to dump card info to debug logs
|
||||
[MFRC522] Do proper timing for communicating with card
|
||||
[MFRC522] Speedup reading by acting on interrupt pin
|
||||
Add HTML_Print and PrintToString helpers
|
||||
[Log] Add PrintToLog helper
|
||||
[PWM motor] Speedup acting on limit switch interrupt
|
||||
[ESP-IDF] Update to latest SDK version
|
||||
[WebFlasher] Add more info on migrate to LittleFS on web flasher page
|
||||
[WebFlasher] Update LittleFS migration guide in webflasher page
|
||||
[PWM motor] Fix limit switch invert (again)
|
||||
[PubSubClient] Update to new fork PubSubClient3
|
||||
[PubSubClient3] Speedup publish large messages using buffer
|
||||
[PubSubClient3] Add check for nullptr in CHECK_STRING_LENGTH
|
||||
[Controller] Fix crashes on MQTT callback calls
|
||||
[WebServer] Properly close chunked transfer
|
||||
[Cleanup] Fix JS issues + correctly end chunked transfer
|
||||
[Build] Try fixing failing solo1 build
|
||||
[ESP32-U4WDH] Fix bootloop on non-Solo1 builds
|
||||
Fix missing #ifdef USES_P056
|
||||
[Build] Fix missing #ifndef LIMIT_BUILD_SIZE
|
||||
[SysVars] Fix showing variables with hex number as index
|
||||
[MQTTDiscovery] Reduce mem alloc MQTT_DiscoveryPublishWithStatusAndSet
|
||||
Reduce ESP32 Display build size (BUILD_NO_DEBUG)
|
||||
[CacheReader] Fix continue reading after crash/reboot
|
||||
[CacheReader] Fix reading cache files from CacheController
|
||||
[CacheReader] Add support for 64bit ints + output as events
|
||||
[CacheReader] Fix incorrect settings array index
|
||||
[Build] Limit package building to use Python 3.13
|
||||
[Collection] Remove P038 and P095 from ESP32 Collection builds
|
||||
|
||||
Ton Huisman (369):
|
||||
[P073] Add support for 74HC595 displays
|
||||
[P073] Disable debug log
|
||||
[P073] Make build fit again (part 1)
|
||||
[P073] Make build fit again (part 2)
|
||||
[P094] Remove from Collection D for ESP8266 buildsize
|
||||
[P073] Move most code to PluginStruct files, explicit compile-time defines
|
||||
[P073] Make 7-segment font functions publicly available
|
||||
[P073] Separate 74HC595 multiplexed displays, code improvements
|
||||
[P073] Update documentation
|
||||
[P073] Disable 74HC595 displays for now
|
||||
[P073] Add double-buffering for 74HC595 displays
|
||||
[P073] Make some functions available externally, fix 74HC595 matrix display (sort-of, still some flickering)
|
||||
[P073] Fine-tuning and allow to include 74HC595 in ESP8266 Custom builds
|
||||
[P073] Make P073_revert7bits() available for global use
|
||||
[P073] Fix copy/paste error
|
||||
[P073] Use more efficient bit-revert algorithm, as suggested
|
||||
[P073] Add option for time-blinking the second dot instead of the colon
|
||||
[P073] Use DIRECT_PIN_IO for TM1637 displays for better timing accuracy
|
||||
[P073] Update documentation
|
||||
[P073] Should use the public function
|
||||
[P165] Fix compiler warning
|
||||
[MQTT] (Auto)Discovery implementation
|
||||
[P052] Add MQTT Discovery data for supported Values
|
||||
[Source] Fix CR/LF vs LF
|
||||
[MQTT] Add support for more VTypes, implement more VTypes, small improvements
|
||||
[MQTT] Move TaskValue VType Discovery to each plugin where needed. Some other code improvements
|
||||
[P105] Fix Uncrustify formatting
|
||||
[P164] Add fixme for currently unsupported AQI Discovery value
|
||||
[Discovery] Add VType for Reactive Power
|
||||
[Discovery] Implement VType for Reactive Power
|
||||
[P076] Implement Discovery support (for user-selected values)
|
||||
[P077] Implement Discovery support (for user-selected values)
|
||||
[P078] Implement Discovery support (for user-selected values)
|
||||
[P085] Implement Discovery support (for user-selected values)
|
||||
[P102] Implement Discovery support (for user-selected values)
|
||||
[P108] Implement Discovery support (for user-selected values)
|
||||
[P115] Implement Discovery support (for user-selected values)
|
||||
[P132] Implement Discovery support (for user-selected values)
|
||||
[P142] Implement Discovery support (for user-selected values)
|
||||
[Discovery] Refactor getting VType per plugin, add some more plugins for AutoDiscovery
|
||||
[Discovery] Add support for some more VTypes, add AQI and NOx
|
||||
[P147] Implement MQTT Discovery support
|
||||
[P164] Update MQTT Discovery support
|
||||
[EasyColorCode] Updates April 2025
|
||||
[P020] Update documentation
|
||||
[P116] Fix typo in docs
|
||||
[P180] Add plugin Generic I2C
|
||||
[P180] Add also to Display, Energy and Neopixel collection builds (ESP32 only)
|
||||
[P180] No defaults for I2C address or number of values
|
||||
[P180] Cleanup memory after use, fix ESP8266 compilation
|
||||
[P180] Cleanup memory after use, fix ESP8266 compilation
|
||||
[Rules] Fix parsing bracketed expressions from position 0
|
||||
[P180] Add conditionally cancelling a command sequence (if)
|
||||
[Rules] Add support for crc8 and crc32 functions
|
||||
[P180] Optimize hex formatting, add preprocessed calculation to logging
|
||||
[Rules] Add optional validation of crc to crc8 and crc32 functions
|
||||
[EasyColorCode] Add more plugin commands
|
||||
[P180] Correct regular value handling, improved hex formatting
|
||||
[P180] Add documentation and usage examples
|
||||
[P180] Add exec subcommand, add valuename support, fix issue updating command-cache
|
||||
[P180] Add handling 1/sec, 10/sec and 50/sec event processing, add log subcommand
|
||||
[P180] Update documentation and usage examples
|
||||
[P180] Update documentation and usage examples
|
||||
[EasyColorCode] Update commands for P180
|
||||
[Docs] Add examples for substring for translation of day/month names
|
||||
[P180] Add let I2C Command, limit delay to max 10ms for 1ps/10ps/50ps
|
||||
[P180] Add to Custom-sample.h
|
||||
Bugfix [P075] Typo in check for RxD GPIO pin
|
||||
[P180] Refactor into BusCmd, phase 1
|
||||
[P021] Bugfix: Make Invert work without a GPIO pin selected
|
||||
[P180] Refactor into BusCmd_Handler interface, phase 2, Add String support
|
||||
[P180] Remove previously added but unused I2C functions
|
||||
[P061] Resolve I2C related FIXMEs, gaining ~120 bytes
|
||||
[P180] Update documentation
|
||||
[P011] Optimize I2C calls, gaining ~110 bytes
|
||||
[Discovery] Add /config and Retain Discovery settings to MQTT Controller with AutoDiscovery
|
||||
[Discovery] Fix Switch auto-discovery [Discovery] Add support for Inverted Switch [Discovery] Add support for Switch Device Class configuration
|
||||
[P001] Implement Switch MQTT Device Class setting and Inverted Switch discovery
|
||||
[P009] Implement Switch MQTT Device Class setting and Inverted Switch discovery
|
||||
[P001][P009] Correct typo
|
||||
[P019] Implement Switch MQTT Device Class setting and Inverted Switch discovery
|
||||
[P021] Implement Switch MQTT Device Class setting and Inverted Switch discovery
|
||||
[Discovery] Add support for different Switch device class per value
|
||||
[Rules] Add support for String type variables
|
||||
[StringVars] Fix variable typo
|
||||
[StringVars] Remove unneeded UnaryOperator::IsNum
|
||||
[StringVars] Fix new introduced template parser bug
|
||||
[StringVars] Make string comparisons work with `if`
|
||||
Add new commands and functions for String variables support
|
||||
[SysVars] Make second argument for 2-argument conversions optional
|
||||
[StringVars] Add documentation
|
||||
[StringVars] Add documentation for [length#var]
|
||||
[Bugfix] String commands parser fix off-by-one issue
|
||||
[Rules] Add string function Lookup with docs
|
||||
[Rules] Add conversion function %c_strf%() with docs
|
||||
[Rules] Fix typo in docs
|
||||
[StringVars] Add TaskValueSetDerived, TaskValueSetPresentation commands and handling
|
||||
[StringVars] Add TaskValueSetDerived, TaskValueSetPresentation docs
|
||||
[Docs] Move Data Acquisition to separate include file
|
||||
[StringVars] Avoid calculation of formula with presentation prefix ($)
|
||||
[StringVars] Improved handling of calculated values for Derived values
|
||||
[SysVars, Conversions] Add %localunixtime%, %systzoffset_s% sysvars and %c_ts2date%() conversion + docs
|
||||
[SysVars] Exclude %localunixtime% from Limited builds
|
||||
[SysVars] Rename %localunixtime% to %unixtime_lcl%
|
||||
[DerivedValues] Add Event & Log option and generate events and logging for Derived values, update docs
|
||||
[SysVars] Add %c_ts2wday%(timestamp) (dow) conversion and docs
|
||||
[EasyColorCode] Add more new commands and functions for String variables support
|
||||
[P180] Add GET_CONFIG_VAR support
|
||||
[Discovery] Fix typo in BinarySensorInverted helper
|
||||
[Docs] Update WSL2 USB Serial configuration since Linux 6.x core update
|
||||
[Feature] Add Unit of Measure for all taskvalues and present on Devices overview page
|
||||
[UoM] Add Unit of measure value to /json endpoint
|
||||
[UoM] Add Unit of measure value Devices overview page update script (also uses Presentation if available)
|
||||
[Build] Reduce size of included Github clipboard script
|
||||
[Build] Include reboot.js script in readable form
|
||||
[Build] Reduce size of included Fetch and parse logs script
|
||||
[UoM] Add Unit of measure value Devices overview page update script (also uses Presentation if available)
|
||||
[JSON] Add Presentation as separate value instead of replacing Value (using updated .js scrip)
|
||||
[UoM] Make .js script more fault tolerant when no global UoM enable setting is available
|
||||
[DerivedValues] Don't determine max decimals for display but use default
|
||||
[DerivedValues] Add optional Unit of Measure and include in /json output
|
||||
[UoM] Make .js script more fault tolerant when no global UoM enable setting is available
|
||||
[UoM] Optional default when fetching Unit of Measure
|
||||
[Discovery] Implement UoM per taskValue when available
|
||||
[I2C] Show I2C Bus nr in Not enabled message of i2cscanner
|
||||
[I2C] Add a few missing I2C device addresses for INA219
|
||||
[UoM] Add Feature TaskValue-attributes with support for .uom, .decimals, .hasformula and .statsenabled
|
||||
[DerivedValues] Move parsing derived variables to correct code-location
|
||||
[DerivedValues] Add TaskValue attribute support for DerivedValues (empty is not valid)
|
||||
[Discovery] Add default empty option for Device Class selector (all values shift 1 index up!)
|
||||
[P116] Add support for ST7735/ST7789 170x320 displays
|
||||
[SysVarPage] Exclude c_random from list for limited builds
|
||||
[UoM] Add documentation
|
||||
[UoM] Update documentation
|
||||
[UoM] Update documentation
|
||||
[VTypes] Refactor SensorValueType selector so it can be used separately
|
||||
[VTypes] Refactor SensorValueType selector so it can be used separately (cherry picked)
|
||||
[ValueTypes] Add Custom VType selection
|
||||
[Plugins] Add CustomVTypeVar option for plugins that need custom Value Type selection
|
||||
[DerivedValues] Add support for Value Type argument
|
||||
[AutoDiscovery] Add support for Derived values, UoM and Value Type, some code optimizations
|
||||
[C006] Add support for sending derived values
|
||||
[C014] Add Unit of Measure to AutoDiscovery, add Send Derived values support
|
||||
[Docs] Updates and improvements, Summer '25
|
||||
[Docs] Update docs for Value Type setting for selected plugins
|
||||
[Docs] Move Send derived values as a per controller setting for tasks
|
||||
[Derived Values] Move enable sending per task-controller, Code optimization
|
||||
[C014] Docs: Update UoM feature
|
||||
[P027] Docs: Fix a few typos
|
||||
[P180] Improvements and fixes in handling of signed values
|
||||
[Docs] Update/extend the SPIFFS to LittleFS migration procedure
|
||||
[Docs] Update/extend the SPIFFS to LittleFS migration procedure
|
||||
[Docs] Extract SPIFFS to LittleFS migration guide for accessability
|
||||
[Docs] Expand SPIFFS to LittleFS migration guide, add troubleshooting section
|
||||
[AutoDiscovery] Add support for Wind direction and Wind speed
|
||||
[Plugins] Minor code improvement
|
||||
[UoM] Restructure UoM selector into categories, add more uom options
|
||||
[UoM] Fix UoM selector empty value
|
||||
[Docs] Update Unit of Measure documentation and screenshots
|
||||
[AutoDiscovery] Embed setting for `online` message in `/config` setting
|
||||
[Docs] Update documentation for C005
|
||||
[AutoDiscovery] Update PluginTemplate
|
||||
[AutoDiscovery] Embed setting for `online` message in `/config` setting
|
||||
[Docs] P165 Fix a few typos
|
||||
[AutoDiscovery] Remove unused code
|
||||
[AutoDiscovery] Make start delay compiletime configurable, and extend max delay from 10 to 30 sec.
|
||||
[Docs] Update documentation for C005
|
||||
[AutoDiscover] Add Duration, Date and Timestamp device classes, fix some irregularities
|
||||
[AutoDiscover] Add Data rate, Data size, Sound pressure and Signal strength
|
||||
[AutoDiscover] Refactor discovery message composition to reduce binary size by nearly 4k
|
||||
[AutoDiscover] Set Unit of Measure and Value Type when adding a device (when possible/available)
|
||||
[P095] Add ILI9342 display variants
|
||||
[P095] ILI9342 added configurations, set resolution correctly
|
||||
[P095] Update documentation
|
||||
[UoM] Correct a few Value Type UoM defaults
|
||||
[P026] Set default Value Type and UoM when changing a task value setting
|
||||
[Converters] Add `%c_ts2isodate%()` Timestamp to ISO date conversion
|
||||
[Converters] Add `%c_ts2isodate%()` Timestamp to ISO date conversion
|
||||
[AutoDiscover] Clean names sent to HA by replacing unsupported characters by `_`
|
||||
[Converters] Include system time-zone in `%c_ts2isodate%()` to have HA accept the `Timestamp` value type
|
||||
[Converters] Make system time-zone optional in `%c_ts2isodate%()` (second argument != 0)
|
||||
[Converters] Make system time-zone optional in `%c_ts2isodate%()` (second argument != 0)
|
||||
[AutoDiscover] Add `Date/Time` (`datetime`) Device class
|
||||
[AutoDiscover] Fix handling of BARO_ONLY values, and allow multiple BARO_ONLY values
|
||||
[AutoDiscover] Remove non-working `Date/Time` (`datetime`) Device class :-(
|
||||
[ValueTypes] Add categorized selector for Value Type per Value
|
||||
[P176] Set default Value Types when adding the plugin
|
||||
[ValueTypes] Fix optional None value
|
||||
[P180] Remove unneeded code
|
||||
[AutoDiscover] Try to get switch trigger working
|
||||
[ValueTypes] Reorder value types somewhat, use categorized selector where applicable
|
||||
[ValueTypes] Update documentation
|
||||
[P014] Fix MQTT Discovery value types
|
||||
[Build] Remove "_CDC_" from all env names due to linker issues
|
||||
[MQTT] Fix command handling for /set and /cmd topic endpoints, add support for P001 in /set
|
||||
[AutoDiscover] Mark some MQTT Device classes as 2-way to have on/off devices (Light)
|
||||
[CustomVtype, UoM] Fix compilation for ESP8266 when not all enabled
|
||||
[AutoDiscover] Better array index checks
|
||||
[Backup] Add backup without credentials included (security.dat)
|
||||
[Metrics] Add internal CPU temperature
|
||||
[Backup] Use term credentials instead of username/password
|
||||
[Backup] Update documentation
|
||||
[Metrics] Update documentation
|
||||
[AutoDiscover] Add support for P009 and P019, only send discovery for plugins that actually send data
|
||||
[AutoDiscover] Fix flippin bit-flip issue
|
||||
[AutoDiscover] Fix P021 not to be handled as a Switch
|
||||
[Backup] Fix typo in variable name for ESP8266
|
||||
[AutoDiscover] Fix Group configuration
|
||||
[Backup] Compile error when TAR support disabled
|
||||
[Libs] MFRC522 remove unused variable
|
||||
[Libs] PubSubClient signed/unsigned comnparison warning
|
||||
[AutoDiscover] Set default Auto Discovery topics when adding HA Controller
|
||||
[P009][P019] Fix logging alignment
|
||||
[AutoDiscover] Fix a few comments
|
||||
[AutoDiscover] Docs improvement for Group feature
|
||||
[TaskValueSetDerived] Improved parsing of Unit of Measure value
|
||||
[AutoDiscover] Fix conditional compilation issue
|
||||
[Rules] Enable rules by default on a clean install
|
||||
[AutoDiscover] Add state_class support and some Value Types
|
||||
[AutoDiscover] Enable state_class support for plugins and correct a few Value Types
|
||||
[AutoDiscover] Update documentation
|
||||
[AutoDiscover] Fix compilation when state_class support not enabled
|
||||
[AutoDiscover] Small code improvement
|
||||
[P078] Improved value descriptions and register appended, small code improvements
|
||||
[Caches] Formatting (minor)
|
||||
[P056] Add multi-instance use
|
||||
[P078] Fix docs parser warning
|
||||
[P056] Update documentation
|
||||
[P102] Add support for PZEM-017v1
|
||||
[P102] UI updates and corrections
|
||||
[P102] Add documentation
|
||||
[Build] Fix compiler warning for unused variable
|
||||
[BusCmd I2C] Add support for handling > 128 bytes on I2C read/write (ESP32)
|
||||
[BusCmd Helper] Add support for variable length string and buffers (Byte/Word), and some bugfixes
|
||||
[P180] Update documentation
|
||||
[BusCmd Helper] Send data & event when updating value.N from other than PLUGIN_READ action
|
||||
[BusCmd Helper] Add LetStr I2C command, analogue to the `LetStr` Rules command, updated documentation
|
||||
[P102] Small typo in documentation
|
||||
[AutoDiscover] Use %sysname% instead of group_nr if Controller Group = UnitNr
|
||||
[AutoDiscover] Update documentation for Group setting
|
||||
[AutoDiscover] Add 15 more Value types and 7 UoM values, fix some default UoM
|
||||
[AutoDiscover] Update Value type and UoM documentation
|
||||
[MQTT] Add Retain option per task
|
||||
[MQTT] Update documentation for Retained setting per task
|
||||
[MQTT] Some documentation improvements
|
||||
[Build] Add [P105] AHT2x to Collection G so it can be used with [P164] ENS160
|
||||
[P089] Add support for ESP32
|
||||
[P089] Remove unneeded attribute
|
||||
[P089] Create separate Ping Service to handle single-instance Ping function sequentially
|
||||
[P180] Add Tiny Code Reader example to documentation
|
||||
[P180] Add optional skip argument to IF I2C command, update docs
|
||||
[P021] Emphasize warning to prevent saving settings too often
|
||||
[P039] Update SPI and GPIO documentation
|
||||
[P037] Use configured decimals when generating events
|
||||
[P037] Update documentation for: use configured decimals when generating events
|
||||
[P168] Disable blocking Lux Read-Method options
|
||||
[P168] Update documentation
|
||||
[P102] Don't check non-available values for NaN
|
||||
[P102] Correct documentation small typos
|
||||
[MQTT] Handle connecting to broker as a background process
|
||||
[Tools] Update documentation for MQTT Connect in background
|
||||
[MQTT] Move Settings attribute to next available bit
|
||||
[MQTT] Reconnect on unexpected network interruptions
|
||||
[P089] Update documentation
|
||||
[MQTT] Cancel background connection request after 2 minutes when still not connected
|
||||
[MQTT] Fix reconnect on unexpected network interruptions
|
||||
[Discovery] Avoid setting the timeout more than once
|
||||
[MQTT] Use client timeout for delay between connection attempts
|
||||
[Build] Fix missing include
|
||||
[MQTT] Refactor background connection process to avoid logging from background task
|
||||
[AutoDiscover] Fix small typos in default UoM list
|
||||
[AutoDiscover] Fix spelling error in precipitation
|
||||
[AutoDiscover] Fix spelling error in precipitation
|
||||
[MQTT] Fix compilation on ESP8266 (Retain per task)
|
||||
[P089] Bugfix: Putt include in scope
|
||||
[P102] Use added setModel() method when needed
|
||||
[P033] Enable formula field
|
||||
[P033] Update documentation
|
||||
[P102] Use defined constants
|
||||
[P102] Add Submit instruction after use of 'Reset energy' mode
|
||||
[P102] Update documentation
|
||||
[Info] Emphasize the number of flash writes count since cold boot #3116
|
||||
[C011] HTTP Advanced - Don't URL-encode header
|
||||
[HTTP] Add support for TLS
|
||||
[HTTP] Enable TLS support for Controllers using HTTP
|
||||
[P002] Fix docs layout issue
|
||||
[HTTP] Defensive programming in test for https url
|
||||
[HTTP] Enable TLS support also for Controller C007 Emoncms
|
||||
[Devices] Limit displaying of (old) Wiki Help button to P056 and below
|
||||
[Devices] Limit displaying of (old) Wiki Help button to P079 and below
|
||||
[MQTT] Reduce work/memory in background task, use xTaskDelay as required
|
||||
[Docs] Correct some layout inconsistencies
|
||||
[Docs] Update overview generator, include Notify and Network plugins
|
||||
[Build] Fix compiler warning
|
||||
[Tools] Add Plugin list overview page
|
||||
[Tools] Update documentation for Plugin list
|
||||
[Build] Split Display into Display A and Display B
|
||||
[Build] Display A/B split: Update documentation
|
||||
[Tools] Add documentation-button to Plugin list overview page
|
||||
[Tools] Add preliminary support for Network plugins
|
||||
[Docs] Add MQTT Device class documentation for plugins where available
|
||||
[MQTT] Minor corrections
|
||||
[TLS] Update TLS to be able to use ECDHE_ECDSA_AES_128_GCM_SHA256 cipher
|
||||
[Docs] ESP8266 is Feature Complete!
|
||||
[TLS-MQTT] Automatic switch to ECDSA when error is 296 (TLS handshake)
|
||||
[MQTT AutoDiscovery] Add support for Switch Device Class
|
||||
[MQTT AutoDiscovery] Update documentation for Device Class
|
||||
[P026] Fix Value Type for TXpower to use dBm
|
||||
[HTTP] Fix build and feature-enable for non-MAX builds
|
||||
[HTTP] Update documentation for TLS options
|
||||
[UoM] Refactoring to reduce page-load time and size
|
||||
[Build] Add Collection H and split Climate into Climate A and Climate B
|
||||
[Build] Fix build errors for Collection H and Climate B
|
||||
[Build] Remove obsolete comments
|
||||
[Build] Move more plugins from Collection G to H to make Collection G fit
|
||||
[Build] Reduce build-size for all Collection builds using BUILD_NO_DEBUG
|
||||
[Build] Reduce build-size for Collection C build
|
||||
[P169] Fix DEBUG log
|
||||
[Build] Avoid build-reduction for MAX builds
|
||||
[Build] Avoid build-reduction for MAX builds
|
||||
[P021] Code optimizations
|
||||
[Build] Remove _LittleFS and _ETH from build names due to linker issues
|
||||
[Build] Enable `custom_remove_include` to not build ignored libs
|
||||
[Build] Limit package building to use Python 3.13
|
||||
[UI] Update addTaskSelector() to use FormSelectorOptions
|
||||
[Docs] P180 Add example for reading Sensirion SDP-8xx
|
||||
[Docs] P180 Small corrections
|
||||
[Docs] P180 Sensirion SDP-8xx add description for Single-shot measurement
|
||||
[Bugfix] Don't use Flash-string parameter default as ESP8266 compiler doesn't support that
|
||||
[Bugfix] PluginList add missing includes needed in some builds
|
||||
[PluginList] Update for HTTPS TLS support
|
||||
[Build] Fix SafeBoot build
|
||||
[Bugfix] Derived values avoid parsing invalid values causing crashes
|
||||
[Bugfix] Derived values avoid parsing invalid values causing crashes, more global fix
|
||||
[Bugfix] Revert previous change as that didn't really fix the issue
|
||||
[AutoDiscovery] Show Auto Discovery for Controllers that have this enabled (Task configuration)
|
||||
[Bugfix] Calculation missed value when returning from multiple brackets
|
||||
[Bugfix] MQTT StateClass selector stored wrong index
|
||||
[P003] Enable MQTT State Class option so pulse-counter can be used for energy measurement (in HA)
|
||||
[P180] BusCmd_Helper processing I2C commands via cmd subcommand was locked out
|
||||
[SysVars] Add %latitude% and %longitude% vars and Latitude and Longitude commands
|
||||
[SysVars] Documentation for %latitude% and %longitude% vars and Latitude and Longitude commands
|
||||
[P180] Enable CustomVTypeVar and MQTTStateClass device flags
|
||||
[P180] Fix typo in parameter for log subcommand
|
||||
[P180] Add documentation for TF-Luna laser distance sensor
|
||||
[P180] Small updates in documentation of TF-Luna laser distance sensor
|
||||
[P180] Add documentation for QMC6310 3-axis magnetic sensor, add example-index to docs page
|
||||
[Bugfix] Calculation of functions discarded the next operator
|
||||
[Bugfix] Calculation of functions remove unneeded value duplication, small debug-code optimization
|
||||
[Rules] Add some functions, conversions and constants
|
||||
[Rules] Add some functions, conversions and constants, fix docs typo
|
||||
[Docs] Updates and improvements (2025 Q4/2026-01)
|
||||
[Stats] Add minp/maxp stats values and change min/max stats values for running min/max value, update docs
|
||||
[Bugfix] Compilation error fix for custom IR build
|
||||
[Bugfix] Metrix: Export 0 for empty values
|
||||
[Bugfix] Metrix: Export 0 for empty values, fix for ESP8266
|
||||
[AdaGFX] Fix `tpm` subcommand argument check
|
||||
[Docs] Update copyright notice to show 2026
|
||||
[AdaGFX] Fix space-height issue for some fonts
|
||||
[P116] Add ST77xx resolutions 240x320 and 240x280
|
||||
[P116] Allow for > 16 hardware types in selection
|
||||
[P116] Update documentation with new resolutions
|
||||
[P087] Add support for receiving binary data, fixed length data, and event as hex string
|
||||
[P087] Update documentation
|
||||
[P087] Add to `ENERGY` build (ESP32 only)
|
||||
[Converters] Bugfix formatToHex_wordarray()
|
||||
[P087] Use PCONFIG_ULONG to store new config flags
|
||||
[P004] Change name to include DS18xxx/MAX31xxx for better recognizability
|
||||
[P057] Add documentation as it wasn't included yet
|
||||
|
||||
chromoxdor (63):
|
||||
Update Networking.cpp
|
||||
a tiny bit better formatting
|
||||
changes for OPENMETEO_EVENT and THINGSPEAK_EVENT
|
||||
Update Networking.cpp
|
||||
combining two functions
|
||||
wrong use of concat times two :)
|
||||
update
|
||||
Update Networking.cpp
|
||||
put thingspeak and openmeteo events into extra file
|
||||
added inverter event
|
||||
fix for not building on minimal_core_274_esp8266...
|
||||
#ifdef to #if. m(
|
||||
more universal json event approach
|
||||
Update HTTPResponseParser.h
|
||||
added variable decimals for floating point numbers
|
||||
some changes to the json-event
|
||||
made the eventQueue even more complex :P
|
||||
minor changes
|
||||
moved variable to cpp file
|
||||
updates
|
||||
Update HTTPResponseParser.cpp
|
||||
Update define_plugin_sets.h
|
||||
Update HTTPResponseParser.cpp
|
||||
Update HTTPResponseParser.cpp
|
||||
documentation and slight reduction of code
|
||||
Update define_plugin_sets.h
|
||||
corrected json examples
|
||||
Docs: Formatting and linking
|
||||
fixed typo
|
||||
[P164 ] Adding a sleep mode
|
||||
Update P164_data_struct.cpp
|
||||
Update define_plugin_sets.h
|
||||
Changes as requested
|
||||
Update HTTPResponseParser.rst
|
||||
Update HTTPResponseParser.cpp
|
||||
ColorCode Additions
|
||||
Update espeasy.js
|
||||
forgot the "f" and the minified version
|
||||
some unessecary commas removed
|
||||
no indentation for comments....
|
||||
added a format button if on mobile device
|
||||
format even without colorcode enabled
|
||||
more robust block checks
|
||||
jump to line of first error and keep history
|
||||
make it work for android non color rules again
|
||||
Readded search bar and enhanced it.
|
||||
fixed broken replace function
|
||||
forgot someting to change
|
||||
find while typing
|
||||
fix replace
|
||||
more robust live search handling
|
||||
removed unnecessary function
|
||||
scroll to top when found
|
||||
Update codemirror.min.css
|
||||
replace: scroll to top too
|
||||
as good as it gets :)
|
||||
minor corrections help text
|
||||
rephrasing of the confirm dialog
|
||||
fix: jump back to cursor position after formatting
|
||||
..and remove an old dialog before opening a new one
|
||||
disable shortcuts
|
||||
disable shortcut: forgot to add the corresponding function
|
||||
Update espeasy.min.js
|
||||
|
||||
dependabot[bot] (10):
|
||||
Bump cryptography from 43.0.1 to 44.0.1
|
||||
Bump actions/download-artifact from 4 to 5
|
||||
Bump actions/checkout from 4 to 5
|
||||
Bump actions/setup-python from 5 to 6
|
||||
Bump actions/github-script from 7 to 8
|
||||
Bump actions/download-artifact from 5 to 6
|
||||
Bump actions/upload-artifact from 4 to 5
|
||||
Bump actions/checkout from 5 to 6
|
||||
Bump actions/upload-artifact from 5 to 6
|
||||
Bump actions/download-artifact from 6 to 7
|
||||
|
||||
jfmennedy (1):
|
||||
Fix horizantal vane not working
|
||||
|
||||
repa6 (7):
|
||||
added TAC2100 support to _P078_Eastron plugin
|
||||
Update _P078_Eastron.ino with changelog info
|
||||
Update P078_data_struct.h: added comma after TAC2100=7
|
||||
extended TAC2100 registers list and added TAC2100 to docimentation
|
||||
fixed redister nature of load
|
||||
Update P078_data_struct.cpp - added nat:load to SDM_UOMtoString strings
|
||||
Update P078_data_struct.cpp - updated register addresses for the last 5 registers of TAC2100
|
||||
|
||||
|
||||
-------------------------------------------------
|
||||
Changes in release mega-20250430 (since mega-20241222)
|
||||
-------------------------------------------------
|
||||
|
||||
@@ -616,8 +616,10 @@ Datasheets
|
||||
* `DS:ESP32-S3 <https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf>`_
|
||||
* `DS:ESP32-C3 <https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf>`_ / `DS:ESP8685 <https://www.espressif.com/sites/default/files/documentation/esp8685_datasheet_en.pdf>`_
|
||||
* `DS:ESP32-C2 <https://www.espressif.com/sites/default/files/documentation/esp8684_datasheet_en.pdf>`_ / `DS:ESP8684 <https://www.espressif.com/sites/default/files/documentation/esp8684_datasheet_en.pdf>`_
|
||||
* `DS:ESP32-C5 <https://www.espressif.com/sites/default/files/documentation/esp32-c5_datasheet_en.pdf>`_
|
||||
* `DS:ESP32-C6 <https://www.espressif.com/sites/default/files/documentation/esp32-c6_datasheet_en.pdf>`_
|
||||
* `DS:ESP32-H2 <https://cdn-shop.adafruit.com/product-files/5715/esp32-h2_datasheet_en.pdf>`_
|
||||
* `DS:ESP32-P4 <https://www.espressif.com/sites/default/files/documentation/esp32-p4_datasheet_en.pdf>`_
|
||||
|
||||
|
||||
Technical Reference Manuals
|
||||
@@ -629,8 +631,10 @@ Technical Reference Manuals
|
||||
* `TR:ESP32-S3 <https://www.espressif.com/sites/default/files/documentation/esp32-s3_technical_reference_manual_en.pdf>`_
|
||||
* `TR:ESP32-C3 <https://www.espressif.com/sites/default/files/documentation/esp32-c3_technical_reference_manual_en.pdf>`_
|
||||
* `TR:ESP32-C2 <https://www.espressif.com/sites/default/files/documentation/esp8684_technical_reference_manual_en.pdf>`_
|
||||
* `TR:ESP32-C5 <https://www.espressif.com/sites/default/files/documentation/esp32-c5_technical_reference_manual_en.pdf>`_
|
||||
* `TR:ESP32-C6 <https://www.espressif.com/sites/default/files/documentation/esp32-c6_technical_reference_manual_en.pdf>`_
|
||||
* `TR:ESP32-H2 <https://www.espressif.com/sites/default/files/documentation/esp32-h2_technical_reference_manual_en.pdf>`_
|
||||
* `TR:ESP32-P4 <https://www.espressif.com/sites/default/files/documentation/esp32-p4_technical_reference_manual_en.pdf>`_
|
||||
|
||||
|
||||
ESP8266/ESP8285
|
||||
@@ -877,7 +881,7 @@ ESP32-C5
|
||||
|
||||
This will be the first Espressif SoC supporting 5 GHz WiFi.
|
||||
|
||||
.. note:: Not yet available (as of Dec 2024)
|
||||
.. note:: Beta silicon is available (as of June 2025), which may change in Q3 or Q4 of 2025. So not yet adviced to be used in real products
|
||||
|
||||
ESP32-C6
|
||||
========
|
||||
@@ -920,4 +924,5 @@ The CPU is rather powerful and there are versions with quite a large amount of P
|
||||
|
||||
It does have a RMII interface for Ethernet, like the ESP32-classic does.
|
||||
|
||||
.. note:: Not yet supported (as of Dec 2024)
|
||||
.. note:: Not yet supported. Beta silicon is available (as of June 2025), which may change in Q3 or Q4 of 2025. So not yet adviced to be used in real products
|
||||
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
.. include:: _network_substitutions.repl
|
||||
|
||||
.. _NW001_page:
|
||||
|
||||
|NW001_typename|
|
||||
==================================================
|
||||
|
||||
|NW001_shortinfo|
|
||||
|
||||
Network details
|
||||
---------------
|
||||
|
||||
Type: |NW001_type|
|
||||
|
||||
Name: |NW001_name|
|
||||
|
||||
Status: |NW001_status|
|
||||
|
||||
GitHub: |NW001_github|_
|
||||
|
||||
Maintainer: |NW001_maintainer|
|
||||
|
||||
Change log
|
||||
----------
|
||||
|
||||
.. versionchanged:: 2.0
|
||||
...
|
||||
|
||||
|added|
|
||||
Major overhaul for 2.0 release.
|
||||
|
||||
.. versionadded:: 1.0
|
||||
...
|
||||
|
||||
|added|
|
||||
Initial release version.
|
||||
|
||||
Description
|
||||
-----------
|
||||
@@ -0,0 +1,39 @@
|
||||
.. include:: _network_substitutions.repl
|
||||
|
||||
.. _NW002_page:
|
||||
|
||||
|NW002_typename|
|
||||
==================================================
|
||||
|
||||
|NW002_shortinfo|
|
||||
|
||||
Network details
|
||||
---------------
|
||||
|
||||
Type: |NW002_type|
|
||||
|
||||
Name: |NW002_name|
|
||||
|
||||
Status: |NW002_status|
|
||||
|
||||
GitHub: |NW002_github|_
|
||||
|
||||
Maintainer: |NW002_maintainer|
|
||||
|
||||
Change log
|
||||
----------
|
||||
|
||||
.. versionchanged:: 2.0
|
||||
...
|
||||
|
||||
|added|
|
||||
Major overhaul for 2.0 release.
|
||||
|
||||
.. versionadded:: 1.0
|
||||
...
|
||||
|
||||
|added|
|
||||
Initial release version.
|
||||
|
||||
Description
|
||||
-----------
|
||||
@@ -0,0 +1,39 @@
|
||||
.. include:: _network_substitutions.repl
|
||||
|
||||
.. _NW003_page:
|
||||
|
||||
|NW003_typename|
|
||||
==================================================
|
||||
|
||||
|NW003_shortinfo|
|
||||
|
||||
Network details
|
||||
---------------
|
||||
|
||||
Type: |NW003_type|
|
||||
|
||||
Name: |NW003_name|
|
||||
|
||||
Status: |NW003_status|
|
||||
|
||||
GitHub: |NW003_github|_
|
||||
|
||||
Maintainer: |NW003_maintainer|
|
||||
|
||||
Change log
|
||||
----------
|
||||
|
||||
.. versionchanged:: 2.0
|
||||
...
|
||||
|
||||
|added|
|
||||
Major overhaul for 2.0 release.
|
||||
|
||||
.. versionadded:: 1.0
|
||||
...
|
||||
|
||||
|added|
|
||||
Initial release version.
|
||||
|
||||
Description
|
||||
-----------
|
||||
@@ -0,0 +1,39 @@
|
||||
.. include:: _network_substitutions.repl
|
||||
|
||||
.. _NW004_page:
|
||||
|
||||
|NW004_typename|
|
||||
==================================================
|
||||
|
||||
|NW004_shortinfo|
|
||||
|
||||
Network details
|
||||
---------------
|
||||
|
||||
Type: |NW004_type|
|
||||
|
||||
Name: |NW004_name|
|
||||
|
||||
Status: |NW004_status|
|
||||
|
||||
GitHub: |NW004_github|_
|
||||
|
||||
Maintainer: |NW004_maintainer|
|
||||
|
||||
Change log
|
||||
----------
|
||||
|
||||
.. versionchanged:: 2.0
|
||||
...
|
||||
|
||||
|added|
|
||||
Major overhaul for 2.0 release.
|
||||
|
||||
.. versionadded:: 1.0
|
||||
...
|
||||
|
||||
|added|
|
||||
Initial release version.
|
||||
|
||||
Description
|
||||
-----------
|
||||
@@ -0,0 +1,56 @@
|
||||
.. include:: _network_substitutions.repl
|
||||
|
||||
.. _NW005_page:
|
||||
|
||||
|NW005_typename|
|
||||
==================================================
|
||||
|
||||
|NW005_shortinfo|
|
||||
|
||||
Network details
|
||||
---------------
|
||||
|
||||
Type: |NW005_type|
|
||||
|
||||
Name: |NW005_name|
|
||||
|
||||
Status: |NW005_status|
|
||||
|
||||
GitHub: |NW005_github|_
|
||||
|
||||
Maintainer: |NW005_maintainer|
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
|
||||
Device Settings
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
|
||||
|
||||
Connection Settings
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
||||
Change log
|
||||
----------
|
||||
|
||||
.. versionchanged:: 2.0
|
||||
...
|
||||
|
||||
|added|
|
||||
Major overhaul for 2.0 release.
|
||||
|
||||
.. versionadded:: 1.0
|
||||
...
|
||||
|
||||
|added|
|
||||
Initial release version.
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 37 KiB |
@@ -0,0 +1,31 @@
|
||||
.. include:: _network_substitutions.repl
|
||||
|
||||
Network
|
||||
*******
|
||||
|
||||
A Network plugin is comparable with a 'driver' for a network adapter.
|
||||
|
||||
The first 2 entries will be the same for every ESPEasy setup and these cannot be removed.
|
||||
|
||||
- Wi-Fi Station: To connect the ESP board to an access point.
|
||||
- Wi-Fi AP: To let the ESP board act as an access point.
|
||||
|
||||
|
||||
|
||||
.. _Network Plugins:
|
||||
|
||||
Network Plugins
|
||||
==================
|
||||
|
||||
.. csv-table::
|
||||
:header: "Plugin name", "Plugin status", "Plugin number"
|
||||
:widths: 10, 8, 5
|
||||
|
||||
":ref:`NW001_page`","|NW001_status|","NW001"
|
||||
":ref:`NW002_page`","|NW002_status|","NW002"
|
||||
":ref:`NW003_page`","|NW003_status|","NW003"
|
||||
":ref:`NW004_page`","|NW004_status|","NW004"
|
||||
":ref:`NW005_page`","|NW005_status|","NW005"
|
||||
|
||||
Network Parameters
|
||||
=====================
|
||||
@@ -0,0 +1,58 @@
|
||||
|
||||
|
||||
|
||||
.. |NW001_name| replace:: :cyan:`WiFi Station`
|
||||
.. |NW001_type| replace:: :cyan:`Network`
|
||||
.. |NW001_typename| replace:: :cyan:`Network - WiFi Station`
|
||||
.. |NW001_status| replace:: :green:`NORMAL`
|
||||
.. |NW001_github| replace:: _NW001_WiFi_STA.cpp
|
||||
.. _NW001_github: https://github.com/letscontrolit/ESPEasy/blob/mega/src/ESPEasy/net/_NW001_WiFi_STA.cpp
|
||||
.. |NW001_usedby| replace:: `.`
|
||||
.. |NW001_shortinfo| replace:: `.`
|
||||
.. |NW001_maintainer| replace:: `TD-er`
|
||||
.. |NW001_compileinfo| replace:: `.`
|
||||
|
||||
.. |NW002_name| replace:: :cyan:`WiFi AP`
|
||||
.. |NW002_type| replace:: :cyan:`Network`
|
||||
.. |NW002_typename| replace:: :cyan:`Network - WiFi AP`
|
||||
.. |NW002_status| replace:: :green:`NORMAL`
|
||||
.. |NW002_github| replace:: _NW002_WiFi_AP.cpp
|
||||
.. _NW002_github: https://github.com/letscontrolit/ESPEasy/blob/mega/src/ESPEasy/net/_NW002_WiFi_AP.cpp
|
||||
.. |NW002_usedby| replace:: `.`
|
||||
.. |NW002_shortinfo| replace:: `.`
|
||||
.. |NW002_maintainer| replace:: `TD-er`
|
||||
.. |NW002_compileinfo| replace:: `.`
|
||||
|
||||
.. |NW003_name| replace:: :cyan:`Ethernet (RMII)`
|
||||
.. |NW003_type| replace:: :cyan:`Network`
|
||||
.. |NW003_typename| replace:: :cyan:`Network - Ethernet (RMII)`
|
||||
.. |NW003_status| replace:: :green:`NORMAL`
|
||||
.. |NW003_github| replace:: _NW003_ETH_RMII.cpp
|
||||
.. _NW003_github: https://github.com/letscontrolit/ESPEasy/blob/mega/src/ESPEasy/net/_NW003_ETH_RMII.cpp
|
||||
.. |NW003_usedby| replace:: `.`
|
||||
.. |NW003_shortinfo| replace:: `.`
|
||||
.. |NW003_maintainer| replace:: `TD-er`
|
||||
.. |NW003_compileinfo| replace:: `.`
|
||||
|
||||
.. |NW004_name| replace:: :cyan:`Ethernet (SPI)`
|
||||
.. |NW004_type| replace:: :cyan:`Network`
|
||||
.. |NW004_typename| replace:: :cyan:`Network - Ethernet (SPI)`
|
||||
.. |NW004_status| replace:: :green:`NORMAL`
|
||||
.. |NW004_github| replace:: _NW004_ETH_SPI.cpp
|
||||
.. _NW004_github: https://github.com/letscontrolit/ESPEasy/blob/mega/src/ESPEasy/net/_NW004_ETH_SPI.cpp
|
||||
.. |NW004_usedby| replace:: `.`
|
||||
.. |NW004_shortinfo| replace:: `.`
|
||||
.. |NW004_maintainer| replace:: `TD-er`
|
||||
.. |NW004_compileinfo| replace:: `.`
|
||||
|
||||
.. |NW005_name| replace:: :cyan:`PPP Modem`
|
||||
.. |NW005_type| replace:: :cyan:`Network`
|
||||
.. |NW005_typename| replace:: :cyan:`Network - PPP Modem`
|
||||
.. |NW005_status| replace:: :green:`NORMAL`
|
||||
.. |NW005_github| replace:: _NW005_PPP_modem.cpp
|
||||
.. _NW005_github: https://github.com/letscontrolit/ESPEasy/blob/mega/src/ESPEasy/net/_NW005_PPP_modem.cpp
|
||||
.. |NW005_usedby| replace:: `.`
|
||||
.. |NW005_shortinfo| replace:: `.`
|
||||
.. |NW005_maintainer| replace:: `TD-er`
|
||||
.. |NW005_compileinfo| replace:: `.`
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
PlatformIO
|
||||
**********
|
||||
|
||||
ESP easy can be built using the Arduino IDE or PlatformIO (PIO).
|
||||
Arduino IDE is not being used during development, so it may take some more effort to get it setup for building ESPeasy.
|
||||
ESP easy can be built using the PlatformIO/pioarduino IDE (PIO).
|
||||
Arduino IDE is no longer supported for development though it's technically possible to be used. It may take considerable effort to get it setup for building ESPeasy.
|
||||
|
||||
We *strongly* advise to use PlatformIO as build environment.
|
||||
We *strongly* advise to use PIO as build environment.
|
||||
|
||||
PlatformIO is just the build, test and upload environment for many micro controllers like the ESP8266 and ESP32 we use.
|
||||
PIO is just the build, test and upload environment for many micro controllers like the ESP8266 and ESP32 we use.
|
||||
|
||||
On top of that you need to use an editor, or so called IDE in which PlatformIO will be used.
|
||||
On top of that you need to use an editor, or so called IDE in which PIO will be used.
|
||||
|
||||
The current choice is:
|
||||
|
||||
@@ -21,10 +21,10 @@ VSCode is free to use and available for Windows, MacOS and Linux.
|
||||
Apart from VSCode, there are more available, like Eclipse, MS Visual Studio (IDE) and probably more.
|
||||
|
||||
|
||||
PlatformIO Prerequisites
|
||||
========================
|
||||
PlatformIO/pioarduino Prerequisites
|
||||
===================================
|
||||
|
||||
PlatformIO does need at least the following:
|
||||
PIO does need at least the following:
|
||||
|
||||
* Python
|
||||
* Git command line tools (`download <https://git-scm.com/downloads>`_)
|
||||
@@ -58,17 +58,18 @@ install Pyton in Windows for PlatformIO.
|
||||
|
||||
These steps have been explained in this Youtube video: https://youtu.be/ArqwMcYSMsU though you might want to use the latest version of both the Git tools and Python.
|
||||
|
||||
PlatformIO with VSCode
|
||||
======================
|
||||
PlatformIO/pioarduino with VSCode
|
||||
=================================
|
||||
|
||||
Install
|
||||
-------
|
||||
|
||||
For development of ESPEasy, a number of extensions has to be installed in VS-Code:
|
||||
|
||||
* PlatformIO IDE (by PlatformIO)
|
||||
* C/C++ IntelliSense (by Microsoft)
|
||||
* pioarduino IDE (by pioarduino)
|
||||
* C/C++ (by Microsoft)
|
||||
* C/C++ Extension Pack (by Microsoft)
|
||||
* C/C++ Themes (by Microsoft)
|
||||
* Uncrustify (by Zachary Flower, originally by Laurent Tréguier)
|
||||
|
||||
Optional, but highly recommended:
|
||||
@@ -79,6 +80,7 @@ Optional, but highly recommended:
|
||||
* All Autocomplete (by Atishay Jain)
|
||||
* Excel Viewer (by GrapeCity)
|
||||
* Esbonio - An extension for editing sphinx projects (by Swyddfa)
|
||||
* reStructuredText (by LeXtudio)
|
||||
* reStructuredText Syntax highlighting (by Trond Snekvik)
|
||||
* Extension pack for reStructuredText (by LeXtudio Inc.)
|
||||
* Markdown All in One (by Yu Zhang)
|
||||
@@ -109,17 +111,19 @@ After setting it as the default formatter, the hotkey Alt-Shift-F (Cmd-Shift-F o
|
||||
|
||||
There used to be a reference to the Atom editor, but both Atom, and the PlatformIO plugin for Atom, are no longer maintained by their owners, so it was removed from this documentation.
|
||||
|
||||
Load a project using PlatformIO
|
||||
-------------------------------
|
||||
Load a project using PlatformIO/pioarduino
|
||||
------------------------------------------
|
||||
|
||||
.. note:: PlatformIO has been superceded by the Community-supported **pioarduino** initiative. For simplicity, in most places the abbreviation PIO is throughout this section of the documentation.
|
||||
|
||||
If you have PIO installed and the source tree cloned to your hard drive, then you can open the main dir of the repository.
|
||||
The main directory of the repository is the level with the file platformio.ini in it.
|
||||
|
||||
Then in a few moments after opening the directory, on the left there will appear an alien logo, the logo of PlatformIO.
|
||||
Then in a few moments after opening the directory, on the left there will appear an chip-package logo, the logo of pioarduino.
|
||||
If you click that one, you will get a tree with lots and lots of project tasks and environments.
|
||||
|
||||
It is important to note that PlatformIO does everything based on environments, which are defined in the platformio.ini file.
|
||||
In the PlatformIO menu (on the left) everything is grouped per environment.
|
||||
It is important to note that PIO does everything based on environments, which are defined in the platformio.ini file.
|
||||
In the PIO menu (on the left) everything is grouped per environment.
|
||||
|
||||
An environment entry has several tasks, like:
|
||||
|
||||
@@ -130,8 +134,9 @@ An environment entry has several tasks, like:
|
||||
* Clean
|
||||
* ... many more.
|
||||
|
||||
Some of these options only are available when you have registered with PlatformIO and some are only for paid subscriptions.
|
||||
At least the basic ones used for almost any user are available with the free account.
|
||||
.. .. Some of these options only are available when you have registered with PlatformIO and some are only for paid subscriptions.
|
||||
|
||||
.. .. At least the basic ones used for almost any user are available with the free account.
|
||||
|
||||
The environment definitions all have at least the used micro controller in the name and the amount of flash memory used.
|
||||
|
||||
@@ -144,8 +149,8 @@ For example:
|
||||
* ..._ESP32_16M8M_LittleFS -> ESP32 with 16 MB flash and a 4 MB partition for the sketch. (8MB LittleFS)
|
||||
* ..._ESP32_16M1M_ETH -> ESP32 with 16 MB flash and a 4 MB partition for the sketch. (1MB SPIFFS, Wired ethernet support)
|
||||
|
||||
Make a custom build using PlatformIO
|
||||
------------------------------------
|
||||
Make a custom build using PIO
|
||||
-----------------------------
|
||||
|
||||
The easiest is to go for the environment ``custom_ESP8266_4M1M`` and unfold that one.
|
||||
Then select ``Build`` to see if it will start building.
|
||||
@@ -213,7 +218,7 @@ Now that Linux is installed, it's strongly advised to get it up to date with the
|
||||
|
||||
NB: The ``sudo`` command will ask for your current account password once, (and maybe later again after some time has passed). When asked for confirmation, confirm the installation of any needed updates, or add the ``-y`` parameter to the ``upgrade`` command to continue without questions.
|
||||
|
||||
Additionally some tools need to be installed so PlatformIO can be properly installed later, and we can use the Uncrustify plugin in VS-Code to format the code nicely:
|
||||
Additionally some tools need to be installed so PIO can be properly installed later, and we can use the Uncrustify plugin in VS-Code to format the code nicely:
|
||||
|
||||
.. highlight::sh
|
||||
|
||||
@@ -307,7 +312,7 @@ Upload to ESP
|
||||
Linux
|
||||
-----
|
||||
|
||||
For Linux, you may need to install 99-platformio-udev.rules to make PlatformIO upload tools work in vscode.
|
||||
For Linux, you may need to install 99-platformio-udev.rules to make PIO upload tools work in vscode.
|
||||
|
||||
|
||||
.. highlight::sh
|
||||
@@ -317,12 +322,12 @@ Starter guide for (local) development on ESPEasy
|
||||
|
||||
For those with less development experience, or less experience in using Github, this chapter is intended as a **How To** guide to get started with development on ESPEasy.
|
||||
|
||||
It tries to help setting up Visual Studio Code (VSCode) with the PlatformIO development environment and additional VSCode plugins that aid in easier working on code and documentation.
|
||||
It tries to help setting up Visual Studio Code (VSCode) with the PIO development environment and additional VSCode plugins that aid in easier working on code and documentation.
|
||||
|
||||
The global steps described here are:
|
||||
|
||||
- Creating a private copy on Github
|
||||
- Getting VSCode and PlatformIO set up
|
||||
- Getting VSCode and PIO set up
|
||||
- Getting the source code from Github onto your system
|
||||
- Compiling the source code
|
||||
- Creating a branch to make your changes
|
||||
@@ -366,12 +371,12 @@ After this completes, you can view the fork in your Github dashboard at https://
|
||||
|
||||
(You have to replace [your_github_handle] with the name you selected during the Github sign-up procedure)
|
||||
|
||||
Install VSCode and PlatformIO
|
||||
Install VSCode and PIO
|
||||
------------------------------
|
||||
|
||||
Earlier on this page, a complete description has been given on how to install **PlatformIO with VSCode** with the required and advised optional extensions and the git command-line tools.
|
||||
Earlier on this page, a complete description has been given on how to install **PlatformIO/pioarduino with VSCode** with the required and advised optional extensions and the git command-line tools.
|
||||
|
||||
NB: PlatformIO is often shortened to PIO.
|
||||
NB: PlatformIO/pioarduino is shortened to PIO.
|
||||
|
||||
Clone your forked repository to your computer
|
||||
---------------------------------------------
|
||||
@@ -422,7 +427,7 @@ Depending on your usual workflow, the current VSCode environment can be saved as
|
||||
Compile an ESPEasy PIO environment
|
||||
----------------------------------
|
||||
|
||||
ESPEasy supports several different configurations of ESP units, ESP8266, ESP8285 and ESP32, and also some predefined hardware configurations and sets of plugins & controllers. This has been turned into several different PlatformIO environments, to make managing the different builds as easy as possible.
|
||||
ESPEasy supports several different configurations of ESP units, ESP8266, ESP8285 and ESP32, and also some predefined hardware configurations and sets of plugins & controllers. This has been turned into several different PIO environments, to make managing the different builds as easy as possible.
|
||||
|
||||
To compile such 'environment' (PIO terminology), select the PIO button (it looks like an alien) in VSCode:
|
||||
|
||||
@@ -492,10 +497,10 @@ Especially for new plugins, it is highly recommended to write documentation, as
|
||||
|
||||
|
||||
Using external libraries
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. note::
|
||||
Since November 2022, the PlatformIO configuration for ESPEasy was changed to *require* all libraries to be locally available, to a) prevent unexpected 'surprises' when an external library is updated, and b) greatly improve build output stability and quality.
|
||||
Since November 2022, the PIO configuration for ESPEasy was changed to *require* all libraries to be locally available, to a) prevent unexpected 'surprises' when an external library is updated, and b) greatly improve build output stability and quality.
|
||||
|
||||
While developing a plugin or some other feature, often you use an existing library to re-use that (assumably) proven and tested functionality. To include such library, there is a prerequisite, and some generic steps to take:
|
||||
|
||||
@@ -516,7 +521,7 @@ Writing documentation
|
||||
|
||||
Updating, or adding if it does not yet exist, the documentation is a useful activity that should be part of changing or adding to the ESPEasy code. Some of the optional VSCode extensions are specifically aimed at that task.
|
||||
|
||||
The documentation is created in the reStructuredText format, using mostly a ``.rst`` extension, and can be built locally by installing the sphinx tool. This can be installed manually by opening a PlatformIO Terminal window in VSCode (an already open PIO Terminal can also be used, when using WSL2 a PlatformIO Terminal is *required* to execute in the correct Python Virtual Environment (venv)) and issuing these commands:
|
||||
The documentation is created in the reStructuredText format, using mostly a ``.rst`` extension, and can be built locally by installing the sphinx tool. This can be installed manually by opening a PIO Terminal window in VSCode (an already open PIO Terminal can also be used, when using WSL2 a PIO Terminal is *required* to execute in the correct Python Virtual Environment (venv)) and issuing these commands:
|
||||
|
||||
.. code-block::
|
||||
|
||||
|
||||
@@ -549,37 +549,49 @@
|
||||
:green:`Rules`","
|
||||
Like ``PostToHTTP`` but using a TLS connection, by default on port 443
|
||||
|
||||
NB: No certificate validation is done!
|
||||
NB: No certificate validation is done!"
|
||||
"
|
||||
ProvisionConfig","
|
||||
Provision,Config","
|
||||
:red:`Internal`","
|
||||
Fetch ``config.dat`` as configured in the Provisioning configuration (see Settings Archive)
|
||||
|
||||
``ProvisionConfig``"
|
||||
``Provision,Config``"
|
||||
"
|
||||
ProvisionSecurity","
|
||||
Provision,Security","
|
||||
:red:`Internal`","
|
||||
Fetch ``security.dat`` as configured in the Provisioning configuration (see Settings Archive)
|
||||
|
||||
``ProvisionSecurity``"
|
||||
``Provision,Security``"
|
||||
"
|
||||
ProvisionNotification","
|
||||
Provision,DevSecurity","
|
||||
:red:`Internal`","
|
||||
Fetch ``devsecurity.dat`` as configured in the Provisioning configuration (see Settings Archive)
|
||||
|
||||
``Provision,DevSecurity``"
|
||||
"
|
||||
Provision,Notification","
|
||||
:red:`Internal`","
|
||||
Fetch ``notification.dat`` as configured in the Provisioning configuration (see Settings Archive)
|
||||
|
||||
``ProvisionNotification``"
|
||||
``Provision,Notification``"
|
||||
"
|
||||
ProvisionProvision","
|
||||
Provision,Provision","
|
||||
:red:`Internal`","
|
||||
Fetch ``provisioning.dat`` as configured in the Provisioning configuration (see Settings Archive)
|
||||
|
||||
``ProvisionProvision``"
|
||||
``Provision,Provision``"
|
||||
"
|
||||
ProvisionRules","
|
||||
Provision,Rules","
|
||||
:red:`Internal`","
|
||||
Fetch ``rulesN.txt`` as configured in the Provisioning configuration (see Settings Archive)
|
||||
|
||||
``ProvisionRules,1`` to fetch ``rules1.txt`` "
|
||||
``Provision,Rules,1`` to fetch ``rules1.txt`` "
|
||||
"
|
||||
Provision,Firmware","
|
||||
:red:`Internal`","
|
||||
Fetch a new firmware binary, and flash it on the unit, as configured in the Provisioning configuration (see Settings Archive)
|
||||
|
||||
``Provision,Firmware,<url-to-firmware-file>`` to fetch and install the specified .bin file from the specified url."
|
||||
"
|
||||
Publish","
|
||||
:green:`Rules`","
|
||||
@@ -656,7 +668,7 @@
|
||||
:green:`Rules`","
|
||||
Like ``PutToHTTP`` but using a TLS connection, by default on port 443
|
||||
|
||||
NB: No certificate validation is done!
|
||||
NB: No certificate validation is done!"
|
||||
"
|
||||
Reboot","
|
||||
:red:`Internal`","
|
||||
@@ -736,7 +748,7 @@
|
||||
:green:`Rules`","
|
||||
Like ``SendToHTTP`` but using a TLS connection, by default on port 443
|
||||
|
||||
NB: No certificate validation is done!
|
||||
NB: No certificate validation is done!"
|
||||
"
|
||||
SendToUDP","
|
||||
:green:`Rules`","
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
.. include:: ../Plugin/_plugin_substitutions_p05x.repl
|
||||
.. include:: ../Plugin/_plugin_substitutions_p05x.repl
|
||||
.. _P057_page:
|
||||
|
||||
|P057_typename|
|
||||
@@ -26,10 +26,59 @@ Supported hardware
|
||||
|
||||
|P057_usedby|
|
||||
|
||||
.. Commands available
|
||||
.. ^^^^^^^^^^^^^^^^^^
|
||||
Introduction
|
||||
------------
|
||||
|
||||
.. .. include:: P057_commands.repl
|
||||
The HT16K33 16 port generic I/O chip can be configured to act as a LED driver or as a maxtrix-keyboard input. This plugin describes settings for it to be used as a LED / 7-segment display driver.
|
||||
|
||||
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
.. image:: P057_DeviceConfiguration.png
|
||||
|
||||
|
||||
Task settings
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
* **Name** The name of the task. This should be unique for all devices that are configured. (Initially empty)
|
||||
|
||||
* **Enabled** For the device to work it has to be enabled. When checked, the device will be started as soon as the ESP starts. If desired, the device can also be enabled from f.e. a rule by using the ``TaskEnable,<tasknr>`` or ``TaskEnable,<taskname>`` command, or disabled using the corresponding ``TaskDisable,<tasknr>|<taskname>`` commands.
|
||||
|
||||
I2C options
|
||||
^^^^^^^^^^^
|
||||
|
||||
* **I2C Address**: Select the address the chip is set for, available options:
|
||||
|
||||
.. image:: P057_I2CAddressOptions.png
|
||||
|
||||
The available settings here depend on the build and hardware configuration used. At least the **Force Slow I2C speed** option is available, but selections for the I2C Multiplexer can also be shown. For details see the :ref:`Hardware_page`
|
||||
|
||||
|
||||
|
||||
Device Settings
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
7-Seg. Clock
|
||||
~~~~~~~~~~~~
|
||||
|
||||
* **Clock Type**: Select wether the time should be automatically displayed, in either 24h or 12h format, or ``none``, so other information can be shown, using the commands below.
|
||||
|
||||
* **Seg. for Xx:xx**: Choose the segment to be used for the 10-hour digit. Usually 0.
|
||||
|
||||
* **Seg. for xX:xx**: Choose the segment to be used for the hour digit. Usually 1.
|
||||
|
||||
* **Seg. for xx:Xx**: Choose the segment to be used for the 10-minutes digit. Usually 3 (when a colon is included).
|
||||
|
||||
* **Seg. for xx:xX**: Choose the segment to be used for the minutes digit. Usually 4 (when a colon is included).
|
||||
|
||||
* **Seg. for Colon**: Choose the segment to be used for the colon sign (if any). usually 2. And the value to be used for lighting up the colon. Usually (also) 2.
|
||||
|
||||
Commands available
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. include:: P057_commands.repl
|
||||
|
||||
.. Events
|
||||
.. ~~~~~~
|
||||
@@ -42,8 +91,7 @@ Change log
|
||||
.. versionchanged:: 2.0
|
||||
...
|
||||
|
||||
|added|
|
||||
Major overhaul for 2.0 release.
|
||||
|added| 2025-12-29 Documentation added.
|
||||
|
||||
.. versionadded:: 1.0
|
||||
...
|
||||
|
||||
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 39 KiB |
@@ -0,0 +1,50 @@
|
||||
.. csv-table::
|
||||
:header: "Command Syntax", "Extra information"
|
||||
:widths: 20, 30
|
||||
|
||||
"
|
||||
| ``m,<param>[,<param>,<param>...]``
|
||||
","
|
||||
| Light up leds on the display, description of params below, all values treated as decimal.
|
||||
|
||||
| This is a low-level command, giving exact control over what led/segment is lit.
|
||||
"
|
||||
"
|
||||
| ``mx,<param>[,<param>,<param>...]``
|
||||
","
|
||||
| Light up leds on the display, description of params below, all values treated as hexadecimal.
|
||||
|
||||
| This is a low-level command, giving exact control over what led/segment is lit.
|
||||
"
|
||||
"
|
||||
| ``mnum,<param>[,<param>,<param>...]``
|
||||
","
|
||||
| Light up segments on the display, description of params below, all values to be used as numeric content for a 7-segment display.
|
||||
"
|
||||
"
|
||||
| ``mprint,<text>``
|
||||
","
|
||||
| Light up numeric digits on a 7-segment display. If a colon is configured, and another character would land on that segment, then the colon-segment is skipped, a colon would be shown on the colon segment.
|
||||
|
||||
| This would be the standard command to display numeric data on the display, when not used in Clock-mode.
|
||||
"
|
||||
"
|
||||
| ``mbr,<0..255>``
|
||||
","
|
||||
| Set the brightness of the display in given range, 0 is off, 255 is max. brightness.
|
||||
"
|
||||
"
|
||||
| ``<param>``
|
||||
","
|
||||
| A ``<param>`` can be one of these:
|
||||
|
||||
| ``<value>`` : A numeric (or hexadecimal, without any prefix, for ``MX`` command) value, that is displayed starting on segment 0, auto-incrementing the segment for multiple values in a single command.
|
||||
|
||||
| ``<seg>=<value>`` : Address an explicit segment with a value.
|
||||
|
||||
| ``clear`` : Set all values to 0, turning off all leds/segments.
|
||||
|
||||
| ``test`` : Fill the leds/segments with a test-pattern.
|
||||
|
||||
| ``log`` : Write the current led-buffer values to the log (INFO level).
|
||||
"
|
||||
@@ -90,6 +90,18 @@ Statistic data is only visible if the plugin is configured and enabled.
|
||||
|
||||
This shows the latest data received and some statistics.
|
||||
|
||||
Data options
|
||||
^^^^^^^^^^^^
|
||||
|
||||
(These options are only available if build is without ``LIMIT_BUILD_SIZE`` set)
|
||||
|
||||
* **Receive binary data**: When enabled accepts any character for input. Does not terminate on a CR character received, but on end of data (no more bytes available), or when using the **Fixed length input data** setting.
|
||||
|
||||
* **Fixed length input data**: When 0 this feature is disabled. When set > 0 (max. length 255 characters), reading is stopped after this number of characters. Best used for reading binary data.
|
||||
|
||||
* **Event with hex. data (no prefix)**: When checked will generate the event with the received data converted to hexadecimal data (length is doubled), without a prefix (often hex data is prefixed with ``0x``). Data is still filtered (when enabled) and proxied *without* conversion!
|
||||
|
||||
|
||||
.. include:: DataAcquisition.repl
|
||||
|
||||
* **Interval** By default, Interval will be set to 60 sec.
|
||||
@@ -226,6 +238,8 @@ Change log
|
||||
.. versionchanged:: 2.0
|
||||
...
|
||||
|
||||
|added| 2025-12-23 Add support for binary data, fixed length input and convert event data to hex.
|
||||
|
||||
|added| 2024-02-25 Add support for ``serialproxy_test`` command and retrieving the separate groups from parsed regex.
|
||||
|
||||
|added| 2023-03-22 Add support for writing any binary data out via the serial port.
|
||||
|
||||
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 51 KiB |
@@ -0,0 +1,9 @@
|
||||
.. include:: ../Plugin/_plugin_substitutions_p10x.repl
|
||||
.. _P104-Font-Cyrillic-ext_page:
|
||||
|
||||
|P104-Font-Cyrillic-ext_typename|
|
||||
======================================================
|
||||
|
||||
A set of Cyrillic characters, as an extension to the regular ASCII characters, numerics and punctuation.
|
||||
|
||||
.. image:: P104_Font_Cyrillic-ext.png
|
||||
@@ -227,9 +227,9 @@ Available options:
|
||||
.. image:: P104_ZoneFontOptions.png
|
||||
:alt: Zone font options
|
||||
|
||||
All available fonts have been taken from the example code of the used Parola library.
|
||||
Most available fonts have been taken from the example code of the used Parola library, and the Cyrillic font from a post in the arduino.ru forum.
|
||||
|
||||
The Arabic, Greek and Katakana fonts have all their characters in the 'high-ascii' range (> 128 ascii values), so they can (and should) **not** be used to 'translate' normal text to Arabic, Greek or Katakana.
|
||||
The Arabic, Greek, Katakana and Cyrillic fonts have all their characters in the 'high-ascii' range (> 128 ascii values), so they can (and should) **not** be used to 'translate' normal text to Arabic, Greek or Katakana.
|
||||
|
||||
On 'bin-size-challenged' builds the *Full, double height* font is replaced by the *Numeric, double height* font, to limit the bin-size a bit more. This font can display only numeric (actually hexadecimal, 0..9 and A..F) and date/time content.
|
||||
|
||||
@@ -244,6 +244,7 @@ Font overview:
|
||||
* :ref:`P104-Font-Arabic_page`
|
||||
* :ref:`P104-Font-Greek_page`
|
||||
* :ref:`P104-Font-Katakana_page`
|
||||
* :ref:`P104-Font-Cyrillic-ext_page`
|
||||
|
||||
.. spacer
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.8 KiB |
@@ -28,9 +28,10 @@ The ST7735, ST7789 and ST7796 chip families drive color TFT displays in various
|
||||
|
||||
This plugin supports these display models:
|
||||
|
||||
* **ST7735** with resolutions 128 x 128, 128 x 160, 80 x 160, 135 x 240, 170 x 320 and 172 x 320 pixels
|
||||
* **ST7735** with resolutions 128 x 128, 128 x 160, 80 x 160, 135 x 240 and 172 x 320 pixels
|
||||
* **ST7789** with resolutions 240 x 320, 240 x 240, 240 x 280 and 135 x 240 pixels
|
||||
* **ST7796** with resolution of 320 x 480 pixels.
|
||||
* **ST77xx** (unknown if this is ST7735 or ST7789) with resolution of 170 x 320, 240 x 320, 240 x 280 pixels.
|
||||
|
||||
The plugin can be configured to show predefined text, a reservation for up to 24 lines is made, but only the lines that can fit on-screen will be shown, or via commands, sent via http or from rules, text or graphical elements like lines, rectangles, circles, pixels, etc., can be shown.
|
||||
|
||||
@@ -146,6 +147,8 @@ Available options:
|
||||
* *ST7735 135 x 240px*: Added to support a revision of the TTGO T-Display 16MB Flash module, that won't work with the ST7789 driver, the seller is claiming to use, but does work with this specially crafted ST7735 driver.
|
||||
* *ST7735 172 x 320px*: Added to support an ESP32-C6 module having a display with this specific resolution.
|
||||
* *ST77xx 170 x 320px*: Added to support ST7789v3 / ST7735 displays with this specific resolution.
|
||||
* *ST77xx 240 x 320px*: Added to support ST7789v3 / ST7735 displays with this specific resolution.
|
||||
* *ST77xx 240 x 280px*: Added to support ST7789v3 / ST7735 displays with this specific resolution.
|
||||
* *ST7789 240 x 320px*: Allows 32 lines of text in the smallest font scaling setting. Predefined text only goes to 24, extra lines can be displayed from rules or external commands.
|
||||
* *ST7789 240 x 240px*: Allows 24 lines of text in the smallest font scaling setting.
|
||||
* *ST7789 240 x 280px*: Allows 28 lines of text in the smallest font scaling setting. Predefined text only goes to 24, extra lines can be displayed from rules or external commands.
|
||||
|
||||
@@ -82,7 +82,7 @@ For each Value1 .. Value4 output, depending on the **Output Data Type** setting,
|
||||
|
||||
* **Value x type**: Here you can select a specific output type for each Value. This shows a selection of the **Output Data Type** selector, but only the single-value types. This will also be used for sending to Domoticz controllers and for MQTT Auto-Discovery.
|
||||
|
||||
* **Cache-Name x (optional)**: When set to a unique name (for this task), the parsed & pre-processed command sequence will be stored in a memory-cache, to *significantly* improve the speed of the plugin in runtime. When not set, the command sequence will be parsed every time the task is run (**Interval** setting or ``taskRun`` command). To be able to use event processing for 1ps, 10ps of 50ps, setting a Cache-Name is required!
|
||||
* **Cache-Name x**: Should be set to a unique name (for this task), so the parsed & pre-processed command sequence will be stored in a memory-cache, to *significantly* improve the speed of the plugin in runtime. Initially the Cache-name is set to ``c1`` .. ``c4`` (depending on the number of values selected) and can be changed as desired. When empty it will be reset to ``cX`` again.
|
||||
|
||||
* **I2C Commands x**: The sequence of commands to execute for this value. Nothing will be done if this is empty. The corresponding Value output can be set from another I2C Commands sequence. The currently used vs. the available space is shown next to the field. I2C Commands are explained below.
|
||||
|
||||
@@ -373,7 +373,7 @@ The plugin should be configured with these settings:
|
||||
|
||||
* **Output Data Type**: ``Single``
|
||||
|
||||
* **Cache-Name 1 (optional)**: Fill with a useable name, f.e. ``qrsize``, so the I2C Command sequence is cached for much improved execution-performance. And the additional de-duplication uses the ``1ps`` event-interval, and the sequence must be cached for that event to work.
|
||||
* **Cache-Name 1**: Fill with a useable name, f.e. ``qrsize``, so the I2C Command sequence is cached for much improved execution-performance. And the additional de-duplication uses the ``1ps`` event-interval, and the sequence must be cached for that event to work.
|
||||
|
||||
* **I2C Commands 1**:
|
||||
|
||||
@@ -455,7 +455,7 @@ The plugin should be configured with these settings:
|
||||
|
||||
``put.b.2.0x3f.0xf9``: Stop continuous measurement.
|
||||
|
||||
* **Cache-Name 1 (optional)**: Fill with a useable name, f.e. ``sdp``, so the I2C Command sequence is cached for much improved execution-performance.
|
||||
* **Cache-Name 1**: Fill with a useable name, f.e. ``sdp``, so the I2C Command sequence is cached for much improved execution-performance.
|
||||
|
||||
* **I2C Commands 1**:
|
||||
|
||||
@@ -517,7 +517,7 @@ The plugin should be configured with these settings:
|
||||
|
||||
* **Values**: the name can be changed to Distance, and the number of decimals 0. Stats can be enabled, as desired. The Unit of Measure should he set to ``cm``, and the Value Type to ``Distance``
|
||||
|
||||
* **Cache-Name 1 (optional)**: Fill with a useable name, f.e. ``distance``, so the I2C Command sequence is cached for much improved execution-performance.
|
||||
* **Cache-Name 1**: Fill with a useable name, f.e. ``distance``, so the I2C Command sequence is cached for much improved execution-performance.
|
||||
|
||||
* **I2C Commands 1**:
|
||||
|
||||
@@ -544,7 +544,7 @@ The plugin should be configured with these settings:
|
||||
|
||||
* **Values**: the first name can be changed to ``Distance``, and the number of decimals 0. Stats can be enabled, as desired. The Unit of Measure should he set to ``cm``, and the Value Type to ``Distance``, the second name can be changed to f.e. ``SignalStrength``, and number of decimals to 0. Stats can be enabled, as desired. No further settings for this value, as it has an undefined unit and value type.
|
||||
|
||||
* **Cache-Name 1 (optional)**: Fill with a useable name, f.e. ``distance``, so the I2C Command sequence is cached for much improved execution-performance.
|
||||
* **Cache-Name 1**: Fill with a useable name, f.e. ``distance``, so the I2C Command sequence is cached for much improved execution-performance.
|
||||
|
||||
* **I2C Commands 1**:
|
||||
|
||||
@@ -590,15 +590,15 @@ The plugin should be configured with these settings:
|
||||
|
||||
``write.u8.0x0A.0x00``: Set sensor in Suspend mode.
|
||||
|
||||
* **Cache-Name 1 (optional)**: Fill with a useable name, f.e. ``x``, so the I2C Command sequence is cached for much improved execution-performance.
|
||||
* **Cache-Name 1**: Fill with a useable name, f.e. ``x``, so the I2C Command sequence is cached for much improved execution-performance.
|
||||
|
||||
* **I2C Commands 1**: ``read.16le.0x01`` Read 2 bytes starting at register 1, the ``x`` value, and store in first Value field.
|
||||
|
||||
* **Cache-Name 2 (optional)**: Fill with a useable name, f.e. ``y``.
|
||||
* **Cache-Name 2**: Fill with a useable name, f.e. ``y``.
|
||||
|
||||
* **I2C Commands 2**: ``read.16le.0x03`` Read 2 bytes starting at register 3, the ``y`` value, and store in second Value field.
|
||||
|
||||
* **Cache-Name 3 (optional)**: Fill with a useable name, f.e. ``z``.
|
||||
* **Cache-Name 3**: Fill with a useable name, f.e. ``z``.
|
||||
|
||||
* **I2C Commands 3**: ``read.16le.0x05`` Read 2 bytes starting at register 5, the ``z`` value, and store in third Value field.
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 69 KiB |
@@ -56,9 +56,9 @@
|
||||
.. |P003_compileinfo| replace:: `.`
|
||||
.. |P003_usedlibraries| replace:: `.`
|
||||
|
||||
.. |P004_name| replace:: :cyan:`1-Wire Temperature`
|
||||
.. |P004_name| replace:: :cyan:`DS18xxx/MAX31xxx/1-Wire Temperature`
|
||||
.. |P004_type| replace:: :cyan:`Environment`
|
||||
.. |P004_typename| replace:: :cyan:`Environment - 1-Wire Temperature`
|
||||
.. |P004_typename| replace:: :cyan:`Environment - DS18xxx/MAX31xxx/1-Wire Temperature`
|
||||
.. |P004_porttype| replace:: `1-Wire`
|
||||
.. |P004_status| replace:: :green:`NORMAL` :yellow:`CLIMATE`
|
||||
.. |P004_github| replace:: P004_Dallas.ino
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
.. |P087_type| replace:: :cyan:`Communication`
|
||||
.. |P087_typename| replace:: :cyan:`Communication - SerialProxy`
|
||||
.. |P087_porttype| replace:: `Serial`
|
||||
.. |P087_status| replace:: :yellow:`COLLECTION C`
|
||||
.. |P087_status| replace:: :yellow:`COLLECTION C` :yellow:`ENERGY`
|
||||
.. |P087_github| replace:: P087_SerialProxy.ino
|
||||
.. _P087_github: https://github.com/letscontrolit/ESPEasy/blob/mega/src/_P087_SerialProxy.ino
|
||||
.. |P087_usedby| replace:: `.`
|
||||
|
||||
@@ -73,6 +73,7 @@
|
||||
.. |P104-Font-Arabic_typename| replace:: `Arabic font characters`
|
||||
.. |P104-Font-Greek_typename| replace:: `Greek font characters`
|
||||
.. |P104-Font-Katakana_typename| replace:: `Katakana font characters`
|
||||
.. |P104-Font-Cyrillic-ext_typename| replace:: `Cyrillic ext. font characters`
|
||||
|
||||
|
||||
.. |P105_name| replace:: :cyan:`AHT1x/AHT2x/DHT20/AM2301B`
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
.. |P167_type| replace:: :cyan:`Environment`
|
||||
.. |P167_typename| replace:: :cyan:`Environment - Sensirion SEN5x (IKEA Vindstyrka)`
|
||||
.. |P167_porttype| replace:: `.`
|
||||
.. |P167_status| replace:: :yellow:`CLIMATE B`
|
||||
.. |P167_status| replace:: :yellow:`CLIMATE A`
|
||||
.. |P167_github| replace:: P167_Vindstyrka.ino
|
||||
.. _P167_github: https://github.com/letscontrolit/ESPEasy/blob/mega/src/_P167_Vindstyrka.ino
|
||||
.. |P167_usedby| replace:: `.`
|
||||
|
||||
@@ -614,6 +614,21 @@ ESP32-C2 (ESP8684)
|
||||
The strapping combination of GPIO-8 = 0 and GPIO-9 = 0 is invalid and will trigger unexpected behavior.
|
||||
|
||||
|
||||
ESP32-C5
|
||||
~~~~~~~~
|
||||
|
||||
* GPIO-26 ... 28: "Select Bootloader Mode" pin
|
||||
* GPIO-27: Enable or disable ROM messages printing
|
||||
* GPIO-7: JTAG signal source
|
||||
* GPIO-2: MTMS, used to select crystal frequency in non-standard boot mode
|
||||
|
||||
|
||||
GPIO-2 is only used when the crystal frequency isn't explicitly set via efuses (which should not happen).
|
||||
|
||||
GPIO-25 and -3 are used to set SDIO sampling and driving clock edge.
|
||||
However this is also never used as SDIO mode means no flash and the chip is connected to a CPU and used as WiFi card.
|
||||
|
||||
|
||||
ESP32-C6
|
||||
~~~~~~~~
|
||||
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
# import os
|
||||
# import sys
|
||||
# sys.path.insert(0, os.path.abspath('.'))
|
||||
from recommonmark.parser import CommonMarkParser
|
||||
# from recommonmark.parser import CommonMarkParser
|
||||
import sphinx_bootstrap_theme
|
||||
|
||||
# -- Project information -----------------------------------------------------
|
||||
|
||||
project = u'ESP Easy'
|
||||
copyright = u'2018-2025, ESP Easy'
|
||||
copyright = u'2018-2026, ESP Easy'
|
||||
author = u'Grovkillen, TD-er & Friends'
|
||||
|
||||
# The short X.Y version
|
||||
@@ -52,15 +52,15 @@ extensions = [
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
source_parsers = {
|
||||
'.md': CommonMarkParser,
|
||||
}
|
||||
# source_parsers = {
|
||||
# '.md': CommonMarkParser,
|
||||
# }
|
||||
|
||||
# The suffix(es) of source filenames.
|
||||
# You can specify multiple suffix as a list of string:
|
||||
#
|
||||
source_suffix = ['.rst', '.md']
|
||||
#source_suffix = '.rst'
|
||||
# source_suffix = ['.rst', '.md']
|
||||
source_suffix = {'.rst': 'restructuredtext'}
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
@@ -14,8 +14,9 @@ Welcome to ESP Easy's documentation!
|
||||
ESPEasy/ESPchips.rst
|
||||
ESPEasy/FunctionBlocks.rst
|
||||
Config/Config.rst
|
||||
Controller/_Controller.rst
|
||||
Hardware/Hardware.rst
|
||||
Network/_Network.rst
|
||||
Controller/_Controller.rst
|
||||
Plugin/_Plugin.rst
|
||||
Rules/Rules.rst
|
||||
Notify/_Notifications.rst
|
||||
@@ -55,6 +56,7 @@ Welcome to ESP Easy's documentation!
|
||||
Controller/C*
|
||||
Notify/N*
|
||||
Plugin/P*
|
||||
Network/NW*
|
||||
Rules/HTTPResponseParser.rst
|
||||
|
||||
|
||||
|
||||
@@ -111,6 +111,9 @@
|
||||
@param cs Chip select pin # (OK to pass -1 if CS tied to GND).
|
||||
@param dc Data/Command pin # (required).
|
||||
@param rst Reset pin # (optional, pass -1 if unused).
|
||||
@param model The display model to initiailize.
|
||||
@param w Widht of the display in pixels.
|
||||
@param h Height of the display in pixels.
|
||||
*/
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -133,14 +136,20 @@ Adafruit_ILI9341::Adafruit_ILI9341(int8_t cs, int8_t dc, int8_t rst, uint8_t mod
|
||||
@param cs Chip select pin # (optional, pass -1 if unused and
|
||||
CS is tied to GND).
|
||||
@param rst Reset pin # (optional, pass -1 if unused).
|
||||
@param model The display model to initiailize.
|
||||
@param w Widht of the display in pixels.
|
||||
@param h Height of the display in pixels.
|
||||
*/
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
// Adafruit_ILI9341::Adafruit_ILI9341(SPIClass *spiClass, int8_t dc, int8_t cs,
|
||||
// int8_t rst)
|
||||
// : Adafruit_SPITFT(ILI9341_TFTWIDTH, ILI9341_TFTHEIGHT, spiClass, cs, dc,
|
||||
// rst) {}
|
||||
Adafruit_ILI9341::Adafruit_ILI9341(SPIClass *spiClass, int8_t dc, int8_t cs,
|
||||
int8_t rst, uint8_t model, uint16_t w, uint16_t h)
|
||||
: Adafruit_SPITFT(w, h, spiClass, cs, dc, rst) {
|
||||
_model = model;
|
||||
_w = w;
|
||||
_h = h;
|
||||
}
|
||||
#endif // end !ESP8266
|
||||
|
||||
/**************************************************************************/
|
||||
|
||||
@@ -163,8 +163,8 @@ public:
|
||||
|
||||
#if !defined(ESP8266)
|
||||
|
||||
// Adafruit_ILI9341(SPIClass *spiClass, int8_t dc, int8_t cs = -1,
|
||||
// int8_t rst = -1);
|
||||
Adafruit_ILI9341(SPIClass *spiClass, int8_t dc, int8_t cs = -1,
|
||||
int8_t rst = -1, uint8_t model = 0, uint16_t w = 0, uint16_t h = 0);
|
||||
#endif // end !ESP8266
|
||||
// Adafruit_ILI9341(tftBusWidth busWidth, int8_t d0, int8_t wr, int8_t dc,
|
||||
// int8_t cs = -1, int8_t rst = -1, int8_t rd = -1);
|
||||
|
||||
@@ -206,6 +206,22 @@ static const uint8_t PROGMEM
|
||||
ST77XX_RASET, 4, // 2: Row addr set, 4 args, no delay:
|
||||
0x00, 0x00, // XSTART = 0
|
||||
320 >> 8, 320 & 0xFF }, // XEND = 320
|
||||
Rcmd2black240x320[] = { // 7735R init, part 2 (mini 240x320)
|
||||
2, // 2 commands in list:
|
||||
ST77XX_CASET, 4, // 1: Column addr set, 4 args, no delay:
|
||||
0x00, 0x00, // XSTART = 0
|
||||
0x00, 240, // XEND = 240
|
||||
ST77XX_RASET, 4, // 2: Row addr set, 4 args, no delay:
|
||||
0x00, 0x00, // XSTART = 0
|
||||
320 >> 8, 320 & 0xFF }, // XEND = 320
|
||||
Rcmd2black240x280[] = { // 7735R init, part 2 (mini 240x280)
|
||||
2, // 2 commands in list:
|
||||
ST77XX_CASET, 4, // 1: Column addr set, 4 args, no delay:
|
||||
0x00, 0x00, // XSTART = 0
|
||||
0x00, 240, // XEND = 240
|
||||
ST77XX_RASET, 4, // 2: Row addr set, 4 args, no delay:
|
||||
0x00, 0x00, // XSTART = 0
|
||||
280 >> 8, 280 & 0xFF }, // XEND = 240
|
||||
#endif // if ST7735_EXTRA_INIT
|
||||
|
||||
Rcmd3[] = { // 7735R init, part 3 (red or green tab)
|
||||
@@ -292,6 +308,20 @@ void Adafruit_ST7735::initR(uint8_t options) {
|
||||
const uint8_t data = 0x00;
|
||||
sendCommand(ST77XX_INVON, &data, 0);
|
||||
sendCommand(ST77XX_INVON, &data, 0); // Write twice...
|
||||
} else if (options == INITR_BLACKTAB240x320) {
|
||||
_height = ST7735_TFTHEIGHT_320;
|
||||
_width = ST7735_TFTWIDTH_240;
|
||||
displayInit(Rcmd2black240x320);
|
||||
const uint8_t data = 0x00;
|
||||
sendCommand(ST77XX_INVON, &data, 0);
|
||||
sendCommand(ST77XX_INVON, &data, 0); // Write twice...
|
||||
} else if (options == INITR_BLACKTAB240x280) {
|
||||
_height = ST7735_TFTHEIGHT_280;
|
||||
_width = ST7735_TFTWIDTH_240;
|
||||
displayInit(Rcmd2black240x280);
|
||||
const uint8_t data = 0x00;
|
||||
sendCommand(ST77XX_INVON, &data, 0);
|
||||
sendCommand(ST77XX_INVON, &data, 0); // Write twice...
|
||||
#endif // if ST7735_EXTRA_INIT
|
||||
} else {
|
||||
// colstart, rowstart left at default '0' values
|
||||
@@ -339,7 +369,7 @@ void Adafruit_ST7735::setRotation(uint8_t m) {
|
||||
if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) {
|
||||
madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST77XX_MADCTL_RGB;
|
||||
#if ST7735_EXTRA_INIT
|
||||
} else if ((tabcolor == INITR_BLACKTAB135x240) || (tabcolor == INITR_BLACKTAB172x320) || (tabcolor == INITR_BLACKTAB170x320)) {
|
||||
} else if ((tabcolor == INITR_BLACKTAB135x240) || (tabcolor == INITR_BLACKTAB172x320) || (tabcolor == INITR_BLACKTAB170x320) || (tabcolor == INITR_BLACKTAB240x320) || (tabcolor == INITR_BLACKTAB240x280)) {
|
||||
madctl = ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB;
|
||||
#endif // if ST7735_EXTRA_INIT
|
||||
} else {
|
||||
@@ -368,6 +398,16 @@ void Adafruit_ST7735::setRotation(uint8_t m) {
|
||||
_width = ST7735_TFTWIDTH_170;
|
||||
_colstart = 35;
|
||||
_rowstart = 0;
|
||||
} else if (tabcolor == INITR_BLACKTAB240x320) {
|
||||
_height = ST7735_TFTHEIGHT_320;
|
||||
_width = ST7735_TFTWIDTH_240;
|
||||
_colstart = 0;
|
||||
_rowstart = 0;
|
||||
} else if (tabcolor == INITR_BLACKTAB240x280) {
|
||||
_height = ST7735_TFTHEIGHT_280;
|
||||
_width = ST7735_TFTWIDTH_240;
|
||||
_colstart = 0;
|
||||
_rowstart = 20;
|
||||
#endif // if ST7735_EXTRA_INIT
|
||||
} else {
|
||||
_height = ST7735_TFTHEIGHT_160;
|
||||
@@ -380,7 +420,7 @@ void Adafruit_ST7735::setRotation(uint8_t m) {
|
||||
if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) {
|
||||
madctl = ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB;
|
||||
#if ST7735_EXTRA_INIT
|
||||
} else if ((tabcolor == INITR_BLACKTAB135x240) || (tabcolor == INITR_BLACKTAB172x320) || (tabcolor == INITR_BLACKTAB170x320)) {
|
||||
} else if ((tabcolor == INITR_BLACKTAB135x240) || (tabcolor == INITR_BLACKTAB172x320) || (tabcolor == INITR_BLACKTAB170x320) || (tabcolor == INITR_BLACKTAB240x320) || (tabcolor == INITR_BLACKTAB240x280)) {
|
||||
madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST77XX_MADCTL_RGB;
|
||||
#endif // if ST7735_EXTRA_INIT
|
||||
} else {
|
||||
@@ -409,6 +449,16 @@ void Adafruit_ST7735::setRotation(uint8_t m) {
|
||||
_height = ST7735_TFTWIDTH_170;
|
||||
_colstart = 35;
|
||||
_rowstart = 0;
|
||||
} else if (tabcolor == INITR_BLACKTAB240x320) {
|
||||
_width = ST7735_TFTHEIGHT_320;
|
||||
_height = ST7735_TFTWIDTH_240;
|
||||
_colstart = 0;
|
||||
_rowstart = 0;
|
||||
} else if (tabcolor == INITR_BLACKTAB240x280) {
|
||||
_width = ST7735_TFTHEIGHT_280;
|
||||
_height = ST7735_TFTWIDTH_240;
|
||||
_colstart = 0;
|
||||
_rowstart = 20;
|
||||
#endif // if ST7735_EXTRA_INIT
|
||||
} else {
|
||||
_width = ST7735_TFTHEIGHT_160;
|
||||
@@ -421,7 +471,7 @@ void Adafruit_ST7735::setRotation(uint8_t m) {
|
||||
if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) {
|
||||
madctl = ST77XX_MADCTL_RGB;
|
||||
#if ST7735_EXTRA_INIT
|
||||
} else if ((tabcolor == INITR_BLACKTAB135x240) || (tabcolor == INITR_BLACKTAB172x320) || (tabcolor == INITR_BLACKTAB170x320)) {
|
||||
} else if ((tabcolor == INITR_BLACKTAB135x240) || (tabcolor == INITR_BLACKTAB172x320) || (tabcolor == INITR_BLACKTAB170x320) || (tabcolor == INITR_BLACKTAB240x320) || (tabcolor == INITR_BLACKTAB240x280)) {
|
||||
madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB;
|
||||
#endif // if ST7735_EXTRA_INIT
|
||||
} else {
|
||||
@@ -450,6 +500,16 @@ void Adafruit_ST7735::setRotation(uint8_t m) {
|
||||
_width = ST7735_TFTWIDTH_170;
|
||||
_colstart = 35;
|
||||
_rowstart = 0;
|
||||
} else if (tabcolor == INITR_BLACKTAB240x320) {
|
||||
_height = ST7735_TFTHEIGHT_320;
|
||||
_width = ST7735_TFTWIDTH_240;
|
||||
_colstart = 0;
|
||||
_rowstart = 0;
|
||||
} else if (tabcolor == INITR_BLACKTAB240x280) {
|
||||
_height = ST7735_TFTHEIGHT_280;
|
||||
_width = ST7735_TFTWIDTH_240;
|
||||
_colstart = 0;
|
||||
_rowstart = 20;
|
||||
#endif // if ST7735_EXTRA_INIT
|
||||
} else {
|
||||
_height = ST7735_TFTHEIGHT_160;
|
||||
@@ -462,7 +522,7 @@ void Adafruit_ST7735::setRotation(uint8_t m) {
|
||||
if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) {
|
||||
madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB;
|
||||
#if ST7735_EXTRA_INIT
|
||||
} else if ((tabcolor == INITR_BLACKTAB135x240) || (tabcolor == INITR_BLACKTAB172x320) || (tabcolor == INITR_BLACKTAB170x320)) {
|
||||
} else if ((tabcolor == INITR_BLACKTAB135x240) || (tabcolor == INITR_BLACKTAB172x320) || (tabcolor == INITR_BLACKTAB170x320) || (tabcolor == INITR_BLACKTAB240x320) || (tabcolor == INITR_BLACKTAB240x280)) {
|
||||
madctl = ST77XX_MADCTL_RGB;
|
||||
#endif // if ST7735_EXTRA_INIT
|
||||
} else {
|
||||
@@ -491,6 +551,16 @@ void Adafruit_ST7735::setRotation(uint8_t m) {
|
||||
_height = ST7735_TFTWIDTH_170;
|
||||
_colstart = 35;
|
||||
_rowstart = 0;
|
||||
} else if (tabcolor == INITR_BLACKTAB240x320) {
|
||||
_width = ST7735_TFTHEIGHT_320;
|
||||
_height = ST7735_TFTWIDTH_240;
|
||||
_colstart = 0;
|
||||
_rowstart = 0;
|
||||
} else if (tabcolor == INITR_BLACKTAB240x280) {
|
||||
_width = ST7735_TFTHEIGHT_280;
|
||||
_height = ST7735_TFTWIDTH_240;
|
||||
_colstart = 0;
|
||||
_rowstart = 20;
|
||||
#endif // if ST7735_EXTRA_INIT
|
||||
} else {
|
||||
_width = ST7735_TFTHEIGHT_160;
|
||||
|
||||
@@ -33,6 +33,8 @@
|
||||
#define INITR_BLACKTAB135x240 0x07
|
||||
#define INITR_BLACKTAB172x320 0x08
|
||||
#define INITR_BLACKTAB170x320 0x09
|
||||
#define INITR_BLACKTAB240x320 0x0A
|
||||
#define INITR_BLACKTAB240x280 0x0B
|
||||
|
||||
// Some register settings
|
||||
#define ST7735_MADCTL_BGR 0x08
|
||||
|
||||
@@ -36,9 +36,11 @@
|
||||
#define ST7735_TFTWIDTH_135 135
|
||||
#define ST7735_TFTWIDTH_172 172
|
||||
#define ST7735_TFTWIDTH_170 170
|
||||
#define ST7735_TFTWIDTH_240 240
|
||||
#define ST7735_TFTHEIGHT_128 128 // for 1.44" display
|
||||
#define ST7735_TFTHEIGHT_160 160 // for 1.8" and mini display
|
||||
#define ST7735_TFTHEIGHT_240 240
|
||||
#define ST7735_TFTHEIGHT_280 280
|
||||
#define ST7735_TFTHEIGHT_320 320
|
||||
|
||||
#define ST_CMD_DELAY 0x80 // special signifier for command lists
|
||||
|
||||
@@ -182,6 +182,14 @@ int ESPeasySerial::read(void)
|
||||
return _serialPort->read();
|
||||
}
|
||||
|
||||
int ESPeasySerial::read(uint8_t *buffer, size_t size)
|
||||
{
|
||||
if (!isValid()) {
|
||||
return -1;
|
||||
}
|
||||
return _serialPort->read(buffer, size);
|
||||
}
|
||||
|
||||
int ESPeasySerial::available(void)
|
||||
{
|
||||
if (!isValid()) {
|
||||
|
||||
@@ -17,6 +17,15 @@ const __FlashStringHelper* ESPEasySerialPort_toString(ESPEasySerialPort port, bo
|
||||
#if USABLE_SOC_UART_NUM > 2
|
||||
case ESPEasySerialPort::serial2: return shortName ? F("serial2") : F("HW Serial2");
|
||||
#endif // if USABLE_SOC_UART_NUM > 2
|
||||
#if USABLE_SOC_UART_NUM > 3
|
||||
case ESPEasySerialPort::serial3: return shortName ? F("serial3") : F("HW Serial3");
|
||||
#endif
|
||||
#if USABLE_SOC_UART_NUM > 4
|
||||
case ESPEasySerialPort::serial4: return shortName ? F("serial4") : F("HW Serial4");
|
||||
#endif
|
||||
#if USABLE_SOC_UART_NUM > 5
|
||||
case ESPEasySerialPort::serial5: return shortName ? F("serial5") : F("HW Serial5");
|
||||
#endif
|
||||
#if USES_SW_SERIAL
|
||||
case ESPEasySerialPort::software: return shortName ? F("serialsw") : F("SW Serial");
|
||||
#endif // if USES_SW_SERIAL
|
||||
@@ -49,6 +58,15 @@ bool isHWserial(ESPEasySerialPort port)
|
||||
#if USABLE_SOC_UART_NUM > 2
|
||||
case ESPEasySerialPort::serial2:
|
||||
#endif // if USABLE_SOC_UART_NUM > 2
|
||||
#if USABLE_SOC_UART_NUM > 3
|
||||
case ESPEasySerialPort::serial3:
|
||||
#endif
|
||||
#if USABLE_SOC_UART_NUM > 4
|
||||
case ESPEasySerialPort::serial4:
|
||||
#endif
|
||||
#if USABLE_SOC_UART_NUM > 5
|
||||
case ESPEasySerialPort::serial5:
|
||||
#endif
|
||||
return true;
|
||||
default:
|
||||
break;
|
||||
@@ -69,6 +87,15 @@ bool useGPIOpins(ESPEasySerialPort port)
|
||||
#if USABLE_SOC_UART_NUM > 2
|
||||
case ESPEasySerialPort::serial2:
|
||||
#endif // if USABLE_SOC_UART_NUM > 2
|
||||
#if USABLE_SOC_UART_NUM > 3
|
||||
case ESPEasySerialPort::serial3:
|
||||
#endif
|
||||
#if USABLE_SOC_UART_NUM > 4
|
||||
case ESPEasySerialPort::serial4:
|
||||
#endif
|
||||
#if USABLE_SOC_UART_NUM > 5
|
||||
case ESPEasySerialPort::serial5:
|
||||
#endif
|
||||
#if USES_SW_SERIAL
|
||||
case ESPEasySerialPort::software:
|
||||
#endif // if USES_SW_SERIAL
|
||||
@@ -96,6 +123,15 @@ bool validSerialPort(ESPEasySerialPort port)
|
||||
#if USABLE_SOC_UART_NUM > 2
|
||||
case ESPEasySerialPort::serial2:
|
||||
#endif // if USABLE_SOC_UART_NUM > 2
|
||||
#if USABLE_SOC_UART_NUM > 3
|
||||
case ESPEasySerialPort::serial3:
|
||||
#endif
|
||||
#if USABLE_SOC_UART_NUM > 4
|
||||
case ESPEasySerialPort::serial4:
|
||||
#endif
|
||||
#if USABLE_SOC_UART_NUM > 5
|
||||
case ESPEasySerialPort::serial5:
|
||||
#endif
|
||||
#if USES_SW_SERIAL
|
||||
case ESPEasySerialPort::software:
|
||||
#endif // if USES_SW_SERIAL
|
||||
|
||||
@@ -20,6 +20,16 @@ enum class ESPEasySerialPort : uint8_t {
|
||||
#if USABLE_SOC_UART_NUM > 2
|
||||
serial2 = 5,
|
||||
#endif // if USABLE_SOC_UART_NUM > 2
|
||||
#if USABLE_SOC_UART_NUM > 3
|
||||
serial3 = 10,
|
||||
#endif
|
||||
#if USABLE_SOC_UART_NUM > 4
|
||||
serial4 = 11,
|
||||
#endif
|
||||
#if USABLE_SOC_UART_NUM > 5
|
||||
serial5 = 12,
|
||||
#endif
|
||||
|
||||
#if USES_SW_SERIAL
|
||||
software = 6,
|
||||
#endif // if USES_SW_SERIAL
|
||||
|
||||
@@ -22,12 +22,16 @@
|
||||
# define SOC_RX0 44
|
||||
# elif CONFIG_IDF_TARGET_ESP32C6
|
||||
# define SOC_RX0 17
|
||||
# elif CONFIG_IDF_TARGET_ESP32C61
|
||||
# define SOC_RX0 17
|
||||
# elif CONFIG_IDF_TARGET_ESP32C5
|
||||
# define SOC_RX0 12
|
||||
# elif CONFIG_IDF_TARGET_ESP32C3
|
||||
# define SOC_RX0 20
|
||||
# elif CONFIG_IDF_TARGET_ESP32C2
|
||||
# define SOC_RX0 19
|
||||
# endif // if CONFIG_IDF_TARGET_ESP32
|
||||
# endif // ifndef SOC_RX0
|
||||
# endif // ifndef SOC_RX0
|
||||
|
||||
# ifndef SOC_TX0
|
||||
# if CONFIG_IDF_TARGET_ESP32
|
||||
@@ -36,68 +40,99 @@
|
||||
# define SOC_TX0 43
|
||||
# elif CONFIG_IDF_TARGET_ESP32C6
|
||||
# define SOC_TX0 16
|
||||
# elif CONFIG_IDF_TARGET_ESP32C61
|
||||
# define SOC_TX0 16
|
||||
# elif CONFIG_IDF_TARGET_ESP32C5
|
||||
# define SOC_TX0 11
|
||||
# elif CONFIG_IDF_TARGET_ESP32C3
|
||||
# define SOC_TX0 21
|
||||
# elif CONFIG_IDF_TARGET_ESP32C2
|
||||
# define SOC_TX0 20
|
||||
# endif // if CONFIG_IDF_TARGET_ESP32
|
||||
# endif // ifndef SOC_TX0
|
||||
# endif // ifndef SOC_TX0
|
||||
|
||||
# if SOC_UART_NUM > 1
|
||||
|
||||
# if SOC_UART_HP_NUM > 1
|
||||
|
||||
# ifndef SOC_RX1
|
||||
# if CONFIG_IDF_TARGET_ESP32
|
||||
# define SOC_RX1 13
|
||||
# elif CONFIG_IDF_TARGET_ESP32S2
|
||||
# define SOC_RX1 18
|
||||
# elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
||||
# define SOC_RX1 4
|
||||
# elif CONFIG_IDF_TARGET_ESP32S3
|
||||
# define SOC_RX1 15
|
||||
# endif // if CONFIG_IDF_TARGET_ESP32
|
||||
# endif // ifndef SOC_RX1
|
||||
# ifdef RX1
|
||||
# define SOC_RX1 RX1
|
||||
# else
|
||||
# if CONFIG_IDF_TARGET_ESP32
|
||||
# define SOC_RX1 13
|
||||
# elif CONFIG_IDF_TARGET_ESP32S2
|
||||
# define SOC_RX1 18
|
||||
# elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C61
|
||||
# define SOC_RX1 4
|
||||
# elif CONFIG_IDF_TARGET_ESP32S3
|
||||
# define SOC_RX1 15
|
||||
# endif // if CONFIG_IDF_TARGET_ESP32
|
||||
# endif // ifdef RX1
|
||||
# endif // ifndef SOC_RX1
|
||||
|
||||
# ifndef SOC_TX1
|
||||
# if CONFIG_IDF_TARGET_ESP32
|
||||
# define SOC_TX1 15
|
||||
# elif CONFIG_IDF_TARGET_ESP32S2
|
||||
# define SOC_TX1 17
|
||||
# elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6
|
||||
# define SOC_TX1 5
|
||||
# elif CONFIG_IDF_TARGET_ESP32S3
|
||||
# define SOC_TX1 16
|
||||
# endif // if CONFIG_IDF_TARGET_ESP32
|
||||
# endif // ifndef SOC_TX1
|
||||
# ifdef TX1
|
||||
# define SOC_TX1 TX1
|
||||
# else
|
||||
# if CONFIG_IDF_TARGET_ESP32
|
||||
# define SOC_TX1 15
|
||||
# elif CONFIG_IDF_TARGET_ESP32S2
|
||||
# define SOC_TX1 17
|
||||
# elif CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C61
|
||||
# define SOC_TX1 5
|
||||
# elif CONFIG_IDF_TARGET_ESP32S3
|
||||
# define SOC_TX1 16
|
||||
# endif // if CONFIG_IDF_TARGET_ESP32
|
||||
# endif // ifdef TX1
|
||||
# endif // ifndef SOC_TX1
|
||||
|
||||
# endif // if SOC_UART_NUM > 1
|
||||
# endif // if SOC_UART_HP_NUM > 1
|
||||
|
||||
# if SOC_UART_NUM > 2
|
||||
# if SOC_UART_HP_NUM > 2
|
||||
|
||||
# ifndef SOC_RX2
|
||||
# if CONFIG_IDF_TARGET_ESP32
|
||||
# define SOC_RX2 16
|
||||
# elif CONFIG_IDF_TARGET_ESP32S3
|
||||
# define SOC_RX2 19
|
||||
# elif CONFIG_IDF_TARGET_ESP32C6
|
||||
# define SOC_RX2 6
|
||||
# else // if CONFIG_IDF_TARGET_ESP32
|
||||
# define SOC_RX2 -1
|
||||
# endif // if CONFIG_IDF_TARGET_ESP32
|
||||
# endif // ifndef SOC_RX2
|
||||
# ifdef RX2
|
||||
# define SOC_RX2 RX2
|
||||
# else
|
||||
|
||||
# if CONFIG_IDF_TARGET_ESP32
|
||||
# define SOC_RX2 16
|
||||
# elif CONFIG_IDF_TARGET_ESP32S3
|
||||
# define SOC_RX2 19
|
||||
# elif CONFIG_IDF_TARGET_ESP32C6
|
||||
# define SOC_RX2 6
|
||||
# elif CONFIG_IDF_TARGET_ESP32C61
|
||||
# define SOC_RX2 6
|
||||
# elif CONFIG_IDF_TARGET_ESP32C5
|
||||
# define SOC_RX2 6
|
||||
# else // if CONFIG_IDF_TARGET_ESP32
|
||||
# define SOC_RX2 -1
|
||||
# endif // if CONFIG_IDF_TARGET_ESP32
|
||||
# endif // ifdef RX2
|
||||
# endif // ifndef SOC_RX2
|
||||
|
||||
# ifndef SOC_TX2
|
||||
# if CONFIG_IDF_TARGET_ESP32
|
||||
# define SOC_TX2 17
|
||||
# elif CONFIG_IDF_TARGET_ESP32S3
|
||||
# define SOC_TX2 20
|
||||
# elif CONFIG_IDF_TARGET_ESP32C6
|
||||
# define SOC_TX2 7
|
||||
# else // if CONFIG_IDF_TARGET_ESP32
|
||||
# define SOC_TX2 -1
|
||||
# endif // if CONFIG_IDF_TARGET_ESP32
|
||||
# endif // ifndef SOC_TX2
|
||||
# ifdef TX2
|
||||
# define SOC_TX2 TX2
|
||||
# else
|
||||
|
||||
# endif // if SOC_UART_NUM > 2
|
||||
# if CONFIG_IDF_TARGET_ESP32
|
||||
# define SOC_TX2 17
|
||||
# elif CONFIG_IDF_TARGET_ESP32S3
|
||||
# define SOC_TX2 20
|
||||
# elif CONFIG_IDF_TARGET_ESP32C6
|
||||
# define SOC_TX2 7
|
||||
# elif CONFIG_IDF_TARGET_ESP32C61
|
||||
# define SOC_TX2 7
|
||||
# elif CONFIG_IDF_TARGET_ESP32C5
|
||||
# define SOC_TX2 7
|
||||
# else // if CONFIG_IDF_TARGET_ESP32
|
||||
# define SOC_TX2 -1
|
||||
# endif // if CONFIG_IDF_TARGET_ESP32
|
||||
# endif // ifdef TX2
|
||||
# endif // ifndef SOC_TX2
|
||||
|
||||
# endif // if SOC_UART_HP_NUM > 2
|
||||
|
||||
#endif // ifdef ESP32
|
||||
|
||||
@@ -109,6 +144,7 @@ struct ESPeasySerialType {
|
||||
static ESPEasySerialPort getSerialType(ESPEasySerialPort typeHint,
|
||||
int receivePin,
|
||||
int transmitPin);
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -16,6 +16,15 @@ bool ESPeasySerialType::getSerialTypePins(ESPEasySerialPort serType, int& rxPin,
|
||||
# if USABLE_SOC_UART_NUM > 2
|
||||
case ESPEasySerialPort::serial2: rxPin = SOC_RX2; txPin = SOC_TX2; return true;
|
||||
# endif // if USABLE_SOC_UART_NUM > 2
|
||||
# if USABLE_SOC_UART_NUM > 3
|
||||
case ESPEasySerialPort::serial3: return true;
|
||||
# endif
|
||||
# if USABLE_SOC_UART_NUM > 4
|
||||
case ESPEasySerialPort::serial4: return true;
|
||||
# endif
|
||||
# if USABLE_SOC_UART_NUM > 5
|
||||
case ESPEasySerialPort::serial5: return true;
|
||||
# endif
|
||||
# if USES_I2C_SC16IS752
|
||||
case ESPEasySerialPort::sc16is752: return true;
|
||||
# endif // if USES_I2C_SC16IS752
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#ifndef SOC_UART_NUM
|
||||
# ifdef ESP8266
|
||||
# define SOC_UART_NUM 2
|
||||
# elif defined(ESP32_CLASSIC) || defined(ESP32S2) || defined(ESP32S3) || defined(ESP32C2) || defined(ESP32C3) || defined(ESP32C6)
|
||||
# elif defined(ESP32_CLASSIC) || defined(ESP32S2) || defined(ESP32S3) || defined(ESP32C2) || defined(ESP32C3) || defined(ESP32C5) || defined(ESP32C6) || defined(ESP32C61)
|
||||
# include <soc/soc_caps.h>
|
||||
# else // ifdef ESP8266
|
||||
static_assert(false, "Implement processor architecture");
|
||||
@@ -35,12 +35,12 @@ static_assert(false, "Implement processor architecture");
|
||||
#ifdef ESP32
|
||||
|
||||
/*
|
||||
#if CONFIG_IDF_TARGET_ESP32C6 || // support USB via HWCDC using JTAG interface
|
||||
#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C61 || // support USB via HWCDC using JTAG interface
|
||||
CONFIG_IDF_TARGET_ESP32C3 || // support USB via HWCDC using JTAG interface
|
||||
CONFIG_IDF_TARGET_ESP32S2 || // support USB via USBCDC
|
||||
CONFIG_IDF_TARGET_ESP32S3 // support USB via HWCDC using JTAG interface or USBCDC
|
||||
*/
|
||||
# if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
||||
# if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C61 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
|
||||
|
||||
// #if CONFIG_TINYUSB_CDC_ENABLED // This define is not recognized here so use USE_USB_CDC_CONSOLE
|
||||
# ifdef USE_USB_CDC_CONSOLE
|
||||
@@ -48,7 +48,14 @@ static_assert(false, "Implement processor architecture");
|
||||
|
||||
// ESP32C3/S3 embedded USB using JTAG interface
|
||||
# ifndef USES_HWCDC
|
||||
# define USES_HWCDC 1
|
||||
# if CONFIG_IDF_TARGET_ESP32S2
|
||||
# define USES_HWCDC 0
|
||||
# ifndef USES_USBCDC
|
||||
# define USES_USBCDC 1
|
||||
# endif // ifndef USES_USBCDC
|
||||
# else
|
||||
# define USES_HWCDC 1
|
||||
# endif
|
||||
# endif // ifndef USES_HWCDC
|
||||
# else // No ARDUINO_USB_MODE
|
||||
# ifndef USES_USBCDC
|
||||
@@ -96,7 +103,11 @@ static_assert(false, "Implement processor architecture");
|
||||
#endif // ifndef USES_HWCDC
|
||||
|
||||
#ifndef USES_USBCDC
|
||||
#ifdef ESP32S2
|
||||
# define USES_USBCDC 1
|
||||
#else
|
||||
# define USES_USBCDC 0
|
||||
#endif
|
||||
#endif // ifndef USES_USBCDC
|
||||
|
||||
|
||||
|
||||
@@ -89,6 +89,7 @@ public:
|
||||
int peek(void);
|
||||
size_t write(uint8_t val) override;
|
||||
int read(void) override;
|
||||
int read(uint8_t *buffer, size_t size);
|
||||
int available(void) override;
|
||||
int availableForWrite(void);
|
||||
void flush(void) override;
|
||||
|
||||
@@ -40,6 +40,16 @@ void Port_ESPEasySerial_HardwareSerial_t::resetConfig(const ESPEasySerialConfig&
|
||||
#if USABLE_SOC_UART_NUM > 2
|
||||
case ESPEasySerialPort::serial2:
|
||||
#endif // if USABLE_SOC_UART_NUM > 2
|
||||
#if USABLE_SOC_UART_NUM > 3
|
||||
case ESPEasySerialPort::serial3:
|
||||
#endif
|
||||
#if USABLE_SOC_UART_NUM > 4
|
||||
case ESPEasySerialPort::serial4:
|
||||
#endif
|
||||
#if USABLE_SOC_UART_NUM > 5
|
||||
case ESPEasySerialPort::serial5:
|
||||
#endif
|
||||
|
||||
_config.port = config.port;
|
||||
break;
|
||||
default:
|
||||
@@ -64,6 +74,18 @@ void Port_ESPEasySerial_HardwareSerial_t::resetConfig(const ESPEasySerialConfig&
|
||||
} else if (_config.port == ESPEasySerialPort::serial2) {
|
||||
_serial = &Serial2;
|
||||
#endif // if USABLE_SOC_UART_NUM > 2
|
||||
#if USABLE_SOC_UART_NUM > 3
|
||||
} else if (_config.port == ESPEasySerialPort::serial3) {
|
||||
_serial = &Serial3;
|
||||
#endif
|
||||
#if USABLE_SOC_UART_NUM > 4
|
||||
} else if (_config.port == ESPEasySerialPort::serial4) {
|
||||
_serial = &Serial4;
|
||||
#endif
|
||||
#if USABLE_SOC_UART_NUM > 5
|
||||
} else if (_config.port == ESPEasySerialPort::serial5) {
|
||||
_serial = &Serial5;
|
||||
#endif
|
||||
} else {
|
||||
_config.port = ESPEasySerialPort::not_set;
|
||||
}
|
||||
|
||||
@@ -3,12 +3,14 @@
|
||||
|
||||
#if USES_USBCDC
|
||||
|
||||
# if !ARDUINO_USB_CDC_ON_BOOT
|
||||
#include <USB.h>
|
||||
|
||||
# if !USB_SERIAL_IS_DEFINED
|
||||
USBCDC ESPEasySerial_USBCDC_port0(0);
|
||||
|
||||
// USBCDC ESPEasySerial_USBCDC_port1(1);
|
||||
# endif // if !ARDUINO_USB_CDC_ON_BOOT
|
||||
|
||||
# endif
|
||||
/*
|
||||
volatile bool usbActive = false;
|
||||
|
||||
volatile int32_t eventidTriggered = ESP_EVENT_ANY_ID;
|
||||
@@ -59,15 +61,15 @@ static void usbcdcEventCallback(void *arg, esp_event_base_t event_base, int32_t
|
||||
usbActive = true;
|
||||
break;
|
||||
case ARDUINO_USB_CDC_RX_EVENT:
|
||||
/*
|
||||
Serial.printf("CDC RX EVENT [%u]: ", data->rx.len);
|
||||
{
|
||||
uint8_t buf[data->rx.len];
|
||||
size_t len = Serial.read(buf, data->rx.len);
|
||||
Serial.write(buf, len);
|
||||
}
|
||||
Serial.println();
|
||||
*/
|
||||
|
||||
// Serial.printf("CDC RX EVENT [%u]: ", data->rx.len);
|
||||
// {
|
||||
// uint8_t buf[data->rx.len];
|
||||
// size_t len = Serial.read(buf, data->rx.len);
|
||||
// Serial.write(buf, len);
|
||||
// }
|
||||
// Serial.println();
|
||||
|
||||
usbActive = true;
|
||||
break;
|
||||
case ARDUINO_USB_CDC_TX_EVENT:
|
||||
@@ -83,12 +85,14 @@ static void usbcdcEventCallback(void *arg, esp_event_base_t event_base, int32_t
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
Port_ESPEasySerial_USBCDC_t::Port_ESPEasySerial_USBCDC_t(const ESPEasySerialConfig& config)
|
||||
{
|
||||
# if ARDUINO_USB_CDC_ON_BOOT
|
||||
# if USB_SERIAL_IS_DEFINED
|
||||
_serial = &USBSerial;
|
||||
|
||||
# else // if ARDUINO_USB_CDC_ON_BOOT
|
||||
# else
|
||||
_serial = nullptr;
|
||||
|
||||
if (config.port == ESPEasySerialPort::usb_cdc_0) {
|
||||
@@ -100,10 +104,11 @@ Port_ESPEasySerial_USBCDC_t::Port_ESPEasySerial_USBCDC_t(const ESPEasySerialConf
|
||||
_serial = &ESPEasySerial_USBCDC_port1;
|
||||
}
|
||||
*/
|
||||
# endif // if ARDUINO_USB_CDC_ON_BOOT
|
||||
# endif
|
||||
|
||||
if (_serial != nullptr) {
|
||||
_config.port = config.port;
|
||||
// _serial->end();
|
||||
|
||||
// USB.onEvent(usbcdcEventCallback);
|
||||
// _serial->onEvent(usbcdcEventCallback);
|
||||
@@ -115,7 +120,7 @@ Port_ESPEasySerial_USBCDC_t::Port_ESPEasySerial_USBCDC_t(const ESPEasySerialConf
|
||||
_serial->begin();
|
||||
|
||||
// _serial->onEvent(usbcdcEventCallback);
|
||||
// USB.begin();
|
||||
// USB.begin();
|
||||
delay(1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,11 @@
|
||||
|
||||
# include "Port_ESPEasySerial_base.h"
|
||||
|
||||
class Port_ESPEasySerial_USBCDC_t : public Port_ESPEasySerial_base {
|
||||
# include <cstdint>
|
||||
|
||||
|
||||
class Port_ESPEasySerial_USBCDC_t : public Port_ESPEasySerial_base
|
||||
{
|
||||
public:
|
||||
|
||||
Port_ESPEasySerial_USBCDC_t(const ESPEasySerialConfig& config);
|
||||
@@ -41,27 +45,27 @@ public:
|
||||
size_t setRxBufferSize(size_t new_size);
|
||||
size_t setTxBufferSize(size_t new_size);
|
||||
|
||||
bool setRS485Mode(int8_t rtsPin, bool enableCollisionDetection = false);
|
||||
bool setRS485Mode(int8_t rtsPin,
|
||||
bool enableCollisionDetection = false);
|
||||
|
||||
virtual int getBaudRate() const override;
|
||||
|
||||
private:
|
||||
|
||||
# if ARDUINO_USB_CDC_ON_BOOT
|
||||
USBCDC *_serial = &Serial;
|
||||
#if USB_SERIAL_IS_DEFINED
|
||||
USBCDC *_serial = &USBSerial;
|
||||
# else // if ARDUINO_USB_CDC_ON_BOOT
|
||||
USBCDC *_serial = nullptr;
|
||||
# endif // if ARDUINO_USB_CDC_ON_BOOT
|
||||
};
|
||||
}; // class Port_ESPEasySerial_USBCDC_t
|
||||
|
||||
|
||||
// Need to define these objects as extern as they need to be defined before setup() is being called.
|
||||
# if ARDUINO_USB_CDC_ON_BOOT
|
||||
# else
|
||||
# if !USB_SERIAL_IS_DEFINED
|
||||
extern USBCDC ESPEasySerial_USBCDC_port0;
|
||||
|
||||
// extern USBCDC ESPEasySerial_USBCDC_port1;
|
||||
# endif // if ARDUINO_USB_CDC_ON_BOOT
|
||||
# endif
|
||||
|
||||
|
||||
#endif // if USES_USBCDC
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
|
||||
#if USES_HWCDC
|
||||
|
||||
// #include <USB.h>
|
||||
#if !ARDUINO_USB_CDC_ON_BOOT
|
||||
#include <USB.h>
|
||||
#endif
|
||||
|
||||
volatile bool usbActive = false;
|
||||
|
||||
@@ -47,18 +49,19 @@ static void hwcdcEventCallback(void *arg, esp_event_base_t event_base, int32_t e
|
||||
}
|
||||
|
||||
Port_ESPEasySerial_USB_HWCDC_t::Port_ESPEasySerial_USB_HWCDC_t(const ESPEasySerialConfig& config)
|
||||
:
|
||||
|
||||
# if ARDUINO_USB_CDC_ON_BOOT // Serial used for USB CDC
|
||||
_hwcdc_serial(&Serial)
|
||||
: _hwcdc_serial(&Serial)
|
||||
# else // if ARDUINO_USB_CDC_ON_BOOT
|
||||
_hwcdc_serial(&USBSerial)
|
||||
: _hwcdc_serial(&myUsbSerial)
|
||||
# endif // if ARDUINO_USB_CDC_ON_BOOT
|
||||
{
|
||||
_config.port = ESPEasySerialPort::usb_hw_cdc;
|
||||
|
||||
// USB.begin();
|
||||
#if !ARDUINO_USB_CDC_ON_BOOT
|
||||
// USB.begin();
|
||||
#endif
|
||||
if (_hwcdc_serial != nullptr) {
|
||||
// _hwcdc_serial->end();
|
||||
// _hwcdc_serial->end();
|
||||
|
||||
// _config.rxBuffSize = _hwcdc_serial->setRxBufferSize(_config.rxBuffSize);
|
||||
// _config.txBuffSize = _hwcdc_serial->setTxBufferSize(_config.txBuffSize);
|
||||
@@ -103,24 +106,24 @@ void Port_ESPEasySerial_USB_HWCDC_t::end() {
|
||||
|
||||
int Port_ESPEasySerial_USB_HWCDC_t::available(void)
|
||||
{
|
||||
if (_hwcdc_serial != nullptr) {
|
||||
return _hwcdc_serial->available();
|
||||
if (_hwcdc_serial != nullptr && _hwcdc_serial->isConnected()) {
|
||||
return _hwcdc_serial->available();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Port_ESPEasySerial_USB_HWCDC_t::availableForWrite(void)
|
||||
{
|
||||
if (_hwcdc_serial != nullptr) {
|
||||
const int res = _hwcdc_serial->availableForWrite();
|
||||
return res > 64 ? 64 : res;
|
||||
if (_hwcdc_serial != nullptr && _hwcdc_serial->isConnected()) {
|
||||
const int res = _hwcdc_serial->availableForWrite();
|
||||
return res > 64 ? 64 : res;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int Port_ESPEasySerial_USB_HWCDC_t::peek(void)
|
||||
{
|
||||
if (_hwcdc_serial != nullptr) {
|
||||
if (_hwcdc_serial != nullptr && _hwcdc_serial->isConnected()) {
|
||||
return _hwcdc_serial->peek();
|
||||
}
|
||||
return 0;
|
||||
@@ -128,7 +131,7 @@ int Port_ESPEasySerial_USB_HWCDC_t::peek(void)
|
||||
|
||||
int Port_ESPEasySerial_USB_HWCDC_t::read(void)
|
||||
{
|
||||
if (_hwcdc_serial != nullptr) {
|
||||
if (_hwcdc_serial != nullptr && _hwcdc_serial->isConnected()) {
|
||||
return _hwcdc_serial->read();
|
||||
}
|
||||
return 0;
|
||||
@@ -137,7 +140,7 @@ int Port_ESPEasySerial_USB_HWCDC_t::read(void)
|
||||
size_t Port_ESPEasySerial_USB_HWCDC_t::read(uint8_t *buffer,
|
||||
size_t size)
|
||||
{
|
||||
if (_hwcdc_serial != nullptr) {
|
||||
if (_hwcdc_serial != nullptr && _hwcdc_serial->isConnected()) {
|
||||
return _hwcdc_serial->read(buffer, size);
|
||||
}
|
||||
return 0;
|
||||
@@ -145,7 +148,7 @@ size_t Port_ESPEasySerial_USB_HWCDC_t::read(uint8_t *buffer,
|
||||
|
||||
void Port_ESPEasySerial_USB_HWCDC_t::flush(void)
|
||||
{
|
||||
if (_hwcdc_serial != nullptr) {
|
||||
if (_hwcdc_serial != nullptr && _hwcdc_serial->isConnected()) {
|
||||
return _hwcdc_serial->flush();
|
||||
}
|
||||
}
|
||||
@@ -174,10 +177,9 @@ size_t Port_ESPEasySerial_USB_HWCDC_t::write(const uint8_t *buffer,
|
||||
|
||||
Port_ESPEasySerial_USB_HWCDC_t::operator bool() const
|
||||
{
|
||||
if (_hwcdc_serial != nullptr) {
|
||||
if (_hwcdc_serial != nullptr && _hwcdc_serial->isConnected()) {
|
||||
// return usbActive;
|
||||
const bool connected = (*_hwcdc_serial);
|
||||
return connected;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -43,7 +43,9 @@ public:
|
||||
bool setRS485Mode(int8_t rtsPin, bool enableCollisionDetection = false);
|
||||
|
||||
private:
|
||||
|
||||
#if !ARDUINO_USB_CDC_ON_BOOT
|
||||
HWCDC myUsbSerial;
|
||||
#endif
|
||||
HWCDC *_hwcdc_serial= nullptr;
|
||||
};
|
||||
|
||||
|
||||
@@ -124,4 +124,29 @@ void IRAM_ATTR DIRECT_PINMODE_INPUT_ISR(IO_REG_TYPE pin)
|
||||
DIRECT_MODE_INPUT(reg, PIN_TO_BITMASK(pin));
|
||||
}
|
||||
|
||||
int32_t IRAM_ATTR DIRECT_measureWaitForPinState_ISR(
|
||||
IO_REG_TYPE gpio_pin_rx,
|
||||
uint32_t start_usec,
|
||||
int32_t timeout_usec,
|
||||
bool newState)
|
||||
{
|
||||
int32_t passed{};
|
||||
|
||||
do {
|
||||
passed = (int32_t) ((uint32_t)micros() - start_usec);
|
||||
} while (passed < timeout_usec &&
|
||||
(!DIRECT_pinRead_ISR(gpio_pin_rx) == newState)); // Using '!' to do a quick cast to bool
|
||||
|
||||
if ((passed > timeout_usec) ||
|
||||
(!DIRECT_pinRead_ISR(gpio_pin_rx) == newState)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// N.B. we allow the situation where passed == timeout_usec
|
||||
// and pin might have reached the state we're waiting for.
|
||||
// This way we don't need to average for time before reading pin state and after.
|
||||
return passed;
|
||||
|
||||
}
|
||||
|
||||
#endif // if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
|
||||
|
||||
@@ -131,6 +131,8 @@ void DIRECT_pinWrite_ISR(IO_REG_TYPE pin, bool pinstate);
|
||||
void DIRECT_PINMODE_OUTPUT_ISR(IO_REG_TYPE pin);
|
||||
void DIRECT_PINMODE_INPUT_ISR(IO_REG_TYPE pin);
|
||||
|
||||
int32_t DIRECT_measureWaitForPinState_ISR(IO_REG_TYPE gpio_pin_rx, uint32_t start_usec, int32_t timeout_usec, bool newState);
|
||||
|
||||
#elif defined(ARDUINO_ARCH_ESP32)
|
||||
#if ESP_IDF_VERSION_MAJOR < 5
|
||||
#include <esp32-hal-gpio.h>
|
||||
@@ -139,6 +141,7 @@ void DIRECT_PINMODE_INPUT_ISR(IO_REG_TYPE pin);
|
||||
#include <soc/gpio_struct.h>
|
||||
#include <driver/rtc_io.h>
|
||||
#include <esp_idf_version.h>
|
||||
#include <soc/soc_caps.h>
|
||||
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 5, 0)
|
||||
#include <driver/gpio.h>
|
||||
#endif
|
||||
@@ -152,17 +155,17 @@ void DIRECT_PINMODE_INPUT_ISR(IO_REG_TYPE pin);
|
||||
static inline __attribute__((always_inline))
|
||||
IO_REG_TYPE directRead(IO_REG_TYPE pin)
|
||||
{
|
||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3
|
||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5
|
||||
return (GPIO.in.val >> pin) & 0x1;
|
||||
#elif CONFIG_IDF_TARGET_ESP32C6
|
||||
#elif CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C61 || CONFIG_IDF_TARGET_ESP32P4
|
||||
if ( pin < 32 )
|
||||
return (GPIO.in.val >> pin) & 0x1;
|
||||
else if ( pin < 46 )
|
||||
else if ( pin < SOC_GPIO_PIN_COUNT )
|
||||
return (GPIO.in1.val >> (pin - 32)) & 0x1;
|
||||
#else // plain ESP32
|
||||
if ( pin < 32 )
|
||||
return (GPIO.in >> pin) & 0x1;
|
||||
else if ( pin < 46 )
|
||||
else if ( pin < SOC_GPIO_PIN_COUNT )
|
||||
return (GPIO.in1.val >> (pin - 32)) & 0x1;
|
||||
#endif
|
||||
|
||||
@@ -172,18 +175,18 @@ IO_REG_TYPE directRead(IO_REG_TYPE pin)
|
||||
static inline __attribute__((always_inline))
|
||||
void directWriteLow(IO_REG_TYPE pin)
|
||||
{
|
||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3
|
||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5
|
||||
GPIO.out_w1tc.val = ((uint32_t)1 << pin);
|
||||
#elif CONFIG_IDF_TARGET_ESP32C6
|
||||
#elif CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C61 || CONFIG_IDF_TARGET_ESP32P4
|
||||
if ( pin < 32 )
|
||||
GPIO.out_w1tc.val = ((uint32_t)1 << pin);
|
||||
else if ( pin < 46 )
|
||||
else if ( pin < SOC_GPIO_PIN_COUNT )
|
||||
GPIO.out1_w1tc.val = ((uint32_t)1 << (pin - 32));
|
||||
|
||||
#else // plain ESP32
|
||||
if ( pin < 32 )
|
||||
GPIO.out_w1tc = ((uint32_t)1 << pin);
|
||||
else if ( pin < 46 )
|
||||
else if ( pin < SOC_GPIO_PIN_COUNT )
|
||||
GPIO.out1_w1tc.val = ((uint32_t)1 << (pin - 32));
|
||||
#endif
|
||||
}
|
||||
@@ -191,18 +194,18 @@ void directWriteLow(IO_REG_TYPE pin)
|
||||
static inline __attribute__((always_inline))
|
||||
void directWriteHigh(IO_REG_TYPE pin)
|
||||
{
|
||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3
|
||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5
|
||||
GPIO.out_w1ts.val = ((uint32_t)1 << pin);
|
||||
#elif CONFIG_IDF_TARGET_ESP32C6
|
||||
#elif CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C61 || CONFIG_IDF_TARGET_ESP32P4
|
||||
if ( pin < 32 )
|
||||
GPIO.out_w1ts.val = ((uint32_t)1 << pin);
|
||||
else if ( pin < 46 )
|
||||
else if ( pin < SOC_GPIO_PIN_COUNT )
|
||||
GPIO.out1_w1ts.val = ((uint32_t)1 << (pin - 32));
|
||||
|
||||
#else // plain ESP32
|
||||
if ( pin < 32 )
|
||||
GPIO.out_w1ts = ((uint32_t)1 << pin);
|
||||
else if ( pin < 46 )
|
||||
else if ( pin < SOC_GPIO_PIN_COUNT )
|
||||
GPIO.out1_w1ts.val = ((uint32_t)1 << (pin - 32));
|
||||
#endif
|
||||
}
|
||||
@@ -210,7 +213,7 @@ void directWriteHigh(IO_REG_TYPE pin)
|
||||
static inline __attribute__((always_inline))
|
||||
void directModeInput(IO_REG_TYPE pin)
|
||||
{
|
||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3
|
||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5
|
||||
GPIO.enable_w1tc.val = ((uint32_t)1 << (pin));
|
||||
#else
|
||||
if ( GPIO_IS_VALID_GPIO(pin) )
|
||||
@@ -225,7 +228,7 @@ void directModeInput(IO_REG_TYPE pin)
|
||||
}
|
||||
#endif
|
||||
// Input
|
||||
#if CONFIG_IDF_TARGET_ESP32C6
|
||||
#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C61 || CONFIG_IDF_TARGET_ESP32P4
|
||||
if ( pin < 32 )
|
||||
GPIO.enable_w1tc.val = ((uint32_t)1 << pin);
|
||||
else
|
||||
@@ -243,7 +246,7 @@ void directModeInput(IO_REG_TYPE pin)
|
||||
static inline __attribute__((always_inline))
|
||||
void directModeOutput(IO_REG_TYPE pin)
|
||||
{
|
||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3
|
||||
#if CONFIG_IDF_TARGET_ESP32C2 || CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32C5
|
||||
GPIO.enable_w1ts.val = ((uint32_t)1 << (pin));
|
||||
#else
|
||||
if ( GPIO_IS_VALID_GPIO(pin) && pin <= 33 ) // pins above 33 can be only inputs
|
||||
@@ -258,7 +261,7 @@ void directModeOutput(IO_REG_TYPE pin)
|
||||
}
|
||||
#endif
|
||||
// Output
|
||||
#if CONFIG_IDF_TARGET_ESP32C6
|
||||
#if CONFIG_IDF_TARGET_ESP32C6 || CONFIG_IDF_TARGET_ESP32C61 || CONFIG_IDF_TARGET_ESP32P4
|
||||
if ( pin < 32 )
|
||||
GPIO.enable_w1ts.val = ((uint32_t)1 << pin);
|
||||
else // already validated to pins <= 33
|
||||
@@ -291,6 +294,8 @@ void DIRECT_pinWrite_ISR(IO_REG_TYPE pin, bool pinstate);
|
||||
void DIRECT_PINMODE_OUTPUT_ISR(IO_REG_TYPE pin);
|
||||
void DIRECT_PINMODE_INPUT_ISR(IO_REG_TYPE pin);
|
||||
|
||||
int32_t DIRECT_measureWaitForPinState_ISR(IO_REG_TYPE gpio_pin_rx, uint32_t start_usec, int32_t timeout_usec, bool newState);
|
||||
|
||||
/*
|
||||
// https://github.com/PaulStoffregen/OneWire/pull/47
|
||||
// https://github.com/stickbreaker/OneWire/commit/6eb7fc1c11a15b6ac8c60e5671cf36eb6829f82c
|
||||
|
||||
@@ -87,8 +87,12 @@ struct ImprovWiFiParamsStruct {
|
||||
"ESP32-C2"
|
||||
#elif defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
"ESP32-C3"
|
||||
#elif defined(CONFIG_IDF_TARGET_ESP32C5)
|
||||
"ESP32-C5"
|
||||
#elif defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
"ESP32-C6"
|
||||
#elif defined(CONFIG_IDF_TARGET_ESP32C61)
|
||||
"ESP32-C61"
|
||||
#elif defined(CONFIG_IDF_TARGET_ESP32H2)
|
||||
"ESP32-H2"
|
||||
#elif defined(ESP8266)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "CC1101.h"
|
||||
|
||||
// default constructor
|
||||
CC1101::CC1101(int8_t CSpin, int8_t MISOpin) : _CSpin(CSpin), _MISOpin(MISOpin)
|
||||
CC1101::CC1101(int8_t CSpin, int8_t MISOpin, SPIClass& spi) : _CSpin(CSpin), _MISOpin(MISOpin), _spi(spi)
|
||||
{
|
||||
// SPI.begin(); // Done already by ESPEasy
|
||||
pinMode(_CSpin, OUTPUT);
|
||||
@@ -51,7 +51,7 @@ void CC1101::reset()
|
||||
select();
|
||||
|
||||
spi_waitMiso();
|
||||
SPI.transfer(CC1101_SRES);
|
||||
_spi.transfer(CC1101_SRES);
|
||||
delay(10);
|
||||
spi_waitMiso();
|
||||
deselect();
|
||||
@@ -63,7 +63,7 @@ uint8_t CC1101::writeCommand(uint8_t command)
|
||||
|
||||
select();
|
||||
spi_waitMiso();
|
||||
result = SPI.transfer(command);
|
||||
result = _spi.transfer(command);
|
||||
deselect();
|
||||
|
||||
return result;
|
||||
@@ -73,8 +73,8 @@ void CC1101::writeRegister(uint8_t address, uint8_t data)
|
||||
{
|
||||
select();
|
||||
spi_waitMiso();
|
||||
SPI.transfer(address);
|
||||
SPI.transfer(data);
|
||||
_spi.transfer(address);
|
||||
_spi.transfer(data);
|
||||
deselect();
|
||||
}
|
||||
|
||||
@@ -84,8 +84,8 @@ uint8_t CC1101::readRegister(uint8_t address)
|
||||
|
||||
select();
|
||||
spi_waitMiso();
|
||||
SPI.transfer(address);
|
||||
val = SPI.transfer(0);
|
||||
_spi.transfer(address);
|
||||
val = _spi.transfer(0);
|
||||
deselect();
|
||||
|
||||
return val;
|
||||
@@ -97,12 +97,12 @@ uint8_t CC1101::readRegisterMedian3(uint8_t address)
|
||||
|
||||
select();
|
||||
spi_waitMiso();
|
||||
SPI.transfer(address);
|
||||
val1 = SPI.transfer(0);
|
||||
SPI.transfer(address);
|
||||
val2 = SPI.transfer(0);
|
||||
SPI.transfer(address);
|
||||
val3 = SPI.transfer(0);
|
||||
_spi.transfer(address);
|
||||
val1 = _spi.transfer(0);
|
||||
_spi.transfer(address);
|
||||
val2 = _spi.transfer(0);
|
||||
_spi.transfer(address);
|
||||
val3 = _spi.transfer(0);
|
||||
deselect();
|
||||
|
||||
// reverse sort (largest in val1) because this is te expected order for TX_BUFFER
|
||||
@@ -162,10 +162,10 @@ void CC1101::writeBurstRegister(uint8_t address, uint8_t *data, uint8_t length)
|
||||
|
||||
select();
|
||||
spi_waitMiso();
|
||||
SPI.transfer(address | CC1101_WRITE_BURST);
|
||||
_spi.transfer(address | CC1101_WRITE_BURST);
|
||||
|
||||
for (i = 0; i < length; i++) {
|
||||
SPI.transfer(pgm_read_byte(&(data[i])));
|
||||
_spi.transfer(pgm_read_byte(&(data[i])));
|
||||
}
|
||||
deselect();
|
||||
}
|
||||
@@ -176,10 +176,10 @@ void CC1101::readBurstRegister(uint8_t *buffer, uint8_t address, uint8_t length)
|
||||
|
||||
select();
|
||||
spi_waitMiso();
|
||||
SPI.transfer(address | CC1101_READ_BURST);
|
||||
_spi.transfer(address | CC1101_READ_BURST);
|
||||
|
||||
for (i = 0; i < length; i++) {
|
||||
buffer[i] = SPI.transfer(0x00);
|
||||
buffer[i] = _spi.transfer(0x00);
|
||||
}
|
||||
|
||||
deselect();
|
||||
|
||||
@@ -191,8 +191,9 @@ protected:
|
||||
|
||||
public:
|
||||
|
||||
CC1101(int8_t CSpin = PIN_SPI_SS,
|
||||
int8_t MISOpin = MISO);
|
||||
CC1101(int8_t CSpin = PIN_SPI_SS,
|
||||
int8_t MISOpin = MISO,
|
||||
SPIClass& spi = SPI);
|
||||
virtual ~CC1101();
|
||||
|
||||
// spi
|
||||
@@ -230,6 +231,7 @@ private:
|
||||
|
||||
int8_t _CSpin = PIN_SPI_SS;
|
||||
int8_t _MISOpin;
|
||||
SPIClass& _spi = SPI;
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
#define MDMCFG2 0x02 // 16bit sync word / 16bit specific
|
||||
|
||||
// default constructor
|
||||
IthoCC1101::IthoCC1101(int8_t CSpin, int8_t MISOpin, uint8_t counter, uint8_t sendTries) : CC1101(CSpin, MISOpin)
|
||||
IthoCC1101::IthoCC1101(int8_t CSpin, int8_t MISOpin, SPIClass& spi, uint8_t counter, uint8_t sendTries) : CC1101(CSpin, MISOpin, spi)
|
||||
{
|
||||
this->outIthoPacket.counter = counter;
|
||||
this->sendTries = sendTries;
|
||||
|
||||
@@ -78,10 +78,11 @@ private:
|
||||
|
||||
public:
|
||||
|
||||
IthoCC1101(int8_t CSpin = PIN_SPI_SS,
|
||||
int8_t MISOpin = MISO,
|
||||
uint8_t counter = 0,
|
||||
uint8_t sendTries = 3); // set initial counter value
|
||||
IthoCC1101(int8_t CSpin = PIN_SPI_SS,
|
||||
int8_t MISOpin = MISO,
|
||||
SPIClass& spi = SPI,
|
||||
uint8_t counter = 0,
|
||||
uint8_t sendTries = 3); // set initial counter value
|
||||
~IthoCC1101();
|
||||
|
||||
// init
|
||||
@@ -90,7 +91,8 @@ public:
|
||||
initReceive();
|
||||
} // init,reset CC1101
|
||||
|
||||
void initReceive();
|
||||
void initReceive();
|
||||
|
||||
// uint8_t getLastCounter() const {
|
||||
// return outIthoPacket.counter;
|
||||
// } // counter is increased before sending a command
|
||||
@@ -104,7 +106,7 @@ public:
|
||||
}
|
||||
|
||||
// receive
|
||||
bool checkForNewPacket(); // check RX fifo for new data
|
||||
bool checkForNewPacket(); // check RX fifo for new data
|
||||
// IthoPacket getLastPacket() const {
|
||||
// return inIthoPacket;
|
||||
// } // retrieve last received/parsed packet from remote
|
||||
@@ -120,14 +122,15 @@ public:
|
||||
// uint8_t ReadRSSI();
|
||||
// bool checkID(const uint8_t *id) const;
|
||||
// int* getLastID();
|
||||
String getLastIDstr(bool ashex = true);
|
||||
String getLastIDstr(bool ashex = true);
|
||||
|
||||
// String getLastMessagestr(bool ashex = true);
|
||||
// String LastMessageDecoded() const;
|
||||
|
||||
// send
|
||||
void sendCommand(IthoCommand command,
|
||||
uint8_t srcId[3] = 0,
|
||||
uint8_t destId[3] = 0);
|
||||
void sendCommand(IthoCommand command,
|
||||
uint8_t srcId[3] = 0,
|
||||
uint8_t destId[3] = 0);
|
||||
|
||||
void enableOrcon(bool state);
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#include "Adafruit_GFX.h"
|
||||
#include "LOLIN_EPD.h"
|
||||
|
||||
LOLIN_EPD::LOLIN_EPD(int width, int height, int8_t spi_mosi, int8_t spi_clock, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY):Adafruit_GFX(width, height)
|
||||
LOLIN_EPD::LOLIN_EPD(int width, int height, int8_t spi_mosi, int8_t spi_clock, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY, SPIClass& spi):Adafruit_GFX(width, height)
|
||||
{
|
||||
cs = CS;
|
||||
rst = RST;
|
||||
@@ -26,9 +26,10 @@ LOLIN_EPD::LOLIN_EPD(int width, int height, int8_t spi_mosi, int8_t spi_clock, i
|
||||
busy = BUSY;
|
||||
hwSPI = false;
|
||||
singleByteTxns = false;
|
||||
_spi = spi;
|
||||
}
|
||||
|
||||
LOLIN_EPD::LOLIN_EPD(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY):Adafruit_GFX(width, height)
|
||||
LOLIN_EPD::LOLIN_EPD(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY, SPIClass& spi):Adafruit_GFX(width, height)
|
||||
{
|
||||
|
||||
dc = DC;
|
||||
@@ -37,6 +38,7 @@ LOLIN_EPD::LOLIN_EPD(int width, int height, int8_t DC, int8_t RST, int8_t CS, in
|
||||
busy = BUSY;
|
||||
hwSPI = true;
|
||||
singleByteTxns = false;
|
||||
_spi = spi;
|
||||
}
|
||||
|
||||
/**************************************************************************/
|
||||
@@ -90,9 +92,9 @@ void LOLIN_EPD::begin(bool reset)
|
||||
}
|
||||
else
|
||||
{
|
||||
SPI.begin();
|
||||
// _spi.begin(); // Already done by ESPEasy
|
||||
#ifndef SPI_HAS_TRANSACTION
|
||||
SPI.setClockDivider(4);
|
||||
_spi.setClockDivider(4);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -194,12 +196,12 @@ uint8_t LOLIN_EPD::fastSPIwrite(uint8_t d)
|
||||
{
|
||||
uint8_t b;
|
||||
csLow();
|
||||
b = SPI.transfer(d);
|
||||
b = _spi.transfer(d);
|
||||
csHigh();
|
||||
return b;
|
||||
}
|
||||
else
|
||||
return SPI.transfer(d);
|
||||
return _spi.transfer(d);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -234,7 +236,7 @@ uint8_t LOLIN_EPD::fastSPIwrite(uint8_t d)
|
||||
void LOLIN_EPD::csHigh()
|
||||
{
|
||||
#ifdef SPI_HAS_TRANSACTION
|
||||
SPI.endTransaction();
|
||||
_spi.endTransaction();
|
||||
#endif
|
||||
#ifdef HAVE_PORTREG
|
||||
*csport |= cspinmask;
|
||||
@@ -251,7 +253,7 @@ void LOLIN_EPD::csHigh()
|
||||
void LOLIN_EPD::csLow()
|
||||
{
|
||||
#ifdef SPI_HAS_TRANSACTION
|
||||
SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
|
||||
_spi.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
|
||||
#endif
|
||||
#ifdef HAVE_PORTREG
|
||||
*csport &= ~cspinmask;
|
||||
|
||||
@@ -60,8 +60,8 @@ enum
|
||||
class LOLIN_EPD: public Adafruit_GFX
|
||||
{
|
||||
public:
|
||||
LOLIN_EPD(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1);
|
||||
LOLIN_EPD(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1);
|
||||
LOLIN_EPD(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1, SPIClass& spi = SPI);
|
||||
LOLIN_EPD(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1, SPIClass& spi = SPI);
|
||||
|
||||
virtual ~LOLIN_EPD();
|
||||
virtual void begin(bool reset = true);
|
||||
@@ -111,6 +111,7 @@ protected:
|
||||
void dcLow();
|
||||
|
||||
private:
|
||||
SPIClass& _spi = SPI;
|
||||
};
|
||||
|
||||
#include "LOLIN_IL3897.h"
|
||||
|
||||
@@ -184,7 +184,7 @@ const unsigned char LUT_DATA_part[] PROGMEM = {
|
||||
@param BUSY the busy pin to use
|
||||
*/
|
||||
/**************************************************************************/
|
||||
LOLIN_IL3897::LOLIN_IL3897(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY) : LOLIN_EPD(width, height, SID, SCLK, DC, RST, CS, BUSY)
|
||||
LOLIN_IL3897::LOLIN_IL3897(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY, SPIClass& spi) : LOLIN_EPD(width, height, SID, SCLK, DC, RST, CS, BUSY, spi)
|
||||
{
|
||||
|
||||
if ((height % 8) > 0)
|
||||
@@ -202,7 +202,7 @@ LOLIN_IL3897::LOLIN_IL3897(int width, int height, int8_t SID, int8_t SCLK, int8_
|
||||
red_bufsize = bw_bufsize;
|
||||
}
|
||||
|
||||
LOLIN_IL3897::LOLIN_IL3897(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY) : LOLIN_EPD(width, height, DC, RST, CS, BUSY)
|
||||
LOLIN_IL3897::LOLIN_IL3897(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY, SPIClass& spi) : LOLIN_EPD(width, height, DC, RST, CS, BUSY, spi)
|
||||
{
|
||||
|
||||
if ((height % 8) > 0)
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
class LOLIN_IL3897 : public LOLIN_EPD {
|
||||
public:
|
||||
|
||||
LOLIN_IL3897(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1);
|
||||
LOLIN_IL3897(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1);
|
||||
LOLIN_IL3897(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1, SPIClass& spi = SPI);
|
||||
LOLIN_IL3897(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1, SPIClass& spi = SPI);
|
||||
|
||||
void begin(bool reset=true);
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
@param BUSY the busy pin to use
|
||||
*/
|
||||
/**************************************************************************/
|
||||
LOLIN_SSD1680::LOLIN_SSD1680(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY) : LOLIN_EPD(width, height, SID, SCLK, DC, RST, CS, BUSY)
|
||||
LOLIN_SSD1680::LOLIN_SSD1680(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY, SPIClass& spi) : LOLIN_EPD(width, height, SID, SCLK, DC, RST, CS, BUSY, spi)
|
||||
{
|
||||
|
||||
if ((height % 8) > 0)
|
||||
@@ -39,7 +39,7 @@ LOLIN_SSD1680::LOLIN_SSD1680(int width, int height, int8_t SID, int8_t SCLK, int
|
||||
red_bufsize = bw_bufsize;
|
||||
}
|
||||
|
||||
LOLIN_SSD1680::LOLIN_SSD1680(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY) : LOLIN_EPD(width, height, DC, RST, CS, BUSY)
|
||||
LOLIN_SSD1680::LOLIN_SSD1680(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY, SPIClass& spi) : LOLIN_EPD(width, height, DC, RST, CS, BUSY, spi)
|
||||
{
|
||||
|
||||
if ((height % 8) > 0)
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
class LOLIN_SSD1680 : public LOLIN_EPD
|
||||
{
|
||||
public:
|
||||
LOLIN_SSD1680(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1);
|
||||
LOLIN_SSD1680(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1);
|
||||
LOLIN_SSD1680(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1, SPIClass& spi = SPI);
|
||||
LOLIN_SSD1680(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1, SPIClass& spi = SPI);
|
||||
|
||||
void begin(bool reset = true);
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
@param BUSY the busy pin to use
|
||||
*/
|
||||
/**************************************************************************/
|
||||
LOLIN_UC8151D::LOLIN_UC8151D(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY) : LOLIN_EPD(width, height, SID, SCLK, DC, RST, CS, BUSY)
|
||||
LOLIN_UC8151D::LOLIN_UC8151D(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY, SPIClass& spi) : LOLIN_EPD(width, height, SID, SCLK, DC, RST, CS, BUSY, spi)
|
||||
{
|
||||
|
||||
if ((height % 8) > 0)
|
||||
@@ -39,7 +39,7 @@ LOLIN_UC8151D::LOLIN_UC8151D(int width, int height, int8_t SID, int8_t SCLK, int
|
||||
red_bufsize = bw_bufsize;
|
||||
}
|
||||
|
||||
LOLIN_UC8151D::LOLIN_UC8151D(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY) : LOLIN_EPD(width, height, DC, RST, CS, BUSY)
|
||||
LOLIN_UC8151D::LOLIN_UC8151D(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY, SPIClass& spi) : LOLIN_EPD(width, height, DC, RST, CS, BUSY, spi)
|
||||
{
|
||||
|
||||
if ((height % 8) > 0)
|
||||
|
||||
@@ -19,8 +19,8 @@
|
||||
class LOLIN_UC8151D : public LOLIN_EPD
|
||||
{
|
||||
public:
|
||||
LOLIN_UC8151D(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1);
|
||||
LOLIN_UC8151D(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1);
|
||||
LOLIN_UC8151D(int width, int height, int8_t SID, int8_t SCLK, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1, SPIClass& spi = SPI);
|
||||
LOLIN_UC8151D(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY = -1, SPIClass& spi = SPI);
|
||||
|
||||
void begin(bool reset = true);
|
||||
|
||||
|
||||
@@ -76,8 +76,8 @@ static const unsigned char EPD_2in7_gray_lut_bb[] = {
|
||||
@param BUSY the busy pin to use
|
||||
*/
|
||||
|
||||
Waveshare_2in7::Waveshare_2in7(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY)
|
||||
: LOLIN_EPD(width, height, DC, RST, CS, BUSY) {
|
||||
Waveshare_2in7::Waveshare_2in7(int width, int height, int8_t DC, int8_t RST, int8_t CS, int8_t BUSY, SPIClass& spi)
|
||||
: LOLIN_EPD(width, height, DC, RST, CS, BUSY, spi) {
|
||||
if ((height % 8) > 0) {
|
||||
_height_8bit = (height / 8 + 1) * 8;
|
||||
} else {
|
||||
@@ -247,7 +247,7 @@ void Waveshare_2in7::drawPixel(int16_t x, int16_t y, uint16_t color) {
|
||||
if ((x < 0) || (x >= width()) || (y < 0) || (y >= height())) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Corrections by @kretzp (Peter Kretz) 2022-03-27
|
||||
// check rotation, move pixel around if necessary
|
||||
switch (getRotation()) {
|
||||
|
||||
@@ -24,10 +24,10 @@
|
||||
#define WS2IN7_DATA_STOP 0x11
|
||||
#define WS2IN7_DISPLAY_REFRESH 0x12
|
||||
#define WS2IN7_DATA_START_TRANSMISSION_2 0x13
|
||||
#define WS2IN7_PARTIAL_DATA_START_TRANSMISSION_1 0x14
|
||||
#define WS2IN7_PARTIAL_DATA_START_TRANSMISSION_2 0x15
|
||||
#define WS2IN7_PARTIAL_DATA_START_TRANSMISSION_1 0x14
|
||||
#define WS2IN7_PARTIAL_DATA_START_TRANSMISSION_2 0x15
|
||||
#define WS2IN7_PARTIAL_DISPLAY_REFRESH 0x16
|
||||
#define WS2IN7_LUT_FOR_VCOM 0x20
|
||||
#define WS2IN7_LUT_FOR_VCOM 0x20
|
||||
#define WS2IN7_LUT_WHITE_TO_WHITE 0x21
|
||||
#define WS2IN7_LUT_BLACK_TO_WHITE 0x22
|
||||
#define WS2IN7_LUT_WHITE_TO_BLACK 0x23
|
||||
@@ -67,12 +67,13 @@ extern const unsigned char lut_wb[];
|
||||
class Waveshare_2in7 : public LOLIN_EPD {
|
||||
public:
|
||||
|
||||
Waveshare_2in7(int width,
|
||||
int height,
|
||||
int8_t DC,
|
||||
int8_t RST,
|
||||
int8_t CS,
|
||||
int8_t BUSY = -1);
|
||||
Waveshare_2in7(int width,
|
||||
int height,
|
||||
int8_t DC,
|
||||
int8_t RST,
|
||||
int8_t CS,
|
||||
int8_t BUSY = -1,
|
||||
SPIClass& spi = SPI);
|
||||
|
||||
void begin(bool reset = true);
|
||||
|
||||
|
||||
@@ -1343,6 +1343,23 @@ public:
|
||||
_D(mod, csPin, numDevices), _numModules(numDevices)
|
||||
{}
|
||||
|
||||
/**
|
||||
* Class constructor - SPI hardware interface.
|
||||
*
|
||||
* Instantiate a new instance of the class. The parameters passed are used to
|
||||
* connect the software to the hardware using the MD_MAX72XX class.
|
||||
*
|
||||
* See documentation for the MD_MAX72XX library for detailed explanation of parameters.
|
||||
*
|
||||
* \param mod the hardware module type used in the application. One of the MD_MAX72XX::moduleType_t values.
|
||||
* \param spi the SPI interface to use
|
||||
* \param csPin output for selecting the device.
|
||||
* \param numDevices number of devices connected. Default is 1 if not supplied.
|
||||
*/
|
||||
MD_Parola(MD_MAX72XX::moduleType_t mod, SPIClass &spi, uint8_t csPin, uint8_t numDevices = 1) :
|
||||
_D(mod, spi, csPin, numDevices), _numModules(numDevices)
|
||||
{}
|
||||
|
||||
/**
|
||||
* Initialize the object.
|
||||
*
|
||||
|
||||
@@ -29,11 +29,12 @@ MFRC522::MFRC522( uint8_t resetPowerDownPin ///< Arduino pin connected to MFRC52
|
||||
* Prepares the output pins.
|
||||
*/
|
||||
MFRC522::MFRC522( uint8_t chipSelectPin, ///< Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low)
|
||||
uint8_t resetPowerDownPin ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low). If there is no connection from the CPU to NRSTPD, set this to UINT8_MAX. In this case, only soft reset will be used in PCD_Init().
|
||||
) {
|
||||
_chipSelectPin = chipSelectPin;
|
||||
_resetPowerDownPin = resetPowerDownPin;
|
||||
} // End constructor
|
||||
uint8_t resetPowerDownPin, ///< Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low). If there is no connection from the CPU to NRSTPD, set this to UINT8_MAX. In this case, only soft reset will be used in PCD_Init().
|
||||
SPIClass& spi) :
|
||||
_chipSelectPin(chipSelectPin),
|
||||
_resetPowerDownPin(resetPowerDownPin),
|
||||
_spi(spi)
|
||||
{} // End constructor
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
// Basic interface functions for communicating with the MFRC522
|
||||
@@ -46,12 +47,12 @@ MFRC522::MFRC522( uint8_t chipSelectPin, ///< Arduino pin connected to MFRC522'
|
||||
void MFRC522::PCD_WriteRegister( PCD_Register reg, ///< The register to write to. One of the PCD_Register enums.
|
||||
uint8_t value ///< The value to write.
|
||||
) {
|
||||
SPI.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus
|
||||
_spi.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus
|
||||
digitalWrite(_chipSelectPin, LOW); // Select slave
|
||||
SPI.transfer(reg); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3.
|
||||
SPI.transfer(value);
|
||||
_spi.transfer(reg); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3.
|
||||
_spi.transfer(value);
|
||||
digitalWrite(_chipSelectPin, HIGH); // Release slave again
|
||||
SPI.endTransaction(); // Stop using the SPI bus
|
||||
_spi.endTransaction(); // Stop using the SPI bus
|
||||
} // End PCD_WriteRegister()
|
||||
|
||||
/**
|
||||
@@ -62,14 +63,14 @@ void MFRC522::PCD_WriteRegister( PCD_Register reg, ///< The register to write to
|
||||
uint8_t count, ///< The number of bytes to write to the register
|
||||
uint8_t *values ///< The values to write. Byte array.
|
||||
) {
|
||||
SPI.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus
|
||||
_spi.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus
|
||||
digitalWrite(_chipSelectPin, LOW); // Select slave
|
||||
SPI.transfer(reg); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3.
|
||||
_spi.transfer(reg); // MSB == 0 is for writing. LSB is not used in address. Datasheet section 8.1.2.3.
|
||||
for (uint8_t index = 0; index < count; index++) {
|
||||
SPI.transfer(values[index]);
|
||||
_spi.transfer(values[index]);
|
||||
}
|
||||
digitalWrite(_chipSelectPin, HIGH); // Release slave again
|
||||
SPI.endTransaction(); // Stop using the SPI bus
|
||||
_spi.endTransaction(); // Stop using the SPI bus
|
||||
} // End PCD_WriteRegister()
|
||||
|
||||
/**
|
||||
@@ -79,12 +80,12 @@ void MFRC522::PCD_WriteRegister( PCD_Register reg, ///< The register to write to
|
||||
uint8_t MFRC522::PCD_ReadRegister( PCD_Register reg ///< The register to read from. One of the PCD_Register enums.
|
||||
) {
|
||||
uint8_t value;
|
||||
SPI.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus
|
||||
_spi.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus
|
||||
digitalWrite(_chipSelectPin, LOW); // Select slave
|
||||
SPI.transfer(0x80 | reg); // MSB == 1 is for reading. LSB is not used in address. Datasheet section 8.1.2.3.
|
||||
value = SPI.transfer(0); // Read the value back. Send 0 to stop reading.
|
||||
_spi.transfer(0x80 | reg); // MSB == 1 is for reading. LSB is not used in address. Datasheet section 8.1.2.3.
|
||||
value = _spi.transfer(0); // Read the value back. Send 0 to stop reading.
|
||||
digitalWrite(_chipSelectPin, HIGH); // Release slave again
|
||||
SPI.endTransaction(); // Stop using the SPI bus
|
||||
_spi.endTransaction(); // Stop using the SPI bus
|
||||
return value;
|
||||
} // End PCD_ReadRegister()
|
||||
|
||||
@@ -103,26 +104,26 @@ void MFRC522::PCD_ReadRegister( PCD_Register reg, ///< The register to read from
|
||||
//Serial.print(F("Reading ")); Serial.print(count); Serial.println(F(" bytes from register."));
|
||||
uint8_t address = 0x80 | reg; // MSB == 1 is for reading. LSB is not used in address. Datasheet section 8.1.2.3.
|
||||
uint8_t index = 0; // Index in values array.
|
||||
SPI.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus
|
||||
_spi.beginTransaction(SPISettings(MFRC522_SPICLOCK, MSBFIRST, SPI_MODE0)); // Set the settings to work with SPI bus
|
||||
digitalWrite(_chipSelectPin, LOW); // Select slave
|
||||
count--; // One read is performed outside of the loop
|
||||
SPI.transfer(address); // Tell MFRC522 which address we want to read
|
||||
_spi.transfer(address); // Tell MFRC522 which address we want to read
|
||||
if (rxAlign) { // Only update bit positions rxAlign..7 in values[0]
|
||||
// Create bit mask for bit positions rxAlign..7
|
||||
uint8_t mask = (0xFF << rxAlign) & 0xFF;
|
||||
// Read value and tell that we want to read the same address again.
|
||||
uint8_t value = SPI.transfer(address);
|
||||
uint8_t value = _spi.transfer(address);
|
||||
// Apply mask to both current value of values[0] and the new data in value.
|
||||
values[0] = (values[0] & ~mask) | (value & mask);
|
||||
index++;
|
||||
}
|
||||
while (index < count) {
|
||||
values[index] = SPI.transfer(address); // Read value and tell that we want to read the same address again.
|
||||
values[index] = _spi.transfer(address); // Read value and tell that we want to read the same address again.
|
||||
index++;
|
||||
}
|
||||
values[index] = SPI.transfer(0); // Read the final byte. Send 0 to stop reading.
|
||||
values[index] = _spi.transfer(0); // Read the final byte. Send 0 to stop reading.
|
||||
digitalWrite(_chipSelectPin, HIGH); // Release slave again
|
||||
SPI.endTransaction(); // Stop using the SPI bus
|
||||
_spi.endTransaction(); // Stop using the SPI bus
|
||||
} // End PCD_ReadRegister()
|
||||
|
||||
/**
|
||||
|
||||
@@ -293,7 +293,7 @@ public:
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
MFRC522();
|
||||
MFRC522(uint8_t resetPowerDownPin);
|
||||
MFRC522(uint8_t chipSelectPin, uint8_t resetPowerDownPin);
|
||||
MFRC522(uint8_t chipSelectPin, uint8_t resetPowerDownPin, SPIClass& spi = SPI);
|
||||
virtual ~MFRC522() {};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -389,6 +389,7 @@ public:
|
||||
protected:
|
||||
uint8_t _chipSelectPin; // Arduino pin connected to MFRC522's SPI slave select input (Pin 24, NSS, active low)
|
||||
uint8_t _resetPowerDownPin; // Arduino pin connected to MFRC522's reset and power down input (Pin 6, NRSTPD, active low)
|
||||
SPIClass& _spi = SPI;
|
||||
StatusCode MIFARE_TwoStepHelper(uint8_t command, uint8_t blockAddr, int32_t data);
|
||||
};
|
||||
|
||||
|
||||
@@ -29,12 +29,12 @@ License along with NeoPixel. If not, see
|
||||
|
||||
#include "driver/spi_master.h"
|
||||
|
||||
#if (defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C2) || defined(CONFIG_IDF_TARGET_ESP32C6)) && !defined(HSPI_HOST)
|
||||
#if (defined(CONFIG_IDF_TARGET_ESP32C5) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C2) || defined(CONFIG_IDF_TARGET_ESP32C6)) && !defined(HSPI_HOST)
|
||||
// HSPI_HOST depreciated in C3
|
||||
#define HSPI_HOST SPI2_HOST
|
||||
#endif
|
||||
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
class Esp32VspiBus
|
||||
{
|
||||
public:
|
||||
@@ -52,7 +52,7 @@ public:
|
||||
const static int ParallelBits = 1;
|
||||
};
|
||||
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
class Esp32Vspi2BitBus
|
||||
{
|
||||
public:
|
||||
@@ -70,7 +70,7 @@ public:
|
||||
const static int ParallelBits = 2;
|
||||
};
|
||||
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
class Esp32Vspi4BitBus
|
||||
{
|
||||
public:
|
||||
@@ -174,7 +174,7 @@ public:
|
||||
// If pins aren't specified, initialize bus with just the default SCK and MOSI pins for the SPI peripheral (no SS, no >1-bit pins)
|
||||
void Initialize()
|
||||
{
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
if (T_SPIBUS::SpiHostDevice == VSPI_HOST)
|
||||
{
|
||||
Initialize(SCK, -1, MOSI, -1, -1, -1);
|
||||
@@ -277,7 +277,7 @@ private:
|
||||
int8_t _ssPin;
|
||||
};
|
||||
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
// Clock Speed and Default Definitions for DotStarEsp32DmaVspi
|
||||
typedef DotStarEsp32DmaSpiMethod<SpiSpeed40Mhz, Esp32VspiBus> DotStarEsp32DmaVspi40MhzMethod;
|
||||
typedef DotStarEsp32DmaSpiMethod<SpiSpeed20Mhz, Esp32VspiBus> DotStarEsp32DmaVspi20MhzMethod;
|
||||
@@ -303,7 +303,7 @@ typedef DotStarEsp32DmaSpiMethod<SpiSpeedHz, Esp32HspiBus> DotStarEsp32DmaHspiHz
|
||||
|
||||
typedef DotStarEsp32DmaHspi10MhzMethod DotStarEsp32DmaHspiMethod;
|
||||
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
// Clock Speed and Default Definitions for DotStarEsp32DmaVspi2Bit
|
||||
typedef DotStarEsp32DmaSpiMethod<SpiSpeed40Mhz,Esp32Vspi2BitBus> DotStarEsp32DmaVspi2Bit40MhzMethod;
|
||||
typedef DotStarEsp32DmaSpiMethod<SpiSpeed20Mhz,Esp32Vspi2BitBus> DotStarEsp32DmaVspi2Bit20MhzMethod;
|
||||
@@ -329,7 +329,7 @@ typedef DotStarEsp32DmaSpiMethod<SpiSpeedHz,Esp32Hspi2BitBus> DotStarEsp32DmaHsp
|
||||
|
||||
typedef DotStarEsp32DmaHspi2Bit10MhzMethod DotStarEsp32DmaHspi2BitMethod;
|
||||
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
// Clock Speed and Default Definitions for DotStarEsp32DmaVspi4Bit
|
||||
typedef DotStarEsp32DmaSpiMethod<SpiSpeed40Mhz,Esp32Vspi4BitBus> DotStarEsp32DmaVspi4Bit40MhzMethod;
|
||||
typedef DotStarEsp32DmaSpiMethod<SpiSpeed20Mhz,Esp32Vspi4BitBus> DotStarEsp32DmaVspi4Bit20MhzMethod;
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
// ESP32C3/S3 I2S is not supported yet due to significant changes to interface
|
||||
#ifndef CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP // turn this off with something new from idf5.1
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32S3) && !defined(CONFIG_IDF_TARGET_ESP32C2)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32S3) && !defined(CONFIG_IDF_TARGET_ESP32C2)
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
@@ -113,7 +113,7 @@ typedef struct {
|
||||
|
||||
static uint8_t i2s_silence_buf[I2S_DMA_SILENCE_SIZE] = { 0 };
|
||||
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
// (I2S_NUM_MAX == 2)
|
||||
static i2s_bus_t I2S[I2S_NUM_MAX] = {
|
||||
{&I2S0, -1, -1, -1, -1, 0, NULL, NULL, i2s_silence_buf, I2S_DMA_SILENCE_SIZE, NULL, I2S_DMA_BLOCK_COUNT_DEFAULT, 0, 0, I2s_Is_Idle},
|
||||
@@ -187,7 +187,7 @@ esp_err_t i2sSetClock(uint8_t bus_num, uint8_t div_num, uint8_t div_b, uint8_t d
|
||||
typeof(i2s->clkm_conf) clkm_conf;
|
||||
|
||||
clkm_conf.val = 0;
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
clkm_conf.clka_en = 0;
|
||||
#else
|
||||
clkm_conf.clk_sel = 2;
|
||||
@@ -222,7 +222,7 @@ void i2sSetPins(uint8_t bus_num, int8_t out, bool invert) {
|
||||
pinMode(out, OUTPUT);
|
||||
|
||||
int i2sSignal;
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
// (I2S_NUM_MAX == 2)
|
||||
if (bus_num == 1) {
|
||||
i2sSignal = I2S1O_DATA_OUT23_IDX;
|
||||
@@ -268,7 +268,7 @@ void i2sInit(uint8_t bus_num,
|
||||
return;
|
||||
}
|
||||
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
// (I2S_NUM_MAX == 2)
|
||||
if (bus_num) {
|
||||
periph_module_enable(PERIPH_I2S1_MODULE);
|
||||
@@ -310,7 +310,7 @@ void i2sInit(uint8_t bus_num,
|
||||
lc_conf.out_eof_mode = 1;
|
||||
i2s->lc_conf.val = lc_conf.val;
|
||||
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
i2s->pdm_conf.pcm2pdm_conv_en = 0;
|
||||
i2s->pdm_conf.pdm2pcm_conv_en = 0;
|
||||
#endif
|
||||
@@ -341,7 +341,7 @@ void i2sInit(uint8_t bus_num,
|
||||
|
||||
i2s->fifo_conf.tx_fifo_mod_force_en = 1;
|
||||
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
i2s->pdm_conf.rx_pdm_en = 0;
|
||||
i2s->pdm_conf.tx_pdm_en = 0;
|
||||
#endif
|
||||
@@ -351,7 +351,7 @@ void i2sInit(uint8_t bus_num,
|
||||
// enable intr in cpu //
|
||||
int i2sIntSource;
|
||||
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
// (I2S_NUM_MAX == 2)
|
||||
if (bus_num == 1) {
|
||||
i2sIntSource = ETS_I2S1_INTR_SOURCE;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
#ifndef CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP // turn this off with something new from idf5.1
|
||||
// ESP32C3 I2S is not supported yet due to significant changes to interface
|
||||
#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2)
|
||||
#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
||||
@@ -12,7 +12,7 @@ enum NeoBusChannel
|
||||
NeoBusChannel_0,
|
||||
NeoBusChannel_1,
|
||||
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32C61)
|
||||
|
||||
NeoBusChannel_2,
|
||||
|
||||
@@ -35,7 +35,7 @@ enum NeoBusChannel
|
||||
NeoBusChannel_7,
|
||||
#endif // !defined(CONFIG_IDF_TARGET_ESP32S2)
|
||||
|
||||
#endif // !defined(CONFIG_IDF_TARGET_ESP32C3) && !defined(CONFIG_IDF_TARGET_ESP32C2) && !defined(CONFIG_IDF_TARGET_ESP32C6)
|
||||
#endif
|
||||
|
||||
#endif // ARDUINO_ARCH_ESP32
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ License along with NeoPixel. If not, see
|
||||
|
||||
#if ESP_IDF_VERSION_MAJOR <= 4
|
||||
// ESP32C3 I2S is not supported yet due to significant changes to interface
|
||||
#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
#if defined(ARDUINO_ARCH_ESP32) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
|
||||
extern "C"
|
||||
{
|
||||
@@ -305,7 +305,7 @@ typedef NeoEsp32I2sMethodBase<NeoEsp32I2sSpeed800Kbps, NeoEsp32I2sBusZero, NeoEs
|
||||
typedef NeoEsp32I2sMethodBase<NeoEsp32I2sSpeed400Kbps, NeoEsp32I2sBusZero, NeoEsp32I2sInverted> NeoEsp32I2s0400KbpsInvertedMethod;
|
||||
typedef NeoEsp32I2sMethodBase<NeoEsp32I2sSpeedApa106, NeoEsp32I2sBusZero, NeoEsp32I2sInverted> NeoEsp32I2s0Apa106InvertedMethod;
|
||||
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
// (I2S_NUM_MAX == 2)
|
||||
|
||||
typedef NeoEsp32I2sMethodBase<NeoEsp32I2sSpeedWs2812x, NeoEsp32I2sBusOne, NeoEsp32I2sNotInverted> NeoEsp32I2s1Ws2812xMethod;
|
||||
@@ -347,7 +347,7 @@ typedef NeoEsp32I2sMethodBase<NeoEsp32I2sSpeedApa106, NeoEsp32I2sBusN, NeoEsp32I
|
||||
|
||||
#endif
|
||||
|
||||
#if !defined(NEOPIXEL_ESP32_RMT_DEFAULT) && !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
#if !defined(NEOPIXEL_ESP32_RMT_DEFAULT) && !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
|
||||
// I2s Bus 1 method is the default method for Esp32
|
||||
// Esp32S2 & Esp32C3 will use RMT as the default allways
|
||||
@@ -379,6 +379,6 @@ typedef NeoEsp32I2s1Apa106InvertedMethod NeoApa106InvertedMethod;
|
||||
typedef NeoEsp32I2s1Ws2812xInvertedMethod Neo800KbpsInvertedMethod;
|
||||
typedef NeoEsp32I2s1400KbpsInvertedMethod Neo400KbpsInvertedMethod;
|
||||
|
||||
#endif // !defined(NEOPIXEL_ESP32_RMT_DEFAULT) && !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
#endif // !defined(NEOPIXEL_ESP32_RMT_DEFAULT) && !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C5) && !defined(CONFIG_IDF_TARGET_ESP32C3)
|
||||
#endif
|
||||
#endif // ESP_IDF_VERSION_MAJOR < 5
|
||||
|
||||
@@ -29,7 +29,7 @@ License along with NeoPixel. If not, see
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
#if defined(ARDUINO_ARCH_ESP32) && ESP_IDF_VERSION_MAJOR < 5 && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32C2)
|
||||
#if defined(ARDUINO_ARCH_ESP32) && ESP_IDF_VERSION_MAJOR < 5 && !defined(CONFIG_IDF_TARGET_ESP32C6) && !defined(CONFIG_IDF_TARGET_ESP32C61) && !defined(CONFIG_IDF_TARGET_ESP32C2)
|
||||
#include "NeoSettings.h"
|
||||
#include "NeoBusChannel.h"
|
||||
#include "NeoEsp32RmtMethod.h"
|
||||
|
||||