Merge main into WMT_PW

This commit is contained in:
Victus
2026-05-10 21:00:03 +02:00
1608 changed files with 254495 additions and 0 deletions

178
.gitignore vendored Normal file
View File

@@ -0,0 +1,178 @@
# MacOS
.DS_Store
# ---> C++
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
# ---> Python
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
.pdm.toml
.pdm-python
.pdm-build/
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
# AI Artifacts
SUMMARY_*.md
implementation_plan.md
walkthrough.md
task.md

541
.vscode/c_cpp_properties.json vendored Normal file
View File

@@ -0,0 +1,541 @@
//
// !!! WARNING !!! AUTO-GENERATED FILE!
// PLEASE DO NOT MODIFY IT AND USE "platformio.ini":
// https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
//
{
"configurations": [
{
"name": "PlatformIO",
"includePath": [
"D:/Prod/firmware_adxl345_spi/include",
"D:/Prod/firmware_adxl345_spi/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/Update/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src",
"D:/Prod/firmware_adxl345_spi/lib/LiquidCrystal_I2C/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src",
"D:/Prod/firmware_adxl345_spi/lib/ArduinoThread",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/SD/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/FS/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src",
"D:/Prod/firmware_adxl345_spi/.pio/libdeps/freenove_esp32_s3_wroom/ArduinoJson/src",
"D:/Prod/firmware_adxl345_spi/lib/RTClib/src",
"D:/Prod/firmware_adxl345_spi/lib/Adafruit BusIO",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/newlib/platform_include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include/esp_additions/freertos",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/port/xtensa/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include/esp_additions",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/include/soc",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/include/soc/esp32s3",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/port/esp32s3",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/port/esp32s3/private_include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/heap/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/log/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/include/apps",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/include/apps/sntp",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/lwip/src/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/port/esp32/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/port/esp32/include/arch",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/soc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/soc/esp32s3",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/soc/esp32s3/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/hal/esp32s3/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/hal/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/hal/platform_port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rom/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rom/include/esp32s3",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rom/esp32s3",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_common/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_system/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_system/port/soc",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_system/port/public_compat",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/xtensa/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/xtensa/esp32s3/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/driver/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/driver/esp32s3/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_pm/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_ringbuf/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/efuse/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/efuse/esp32s3/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/vfs/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_wifi/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_event/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_netif/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_eth/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/tcpip_adapter/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_phy/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_phy/esp32s3/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_ipc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/app_trace/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_timer/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mbedtls/port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mbedtls/mbedtls/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mbedtls/esp_crt_bundle/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/app_update/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/spi_flash/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bootloader_support/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/nvs_flash/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/pthread/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_gdbstub/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_gdbstub/xtensa",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_gdbstub/esp32s3",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espcoredump/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espcoredump/include/port/xtensa",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wpa_supplicant/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wpa_supplicant/port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wpa_supplicant/esp_supplicant/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/ieee802154/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/console",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/asio/asio/asio/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/asio/port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/osi/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/include/esp32c3/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/api/include/api",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/btc/profile/esp/blufi/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/btc/profile/esp/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/host/bluedroid/api/include/api",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_common/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_common/tinycrypt/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core/storage",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/btc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/common/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/client/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/server/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api/core/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api/models/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/cbor/port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/unity/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/unity/unity/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/cmock/CMock/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/coap/port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/coap/libcoap/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/nghttp/port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/nghttp/nghttp2/lib/includes",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-tls",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-tls/esp-tls-crypto",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_adc_cal/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hid/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/tcp_transport/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_http_client/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_http_server/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_https_ota/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_https_server/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_lcd/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_lcd/interface",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protobuf-c/protobuf-c",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protocomm/include/common",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protocomm/include/security",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protocomm/include/transports",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mdns/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_local_ctrl/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/sdmmc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_serial_slave_link/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_websocket_client/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/expat/expat/expat/lib",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/expat/port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wear_levelling/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fatfs/diskio",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fatfs/vfs",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fatfs/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freemodbus/freemodbus/common/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/idf_test/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/idf_test/include/esp32s3",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/jsmn/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json/cJSON",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/libsodium/libsodium/src/libsodium/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/libsodium/port_include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mqtt/esp-mqtt/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/openssl/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/perfmon/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/spiffs/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/usb/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/ulp/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wifi_provisioning/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/rmaker_common/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_diagnostics/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/rtc_store/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_insights/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json_parser/upstream/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json_parser/upstream",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json_generator/upstream",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_schedule/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp_secure_cert_mgr/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rainmaker/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/gpio_button/button/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/qrcode/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/ws2812_led",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include/freertos",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/arduino_tinyusb/tinyusb/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/arduino_tinyusb/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_littlefs/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/tool",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/typedef",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/image",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/math",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/nn",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/layer",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/detect",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/model_zoo",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp32-camera/driver/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp32-camera/conversions/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/dotprod/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/support/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/support/mem/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/hann/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman_harris/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman_nuttall/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/nuttall/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/flat_top/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/iir/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/fir/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/add/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/sub/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/mul/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/addc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/mulc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/sqrt/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/mul/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/add/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/addc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/mulc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/sub/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/fft/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/dct/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/conv/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/common/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/mul/test/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/kalman/ekf/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/kalman/ekf_imu13states/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fb_gfx/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/qio_opi/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/cores/esp32",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/variants/esp32s3",
"D:/Prod/firmware_adxl345_spi/lib/Archiwum",
"D:/Prod/firmware_adxl345_spi/.pio/libdeps/freenove_esp32_s3_wroom/Adafruit BusIO",
"D:/Prod/firmware_adxl345_spi/.pio/libdeps/freenove_esp32_s3_wroom/RTClib/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/Insights/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/USB/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src",
""
],
"browse": {
"limitSymbolsToIncludedHeaders": true,
"path": [
"D:/Prod/firmware_adxl345_spi/include",
"D:/Prod/firmware_adxl345_spi/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/Update/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src",
"D:/Prod/firmware_adxl345_spi/lib/LiquidCrystal_I2C/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src",
"D:/Prod/firmware_adxl345_spi/lib/ArduinoThread",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/SD/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/FS/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src",
"D:/Prod/firmware_adxl345_spi/.pio/libdeps/freenove_esp32_s3_wroom/ArduinoJson/src",
"D:/Prod/firmware_adxl345_spi/lib/RTClib/src",
"D:/Prod/firmware_adxl345_spi/lib/Adafruit BusIO",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/newlib/platform_include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include/esp_additions/freertos",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/port/xtensa/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include/esp_additions",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/include/soc",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/include/soc/esp32s3",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/port/esp32s3",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/port/esp32s3/private_include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/heap/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/log/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/include/apps",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/include/apps/sntp",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/lwip/src/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/port/esp32/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/port/esp32/include/arch",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/soc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/soc/esp32s3",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/soc/esp32s3/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/hal/esp32s3/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/hal/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/hal/platform_port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rom/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rom/include/esp32s3",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rom/esp32s3",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_common/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_system/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_system/port/soc",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_system/port/public_compat",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/xtensa/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/xtensa/esp32s3/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/driver/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/driver/esp32s3/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_pm/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_ringbuf/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/efuse/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/efuse/esp32s3/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/vfs/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_wifi/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_event/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_netif/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_eth/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/tcpip_adapter/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_phy/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_phy/esp32s3/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_ipc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/app_trace/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_timer/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mbedtls/port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mbedtls/mbedtls/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mbedtls/esp_crt_bundle/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/app_update/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/spi_flash/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bootloader_support/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/nvs_flash/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/pthread/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_gdbstub/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_gdbstub/xtensa",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_gdbstub/esp32s3",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espcoredump/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espcoredump/include/port/xtensa",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wpa_supplicant/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wpa_supplicant/port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wpa_supplicant/esp_supplicant/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/ieee802154/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/console",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/asio/asio/asio/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/asio/port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/osi/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/include/esp32c3/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/api/include/api",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/btc/profile/esp/blufi/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/btc/profile/esp/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/host/bluedroid/api/include/api",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_common/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_common/tinycrypt/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core/storage",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/btc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/common/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/client/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/server/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api/core/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api/models/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/cbor/port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/unity/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/unity/unity/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/cmock/CMock/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/coap/port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/coap/libcoap/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/nghttp/port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/nghttp/nghttp2/lib/includes",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-tls",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-tls/esp-tls-crypto",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_adc_cal/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hid/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/tcp_transport/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_http_client/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_http_server/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_https_ota/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_https_server/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_lcd/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_lcd/interface",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protobuf-c/protobuf-c",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protocomm/include/common",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protocomm/include/security",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protocomm/include/transports",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mdns/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_local_ctrl/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/sdmmc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_serial_slave_link/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_websocket_client/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/expat/expat/expat/lib",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/expat/port/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wear_levelling/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fatfs/diskio",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fatfs/vfs",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fatfs/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freemodbus/freemodbus/common/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/idf_test/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/idf_test/include/esp32s3",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/jsmn/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json/cJSON",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/libsodium/libsodium/src/libsodium/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/libsodium/port_include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mqtt/esp-mqtt/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/openssl/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/perfmon/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/spiffs/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/usb/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/ulp/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wifi_provisioning/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/rmaker_common/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_diagnostics/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/rtc_store/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_insights/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json_parser/upstream/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json_parser/upstream",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json_generator/upstream",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_schedule/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp_secure_cert_mgr/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rainmaker/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/gpio_button/button/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/qrcode/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/ws2812_led",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include/freertos",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/arduino_tinyusb/tinyusb/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/arduino_tinyusb/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_littlefs/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/tool",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/typedef",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/image",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/math",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/nn",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/layer",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/detect",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/model_zoo",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp32-camera/driver/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp32-camera/conversions/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/dotprod/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/support/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/support/mem/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/hann/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman_harris/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman_nuttall/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/nuttall/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/flat_top/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/iir/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/fir/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/add/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/sub/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/mul/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/addc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/mulc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/sqrt/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/mul/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/add/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/addc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/mulc/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/sub/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/fft/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/dct/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/conv/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/common/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/mul/test/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/kalman/ekf/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/kalman/ekf_imu13states/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fb_gfx/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/qio_opi/include",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/cores/esp32",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/variants/esp32s3",
"D:/Prod/firmware_adxl345_spi/lib/Archiwum",
"D:/Prod/firmware_adxl345_spi/.pio/libdeps/freenove_esp32_s3_wroom/Adafruit BusIO",
"D:/Prod/firmware_adxl345_spi/.pio/libdeps/freenove_esp32_s3_wroom/RTClib/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/Insights/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/USB/src",
"C:/Users/rober/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src",
""
]
},
"defines": [
"PLATFORMIO=60119",
"ARDUINO_ESP32S3_DEV",
"ARDUINO_RUNNING_CORE=1",
"ARDUINO_EVENT_RUNNING_CORE=1",
"BOARD_HAS_PSRAM",
"ARDUINO_USB_MODE=0",
"ARDUINO_USB_CDC_ON_BOOT=0",
"BOARD_HAS_PSRAM",
"CORE_DEBUG_LEVEL=3",
"LOG_LOCAL_LEVEL=ESP_LOG_INFO",
"HAVE_CONFIG_H",
"MBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\"",
"UNITY_INCLUDE_CONFIG_H",
"WITH_POSIX",
"_GNU_SOURCE",
"IDF_VER=\"v4.4.7-dirty\"",
"ESP_PLATFORM",
"_POSIX_READER_WRITER_LOCKS",
"ARDUINO_ARCH_ESP32",
"ESP32",
"F_CPU=240000000L",
"ARDUINO=10812",
"ARDUINO_VARIANT=\"esp32s3\"",
"ARDUINO_BOARD=\"Freenove ESP32-S3 WROOM N8R8 (8MB Flash / 8MB PSRAM)\"",
"ARDUINO_PARTITION_default",
""
],
"cStandard": "gnu99",
"cppStandard": "gnu++11",
"compilerPath": "C:/Users/rober/.platformio/packages/toolchain-xtensa-esp32s3/bin/xtensa-esp32s3-elf-gcc.exe",
"compilerArgs": [
"-mlongcalls",
""
]
}
],
"version": 4
}

10
.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,10 @@
{
// See http://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"platformio.platformio-ide"
],
"unwantedRecommendations": [
"ms-vscode.cpptools-extension-pack"
]
}

