Wgranie zmian do repozytorium
172
.gitignore
vendored
Normal file
@@ -0,0 +1,172 @@
|
||||
# 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/
|
||||
|
||||
541
.vscode/c_cpp_properties.json
vendored
Normal 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
@@ -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
@@ -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
@@ -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"
|
||||
}
|
||||
}
|
||||
63679
Python3/00000002.csv
Normal file
BIN
Python3/magnitude_comparison.png
Normal file
|
After Width: | Height: | Size: 113 KiB |
164
Python3/reader2.py
Normal 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
@@ -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
@@ -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
@@ -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
@@ -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.
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 1.** Zawartość katalogów na karcie SD |
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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)
|
||||
354
SUMMARY_2026-05-09.md
Normal file
@@ -0,0 +1,354 @@
|
||||
# Podsumowanie pracy - 9 maja 2026
|
||||
|
||||
## Cel
|
||||
Naprawić upload plików .wmt z ESP32 do REST API - firmware nie wysyłał plików na serwer.
|
||||
|
||||
---
|
||||
|
||||
## Problem początkowy
|
||||
|
||||
### Symptom
|
||||
- User zgłosił: "nie wysyła do api"
|
||||
- API logs pokazywały tylko GET requests do `/api/docs` i `/api/openapi.json`
|
||||
- Brak POST requests do endpoint'u upload
|
||||
- Pliki .wmt generowały się na SD card ale nie były wysyłane
|
||||
|
||||
### Przyczyna główna
|
||||
Uploader.cpp zawierał kod ale:
|
||||
1. **Credentials były błędne**: firmware używał "wmt"/"Zaq12wsx" zamiast "SN001234ABCD56789012"/"device001"
|
||||
2. **Upload disabled**: konfiguracja miała `uploadEnable=false` w EEPROM
|
||||
3. **Upload thread nie działał**: nawet jeśli config by się zmienił, thread nigdy się nie启动
|
||||
|
||||
---
|
||||
|
||||
## Zmiana 1: Konfiguracja - Poprawienie credentials
|
||||
|
||||
**Plik**: `src/Config.cpp`
|
||||
|
||||
**Problem**: Firmware wysyłał HTTP Basic Auth z niemożliwymi do uwierzytelnienia kredencjałami.
|
||||
|
||||
**Rozwiązanie**:
|
||||
```cpp
|
||||
// Stare (ŹRÓDŁOWE):
|
||||
strcpy(config.restUser, "wmt");
|
||||
strcpy(config.restPass, "Zaq12wsx");
|
||||
|
||||
// NOWE:
|
||||
strcpy(config.restUser, "SN001234ABCD56789012");
|
||||
strcpy(config.restPass, "device001");
|
||||
```
|
||||
|
||||
**Źródło kredencjałów**: `pi_rest/init_db.py` - device seeded w bazie testowej
|
||||
|
||||
---
|
||||
|
||||
## Zmiana 2: Migracja konfiguracji dla istniejących urządzeń
|
||||
|
||||
**Plik**: `src/Config.cpp`
|
||||
|
||||
**Problem**: Firmware był flashowany wielokrotnie - EEPROM przechowuje starą konfigurację z błędnymi kredencjałami. Update do kodu nie wystarczy - trzeba migrować istniejące dane.
|
||||
|
||||
**Rozwiązanie** - dodana logika w `readConfig()`:
|
||||
|
||||
```cpp
|
||||
void ConfigManager::readConfig() {
|
||||
EEPROM.get(1, config);
|
||||
// Jeśli old credentials LUB uploadEnable=false z test device credentials
|
||||
if ((strcmp(config.restUser, "wmt") == 0 && strcmp(config.restPass, "Zaq12wsx") == 0) ||
|
||||
strlen(config.restUser) == 0 || strlen(config.restPass) == 0 ||
|
||||
(!config.uploadEnable && strcmp(config.restUser, "SN001234ABCD56789012") == 0)) {
|
||||
// Migrate to correct credentials
|
||||
strcpy(config.restUser, "SN001234ABCD56789012");
|
||||
strcpy(config.restPass, "device001");
|
||||
config.uploadEnable = true;
|
||||
config.uploadInterval = 5000;
|
||||
saveConfig();
|
||||
EEPROM.begin(EEPROM_SIZE);
|
||||
EEPROM.get(1, config);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Efekt**: Przy każdym boot, jeśli EEPROM zawiera old credentials LUB device ma test credentials ale upload disabled, automatycznie updatuje się i zapisuje nową konfigurację.
|
||||
|
||||
---
|
||||
|
||||
## Zmiana 3: Diagnostyczne logi w uploadThread
|
||||
|
||||
**Plik**: `src/main.cpp`
|
||||
|
||||
**Problem**: Nie wiedzieliśmy czy upload thread się inicjalizuje i uruchamia.
|
||||
|
||||
**Zmiana**:
|
||||
```cpp
|
||||
// Line 232-240: Dodane logi w setup()
|
||||
if (config.uploadEnable) {
|
||||
ESP_LOGI(TAG, "[MAIN] Upload enabled, interval: %d ms", config.uploadInterval);
|
||||
uploadThread.setInterval(config.uploadInterval);
|
||||
uploadThread.onRun(uploadTask);
|
||||
uploadThreadController.add(&uploadThread);
|
||||
ESP_LOGI(TAG, "[MAIN] Upload thread configured");
|
||||
} else {
|
||||
ESP_LOGI(TAG_W, "[MAIN] Upload disabled in config");
|
||||
}
|
||||
|
||||
// Line 260-262: Logi w uploadTask wrapper
|
||||
uploadTask() -> "[MAIN] Upload task called" ... "[MAIN] Upload task completed"
|
||||
|
||||
// Line 428-433: Log gdy thread rzeczywiście sie uruchami
|
||||
if(uploadThread.shouldRun() && (config.connect) && config.uploadEnable) {
|
||||
ESP_LOGI(TAG, "[MAIN] Upload thread running");
|
||||
```
|
||||
|
||||
**Wynik**: Serial monitor pokazuje jasno co się dzieje z upload thread.
|
||||
|
||||
---
|
||||
|
||||
## Zmiana 4: Diagnostyczne logi i upload logic w Uploader.cpp
|
||||
|
||||
**Plik**: `src/Uploader.cpp`
|
||||
|
||||
### 4a. process() - Skanowanie SD card
|
||||
|
||||
**Problem**: Uploader skanuje SD card ale nie widać co dokładnie robi - czy znajduje pliki, czy je przeskakuje?
|
||||
|
||||
**Zmiana** - dodane szczegółowe logi w `process()`:
|
||||
```cpp
|
||||
for (File f = root.openNextFile(); f; f = root.openNextFile()) {
|
||||
String fname = String(f.name());
|
||||
if (f.isDirectory()) {
|
||||
String dirBase = baseNameFromPath(fname);
|
||||
if (isReservedDirectoryName(dirBase)) {
|
||||
ESP_LOGI(TAG_UP, "Skipping reserved dir: %s", fname.c_str()); // <- NEW
|
||||
f.close();
|
||||
continue;
|
||||
}
|
||||
ESP_LOGI(TAG_UP, "Scanning directory: %s", fname.c_str()); // <- NEW
|
||||
// ...
|
||||
if (ename.endsWith(".wmt")) {
|
||||
String full = dirPath + "/" + ename;
|
||||
ESP_LOGI(TAG_UP, "Found .wmt file: %s", full.c_str()); // <- NEW
|
||||
// upload...
|
||||
}
|
||||
}
|
||||
}
|
||||
if (no files found) {
|
||||
ESP_LOGI(TAG_UP, "Scan complete - no .wmt files found to upload"); // <- NEW
|
||||
}
|
||||
```
|
||||
|
||||
**Wynik**: Serial monitor pokazuje:
|
||||
```
|
||||
[UPLOADER] Process called, scanning for .wmt files
|
||||
[UPLOADER] Skipping reserved dir: .Spotlight-V100
|
||||
[UPLOADER] Scanning directory: 1
|
||||
[UPLOADER] Found .wmt file: /1/00000001.wmt
|
||||
```
|
||||
|
||||
### 4b. uploadFile() - Upload logic z obsługą błędów
|
||||
|
||||
**Implementacja**:
|
||||
|
||||
1. **Multipart request** - streaming file w chunks (1024 bytes)
|
||||
2. **HTTP Basic Auth** - base64 encoded credentials w Authorization header
|
||||
3. **Response handling** - odczyt status code HTTP i body
|
||||
4. **Auth diagnostics** - specjalne logowanie dla 401/403:
|
||||
```cpp
|
||||
if (statusCode == 401 || statusCode == 403) {
|
||||
Serial.printf("[%s] Auth failed (%d). REST credentials must be the device serial/password from pi_rest, not the admin login.\n", TAG_UP, statusCode);
|
||||
}
|
||||
```
|
||||
5. **Success handling (200-299)**:
|
||||
- Przeniesienie pliku do `/uploads/` subfolder
|
||||
- Wpis do `/uploads.csv` z timestamp i status code
|
||||
```cpp
|
||||
String destPath = dirPath + "/uploaded/" + filename;
|
||||
if (_fs.rename(path.c_str(), destPath.c_str())) {
|
||||
Serial.printf("[%s] Moved to %s\n", TAG_UP, destPath.c_str());
|
||||
}
|
||||
appendCsvLine(_fs, "/uploads.csv", lineBase + "sent," + path + "\n");
|
||||
return true;
|
||||
```
|
||||
6. **Failure handling**:
|
||||
- Wpis do `/uploads_failed.csv`
|
||||
- Wiadomość o błędzie w serial
|
||||
```cpp
|
||||
appendCsvLine(_fs, "/uploads_failed.csv", lineBase + "failed," + path + "\n");
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Problem rozwiązany - ale pojawił się nowy
|
||||
|
||||
### ✅ Co zostało naprawione
|
||||
- Upload thread teraz się **uruchamia** - logs pokazują "Upload enabled" i "Upload thread running"
|
||||
- Uploader **znajduje pliki** - logs pokazują "Found .wmt file: /1/00000001.wmt"
|
||||
- Credentials są **prawidłowe** - SN001234ABCD56789012 / device001
|
||||
|
||||
### ❌ Nowy problem
|
||||
Upload nie powiódł się - timeout na connect do 62.93.60.19:5004:
|
||||
```
|
||||
[ 11842][I][WiFiClient.cpp:260] connect(): select returned due to timeout 3000 ms for fd 48
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Problem 5: Server REST API jest niedostępny
|
||||
|
||||
### Symptom
|
||||
- Firmware próbuje połączyć się z `62.93.60.19:5004`
|
||||
- Każdy connect timeout po 3 sekundy
|
||||
- Ping do 62.93.60.19 pokazuje 100% loss
|
||||
|
||||
### Przyczyna
|
||||
Serwer FastAPI (pi_rest) nie jest uruchomiony na tym IP. Adres 62.93.60.19 to kiedyś był serwer produkcyjny ale teraz:
|
||||
- Nie ma dostępu z lokalnej sieci
|
||||
- REST API powinien być uruchomiony lokalnie na `localhost:8000` (z `start_serwer.py`)
|
||||
|
||||
### Konfiguracja w firmware
|
||||
**Plik**: `src/Config.cpp` linia 101-102
|
||||
```cpp
|
||||
strcpy(config.restURL, "http://62.93.60.19");
|
||||
config.restPort = 5004;
|
||||
```
|
||||
|
||||
Hardcoded URL - nie da się zmienić bez reflash!
|
||||
|
||||
---
|
||||
|
||||
## Sieć - Mismatch
|
||||
```
|
||||
PC (moje):
|
||||
- WiFi: 192.168.33.7
|
||||
- Eth2: 192.168.56.1
|
||||
- Tailscale: 100.94.209.73
|
||||
|
||||
ESP32:
|
||||
- WiFi: 192.168.1.9 (na sieci NETBYL)
|
||||
- Gateway: 192.168.1.1
|
||||
|
||||
Serwer REST:
|
||||
- Firmware szuka: 62.93.60.19:5004
|
||||
- Dostępny: ? (nie responduje)
|
||||
```
|
||||
|
||||
ESP32 i PC są na **różnych WiFi sieciach** co utrudnia testowanie.
|
||||
|
||||
---
|
||||
|
||||
## Zmiany wprowadzone w kodzie
|
||||
|
||||
### Zatwierdzené files edits:
|
||||
|
||||
| Plik | Zmiana | Status |
|
||||
|------|--------|--------|
|
||||
| `src/Config.cpp` | Credentials + migration logic | ✅ Flashed |
|
||||
| `src/main.cpp` | Upload thread diagnostics | ✅ Flashed |
|
||||
| `src/Uploader.cpp` | Detailed scanning logs | ✅ Flashed |
|
||||
|
||||
### Build & Flash
|
||||
```
|
||||
Compiled: ✅ 27.2% flash usage (907585 bytes)
|
||||
Flashed to: COM12 (Freenove ESP32-S3)
|
||||
Build time: ~25 seconds
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Status danych na SD card
|
||||
|
||||
| Folder | Files | Status |
|
||||
|--------|-------|--------|
|
||||
| `/1/` | 00000001.wmt - 00000351.wmt | ✅ Znalezione |
|
||||
| `/2/` | ? | Nie sprawdzane |
|
||||
| `.Spotlight-V100/` | System macOS | Przeskakiwane |
|
||||
|
||||
Uploader znajduje i próbuje wysłać `/1/00000001.wmt` ale nie może się podłączyć do serwera.
|
||||
|
||||
---
|
||||
|
||||
## Następne kroki do wykonania
|
||||
|
||||
1. **Uruchomić lokalny REST API server**
|
||||
```bash
|
||||
cd d:\Prod\pi_rest\api
|
||||
pip install -r requirements.txt
|
||||
python start_serwer.py
|
||||
# Server dostępny na http://localhost:8000
|
||||
```
|
||||
|
||||
2. **Zmienić URL w firmware** - albo:
|
||||
- Zmienić `Config.cpp` na `http://192.168.33.7` (PC IP)
|
||||
- ALBO uruchomić serwer na publicznym IP dostępnym z ESP32
|
||||
|
||||
3. **Retestować upload**
|
||||
- Zaobserwować serial monitor
|
||||
- Sprawdzić czy multipart request dociera
|
||||
- Weryfikować czy 201 Created response wróci
|
||||
|
||||
4. **Weryfikacja**
|
||||
- Check `/uploads/` na SD card czy plik się przeniesie
|
||||
- Check `/uploads.csv` czy wpis się pojawi
|
||||
- Check API database czy measurement record się utworzy
|
||||
|
||||
---
|
||||
|
||||
## Kluczowe kody i endpoints
|
||||
|
||||
### API endpoint
|
||||
```
|
||||
POST /api/v1/measurements/measurements/upload
|
||||
Content-Type: multipart/form-data
|
||||
Authorization: Basic base64(SN001234ABCD56789012:device001)
|
||||
|
||||
Body: file binary data
|
||||
Field name: "file"
|
||||
```
|
||||
|
||||
### Seeded device w bazie
|
||||
```python
|
||||
# pi_rest/init_db.py
|
||||
device = Device(
|
||||
serial="SN001234ABCD56789012",
|
||||
password_hashed=bcrypt("device001"),
|
||||
log_type=1 # HTTP BASIC auth
|
||||
)
|
||||
```
|
||||
|
||||
### Upload thread scheduling
|
||||
```cpp
|
||||
uploadThread.setInterval(5000); // every 5 seconds
|
||||
uploadThread.onRun(uploadTask);
|
||||
uploadThreadController.add(&uploadThread);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Podsumowanie błędów i napraw
|
||||
|
||||
| # | Problem | Naprawa | Plik | Status |
|
||||
|---|---------|---------|------|--------|
|
||||
| 1 | Credentials "wmt"/"Zaq12wsx" | Zmiana na test device | Config.cpp | ✅ Done |
|
||||
| 2 | EEPROM z old config | Migration logic | Config.cpp | ✅ Done |
|
||||
| 3 | uploadEnable=false | Auto-enable w migration | Config.cpp | ✅ Done |
|
||||
| 4 | Nie widać co thread robi | Dodane logi setup/loop | main.cpp | ✅ Done |
|
||||
| 5 | Uploader nie widać co robi | Dodane logi process() | Uploader.cpp | ✅ Done |
|
||||
| 6 | Server nie dostępny | | - | ⏳ TODO |
|
||||
| 7 | URL hardcoded 62.93.60.19 | Wymaga reflash | Config.cpp | ⏳ TODO |
|
||||
|
||||
---
|
||||
|
||||
## Najważniejsze wnioski
|
||||
|
||||
1. **EEPROM persistence** - Stara konfiguracja pozostaje po flash - trzeba migracyjna logika
|
||||
2. **Diagnostyka** - Logi są niezbędne do debugowania - bez nich nie wiadomo co się dzieje
|
||||
3. **Credentials w hardware** - Test device musi być seeded w bazie i znany w kodzie
|
||||
4. **Network isolation** - ESP32 na innej sieci niż PC - utrudnia testowanie
|
||||
5. **Hardcoded config** - URL serwera hardcoded - brak elastyczności
|
||||
|
||||
---
|
||||
|
||||
## Wygenerowano
|
||||
- Data: 9 maja 2026
|
||||
- Firmware: freenove_esp32_s3_wroom
|
||||
- Test Device: SN001234ABCD56789012
|
||||
40
docs/abbreviations.md
Normal 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.
|
||||
BIN
docs/box_vector/Kopia_zapasowa_front_panel.cdr
Normal file
165
docs/building1.md
Normal 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.
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 1.** Panel czołowy obudowy - wymiary |
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 2.** Nawiercone otwory wg wzorca |
|
||||
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 3.** Gotowy panel przedni - front |
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 4.** Gotowy panel przedni - tył |
|
||||
|
||||
Pamiętaj, że katoda (minus) to krótsza nóżka diody.
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 6.** Zlutowany panel przedni |
|
||||
|
||||
Pamiętaj, że katoda (minus) to krótsza nóżka diody.
|
||||
|
||||
|
||||
## Panel tylny urządzenia
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 7.** Dioda LED - oznaczenia |
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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).
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 10.** Skończony panel tylny z podłączonym SPI |
|
||||
|
||||
## Koniec etapu - panele tylny i przedni
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 11.** Panele umieszczone w obudowie |
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 12.** Panele umieszczone w obudowie |
|
||||
|
||||
# Podłączenie wyświetlacza
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 13.** Wyświeltacz LCD |
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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)
|
||||
BIN
docs/datasheets/AT24C32-datasheet.pdf
Normal file
4729
docs/datasheets/DS3231-datasheet.pdf
Normal file
BIN
docs/datasheets/a5b1274_adxl345-datasheet.pdf
Normal file
45
docs/ds3231.md
Normal 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ą.
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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
@@ -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
@@ -0,0 +1,46 @@
|
||||
# Schemat ESP32-S3-DEV-KIT-N8R8
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 1.** Moduł deweloperski ESP32S3 |
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 2.** Pinout ESP32S |
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 3.** Schemat UART USB |
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 4.** Schemat HUB USB |
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 5.** Schemat podłączenia przycisków |
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 6.** Schemat podłączenia LED RGB |
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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)
|
||||
BIN
docs/files/Kopia_zapasowa_back_panel.cdr
Normal file
BIN
docs/files/back_panel.cdr
Normal file
19798
docs/files/back_panel.dxf
Normal file
BIN
docs/files/front_panel.cdr
Normal file
20420
docs/files/front_panel.dxf
Normal file
BIN
docs/files/wzornik2.cdr
Normal file
BIN
docs/fritzing/Adafruit ADXL345.fzpz
Normal file
BIN
docs/fritzing/DS3231.fzpz
Normal file
BIN
docs/fritzing/ESP32-S3-DevKitC-1-v1.fzpz
Normal file
BIN
docs/fritzing/OLED 128x64 I2C.fzpz
Normal file
BIN
docs/fritzing/schemat.fzz
Normal file
BIN
docs/fritzing/schemat_bb.png
Normal file
|
After Width: | Height: | Size: 321 KiB |
232
docs/gy291.md
Normal file
@@ -0,0 +1,232 @@
|
||||
# Akcelerometr GY‑291 ADXL345 i2c spi
|
||||
|
||||
Moduł GY‑291 to 3‑osiowy 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:
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 2.** Schemat blokowy |
|
||||
|
||||
|
||||
|
||||
|
||||
Płytka posiada stabilizator LDO 3V3, zatem napięcie zasilania VCC musi wynosić 0d 4.0V do 6V.
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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, 13‑bitowy (3,9 mg/LSB), ±2/4/8/16 g
|
||||
- Interfejsy: I²C i SPI (3 lub 4 przewodowy)
|
||||
- Szybkość interfejsu: 100kHz, 400kHz / 5MHz
|
||||
- Rozdzielczość: (2g to 16g) 10 ~ 13 bitów
|
||||
- Zasilanie: 3–5 V,
|
||||
- Napięcie logiki: 1,7–3,6 V lub 4–6 V
|
||||
- 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 10 000 g
|
||||
- Rozmiar: około 20 × 15 mm, pin‑header do samodzielnego wlutowania
|
||||
- Współpraca z Raspberry Pi: bezpośrednie zasilanie z 3,3 V 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.
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 8.** Opcjonalne filtrowanie sygnałów |
|
||||
|
||||
|
||||
# Wtyczka
|
||||
|
||||
Typ gniazda/wtyczki: GX16-6 6 Pin Metal Male Female Panel Connector 16mm GX16-6
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 9.** Gniazdo do podłączenia akcelerometrów |
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.
|
||||
|
||||

|
||||
|
||||
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ć.
|
||||
|
||||

|
||||
|
||||
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 37–39). 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
@@ -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).
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.]
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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/
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 8.** Przycisk 1 (OK) |
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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.
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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).
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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
|
After Width: | Height: | Size: 225 KiB |
BIN
docs/images/4wire_spi.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
docs/images/6pinplug.png
Normal file
|
After Width: | Height: | Size: 537 KiB |
BIN
docs/images/DS3231-Dimensions.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
docs/images/ESP32-S3-DEV-KIT-N8R8-size.png
Normal file
|
After Width: | Height: | Size: 375 KiB |
BIN
docs/images/Z1AW_kra1.jpg
Normal file
|
After Width: | Height: | Size: 68 KiB |
BIN
docs/images/accelerometer_sensitivity_1degree_steps-enh.jpg
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
docs/images/accelgy.png
Normal file
|
After Width: | Height: | Size: 701 KiB |
BIN
docs/images/adxl345-annotated.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
docs/images/adxl345-block-diagram-enh.jpg
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
docs/images/adxl345-breakout-schematic-enh.jpg
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
docs/images/adxl345_datasheet_sensitivity_enh.jpg
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
docs/images/back1.jpeg
Normal file
|
After Width: | Height: | Size: 700 KiB |
BIN
docs/images/back2.jpeg
Normal file
|
After Width: | Height: | Size: 998 KiB |
BIN
docs/images/back3.jpeg
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
BIN
docs/images/back4.jpeg
Normal file
|
After Width: | Height: | Size: 996 KiB |
BIN
docs/images/back5.jpeg
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
docs/images/bus_error_preventing.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
docs/images/case_z47_1.png
Normal file
|
After Width: | Height: | Size: 159 KiB |
BIN
docs/images/case_z47_2.png
Normal file
|
After Width: | Height: | Size: 369 KiB |
BIN
docs/images/dcdc_p01.png
Normal file
|
After Width: | Height: | Size: 734 KiB |
BIN
docs/images/dock_esp321.png
Normal file
|
After Width: | Height: | Size: 927 KiB |
BIN
docs/images/ds3231_1.png
Normal file
|
After Width: | Height: | Size: 418 KiB |
BIN
docs/images/esp32s2-dev01.png
Normal file
|
After Width: | Height: | Size: 782 KiB |
BIN
docs/images/esp32s3_1.png
Normal file
|
After Width: | Height: | Size: 795 KiB |
BIN
docs/images/esp32s3_2.jpeg
Normal file
|
After Width: | Height: | Size: 316 KiB |
BIN
docs/images/esp_hub.png
Normal file
|
After Width: | Height: | Size: 72 KiB |
BIN
docs/images/esp_interfaces.png
Normal file
|
After Width: | Height: | Size: 296 KiB |
BIN
docs/images/esp_key.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
docs/images/esp_main.png
Normal file
|
After Width: | Height: | Size: 162 KiB |
BIN
docs/images/esp_power.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
docs/images/esp_rgb.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
docs/images/esp_uart.png
Normal file
|
After Width: | Height: | Size: 123 KiB |
BIN
docs/images/expusbC.png
Normal file
|
After Width: | Height: | Size: 144 KiB |
BIN
docs/images/finish_panel1.jpeg
Normal file
|
After Width: | Height: | Size: 2.3 MiB |
BIN
docs/images/finish_panel2.jpeg
Normal file
|
After Width: | Height: | Size: 2.5 MiB |
BIN
docs/images/front1.jpeg
Normal file
|
After Width: | Height: | Size: 783 KiB |
BIN
docs/images/front2.jpeg
Normal file
|
After Width: | Height: | Size: 1.1 MiB |
BIN
docs/images/front3.jpeg
Normal file
|
After Width: | Height: | Size: 2.4 MiB |
BIN
docs/images/gniazdo6pin.png
Normal file
|
After Width: | Height: | Size: 342 KiB |
BIN
docs/images/krad1.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
docs/images/kradex_1.png
Normal file
|
After Width: | Height: | Size: 195 KiB |
BIN
docs/images/kradex_2.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
BIN
docs/images/lcdi2c1.png
Normal file
|
After Width: | Height: | Size: 781 KiB |
BIN
docs/images/lcdi2c2.png
Normal file
|
After Width: | Height: | Size: 110 KiB |
BIN
docs/images/led1.png
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
docs/images/maping_spi_flash.png
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
docs/images/modul.png
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
BIN
docs/images/module01pin.png
Normal file
|
After Width: | Height: | Size: 429 KiB |
BIN
docs/images/oled_131.jpg
Normal file
|
After Width: | Height: | Size: 154 KiB |
BIN
docs/images/oled_132.jpg
Normal file
|
After Width: | Height: | Size: 179 KiB |
BIN
docs/images/oled_sizes.png
Normal file
|
After Width: | Height: | Size: 733 KiB |
BIN
docs/images/pbp12.png
Normal file
|
After Width: | Height: | Size: 121 KiB |
BIN
docs/images/pbp12dim.png
Normal file
|
After Width: | Height: | Size: 338 KiB |
BIN
docs/images/pin6socket.png
Normal file
|
After Width: | Height: | Size: 115 KiB |
BIN
docs/images/r13507.png
Normal file
|
After Width: | Height: | Size: 159 KiB |
BIN
docs/images/sd_content1.png
Normal file
|
After Width: | Height: | Size: 144 KiB |
BIN
docs/images/sd_content2.png
Normal file
|
After Width: | Height: | Size: 221 KiB |
BIN
docs/images/sd_modules.jpeg
Normal file
|
After Width: | Height: | Size: 1000 KiB |
BIN
docs/images/sdcard_sizes.png
Normal file
|
After Width: | Height: | Size: 484 KiB |
BIN
docs/images/spifilter01.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
BIN
docs/images/wzor1.jpeg
Normal file
|
After Width: | Height: | Size: 779 KiB |
34
docs/lcd.md
Normal 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
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 1.** Wyświetlacz |
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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
@@ -0,0 +1,98 @@
|
||||
# Pinout ESP32S3
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **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) |
|
||||
|
||||
|
||||
|  |
|
||||
|:--:|
|
||||
| **Rysunek 3.** Mapowanie pinów pomiędzy chipem a Flash i PSRAM |
|
||||
|
||||
[Powrót na stronę główną](../README.md)
|
||||