44
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,44 @@
// AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY
//
// PlatformIO Debugging Solution
//
// Documentation: https://docs.platformio.org/en/latest/plus/debugging.html
// Configuration: https://docs.platformio.org/en/latest/projectconf/sections/env/options/debug/index.html
{
"version": "0.2.0",
"configurations": [
{
"type": "platformio-debug",
"request": "launch",
"name": "PIO Debug",
"executable": "D:/Prod/firmware_adxl345_spi/.pio/build/freenove_esp32_s3_wroom/firmware.elf",
"projectEnvName": "freenove_esp32_s3_wroom",
"toolchainBinDir": "C:/Users/rober/.platformio/packages/toolchain-xtensa-esp32s3/bin",
"internalConsoleOptions": "openOnSessionStart",
"preLaunchTask": {
"type": "PlatformIO",
"task": "Pre-Debug"
}
},
{
"type": "platformio-debug",
"request": "launch",
"name": "PIO Debug (skip Pre-Debug)",
"executable": "D:/Prod/firmware_adxl345_spi/.pio/build/freenove_esp32_s3_wroom/firmware.elf",
"projectEnvName": "freenove_esp32_s3_wroom",
"toolchainBinDir": "C:/Users/rober/.platformio/packages/toolchain-xtensa-esp32s3/bin",
"internalConsoleOptions": "openOnSessionStart"
},
{
"type": "platformio-debug",
"request": "launch",
"name": "PIO Debug (without uploading)",
"executable": "D:/Prod/firmware_adxl345_spi/.pio/build/freenove_esp32_s3_wroom/firmware.elf",
"projectEnvName": "freenove_esp32_s3_wroom",
"toolchainBinDir": "C:/Users/rober/.platformio/packages/toolchain-xtensa-esp32s3/bin",
"internalConsoleOptions": "openOnSessionStart",
"loadMode": "manual"
}
]
}

21
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,21 @@
{
"files.associations": {
"random": "cpp",
"array": "cpp",
"string_view": "cpp",
"initializer_list": "cpp",
"utility": "cpp",
"atomic": "cpp",
"deque": "cpp",
"string": "cpp",
"vector": "cpp",
"algorithm": "cpp",
"memory_resource": "cpp",
"memory": "cpp",
"fstream": "cpp",
"sstream": "cpp",
"stdexcept": "cpp",
"tuple": "cpp",
"type_traits": "cpp"
}
}

34
PREZENTACJA.md Normal file
View File

@@ -0,0 +1,34 @@
# Prezentacja Projektu: Moduł Mikrokontrolera ESP32 (Akwizycja Danych z ADXL345) - Wersja v1.3.4.1
## 1. Technologia
W mojej części aplikacji (firmware mikrokontrolera) wykorzystane zostały następujące technologie i narzędzia:
* **Sprzęt:** Płytka rozwojowa Freenove ESP32-S3 WROOM, zewnętrzny czujnik przyspieszenia/drgań ADXL345 (komunikacja przez szynę SPI), karta SD do lokalnego przechowywania danych.
* **Środowisko i Język:** PlatformIO (C++ dla środowiska Arduino).
* **Zarządzanie czasem i zadaniami:** Wykorzystanie biblioteki `ArduinoThread` do "pseudo-wielowątkowości" i cyklicznego wywoływania zadań (np. testów WiFi, sprawdzania trybu offline, pomiarów i uploadu) w głównej pętli `loop()` mikrokontrolera.
* **Komunikacja Sieciowa i API:**
* Wi-Fi (konfiguracja sieci wczytywana bezpośrednio z pliku `wifi.txt` zapisanego na karcie SD).
* Klient HTTP (REST API) implementujący uwierzytelnianie (Basic Auth) i przesyłanie plików.
* **Formatowanie danych:** `ArduinoJson` do parsowania ustawień konfiguracyjnych oraz tworzenia ładunków dla API.
## 2. Prezentacja działania
Moduł stanowi serce układu akwizycji pomiarowej. Poniżej główne założenia jego działania:
1. **Tryb Konfiguracji:** Podczas uruchamiania, urządzenie wczytuje poświadczenia docelowej sieci Wi-Fi bezpośrednio z pliku konfiguracyjnego `wifi.txt` umieszczonego na karcie SD. Pozwala to na szybką zmianę sieci bez konieczności rekonfiguracji przez webowy interfejs.
2. **Zbieranie danych z czujnika:** W głównej pętli (poprzez `ArduinoThread`) ze zdefiniowaną częstotliwością odpytywany jest czujnik ADXL345 przez szynę SPI, a surowe dane na temat drgań są gromadzone.
3. **Zapis na nośnik nielotny:** Zebrane pakiety danych są zrzucane w zoptymalizowany sposób do binarnych plików z rozszerzeniem `.wmt` na kartę pamięci SD.
4. **Zarządzanie Uploadem:** Dodatkowy obiekt typu `Thread` wewnątrz głównej pętli regularnie monitoruje kartę SD. Jeśli znajdzie zamknięte pliki `.wmt`, tymczasowo blokuje pętlę na czas wysyłania (aby zapobiec utracie pakietów), i nawiązuje połączenie z serwerem FastAPI w celu zrzucenia zebranych logów. Jeśli wystąpi błąd (np. brak sieci), pliki pozostają bezpieczne na karcie SD i proces powtarza się w kolejnym cyklu.
## 3. Problemy
Podczas realizacji tej części systemu napotkałem i musiałem rozwiązać szereg problemów:
* **Kolidowanie czasu rzeczywistego z operacjami sieciowymi:** Wysyłanie plików na serwer oraz zapis na SD jest operacją czasochłonną. W tej wersji, opartej na `ArduinoThread`, długotrwały upload blokuje główną pętlę, co wymusza przerwanie zbierania kolejnych próbek z akcelerometru na czas przesyłu danych z karty.
* **Watchdog Timeouts (WDT):** Długie operacje sieciowe wykonywane w jednym i tym samym głównym wątku często powodowały wyzwolenie sprzętowego Watchdoga i reset mikrokontrolera. Rozwiązaniem było odpowiednie dozowanie czasu, przerywanie operacji oraz dodawanie instrukcji "karmiących" (feed) systemowego watchdoga wewnątrz pętli wysyłającej pliki.
* **Autoryzacja (401 Unauthorized) z serwerem i bezpieczeństwo API:** Skonfigurowanie płynnego logowania i autoryzacji sprzętu, tak aby backend poprawnie weryfikował zgłaszający się po WiFi mikrokontroler przed odbiorem plików pomiarowych.
* **Problemy z odczytem konfiguracji z karty SD:** Konieczność zapewnienia poprawnego i niezawodnego odczytu oraz parsowania pliku `wifi.txt` w początkowej fazie rozruchu mikrokontrolera (zanim wystartują główne wątki sieciowe).
* **Zarządzanie pamięcią konfiguracyjną (EEPROM) (starsze wydania):** W poprzednich wersjach stare ustawienia i domyślne hasła ("wmt") często zostawały w pamięci nieulotnej po przeflashowaniu mikrokontrolera. Sprawiało to ogromne trudności z logowaniem, co wymusiło napisanie mechanizmu automatycznej migracji bazy konfiguracji podczas uruchamiania.
* **Brak elastyczności (hardkodowane adresy IP) (starsze wydania):** Częstym błędem we wcześniejszym kodzie było zaszywanie na sztywno adresów produkcyjnych (np. `62.93...`), co uniemożliwiało testowanie i wymuszało wgrywanie nowego oprogramowania w przypadku zmiany serwera testowego.
* **Problemy z modułem Captive Portal (starsze wydania):** Początkowo testowaliśmy autorskie podnoszenie sieci i konfigurację przez smartfon, jednak wbudowany serwer DNS często zawieszał się w nowych środowiskach, przez co ostatecznie w wersji obecnej (v1.3.4.1) zrezygnowaliśmy z tego na rzecz pliku na karcie SD.
## 4. Do zrobienia
* **Implementacja pełnego szyfrowania (HTTPS/SSL):** Zabezpieczenie ruchu do REST API z wykorzystaniem zaufanych lub wbudowanych certyfikatów na ESP32 (obecnie wymaga to odpowiednich optymalizacji pamięci).
* **Przejście na architekturę wielowątkową (FreeRTOS):** Ponieważ `ArduinoThread` blokuje główną pętlę pomiarową na czas uploadu, najpilniejszym krokiem do zrobienia będzie wyciągnięcie UploadManagera do osobnego, niezależnego Taska przypiętego do Core 0 mikrokontrolera ESP32 (rdzenia odpowiedzialnego za obsługę Wi-Fi).
* **Testy stresowe (długodystansowe):** Uruchomienie układu w warunkach symulujących środowisko docelowe bez przerwy przez klika tygodni, by zbadać stabilność alokacji pamięci przy odczycie dużych wolumenów i upewnić się o niezawodności struktury katalogów na karcie SD.
* **Dokładna synchronizacja czasu (RTC / NTP):** Integracja dokładnego mechanizmu czasu z siecią tak, by tworzone na karcie SD pliki miały zawsze poprawny i bardzo precyzyjny stempel czasowy, niezależnie od tego czy mikrokontroler miał pełny restet z odłączeniem baterii.

63679
Python3/00000002.csv Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

164
Python3/reader2.py Normal file
View File

@@ -0,0 +1,164 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Konwersja .wmt do JSON i csv
# 22.03.2026 LK
# python3 reader2.py '/Users/lklich/Desktop/Adam Błachowicz' -a -f -d <-wszystkie, +podfoldery, usuwa stare wmt
from __future__ import annotations
import argparse
import pathlib
import struct
import json
import pandas as pd
from datetime import datetime
from typing import Tuple, Dict, Any
HEADER_FMT = "<3sHHIII" # 19 B
HEADER_SIZE = struct.calcsize(HEADER_FMT)
SAMPLE_FMT = "<IBhhhB" # 12 B
SAMPLE_SIZE = struct.calcsize(SAMPLE_FMT)
def read_wmt_one(path: pathlib.Path) -> Tuple[pd.DataFrame, Dict[str, Any]]:
blob = path.read_bytes()
if len(blob) < HEADER_SIZE:
raise ValueError(f"{path.name}: plik zbyt krótki ({len(blob)} B).")
magic, version, headerSize, sampleSize, start_unix, reccount = struct.unpack_from(HEADER_FMT, blob, 0)
if magic != b"WMT":
raise ValueError(f"{path.name}: niepoprawny magic {magic!r}.")
dt_obj = datetime.fromtimestamp(start_unix)
start_time_pl = dt_obj.strftime("%d.%m.%Y %H:%M:%S")
start_time_iso = dt_obj.isoformat()
data = blob[headerSize:]
nrec = len(data) // SAMPLE_SIZE
meta = {
"filename": path.name,
"full_path": str(path.absolute()),
"wmt_version": version,
"start_unix": start_unix,
"start_time_iso": start_time_iso,
"start_time_pl": start_time_pl,
"declared_reccount": reccount,
"actual_reccount": nrec,
"is_incomplete": len(data) % SAMPLE_SIZE != 0
}
rows = []
off = 0
for _ in range(nrec):
rec = data[off:off+SAMPLE_SIZE]
offset_us, sensor_id, x, y, z, ready = struct.unpack(SAMPLE_FMT, rec)
unix_ts = start_unix + (offset_us / 1_000_000.0)
rows.append((start_unix, offset_us, unix_ts, sensor_id, x, y, z, int(ready)))
off += SAMPLE_SIZE
df = pd.DataFrame(rows, columns=["start_unix", "offset_us", "unix_ts", "sensor_id", "x", "y", "z", "ready"])
df = df.astype({"sensor_id": "int32", "x": "int32", "y": "int32", "z": "int32", "ready": "int32"})
return df, meta
def save_outputs(df: pd.DataFrame, base_path: pathlib.Path, meta: Dict[str, Any], no_header: bool, suffix: str):
csv_path = base_path.with_suffix(suffix)
json_path = base_path.with_suffix(".json")
with open(csv_path, 'w', encoding='utf-8') as f:
f.write(f"# Plik: {meta.get('filename', 'N/A')}\n")
f.write(f"# Wersja WMT: {meta.get('wmt_version', 'N/A')}\n")
f.write(f"# Start: {meta.get('start_time_pl', 'N/A')} (Unix: {meta.get('start_unix', 0)})\n")
f.write(f"# Rekordy: {meta.get('actual_reccount', 0)}\n")
df.to_csv(f, index=False, header=not no_header)
with open(json_path, 'w', encoding='utf-8') as f:
json.dump(meta, f, indent=4, ensure_ascii=False)
def main():
ap = argparse.ArgumentParser(description="Konwersja .wmt -> CSV + JSON.")
ap.add_argument("input", help="Ścieżka do pliku lub katalogu")
ap.add_argument("-a", "--all", action="store_true", help="Przetwarzaj wszystkie pliki .wmt w katalogu")
ap.add_argument("-f", "--recursive", action="store_true", help="Przeszukuj podfoldery (wymaga -a)")
ap.add_argument("-o", "--overwrite", action="store_true", help="Nadpisuj istniejące pliki wyjściowe")
ap.add_argument("-d", "--delete", action="store_true", help="USUŃ plik .wmt po udanej konwersji")
ap.add_argument("--out-suffix", default=".csv", help="Sufiks CSV")
ap.add_argument("--concat", action="store_true", help="Scal dane do jednego pliku")
ap.add_argument("--no-header", action="store_true", help="CSV bez nagłówka kolumn")
args = ap.parse_args()
input_path = pathlib.Path(args.input)
files_to_process = []
if args.all:
if not input_path.is_dir():
print(f"[ERROR] Ścieżka {input_path} nie jest katalogiem!")
return
files_to_process = sorted(list(input_path.rglob("*.wmt") if args.recursive else input_path.glob("*.wmt")))
else:
if input_path.is_dir():
print(f"[ERROR] Podano katalog, ale brakuje -a.")
return
files_to_process = [input_path]
if not files_to_process:
print(f"[INFO] Brak plików do przetworzenia.")
return
dfs = []
combined_meta = []
successfully_processed = []
for p in files_to_process:
csv_check = p.with_suffix(args.out_suffix)
json_check = p.with_suffix(".json")
if not args.overwrite and not args.concat:
if csv_check.exists() or json_check.exists():
print(f"[SKIP] Pominięto {p.name} - pliki wyjściowe już istnieją.")
continue
try:
df, meta = read_wmt_one(p)
if args.concat:
df["_source_path"] = str(p.relative_to(input_path))
dfs.append(df)
combined_meta.append(meta)
successfully_processed.append(p)
else:
save_outputs(df, p, meta, args.no_header, args.out_suffix)
print(f"Przetworzono: {p.name}")
if args.delete:
p.unlink()
print(f" [DEL] Usunięto plik źródłowy: {p.name}")
except Exception as e:
print(f"[ERROR] Błąd w pliku {p.name}: {e}")
# Obsługa zapisu zbiorczego (concat)
if args.concat and dfs:
out_base = input_path / input_path.name if input_path.is_dir() else files_to_process[0]
big_df = pd.concat(dfs, ignore_index=True)
meta_summary = {
"description": "Scalony zestaw danych",
"files_count": len(combined_meta),
"sources": combined_meta
}
try:
save_outputs(big_df, out_base, meta_summary, args.no_header, args.out_suffix)
print(f"\nZapisano scalone dane do {out_base.with_suffix(args.out_suffix)}")
# Usuwamy pliki źródłowe dopiero po udanym scaleniu
if args.delete:
for p in successfully_processed:
p.unlink()
print(f" [DEL] Usunięto {len(successfully_processed)} plików źródłowych po scaleniu.")
except Exception as e:
print(f"[ERROR] Błąd zapisu pliku scalonego: {e}")
if __name__ == "__main__":
main()

154
Python3/test1.py Normal file
View File

@@ -0,0 +1,154 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
wmt_reader.py — parser plików .wmt z nagłówkiem WMT i eksport do CSV
Nagłówek (packed, little-endian; 19 B):
char[3] magic // "WMT"
uint16 version
uint16 headerSize // rozmiar nagłówka w bajtach (powinno być 19)
uint32 sampleSize // rozmiar rekordu Sample (powinno być 11)
uint32 timestamp // Unix time startu akwizycji
uint32 reccount // liczba rekordów w pliku
Rekord Sample (packed, little-endian; 11 B):
int32 ident
int16 x, y, z
bool ready // 1 bajt
Wymagania:
- Czytaj .wmt i zapisuj CSV.
- Kolumny x,y,z mają być typu całkowitego (nie skalujemy tych wartości ani ich nie modyfikujemy).
- Opcjonalnie można dodać kolumny x_g,y_g,z_g poprzez --range-g (x,y,z pozostają bez zmian).
"""
from __future__ import annotations
import argparse
import struct
import pathlib
import pandas as pd
# ------------------------------ Format pliku ----------------------------------
HEADER_FMT = "<3sHHIII" # magic(3s), version(H), headerSize(H), sampleSize(I), timestamp(I), reccount(I)
HEADER_SIZE = struct.calcsize(HEADER_FMT) # oczekiwane 19
# Nowy rekord Sample: ident(int32), x(int16), y(int16), z(int16), ready(bool-1B)
SAMPLE_FMT = "<ihhh?" # 4 + 2 + 2 + 2 + 1 = 11 B
SAMPLE_SIZE_EXPECTED = struct.calcsize(SAMPLE_FMT) # 11
# --------------------------------- I/O ---------------------------------------
def read_wmt(path: str) -> pd.DataFrame:
"""
Wczytuje plik .wmt (z nagłówkiem WMT) do DataFrame.
Kolumny: timestamp, ident, x, y, z, ready
Gwarantujemy, że x,y,z są typu całkowitego (int32 w DataFrame), bez skalowania.
"""
p = pathlib.Path(path)
blob = p.read_bytes()
# --- Nagłówek ---
if len(blob) < HEADER_SIZE:
raise ValueError(f"{p.name}: za krótki nagłówek ({len(blob)} B).")
magic, version, headerSize, sampleSize, start_unix, reccount = struct.unpack_from(HEADER_FMT, blob, 0)
if magic != b"WMT":
raise ValueError(f"{p.name}: nieprawidłowa sygnatura magic={magic!r} (oczekiwano b'WMT').")
if headerSize != HEADER_SIZE:
# Tolerujemy różnicę, ale ostrzegamy; dalej użyjemy headerSize jako offsetu danych
print(f"[WARN] {p.name}: headerSize={headerSize}, spodziewano {HEADER_SIZE}.")
if sampleSize != SAMPLE_SIZE_EXPECTED:
raise ValueError(f"{p.name}: sampleSize={sampleSize}, oczekiwano {SAMPLE_SIZE_EXPECTED} (nowy format Sample=11B).")
# --- Dane rekordów ---
data_off = headerSize # początek rekordów wg nagłówka
if len(blob) < data_off:
raise ValueError(f"{p.name}: uszkodzony headerSize={headerSize} (większy niż plik).")
data = blob[data_off:]
if len(data) % sampleSize != 0:
# to nie musi być błąd krytyczny (np. przerwany zapis), ale ostrzeżmy
print(f"[WARN] {p.name}: długość danych {len(data)} nie jest wielokrotnością sampleSize={sampleSize}.")
nrec = len(data) // sampleSize
if reccount and reccount != nrec:
print(f"[INFO] {p.name}: reccount w nagłówku = {reccount}, policzone rekordy = {nrec}.")
rows = []
off = 0
for _ in range(nrec):
rec = data[off:off + sampleSize]
ident, x, y, z, ready = struct.unpack(SAMPLE_FMT, rec)
rows.append((
start_unix, # timestamp startu akwizycji z nagłówka
ident, x, y, z,
bool(ready),
))
off += sampleSize
df = pd.DataFrame(
rows,
columns=["timestamp", "ident", "x", "y", "z", "ready"]
)
# Wymuszenie typu całkowitego dla x,y,z bez zmiany wartości
df = df.astype({"x": "int32", "y": "int32", "z": "int32", "ident": "int32"})
# ready pozostaje bool
return df
# ---------------------------- Konwersja do jednostek g ------------------------
def to_g(df: pd.DataFrame, range_g: float) -> pd.DataFrame:
"""
Konwersja int -> g przy założeniu: Q = 32768 / range_g => g = value / Q
(Dopisuje kolumny x_g,y_g,z_g; NIE modyfikuje x,y,z.)
"""
if range_g is None or range_g <= 0:
raise ValueError("range_g musi być dodatni (np. 2, 4, 8, 16).")
q = 32768.0 / float(range_g)
out = df.copy()
out["x_g"] = out["x"] / q
out["y_g"] = out["y"] / q
out["z_g"] = out["z"] / q
return out
# -------------------------------------- CLI ----------------------------------
def main() -> None:
ap = argparse.ArgumentParser(description="Czytaj pliki .wmt (WMT, Sample 11B) i eksportuj do CSV.")
ap.add_argument("inputs", nargs="+", help="Ścieżki do plików .wmt (jeden lub wiele).")
ap.add_argument("--range-g", type=float, default=None,
help="Jeśli podasz (np. 2,4,8,16), doda kolumny x_g,y_g,z_g (x,y,z pozostają całkowite).")
ap.add_argument("--out-suffix", default=".csv",
help="Sufiks wyjściowy (domyślnie .csv).")
ap.add_argument("--concat", action="store_true",
help="Jeśli ustawione, łączy wszystkie wejścia w JEDEN plik wynikowy (pierwszy.EXT).")
ap.add_argument("--no-header", action="store_true",
help="Zapisz CSV bez nagłówka.")
args = ap.parse_args()
dfs = []
for in_path in args.inputs:
df = read_wmt(in_path)
if args.range_g is not None:
df = to_g(df, args.range_g)
if args.concat:
df["_source"] = str(pathlib.Path(in_path).name)
dfs.append(df)
else:
out_path = str(pathlib.Path(in_path).with_suffix(args.out_suffix))
df.to_csv(out_path, index=False, header=not args.no_header)
print(f"Zapisano {out_path} ({len(df)} rekordów)")
if args.concat and dfs:
out_path = str(pathlib.Path(args.inputs[0]).with_suffix(args.out_suffix))
big = pd.concat(dfs, ignore_index=True)
big.to_csv(out_path, index=False, header=not args.no_header)
print(f"Zapisano scalony {out_path} ({len(big)} rekordów z {len(dfs)} plików)")
if __name__ == "__main__":
main()

30
Python3/test_adxl.py Normal file
View File

@@ -0,0 +1,30 @@
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# Wczytanie danych z pominięciem komentarzy (pierwsze 4 linie)
df = pd.read_csv('00000002.csv', comment='#')
# Obliczenie magnitudy
df['magnitude'] = np.sqrt(df['x']**2 + df['y']**2 + df['z']**2)
# Przeliczenie czasu na względny (od 0)
start_time = df['unix_ts'].min()
df['relative_time'] = df['unix_ts'] - start_time
# Tworzenie wykresu
fig, ax = plt.subplots(figsize=(12, 6))
for sensor_id in sorted(df['sensor_id'].unique()):
sensor_data = df[df['sensor_id'] == sensor_id]
ax.plot(sensor_data['relative_time'], sensor_data['magnitude'],
label=f'Sensor {sensor_id}', linewidth=0.8, alpha=0.8)
ax.set_xlabel('Czas [s] (od startu)')
ax.set_ylabel('Magnituda (jednostki surowe)')
ax.set_title('Porównanie magnitudy przyspieszenia (Sensor 0 vs Sensor 1)')
ax.legend()
ax.grid(True, linestyle='--', alpha=0.7)
plt.tight_layout()
plt.savefig('magnitude_comparison.png')

110
Python3/wmt_reader.py Normal file
View File

@@ -0,0 +1,110 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Konwerter .wmt (nowy format próbek 12 B) -> CSV.
# python3 wmt_reader.py '/Users/katalog/00000001.wmt' -a -f -d <-wszystkie, +podfoldery, usuwa stare wmt
Plik .wmt:
Header (packed LE, 19 B):
char[3] magic="WMT"
uint16 version
uint16 headerSize
uint32 sampleSize (oczekiwane 12)
uint32 timestamp (Unix start akwizycji, sekundy)
uint32 reccount (liczba rekordów; może być 0)
Sample (packed LE, 12 B):
uint32 offset_us (µs od startu akwizycji)
uint8 sensor_id (0..6)
int16 x, y, z
uint8 ready (0/1)
CSV:
start_unix, offset_us, unix_ts, sensor_id, x, y, z, ready
"""
from __future__ import annotations
import argparse
import pathlib
import struct
import pandas as pd
from datetime import datetime
HEADER_FMT = "<3sHHIII" # 19 B
HEADER_SIZE = struct.calcsize(HEADER_FMT)
SAMPLE_FMT = "<IBhhhB" # 12 B: u32, u8, i16, i16, i16, u8
SAMPLE_SIZE = struct.calcsize(SAMPLE_FMT) # 12
def read_wmt_one(path: str) -> pd.DataFrame:
p = pathlib.Path(path)
blob = p.read_bytes()
if len(blob) < HEADER_SIZE:
raise ValueError(f"{p.name}: plik zbyt krótki ({len(blob)} B).")
magic, version, headerSize, sampleSize, start_unix, reccount = struct.unpack_from(HEADER_FMT, blob, 0)
if magic != b"WMT":
raise ValueError(f"{p.name}: niepoprawny magic {magic!r} (oczekiwano b'WMT').")
if sampleSize != SAMPLE_SIZE:
raise ValueError(f"{p.name}: sampleSize={sampleSize}, oczekiwano {SAMPLE_SIZE} (obsługiwany jest TYLKO nowy format 12 B).")
if len(blob) < headerSize:
raise ValueError(f"{p.name}: headerSize={headerSize} większy niż rozmiar pliku.")
# Wyświetlenie informacji o nagłówku
start_time = datetime.fromtimestamp(start_unix)
print(f"\n=== Plik: {p.name} ===")
print(f"Czas rozpoczęcia akwizycji: {start_time} (Unix: {start_unix})")
print(f"Liczba próbek zadeklarowana w nagłówku: {reccount}")
data = blob[headerSize:]
if len(data) % SAMPLE_SIZE != 0:
print(f"[WARN] {p.name}: długość danych {len(data)} nie jest wielokrotnością {SAMPLE_SIZE} (plik może być niepełny).")
nrec = len(data) // SAMPLE_SIZE
if reccount and reccount != nrec:
print(f"[INFO] {p.name}: reccount={reccount}, policzono={nrec}.")
else:
print(f"Policzono faktyczną liczbę próbek: {nrec}")
rows = []
off = 0
for _ in range(nrec):
rec = data[off:off+SAMPLE_SIZE]
offset_us, sensor_id, x, y, z, ready = struct.unpack(SAMPLE_FMT, rec)
unix_ts = start_unix + (offset_us / 1_000_000.0) # sekundy z ułamkiem
rows.append((start_unix, offset_us, unix_ts, sensor_id, x, y, z, int(ready)))
off += SAMPLE_SIZE
df = pd.DataFrame(rows, columns=["start_unix", "offset_us", "unix_ts", "sensor_id", "x", "y", "z", "ready"])
df = df.astype({"sensor_id": "int32", "x": "int32", "y": "int32", "z": "int32", "ready": "int32"})
return df
def main():
ap = argparse.ArgumentParser(description="Konwersja .wmt (nowy format 12 B) -> CSV.")
ap.add_argument("inputs", nargs="+", help="Ścieżki do plików .wmt")
ap.add_argument("--out-suffix", default=".csv", help="Sufiks wyjściowy (domyślnie .csv)")
ap.add_argument("--concat", action="store_true", help="Scal wszystkie wejścia do jednego CSV (na bazie pierwszego pliku)")
ap.add_argument("--no-header", action="store_true", help="Zapisz CSV bez nagłówka")
args = ap.parse_args()
dfs = []
for in_path in args.inputs:
df = read_wmt_one(in_path)
if args.concat:
df["_source"] = str(pathlib.Path(in_path).name)
dfs.append(df)
else:
out_path = str(pathlib.Path(in_path).with_suffix(args.out_suffix))
df.to_csv(out_path, index=False, header=not args.no_header)
print(f"Zapisano {out_path} ({len(df)} rekordów)")
if args.concat and dfs:
out_path = str(pathlib.Path(args.inputs[0]).with_suffix(args.out_suffix))
big = pd.concat(dfs, ignore_index=True)
big.to_csv(out_path, index=False, header=not args.no_header)
print(f"\nZapisano scalony {out_path} ({len(big)} rekordów z {len(dfs)} plików)")
if __name__ == "__main__":
main()

115
README.md Normal file
View File

@@ -0,0 +1,115 @@
# Urzędzenie do pomiaru drgań (akcelerometry)
*autorzy: A. Chmielowiec, L. Klich*
Firmware do urządzenia ESP32S3 PSRAM.
## Przyciski
- UP: przełączanie trybu
- START: start pomiaru
- DOWN: konfiguracja pomiaru
Przy starcie:
- UP + DOWN: reset do ustawień domyślnych
- OK: ustawienie daty i godziny
**Zapraszamy studentów do rozwijania projektu.**
IDE: PlatformIO
## Jak student może się zaangażować w projekt?
- Zaprojektowanie obudowy w 3D dla urządzenia i czujników.
- Budowanie urządzeń prototypowych wg dokumentacji.
- Testowanie działania i zgłaszanie błędów.
- Rozwijanie dokumentacji.
- Rozwijanie firmware urządzenia.
- **Stworzenie oprogramowania WEB i REST API do akwizycji danych, filtrowania, wyświetlania i analizy danych z urządzenia.**
## Założenia do projektu
- Pomiar drgań przy pomocy akcelerometrów (moduły ADXL345) podłączone przez SPI.
- Automatyczne wykrywanie podłączonych akcelerometrów (maksymalnie 4 ze wzlędu na brak GPIO, docelowo więcej).
- Jednoczesny pomiar próbki z każdego podłączonego akcelerometru i zapis do bufora PSRAM, po zakończeniu akwizycji na kartę SD.
- Każda partia pomiaru składa się z wielu próbek (szybkość zależna od ilości podłączonych).
- Pomiar o konfigurowalnym czasie próbkowania (domyśłnie 5 sekund).
- Pomiar zapisywany do pliku binarnego na karcie SD.
Karta musi być sformatowana w systemie FAT. Foldery są automatycznie tworzone i nazywane numerami (1, 2, 3, etc).
W każdym folderze zapisywane są binarne pliki odczytów nazwie xxxxxxx.wmt, na przykład 00000001.wmt, gdzie numer oznacza numer kolejnego pomiaru. W każdym pliku zapisany jest pełen pomiar, tzn x sekund (czas pomiaru) ze wszystkich podłączonych akcelerometrów. Jeśli ilość plików w folderze przekroczy 400, tworzony jest koleny folder o wyższym numerze i urządzenie zapisuje w nim pliki zaczynająć od 00000001.wmt. Po restarcie urządzenia karta SD jest skanowana i urządzenie kontynuuje zapis wg ciągłości numeracji. Zawartość karty SD na rysunku poniżej.
| ![Opis](docs/images/sd_content1.png) |
|:--:|
| **Rysunek 1.** Zawartość katalogów na karcie SD |
| ![Opis](docs/images/sd_content2.png) |
|:--:|
| **Rysunek 1.** Zawartość plików w katalogu na karcie SD |
# Hardware
ESP32-S3-DEV-KIT-N8R8 - płytka rozwojowa WiFi + Bluetooth - Waveshare 24243 Indeks: WSR-23341
cena brutto: 49,90 zł. (Botland)
Kompaktowa płytka rozwojowa, z modułem ESP32-S3-WROOM-1-N8R8 od firmy Waveshare. Posiada dwurdzeniowy procesor Xtensa 32-bit LX7 (240 MHz), 512 KB SRAM, 8 MB Flash oraz 8 MB PSRAM. Zintegrowane układy CH343 i CH334 umożliwiają programowanie przez USB-C. To narzędzie zapewnia efektywność i wygodę w procesie rozwoju aplikacji dla ESP32-S3.
| ![Opis](docs/images/esp32s3_1.png) |
|:--:|
| **Rysunek 1.** Moduł deweloperski ESP32S3 |
## Specyfikacja techniczna
* Wbudowany układ: ESP32-S3-WROOM-1-N8R8
Procesor: dwurdzeniowy procesor Xtensa LX7 o częstotliwości 240 MHz
* PSRAM 8 MB (zewnętrzna pamięć pseudo-RAM do buforowania)
* SRAM (internal) 512 KB
* Flash 8 MB
* GPIO ~44 GPIO (przy PSRAM nie wszystkie dostępne fizycznie)
* Interfejsy: SPI (dostępne 2), I2C (2), UART (3), I2S
* USB-CDC (native USB) USB typu C
* WiFi 802.11 b/g/n (2.4 GHz)
* Bluetooth LE v5.0
* Kompatybilność: ESP-IDF, Arduino, MicroPython
* Wymiary: 63,3 x 25,4 mm
| ![Opis](docs/images/esp32s3_2.jpeg) |
|:--:|
| **Rysunek 1.** Pinout modułu ESP32S3 |
## Uzasadnienie wyboru hardware
**Testowałem**: Raspberry PI 4 (za duży jitter), Raspberry PICO 2 W, STM32F429
1. PSRAM 8MB - buforowanie dużych ilości danych z 8xADXL345 w blokach, zanim zapiszę karcie SD. Dzięki temu główna pamięć RAM jest nieprzeciążana.
2. Dwa interfejsy SPI. VSPI dla ADXL345 (8x czujników, przełączanych CS). HSPI dla karty SD — separacja magistrali dla stabilnej pracy obu urządzeń.
3. Procesor Xtensa LX7 Dual Core umożliwia obsługę intensywnych zadań SPI i SD w czasie rzeczywistym.
4. ESP32-S3 nie ma wbudowanego RTC, zastosowałem precyzyjny kompensowany temperaturowo RTC DS3231 przez I2C.
5. OLED Display 128x64 podłączony przez I2C.
### Wady i ograniczenia ESP32
* Niekorzystne GPIO: część portów GPIO jest współdzielona z FLASH i PSRAM. Np. GPIO19/20 (USB), GPIO35-37 (PSRAM) są zajęte. Trzeba uważać przy pinout (SD/ADXL/OLED).
* Brak RTC z podtrzymaniem.
* SPI throughput SD: moliwe ograniczenie prędkości SD na SPI poniewa brak jest SDIO jak w STM32. Ale dla dużych bloków buforowanych w PSRAM jest ok.
* Potencjalne problemy z przerwaniami SPI: nie można mieszać przerwań w czasie zapisu SD i odczytu ADXL — trzeba dobrze zsynchronizować próbki.
* Średnia energooszczędność: przy rejestratorach zasilanych bateryjnie lepszy byłby ESP32-C3 lub STM32L4, ale one nie mają PSRAM.
## Linki do dokumentacji:
1. [Objaśnienia](docs/abbreviations.md)
3. [Pinout](docs/pinout.md)
4. [Wyświetlacz LCD](docs/lcd.md)
5. [Akcelerometr](docs/gy291.md)
6. [Zegar RTC](docs/ds3231.md)
7. [Wymiary elementów](docs/sizes.md)
8. [Budowa](docs/building1.md)
9. [Wtyczka i czujnik](docs/plug.md)
[Wersje systemu, poprawki, etc.](docs/versions.md)

40
docs/abbreviations.md Normal file
View File

@@ -0,0 +1,40 @@
# Skróty, definicje, wyjaśnienia
## Deterministyczność
W kontekście systemów wbudowanych i systemów czasu rzeczywistego deterministyczność oznacza, że system jest deterministyczny, jeśli dla określonego zdarzenia wejściowego lub określonego punktu w czasie jego czas reakcji jest przewidywalny, policzalny oraz ma znane górne ograniczenie. Nie chodzi o średni czas działania, lecz o maksymalne możliwe opóźnienie, które da się zagwarantować.
## Deterministyczność nie jest binarna, bowiem można wyodrębnić
- systemy hard real-time opóźnienia gwarantowane i policzalne;
- miękkie real-time (soft) działa na czas, ale bez twardej gwarancji;
- systemy nierzeczywiste (non-real-time) czyli jak się uda.
## Mikrokontrolery vs np. Raspberry Pi (system operacyjny)
Typowy mikrokontroler to kod + przerwania, albo z RTOS-em (np. FreeRTOS z priorytetami i schedulerem real-time). Nie ma tutaj dużego systemu operacyjnego, czyli brak jest setek procesów, demona logowania, schedulerów, itd. Posiada prosty model pamięci, brak stronicowania, czyli brak jest źródeł losowych opóźnień. Mozna użyć sprzętowych timerów, które dokładnie co np. 100 us uruchomią przerwanie. i w tym przerwaniu odczytają SPI (najlepiej przez DMA). Jitter jest mały i przewidywalny, rzędu kilk czy kilkunastu cykli zegara (plus to, co narzuca magistrala i obsługa przerwań). Da się to policzyć lub oszacować górne ograniczenie. Mikrokontroler też nie jest idealnie deterministyczny, ale jest wystarczająco deterministyczny i da się wyznaczyć maksymalny błąd czasowy. Z tego powodu wystarczy policzyć odstęp pomiędzy próbkami i umieścić je w pliku wynikowym, co będzie przydatne podczas analizy danych.
## jitter
Jitter to nieregularność czasowa wykonywania zdarzeń w systemie, czyli odchylenie rzeczywistych momentów wykonania od idealnie równych odstępów czasowych, jakie były zaplanowane. Można to rozumieć jako zmienność okresu lub opóźnienia względem wartości oczekiwanej:
*jitter(t)=Trzeczywisty(t)Tidealny(t)*
gdzie:
*Tidealny* to — nominalny okres zdarzenia,
*Trzeczywisty* — rzeczywisty odstęp między kolejnymi zdarzeniami (próbkami, sygnałami, reakcjami).
Jitter mozna rozumieć jako "rozjeżdżanie się" timingu zdarzeń z ich idealnego harmonogramu. W konsekwencji nawet jeśli średnia częstotliwość lub średni czas reakcji jest poprawny, jitter oznacza błędy czasowe, które mogą psuć akwizycję danych. W praktyce każy system system posiada jakiś jitter — chodzi jednak o to, że jitter ma granicę, którą powinniśmy znać i możemy zaprojektować system tak, aby na nią reagować i aby wartość jittera była akceptowalna.
**Przykład dla naszego systemu:**
- Próbkujemy akcelerometr co 1000 us;
- Oczekiwany odstęp: 1000 us;
- Faktycznie mierzone odstępy: 1000 us, 1002 us, 997 us, 1008 us, czyli jitter to około 8 us;
- Średnia to nadal ~1000 us, ale próbki zebrane nie są równomiernie w czasie.
**Dlaczego jitter nam przeszkadza?**
- Ponieważ pogarsza jakość FFT (Fast Fourier Transform, czyli Szybkiej Transformaty Fouriera) i analizy drgań ze względu na niejednakowy krok czasowy. Może to w konsekwencji prowadzić do niestabilności w systemach sterowania, powodować błędy w pomiarach sygnałów.

Binary file not shown.

165
docs/building1.md Normal file
View File

@@ -0,0 +1,165 @@
# Budowa urządzenia - obudowa
[Pobierz plik wzorca front DXF](files/front_panel.dxf)
[Pobierz plik wzorca front CDR](files/front_panel.cdr)
[Pobierz plik wzorca tył DXF](files/back_panel.dxf)
[Pobierz plik wzorca tył CDR](files/back_panel.cdr)
## Panel czołowy urządzenia
1. Nawiercić otwory na wyświetlacz LCD, przyciski i diody LED zdognie z wzorcem.
2. Wklej wyświetlacz LCD (użyłem kleju dwuskłądnikowego + kleju na gorąco). Pamiętaj, aby zdjąć folię zabezpieczającą z ekranu. Jeśli nie wiesz, gdzie jest góra/dół wyświetlacza, to podejrzyj napisy - zgopdnie z napisami na PCB wyświetlacza.
3. Przykręć przyciski i wsuń diody LED i zabezpiecz je klejem na gorąco.
| ![Opis](images/krad1.png) |
|:--:|
| **Rysunek 1.** Panel czołowy obudowy - wymiary |
| ![Opis](images/wzor1.jpeg) |
|:--:|
| **Rysunek 2.** Nawiercone otwory wg wzorca |
| ![Opis](images/front1.jpeg) |
|:--:|
| **Rysunek 3.** Gotowy panel przedni - front |
| ![Opis](images/front2.jpeg) |
|:--:|
| **Rysunek 4.** Gotowy panel przedni - tył |
Pamiętaj, że katoda (minus) to krótsza nóżka diody.
| ![Opis](images/led1.png) |
|:--:|
| **Rysunek 5.** Dioda LED - oznaczenia |
## Opis przewodów - przyciski - UWAGA!
**Przede wszystkikm należy przylutować i podłączyć przyciski** na pinach GPIO5 (górny), GPIO6 (środkowy) i GPIO7 (dolny), ponieważ posiadają one rezystory podciągające PULLUP do 3.3V. Jeśli nie zrobisz tego teraz, to podczas testów innych elkementów czasem może powstać pętla restartu i system nie uruchomi się. Co prawda przyciski są zainicjowane w setup() jako INPUT_PULLUP, ale wewnętrzne rezystory w MCU mają dość wysoką wartość i system może wykrywać niepodłączone GPIO tych przycisków jako wciśnięte i generować błędy.
Każdy z przycisków posiada jeden z pinów podłączony do masy. Do drugiego pinu przylutowany jest przewód do mikrokontrolera oraz dodatkowo połączenie przez rezystor 10 kΩ do +3.3V (PULL UP).
- **szary**: przycisk (środkowy OK) - do GPIO6 i do rezystora, zaś rezystor do padu 3.3V
- **czerwony**: przycisk (górny UP) - do GPI7 i do rezystora, zaś rezystor do padu 3.3V
- **niebieski**: przycisk (dolny DOWN) - do GPIO5 i do rezystora, zaś rezystor do padu 3.3V
## Opis przewodów - wyświetlacz:
- **żółty**: LED +3.3V
- **biały**: Zasilanie +5V
- **czarny**: masa (wspólna)
- **niebieski**: I2C SDA
- **szary**: I2C SCL
| ![Opis](images/front3.jpeg) |
|:--:|
| **Rysunek 6.** Zlutowany panel przedni |
Pamiętaj, że katoda (minus) to krótsza nóżka diody.
## Panel tylny urządzenia
| ![Opis](images/back1.jpeg) |
|:--:|
| **Rysunek 7.** Dioda LED - oznaczenia |
| ![Opis](images/back2.jpeg) |
|:--:|
| **Rysunek 8.** Dioda LED - oznaczenia |
## Lutowanie
1. Lutujemy wszystkie piny 2 gniazd akcelerometrów i łączymy do - (minus) przetwornic oraz do pinu 3 gdiazda zasilania.
2. Lutujemy wszystkie piny 1 gniazd akcelerometrów i łączymy do + (plus) przetwornic oraz do jednego z pinów włącznika zasilania.
3. Lutujemy drugi pin włącznika zasilania do pinu 1 gniazda zasilania (+).
## Pinout gniazda modułów akcelerometrów
1. +5V - to podłączamy na tym etapie (biały)
2. masa - to podłączamy na tym etapie (czarny)
3. MOSI (SDA) (łączymy wszystkie ze sobą) - GPIO11 (niebieski)
4. MISO (SD0) (łączymy wszystkie ze sobą) - GPIO13 (czerwony)
5. SCLK (SCL) (łączymy wszystkie ze sobą) - GPIO12 (żółty)
6. SS (każdy oddzielnie do MCU) - GPIO9, GPIO10, GPIO14, GPIO21 (szary)
## Pinout gniazda zasilania
1. plus (+) zasilanie 9-28V
3. masa
Przetwornice można przykleić klejem na gorąco. Obie przetwornice są skalibrowane na około 5.02 V napięcia wyjściowego.
| ![Opis](images/back4.jpeg) |
|:--:|
| **Rysunek 9.** Panel tylny z podłaczonym zasilaniem |
Piny gniazda: 3 (MOSI), 4 (MISO) oraz 5 (SCK) łączymy ze sobą i wyprowadzamy do mikrokontrolera. Pin 6 z każdego gniazda to sygnał SS, podłączany bezpoiśrednio do mikrokontrolera (szary).
| ![Opis](images/back5.jpeg) |
|:--:|
| **Rysunek 10.** Skończony panel tylny z podłączonym SPI |
## Koniec etapu - panele tylny i przedni
| ![Opis](images/finish_panel1.jpeg) |
|:--:|
| **Rysunek 11.** Panele umieszczone w obudowie |
| ![Opis](images/finish_panel2.jpeg) |
|:--:|
| **Rysunek 12.** Panele umieszczone w obudowie |
# Podłączenie wyświetlacza
| ![Opis](images/lcdi2c2.png) |
|:--:|
| **Rysunek 13.** Wyświeltacz LCD |
| ![Opis](images/lcdi2c1.png) |
|:--:|
| **Rysunek 14.** Wyświeltacz LCD |
## Podłączenie wyświetlacza
- GND do współnej masy
- VCC do +5V
- SDA do GPIO47 (poprzez PAD jak na zdjęciu)
- SCL do GPIO48 (poprzez PAD jak na zdjęciu)
Dodatkowo PAD i SDA podłącz osobno każdy przez rezystor 4.7 kΩ do padu +3.3V. Są to rezystory pull up I2C.
## Podłączenie modułu zegara RTC DS3231
* 3.3V - do padu + zasilania
* GND - do wspólnej masy
* SCL - do MCU GPIO48
* SDA - do MCU GPIO47
## Podłączenie modułu karty SD
Karta jest podłaczona do sprzętowgo SPI (HSPI).
* SCK - GPIO16
* MOSI - GPIO17
* MISO - GPIO18
* CS - GPIO15
[Powrót na stronę główną](../README.md)

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

45
docs/ds3231.md Normal file
View File

@@ -0,0 +1,45 @@
# Zegar RTC DS3231
Bardzo dokładny zegar czasu rzeczywistego RTC oparty na układzie DS3231 z kompensacją temperaturową. Podtrzymanie bateryjne gniazdo na baterię CR2032. Pamięć EEPROM AT24C32 na module. Komunikacja I2C z RTC i pamięcią.
| ![Opis](images/ds3231_1.png) |
|:--:|
| **Rysunek 1.** Moduł czasu rzeczywistego RTC |
## Parametry
* Układ RTC: DS3231N
* Kompensacja temperaturowa kwarcu
* Zintegrowany w strukturę układu kwarc 32,768 kHz
* Zasilanie: 3,3 ÷ 5 V
* Odczyt czasu: godziny, minuty, sekundy
* Odczyt daty: miesiąc, dzień, rok
* Interfejs: I2C
* Możliwość zmiany adresu I2C zegara: zworki A0, A1, A2
* Pamięć EEPROM na module: AT24C32
* wymiary: 21,7 x 38,2 x 13,2 mm
## Zalety modułu
* Komunikacja z modułem odbywa się przez interfejs I2C. Zarówno zegar RTC jak i pamięć EEPROM podłączone są do tego samego interfejsu. Komunikacja przez wspólny interfejs możliwa jest dzięki temu, że obydwa układy mają różne adresy I2C. Wybierając odpowiedni adres, wybieramy urządzenie, do którego piszemy lub z niego czytamy dane.
* DS3231 jest bardzo dokładny, ponieważ w swojej strukturze posiada wbudowany kwarc 32,768 kHz z dodatkową kompensacją temperaturową. Dzięki temu zmiany temperatury zewnętrznej nie powodują śpieszenia się lub opóźniania zegara RTC. Producent zadbał, aby wyeliminować ten problem niemal do zera.
* Dokładny sygnał zegarowy 32,768 kHz można wykorzystać w innym miejscu, ponieważ DS3231 ma go wyprowadzony ten sygnał na pinie 32K.
* Układ posiada wbudowaną funkcję kalendarza.
* Opcja wystawienia przerwania zewnętrznego na pinie SQW modułu: co sekundę (wraz z aktualizacją zegara), moduł powiadamia mikrokontroler, że zmienił się czas. Dzieki temu można wykorzystać ten pin do wyzwalania przerwania bez potrzeby ciągłego odpytywania układu DS3231.
* Zastosowano baterię podtrzymującą w rozmiarze CR2032, po utracie zasilania podstawowego układ DS3231 przełącza się na zasilanie bateryjne. Zegar nie zatrzymuje swojej pracy. Po powrocie zasilania godzina i data jest aktualna.
* W module znajduje się pamięć dowolnego użytku EEPROM AT24C32 o rozmiarze 32 kb. Można w niej zapamiętać np. ustawienia swojego urządzenia.
## I2C
* 3.3V
* GND
* SCL 48
* SDA 47
[Datasheet DS3231](datasheets/DS3231-datasheet.pdf)
[Datasheet EEPRM](datasheets/AT24C32-datasheet.pdf)
[Powrót na stronę główną](../README.md)

22
docs/elements.md Normal file
View File

@@ -0,0 +1,22 @@
# Wykaz elementów
1. ESP32-S3-DEV-KIT-N8R8 moduł deweloperski
2. DS3231 zegar RTC I2C + bateria
3. Czytnik kart SD bez konwertera napięć (3.3V)
4. Wyświeltacz LCD I2C 128x64 z kontrolerem **SH1106** (https://sklep.msalamon.pl/produkt/wyswietlacz-oled-13-i2c-bialy/).
5. 4 x moduł GY291 akcelerometr ADXL345
5. 2 x rezystor 4.7k 0.125W (pullup I2C)
6. 4 x Wtyk/gniazdo GX16-6 6 Pin Metal Male Female Panel Connector 16mm GX16-6
7. Wtyk/gniazdo GX16-3 3 Pin Metal Male Female Panel Connector 16mm GX16-6
8. Przewody montażowe 2m (czerwony, szary, czarny, niebieski, żółty, biały)
9. Obudowa na moduł (Kradex Uniwersalna z Uchem Z52U ABS 40x74x145mm)
10. 7 x obudowa na czujniki
11. Przewód czujnika: ekranowany 6 żył.
## UWAGI:
1. Wyświeltacz OLED z adresem 03D piny: VCC, GNC SCL, SDA **SH1106** (https://sklep.msalamon.pl/produkt/wyswietlacz-oled-13-i2c-bialy/).
[Powrót na stronę główną](../README.md)

46
docs/esp32s3.md Normal file
View File

@@ -0,0 +1,46 @@
# Schemat ESP32-S3-DEV-KIT-N8R8
| ![Opis](images/esp_interfaces.png) |
|:--:|
| **Rysunek 1.** Moduł deweloperski ESP32S3 |
| ![Opis](images/esp_main.png) |
|:--:|
| **Rysunek 2.** Pinout ESP32S |
| ![Opis](images/esp_uart.png) |
|:--:|
| **Rysunek 3.** Schemat UART USB |
| ![Opis](images/esp_hub.png) |
|:--:|
| **Rysunek 4.** Schemat HUB USB |
| ![Opis](images/esp_key.png) |
|:--:|
| **Rysunek 5.** Schemat podłączenia przycisków |
| ![Opis](images/esp_rgb.png) |
|:--:|
| **Rysunek 6.** Schemat podłączenia LED RGB |
| ![Opis](images/esp_power.png) |
|:--:|
| **Rysunek 7.** Schemat zasilania |
**AMS1117 - Stabilizator napięcia**
* Stabilizator napięcia: 3,3 V
* Maksymalny prąd wyjściowy: 1 A
* Maksymalne napięcie wejściowe: 15 V
* Zakres temperatury pracy: od -40°C do 125 °C
* Obudowa: SOT-223
[Powrót na stronę główną](../README.md)

Binary file not shown.

BIN
docs/files/back_panel.cdr Normal file

Binary file not shown.

19798
docs/files/back_panel.dxf Normal file

File diff suppressed because it is too large Load Diff

BIN
docs/files/front_panel.cdr Normal file

Binary file not shown.

20420
docs/files/front_panel.dxf Normal file

File diff suppressed because it is too large Load Diff

BIN
docs/files/wzornik2.cdr Normal file

Binary file not shown.

Binary file not shown.

BIN
docs/fritzing/DS3231.fzpz Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
docs/fritzing/schemat.fzz Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 KiB

232
docs/gy291.md Normal file
View File

@@ -0,0 +1,232 @@
# Akcelerometr GY291 ADXL345 i2c spi
Moduł GY291 to 3osiowy akcelerometr ADXL345. Wyposażony w mikromechaniczny czujnik zapewniający wysoką rozdzielczość i niskie zużycie energii.
Czujnikiej jest polikrzemowa struktura umieszczona na płytce krzemowej. Sprężyny polikrzemowe podtrzymują strukturę nad powierzchnią płytki i zapewniają opór siłom wynikającym z przyłożonego przyspieszenia. Gdy akcelerometr jest prostopadły do pola przyspieszenia, niewielkie zmiany nachylenia będą miały duży wpływ, ponieważ grawitacja działa na większym obszarze.
Wraz ze wzrostem nachylenia w pionie, czujnik staje się mniej czuły aż do momentu, gdy przy pełnej orientacji pionowej nie może zwrócić odczytu, ponieważ wektor grawitacji nie ma wpływu na wiązkę.
Bardzo dobrą dyskusję na temat czułości akcelerometru można znaleźć w nocie aplikacyjnej AN-1057 firmy Analogue Devices autorstwa C. Fishera. Poniższy diagram pochodzi z tej notki aplikacyjnej:
| ![Opis](images/accelerometer_sensitivity_1degree_steps-enh.jpg) |
|:--:|
| **Rysunek 1.** Diagram |
Na diagramie widać, że przy nachyleniu w zakresie 0°23° wystarczy czułość 16 mg/LSB, aby uzyskać dokładność pomiaru co 1°, przy nachyleniu w zakresie 60° 8 mg, a przy nachyleniu w zakresie 80° 4 mg. Z tego powodu ADXl345 nie może wyświetlać kąta 90°, ponieważ jego czułość jest zbyt mała, aby uzyskać dokładność pomiaru nachylenia pod tym kątem (3,8 mg). ADXL345 nadaje się do pomiaru nachylenia do około ±80°. Jest to przydatne w przypadku, gdy chcemy uzyskać dokładność pomiaru nachylenia z dokładnością do 1°.
Warto uwzględnić to podczas projektowania obudowy i mocowania czujnika na badanym urządzeniu.
| ![Opis](images/adxl345-block-diagram-enh.jpg) |
|:--:|
| **Rysunek 2.** Schemat blokowy |
Płytka posiada stabilizator LDO 3V3, zatem napięcie zasilania VCC musi wynosić 0d 4.0V do 6V.
| ![Opis](images/adxl345-annotated.png) |
|:--:|
| **Rysunek 3.** Pinout modułu |
## Nazwa opis
* **GND** Masa układu
* **VCC** Napięcie zasilania modułu z zakresu 3 V do 5 V
* **CS** Wyprowadzenie dla magistrali SPI - Chip Select (logiczna jedynka uruchamia magistralę I2C)
* **INT1** Wyjście przerwania zewnętrznego nr 1 (szczegóły w dokumentacji)
* **INT2** Wyjście przerwania zewnętrznego nr 2 (szczegóły w dokumentacji)
* **SDO** Wybór adresu magistrali I2C / Linia danych magistrali SPI
* **SCL/SCLK** Linia danych magistrali I2C (TWI) / Linia zegarowa magistrali SPI
* **SDA/SDI** Linia zegarowa magistrali I2C (TWI) / Linia danych magistrali SPI
**Uwagi dodatkowe:**
- **CS** jest podciągany do stanu wysokiego przez rezystor 10 kΩ (aktywny). Na niektórych płytkach może mieć wartość 4 kΩ.
- **ADDR(SDO)** jest podciągany do stanu niskiego przez rezystor 4 kΩ.
- **SCL** jest podciągany do poziomu wysokiego 3V3 przez rezystor 4 kΩ.
- **SDA** jest podciągany do poziomu wysokiego 3V3 przez rezystor 4 kΩ.
- **VDDIO** jest podłączone do VS, a oba są podłączone do 3V3.
| ![Opis](images/adxl345-breakout-schematic-enh.jpg) |
|:--:|
| **Rysunek 4.** Schemat modułu |
**I²C - uwagi do interfejsu**
Adresy I²C:
```
Stan pinu ADDR/SDO Adres I2C (hex) Adres I2C (binarnie)
ADDR pulled high 0x1D %0001-1101
ADDR pulled low 0x53 %0101-0011
```
Ponieważ interfejs I²C wykorzystuje wyjścia z otwartym drenem, interfejs jest kompatybilny z systemem 5 V. Dzieje się tak, ponieważ Arduino nigdy nie generuje napięcia 5 V, a jedynie trójstanowe wyjście, aby napięcie podciągnęło się do 3V3. Aby wygenerować zero, na wyjściu pojawia się zero cyfrowe, które jest również kompatybilne z interfejsem 3V3.
**SPI - uwagi do interfejsu**: w przypadku użycia interfejsu SPI, należy użyć konwertera poziomów napięć logicznych (tylko wówczas, gdy mikrokontroler lub mikrokomputer pracuje z napięciem logiki 5V). Konwerter nie jest potrzebny dla Raspberry PI, ponieważ jego napięcie logiki wynosi 3.3V.
## Dane techniczne
- Czip: ADXL345, 13bitowy (3,9mg/LSB), ±2/4/8/16g
- Interfejsy: I²C i SPI (3 lub 4 przewodowy)
- Szybkość interfejsu: 100kHz, 400kHz / 5MHz
- Rozdzielczość: (2g to 16g) 10 ~ 13 bitów
- Zasilanie: 35V,
- Napięcie logiki: 1,73,6V lub 46V
- Temperatura pracy: -40°C ~ 85°C
- Funkcje sprzętowe: detekcja tapnięcia (klik), aktywności, bezczynności, swobodnego opadania, programowalne przerwania
- Zużycie energii: (~40µA aktywnie, ~0,1µA w standby), odporność na wstrząsy do 10000g
- Rozmiar: około 20×15mm, pinheader do samodzielnego wlutowania
- Współpraca z RaspberryPi: bezpośrednie zasilanie z 3,3V GPIO zgodność z poziomami logicznymi Pi
**Rozdzielczość ADXL345**
Można wybrać zakres przyspieszenia spośród następujących wartości: 2g, 4g, 8g, 16g.
Ten sam współczynnik skalowania jest używany we wszystkich rozdzielczościach, ponieważ wewnętrzna rozdzielczość przetwornika DAC zmienia się z 10 bitów na 13 bitów przy każdej wybranej rozdzielczości. Zatem każdy bit ma zawsze wartość 3,9 mg:
Należy pamiętać, że „-1” sprawia, że bit znaku daje wynik dodatni lub ujemny.
| ![Opis](images/adxl345_datasheet_sensitivity_enh.jpg) |
|:--:|
| **Rysunek 5.** Tabela czułości |
Jeśli ograniczysz zakres czujnika ADXL345 do 10 bitów, jego czułość spadnie (oczywiste). Dla pełnego zakresu uzyskujesz typową czułość 3,9 mg/LSB i odchylenie od min. do maks. 3,5 ~ 4,3 mg/LSB (ustawia się to bitem FULL_RES). Nie warto jednak ograniczać się do 10 bitów.
Dlaczego akcelerometr ADXL345 nie może wskazać ±90°?
Akcelerometr doskonale radzi sobie ze wskazaniem nachylenia pod niewielkim kątem (na płaskiej powierzchni) do około 70°, ale nie osiągnie ±90°.
Należy montować akcelerometr jak najbardziej poziomo, ponieważ w przeciwnym wypadku mniejszy wpływ będzie miała na niego grawitacja, a zatem akcelerometr staje się mniej czuły. Czułość akcelerometru maleje wraz ze wzrostem kąta i podąża za charakterystyką zbliżoną do sinusoidalnej, zaś dokładność maleje wraz ze zbliżaniem się do nachylenia ±90°.
## Obudowa
Do zbudowanmia czujnika wykorzystano obudowę uniwersalną Kradex Z-47. Obudowa wykonana z ABS. Obudowa składa się z dwóch części składanych na zatrzask. Kolor czarny. Wymiary: 20,6 x 40,2 x 50,2 mm.
| ![Opis](images/case_z47_1.png) |
|:--:|
| **Rysunek 6.** Proponowana obudowa |
Sztywne mechaniczne przymocowanie akcelerometru (np. GY-291 z ADXL345) do elementu analizowanego (np. obudowy HDD, silnika, rury) jest absolutnie kluczowe dla poprawnego wykrywania drgań. Poniżej znajdziesz praktyczne, sprawdzone metody montażu w szczególności dla przypadków, gdy chcesz przykleić akcelerometr do dysku w obudowie PVC.
| ![Opis](images/module01pin.png) |
|:--:|
| **Rysunek 7.** Montaż czujnika w obudowaie |
## Podłączenie
1. Podłącz: SDA (MOSI) GPIO11, SCL (CLK) GPIO12, SD0 (MISO) GPIO13
**Uwaga**: ADXL345 ma twardo ustawione dwa adresy I²C: 0x53 domyślny (pin SDO/ALT do GND), 0x1D alternatywny (pin SDO/ALT do VCC). Można podłączyć tylko dwa moduły przez I²C jednocześnie jeden z 0x53, drugi z 0x1D.
## Podłączenie SPI akceleratorów z ESP32S3
Podłączenie przez SPI (dla 4 czujników)
Uwaga: Pin SDO w SPI służy do wyjścia danych, nie do ustawiania adresu jak w I²C.
```
| ESP32 | Nazwa | GY-291|
| ------- | ----- | ----- |
| GPIO11 | MOSI | SDA |
| GPIO13 | MISO | SDO |
| GPIO12 | SCLK | SCL |
| GPIO | 3.3V | VCC |
| GPIO | GND | GND |
```
## Filtrowanie - tylko dla przewodów >2 m (nie przetestowane do końca)
Omiń tę sekcję, jeśli przewód pomiędzy urządzeniem a czujnikiem akcelerometru jest krótszy niż 2 m.
Nie należy przekraczać 5m długości przewodów dla SPI w warunkach fabrycznych, ponieważ w środowisku o wysokim poziomie zakłóceń elektromagnetycznych (EMI), typowym dla fabryk, mogą wystąpić przekłamania.
Wysokie ryzyko:
- utraty sygnału (zniekształcenie zboczy sygnału),
- przesłuchów między liniami,
- błędów CRC lub losowych odczytów,
- odbić i zakłóceń szczególnie na SCLK.
- standardowe SPI przy 3.3V napięciu logiki jest niewystarczające na >50 cm bez zabezpieczeń!
**Fizyczne zabezpieczenie linii**
- Skrętka ekranowana (STP) np. skrętka 4-parowa FTP/STP kat. 5e lub wyżej
- Ekranowane przewody / peszel ochronią przed polami elektromagnetycznymi
- Podciągnięcie rezystorów pull-up dla MOSI, MISO, SCLK do 3.3V (np. 4.7kΩ)
- Szeregowe rezystory terminujące 50-100Ω w szereg na każdej linii SPI
- Dławiki ferrytowe na liniach zasilania i sygnałowych (filtrowanie EMI)
- Redukcja prędkości SPI do <500 kHz lub nawet 100 kHz — pozwoli ograniczyć efekt odbić i przesłuchów.
| ![Opis](images/spifilter01.png) |
|:--:|
| **Rysunek 8.** Opcjonalne filtrowanie sygnałów |
# Wtyczka
Typ gniazda/wtyczki: GX16-6 6 Pin Metal Male Female Panel Connector 16mm GX16-6
| ![Opis](images/gniazdo6pin.png) |
|:--:|
| **Rysunek 9.** Gniazdo do podłączenia akcelerometrów |
| ![Opis](images/6pinplug.png) |
|:--:|
| **Rysunek 10.** Wtyczka czujnikja akcelerometru |
Numeracja pinów dla modułów z magistralą SPI:
1. +5V (moduł ma regulator 3.3V)
2. masa
3. MOSI
4. MISO
5. SCLK
6. SS
# Uwagi
## Zapobieganie błędom w ruchu magistrali
Pin CS układu ADXL345 służy zarówno do inicjowania transakcji SPI, jak i do włączania trybu I2C. Gdy układ ADXL345 jest używany na magistrali SPI z wieloma urządzeniami, jego pin CS jest utrzymywany w stanie wysokim, podczas gdy urządzenie nadrzędne komunikuje się z innymi urządzeniami. Mogą wystąpić sytuacje, w których polecenie SPI przesłane do innego urządzenia wygląda jak prawidłowe polecenie I2C. W takim przypadku układ ADXL345 zinterpretowałby to jako próbę komunikacji w trybie I2C i mógłby zakłócać ruch magistrali. O ile ruch magistrali nie będzie odpowiednio kontrolowany, aby zapobiec wystąpieniu takiej sytuacji, zaleca się dodanie bramki logicznej przed pinem SDI, jak pokazano na rysunku 36. Ta bramka OR będzie utrzymywać linię SDA w stanie wysokim, gdy CS będzie w stanie wysokim, aby zapobiec sytuacji, w której ruch magistrali SPI w układzie ADXL345 będzie postrzegany jako polecenie startu I2C.
![](images/bus_error_preventing.png)
Zalecany schemat połączenia SPI w przypadku korzystania z wielu urządzeń SPI na jednej magistrali
W przypadku SPI zastosowano konfigurację 4-przewodową, jak pokazano na schemacie poniżej. Wyczyszczenie bitu SPI (bit D6) w rejestrze DATA_FORMAT (adres 0x31) powoduje wybór trybu 4-przewodowego, natomiast ustawienie bitu SPI powoduje wybór trybu 3-przewodowego. Maksymalna częstotliwość taktowania SPI wynosi 5 MHz przy maksymalnym obciążeniu 100 pF, a schemat czasowy jest zgodny z polaryzacją zegara (CPOL) = 1 i fazą zegara (CPHA) = 1. Jeśli zasilanie zostanie podane do układu ADXL345 przed skonfigurowaniem polaryzacji i fazy zegara procesora hosta, pin CS powinien zostać wprowadzony w stan wysoki przed zmianą polaryzacji i fazy zegara.
W niektórych opisach napisano, że bramki są zbędne, jeśli oprogramowanie zapewni prawidłowe stany na piach CS, tj., stan wysoki na czujnikach niekatywnych i stan niski WYŁACZNIE na czujniku, na którym trwa pomiar. Na modułach są rezystory podciągające (na schemacie oznaczone jako R3 i R4) do I²C (na SDA/SCL), które przy SPI nie powinny przeszkadzać, ale jeśli coś dziwnego dzieje się na liniach, warto je wylutować.
![](images/4wire_spi.png)
Figure 35. 4-Wire SPI Connection Diagram
CS to linia zezwalająca, sterowana przez urządzenie nadrzędne SPI. Linia ta musi przejść w stan niski na początku transmisji i wysoki na jej końcu, jak pokazano na rysunku 37. SCLK to zegar portu szeregowego, dostarczany przez urządzenie nadrzędne SPI. SCLK powinien pozostawać w stanie wysokim w okresie braku transmisji. SDI i SDO to odpowiednio wejście i wyjście danych szeregowych. Dane są aktualizowane na opadającym zboczu sygnału SCLK i powinny być próbkowane na narastającym zboczu sygnału SCLK. Aby odczytać lub zapisać wiele bajtów w jednej transmisji, należy ustawić bit wielobajtowy, znajdujący się po bicie R/W w pierwszym przesłanym bajcie (MB na rysunkach 3739). Po zaadresowaniu rejestru i przesłaniu pierwszego bajtu danych, każdy kolejny zestaw impulsów zegarowych (osiem impulsów zegarowych) powoduje, że ADXL345 wskazuje na kolejny rejestr w celu odczytu lub zapisu. To przesuwanie trwa do momentu ustania impulsów zegarowych i cofnięcia potwierdzenia CS. Aby wykonać odczyt lub zapis do różnych, niesekwencyjnych rejestrów, należy dezaktywować CS między transmisjami, a nowy rejestr musi zostać zaadresowany oddzielnie.
Schemat czasowy dla 3-przewodowych odczytów lub zapisów SPI przedstawiono na rysunku 39. 4-przewodowe odpowiedniki dla zapisów i odczytów SPI przedstawiono odpowiednio na rysunku 37 i rysunku 38. Aby zapewnić prawidłowe działanie modułu, progi logiczne i parametry czasowe podane w tabeli 9 i tabeli 10 muszą być zawsze spełnione.
Stosowanie częstotliwości transmisji danych wyjściowych 3200 Hz i 1600 Hz jest zalecane tylko przy częstotliwościach transmisji SPI większych lub równych
2 MHz. Częstotliwość transmisji danych wyjściowych 800 Hz jest zalecana tylko dla prędkości transmisji większych lub równych 400 kHz, a
pozostałe częstotliwości transmisji danych skalują się proporcjonalnie. Na przykład minimalna zalecana prędkość transmisji dla częstotliwości transmisji danych wyjściowych 200 Hz wynosi 100 kHz. Praca z szybkością transmisji danych wyjściowych przekraczającą zalecane maksimum może powodować niepożądane efekty w danych dotyczących przyspieszenia, w tym brak próbek lub dodatkowy szum.
Układ ADXL345 udostępnia dwa piny wyjściowe do obsługi przerwań: INT1 i INT2. Oba piny przerwań to piny push-pull o niskiej impedancji, których specyfikacje wyjściowe przedstawiono w tabeli 13. Domyślna konfiguracja pinów przerwań jest aktywna w stanie wysokim. Można ją zmienić na aktywną w stanie niskim, ustawiając bit INT_INVERT w rejestrze DATA_FORMAT (adres 0x31). Wszystkie funkcje mogą być używane jednocześnie, a jedynym ograniczeniem jest to, że niektóre funkcje mogą wymagać współużytkowania pinów przerwań.
Przerwania są włączane poprzez ustawienie odpowiedniego bitu w rejestrze INT_ENABLE (adres 0x2E) i są mapowane na pin INT1 lub INT2 na podstawie zawartości rejestru INT_MAP (adres 0x2F). Podczas początkowej konfiguracji pinów przerwań zaleca się, aby przed włączeniem przerwań wykonać funkcje i mapowanie przerwań. Podczas zmiany konfiguracji przerwania zaleca się najpierw wyłączyć przerwanie, kasując bit odpowiadający tej funkcji w rejestrze INT_ENABLE, a następnie ponownie skonfigurować funkcję przed ponownym włączeniem przerwania. Konfiguracja funkcji przy wyłączonych przerwaniach pomaga zapobiec przypadkowemu wygenerowaniu przerwania przedwcześnie.
Funkcje przerwań są blokowane i kasowane poprzez odczyt rejestrów danych (adresy od 0x32 do 0x37) do momentu, aż warunek przerwania nie będzie już ważny dla przerwań związanych z danymi, lub poprzez odczyt rejestru INT_SOURCE (adres 0x30) dla pozostałych przerwań. W tej sekcji opisano przerwania, które można ustawić w rejestrze INT_ENABLE i monitorować w rejestrze INT_SOURCE.
[Powrót na stronę główną](../README.md)

111
docs/hardware.md Normal file
View File

@@ -0,0 +1,111 @@
# Budowa urządzenia krok po kroku
W tym dokumencie znajduje się opis budowy prototypu urządzenia czujników drgań krok po kroku.
## Obudowa Kradex Z1AW
Obudowa z panelami bocznymi wykonana z polistyrenu i ABS. Obudowa posiada panel przedni i tylny, zaś niektóre występują także w wersji wentylowanej (wentylacja nie jest konieczna).
| ![Opis](images/Z1AW_kra1.jpg) |
|:--:|
| **Rysunek 1.** Obudowa Kradex Z1AW PS |
## ESP32-S3-DEV-KIT-N8R8 moduł deweloperski
Płytka deweloperska od firmy Waveshare. 44 piny. Dwurdzeniowy procesor Xtensa LX7 o częstotliwości 240 MHz, wbudowaną pamięć 512 KB SRAM i 8 MB Flash. Dodatkowo 8 MB PSRAM. Wyposażona w port USB typu C.
| ![Opis](images/esp32s2-dev01.png) |
|:--:|
| **Rysunek 2.** Moduł deweloperski ESP |
## Adapter ESP32-S3 44pin - Terminal Shield ARK zaciski śrubowe
Przeznaczony do płytek deweloperskich ESP32-S3 w wersji 44 pinów. Posiada zaciski śrubowe, które zapewniają pewne i trwałe połączenie, odporne na mechaniczne uszkodzenia. Każdy pin płytki deweloperskiej wyprowadzony jest podwójnie: na złącze ARK oraz do złącza goldpin.
| ![Opis](images/dock_esp321.png) |
|:--:|
| **Rysunek 3.** Obudowa Kradex Z1AW PS |
## Przetwornica step-down LM2596 3,2V-35V 3A x2 sztuki
Moduł z przetwornicą impulsową step-down LM2596. Napięcie wejściowe od 3.2 V do 35 V. Maksymalny ciągły prąd wyjściowy 3 A. Napięcie wyjściowe regulowane w zakresie od od 3.2 V do 35 V. Wymiary płytki: 44 x 20 x 13 mm.
Jedna [przetwornica zasila moduł ESP32, druga - niezależnie akcelerometry.]
| ![Opis](images/dcdc_p01.png) |
|:--:|
| **Rysunek 4.** Przetwornica DC-DC |
## Moduł akcelerometru GY-291
Moduł z 3-osiowym akcelerometrem ADXL345, który pozwala na pomiar przyspieszenia w zakresie ±16g z rozdzielczością 13 bitów. Zasilany jest napięciem od 3 do 5 V i komunikuje się przez interfejs I2C lub SPI.
| ![Opis](images/accelgy.png) |
|:--:|
| **Rysunek 5.** Moduł akcelerometr |
## Wyświwetlacz OLED
Wyświetlacz graficzny OLED z przekątną ekranu: 1,3 i rozdzielczości 128x64px. Interfejs I2C. Napięcie zasilania: od 3,3 V do 5 V. Wymiary: 35,5 x 33,5 mm. Musi mieć kontroler **SH1106**. Zakupiłem ten: https://sklep.msalamon.pl/produkt/wyswietlacz-oled-13-i2c-bialy/
| ![Opis](images/oled_131.jpg) |
|:--:|
| **Rysunek 6.** Wyświetlacz OLED |
## Przyciski
Można uzyć dowolnych przycisków i kolorów. Użyłem następujących przycisków:
1 x Przycisk chwilowy R13-507 - 250V-3A - PB-02 - 16mm - monostabilny - okrągły
2 x Przycisk chwilowy Pbp12 1A monostabilny okrągły.
| ![Opis](images/r13507.png) |
|:--:|
| **Rysunek 8.** Przycisk 1 (OK) |
| ![Opis](images/pbp12.png) |
|:--:|
| **Rysunek 8.** Przycisk UP/DOWN |
Aby przyciski działały poprawnie, należy użyć rezystorów podciągających 10 kΩ (3 sztuki).
## Złącze GX16 6-PIN wtyk + gniazdo x4
Złącze Przemysłowe Zakręcane GX16 6-PIN w komplecie z gniazdem - 6 PIN. Średnica gwintu montażowego: 16mm / 5/8 Całkowita długość: 47 mm. Do podłączania modułów akcelerometrów.
| ![Opis](images/pin6socket.png) |
|:--:|
| **Rysunek 7.** Wtyk + gniazgo akcelerometrów |
## Przedłużacz USB typu C z mocowaniem panelowym
Przewód USB z wtykiem i gniazdem typu C. Przedłużacz ma długość 30 cm. Gniazdo umieszczone jest na szerokim mocowaniu z otworami, co pozwala na uzyskanie trwałego i pewnego połączenia. Przewód może służyć zarówno do ładowania, jak i przesyłu danych.
Właściwości: Wtyk USB typu C, gniazdo USB typu C na szerokim mocowaniu, długość przewodu 30 cm.
| ![Opis](images/expusbC.png) |
|:--:|
| **Rysunek 8.** Przedłużacz USB C z gniazdem panelowym |
## Złącze GX16 3-PIN wtyk + gniazdo
Złącze Przemysłowe Zakręcane GX16 3-PIN w komplecie z gniazdem - 6 PIN. Średnica gwintu montażowego: 16mm / 5/8 Całkowita długość: 47 mm. Do zasilania urządzenia. Urządzenie będzie można zapisać napięciem od 9V do 30V (zasilacz sieciowy lub akumulator).
| ![Opis](images/3pinsocket.png) |
|:--:|
| **Rysunek 9.** Wtyk + gniazdo 3PIN |
## Zasilacz do urządzenia
Parametry: 12V do 19V wydajność prądowa minimum 3A. UWAGA: Pamiętaj, aby zakupić zasilacz z wymaganymi certyfikatami i z legalnej dystrybucji UE. Nie używaj tanich chińskich zasilaczy. Wybierz zasilacz od jednego z europejskich producentów lub dystrybutorów. Zasilacz musi być oznaczony certyfikatem, co oznacza, że produkt spełnia wymogi unijne. Zasilacz musi posiadać obdowę oraz przewód sieciowy i wtyk do 230V. Jaka jest różnica pomiędzy tanim a droższym zasilaczem z CE? Bezpieczne zasilacze są inaczej projektowane. Zawierają więcej zabezpieczeń i nawet w przypadku uszkodzenia zasilacza nie powinny spowodować porażenia. Sprzedając te zasilacze, producenci są odpowiedzialni za produkt. Budowane urządzenie jest niskonapięcowe i student nie ma prawa pracować przy napięciu 230V. Zabroniona jest też ingerencja w zasilacz.

BIN
docs/images/3pinsocket.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

BIN
docs/images/4wire_spi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
docs/images/6pinplug.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 537 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 375 KiB

BIN
docs/images/Z1AW_kra1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
docs/images/accelgy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 701 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
docs/images/back1.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 KiB

BIN
docs/images/back2.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 998 KiB

BIN
docs/images/back3.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
docs/images/back4.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 996 KiB

BIN
docs/images/back5.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
docs/images/case_z47_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

BIN
docs/images/case_z47_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 KiB

BIN
docs/images/dcdc_p01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 KiB

BIN
docs/images/dock_esp321.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 927 KiB

BIN
docs/images/ds3231_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 KiB

BIN
docs/images/esp32s3_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 795 KiB

BIN
docs/images/esp32s3_2.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 316 KiB

BIN
docs/images/esp_hub.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 KiB

BIN
docs/images/esp_key.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
docs/images/esp_main.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

BIN
docs/images/esp_power.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
docs/images/esp_rgb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
docs/images/esp_uart.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

BIN
docs/images/expusbC.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

BIN
docs/images/front1.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 783 KiB

BIN
docs/images/front2.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
docs/images/front3.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 MiB

BIN
docs/images/gniazdo6pin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 KiB

BIN
docs/images/krad1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
docs/images/kradex_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

BIN
docs/images/kradex_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
docs/images/lcdi2c1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 KiB

BIN
docs/images/lcdi2c2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
docs/images/led1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

BIN
docs/images/modul.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

BIN
docs/images/module01pin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 KiB

BIN
docs/images/oled_131.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

BIN
docs/images/oled_132.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

BIN
docs/images/oled_sizes.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 KiB

BIN
docs/images/pbp12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

BIN
docs/images/pbp12dim.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

BIN
docs/images/pin6socket.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

BIN
docs/images/r13507.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

BIN
docs/images/sd_content1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

BIN
docs/images/sd_content2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

BIN
docs/images/sd_modules.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1000 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 484 KiB

BIN
docs/images/spifilter01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
docs/images/wzor1.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 779 KiB

34
docs/lcd.md Normal file
View File

@@ -0,0 +1,34 @@
# Wyświetlacz LCD HD44780
Uwaga - wyświetlacz koniecznie z konwerterem na I2C!
- Typ: Wyświetlacz tekstowy LCD
- Układ: PCF8574 (zgodny z HD44780)
- Linii: 4x20
- Kolor: dowolny
- Adres I2C: 0×27
- Interfejs: I2C przez konwerter
- Napięcie zasilania: od 5V
- Wymiary: 98 x 60 mm
| ![Opis](images/lcdi2c2.png) |
|:--:|
| **Rysunek 1.** Wyświetlacz |
| ![Opis](images/lcdi2c1.png) |
|:--:|
| **Rysunek 2.** Dolna strona wyświetlacza LCD |
Podłączenie
### I2C
* 3.3V
* GND
* SCL 9
* SDA 8
[Powrót na stronę główną](../README.md)

98
docs/pinout.md Normal file
View File

@@ -0,0 +1,98 @@
# Pinout ESP32S3
| ![Opis](fritzing/schemat_bb.png) |
|:--:|
| **Rysunek 2.** Schemat urządzenia |
## Kluczowe uwagi
- Tolerancja 5V: **NIE!** ESP32-S3 nie toleruje logiki 5V, wyłącznie 3.3V
- DAC: ESP32-S3 nie posiada wbudowanego przetwornika DAC
- ADC: wszystkie kanały ADC są podłączone do stałych pinów. ADC 2 nie można używać, gdy aktywne jest Wi-Fi.
## Pinout projektu
SPI2 (VSPI) | PIN | ADXL345
* MOSI_ADSX 11 SDA
* CLK_ADSX 12 SCL
* MISO_ADSX 13 SD0
* CS: 9, 10, 14, 21
SPI3 SD (HSPI) PIN
* SD_CS 15
* SD_MISO 16
* SD_MOSI 17
* SD_SCK 18
I2C C3
* SDA 47
* SCL 48
## Bezpieczne piny ESP32 S3
| ![Opis](images/esp32s3_2.jpeg) |
|:--:|
| **Rysunek 2.** Pinout ESP32 |
Bezpieczne oznacza, że można je stosować bez ograniczeń. Na inne należy uważać.
**UWAGA**: część portów GPIO jest współdzielona z FLASH i PSRAM.
| GPIO | Wejście |Wyjście | Opis |
|------|----------|--------|-----------------------------------------------------|
| 0 | pull up | ? | Startup. Btn LOW - download mode |
| 1 | TX pin | OK | debug output at boot |
| 2 | OK | OK | on-board LED, LOW to flash |
| 3 | x | x | Startup |
| 4 | OK | OK | |
| 5 | OK | OK | CS1 (Accel1) |
| 6 | OK | OK | CS2 (Accel2) |
| 7 | OK | OK | CS3 (Accel3) |
| 8 | OK | OK | CS4 (Accel4) |
| 9 | OK | OK | |
| 10 | OK | OK | BTN1 |
| 11 | OK | OK | MOSI_ADSX (Accelerometer) |
| 12 | OK | OK | CLK_ADSX (Accelerometer) |
| 13 | OK | OK | MISO_ADSX (Accelerometer) |
| 14 | OK | OK | BTN2 |
| 15 | OK | OK | SD_CS (SD) |
| 16 | OK | OK | SD_SCK (HSPI) |
| 17 | OK | OK | SD_MOSI (HSPI) |
| 18 | OK | OK | SD_MISO (HSPI) |
| 19 | x | x | Native USB |
| 20 | x | x | Native USB |
| 21 | OK | OK | BTN3 |
| 22 | OK | OK | |
| 23 | OK | OK | |
| 25 | OK | OK | |
| 26 | x | x | Flash/PSRAM SPICS1 |
| 27 | x | x | Flash/PSRAM SPIHD |
| 28 | x | x | Flash/PSRAM SPIWP |
| 29 | x | x | Flash/PSRAM SPICS0 |
| 30 | x | x | Flash/PSRAM SPICLK |
| 31 | x | x | Flash/PSRAM SPIQ |
| 32 | x | x | Flash/PSRAM SPID |
| 33 | x | x | SPI PSRAM |
| 34 | x | x | SPI PSRAM |
| 35 | x | x | SPI PSRAM |
| 36 | x | x | SPI PSRAM |
| 37 | x | x | SPI PSRAM |
| 39 | x | x | input only PSRAM |
| 40 | x | x | input only PSRAM |
| 41 | x | x | input only PSRAM |
| 42 | x | x | input only PSRAM |
| 43 | x | x | UART0 TX |
| 44 | x | x | UART0 RX |
| 45 | x | x | Pull-Down |
| 46 | x | x | Pull-Down |
| 47 | OK | OK | PIN_SDA (LED, RTC) |
| 48 | OK | OK | PIN_SCL (LED, RTC) |
| ![Opis](images/maping_spi_flash.png) |
|:--:|
| **Rysunek 3.** Mapowanie pinów pomiędzy chipem a Flash i PSRAM |
[Powrót na stronę główną](../README.md)

Some files were not shown because too many files have changed in this diff Show More