├── .github └── ISSUE_TEMPLATE │ └── ask_issue.md ├── .gitignore ├── .gitlab-ci.yml ├── .gitlab ├── ci │ ├── auto_trans.yml │ ├── build_docs.yml │ ├── deploy.yml │ ├── pre_check.yml │ ├── push_to_github.sh │ ├── rules.yml │ └── utils.sh └── tools │ ├── detect_inconsistent_line_num.py │ ├── post-mr-note.py │ ├── print_rst_file_path.py │ └── script_user_guide.txt ├── LICENSE ├── README.md ├── README_CN.md ├── docs ├── _static │ ├── application-solution.png │ ├── baidu_analytics.js │ ├── chip-marking.png │ ├── development-environment.png │ ├── docs_version.js │ ├── espressif-logo.svg │ ├── hardware-related.png │ ├── instruction.png │ ├── js │ │ ├── chatbot_widget.css │ │ ├── chatbot_widget_cn.js │ │ └── chatbot_widget_en.js │ ├── no-component.png │ ├── software-framework.png │ ├── test-verification.png │ └── theme_overrides.css ├── build_example.sh ├── check_lang_folder_sync.sh ├── conf_common.py ├── en │ ├── Makefile │ ├── _static │ │ ├── application-solution │ │ │ ├── android-application │ │ │ │ └── _static.txt │ │ │ ├── arduino-application │ │ │ │ └── _static.txt │ │ │ ├── artificial-intelligence │ │ │ │ └── _static.txt │ │ │ ├── at-application │ │ │ │ ├── AT_BLESCAN_Return_LOG.png │ │ │ │ └── _static.txt │ │ │ ├── audio-development-framework │ │ │ │ └── _static.txt │ │ │ ├── cloud-service │ │ │ │ └── _static.txt │ │ │ └── ios -application │ │ │ │ └── _static.txt │ │ ├── development-environment │ │ │ ├── IDE-plugins │ │ │ │ └── _static.txt │ │ │ ├── debugging │ │ │ │ └── _static.txt │ │ │ ├── environment-setup │ │ │ │ └── _static.txt │ │ │ └── firmware_update │ │ │ │ └── _static.txt │ │ ├── get-started │ │ │ ├── document-contribution │ │ │ │ └── _static.txt │ │ │ ├── question-feedback │ │ │ │ └── _static.txt │ │ │ └── question-search │ │ │ │ └── _static.txt │ │ ├── hardware-related │ │ │ ├── chip-comparison │ │ │ │ └── _static.txt │ │ │ ├── development-board │ │ │ │ └── _static.txt │ │ │ └── hardware-design │ │ │ │ └── _static.txt │ │ ├── software-framework │ │ │ ├── ble-bt │ │ │ │ └── _static.txt │ │ │ ├── ethernet │ │ │ │ └── _static.txt │ │ │ ├── mesh │ │ │ │ └── _static.txt │ │ │ ├── peripherals │ │ │ │ └── _static.txt │ │ │ ├── protocols │ │ │ │ └── _static.txt │ │ │ ├── provisioning │ │ │ │ └── _static.txt │ │ │ ├── security │ │ │ │ └── _static.txt │ │ │ ├── storage │ │ │ │ └── _static.txt │ │ │ ├── system │ │ │ │ └── _static.txt │ │ │ └── wifi │ │ │ │ └── _static.txt │ │ └── test-verification │ │ │ └── power-consumption-verification │ │ │ └── _static.txt │ ├── _templates │ │ └── layout.html │ ├── application-solution │ │ ├── artificial-intelligence.rst │ │ ├── at-application.rst │ │ ├── audio-development-framework.rst │ │ ├── ble-mesh-development-framework.rst │ │ ├── camera-application.rst │ │ ├── esp-matter.rst │ │ ├── esp-now.rst │ │ ├── esp-rainmaker-cloud-service.rst │ │ ├── index.rst │ │ ├── third-party-cloud-service.rst │ │ └── wifi-mesh-development-framework.rst │ ├── commercial-faq │ │ └── index.rst │ ├── conf.py │ ├── development-environment │ │ ├── IDE-plugins.rst │ │ ├── debugging.rst │ │ ├── environment-setup.rst │ │ ├── firmware-update.rst │ │ └── index.rst │ ├── hardware-related │ │ ├── RF-related.rst │ │ ├── chip-comparison.rst │ │ ├── development-board.rst │ │ ├── hardware-design.rst │ │ ├── index.rst │ │ ├── process-and-ESD.rst │ │ └── production-test.rst │ ├── index.rst │ ├── instruction │ │ ├── document-contribution.rst │ │ ├── index.rst │ │ └── question-search.rst │ ├── software-framework │ │ ├── bt │ │ │ ├── ble.rst │ │ │ ├── br-edr.rst │ │ │ ├── index.rst │ │ │ └── other-bt.rst │ │ ├── coexistence.rst │ │ ├── ethernet.rst │ │ ├── index.rst │ │ ├── peripherals │ │ │ ├── adc.rst │ │ │ ├── dac.rst │ │ │ ├── gpio.rst │ │ │ ├── i2c.rst │ │ │ ├── i2s.rst │ │ │ ├── index.rst │ │ │ ├── lcd.rst │ │ │ ├── ledc.rst │ │ │ ├── mcpwm.rst │ │ │ ├── other-peripherals.rst │ │ │ ├── pcnt.rst │ │ │ ├── rmt.rst │ │ │ ├── sdio.rst │ │ │ ├── spi.rst │ │ │ ├── timer.rst │ │ │ ├── touch.rst │ │ │ ├── twai.rst │ │ │ ├── uart.rst │ │ │ └── usb.rst │ │ ├── protocols │ │ │ ├── esp-tls.rst │ │ │ ├── http.rst │ │ │ ├── index.rst │ │ │ ├── lwip.rst │ │ │ ├── mbedtls.rst │ │ │ ├── mqtt.rst │ │ │ └── other-protocols.rst │ │ ├── provisioning.rst │ │ ├── security.rst │ │ ├── storage │ │ │ ├── fatfs.rst │ │ │ ├── index.rst │ │ │ ├── nvs.rst │ │ │ ├── other-storages.rst │ │ │ ├── psram.rst │ │ │ ├── sd-sdio-mmc.rst │ │ │ ├── spi-flash.rst │ │ │ └── spiffs.rst │ │ ├── system.rst │ │ ├── thread.rst │ │ ├── wifi.rst │ │ └── zigbee.rst │ └── test-verification │ │ ├── index.rst │ │ └── power-consumption-verification.rst ├── requirements.txt └── zh_CN │ ├── Makefile │ ├── _static │ ├── application-solution │ │ ├── android-application │ │ │ └── _static.txt │ │ ├── arduino-application │ │ │ └── _static.txt │ │ ├── artificial-intelligence │ │ │ └── _static.txt │ │ ├── at-application │ │ │ ├── AT_BLESCAN_Return_LOG.png │ │ │ └── _static.txt │ │ ├── audio-development-framework │ │ │ └── _static.txt │ │ ├── cloud-service │ │ │ └── _static.txt │ │ └── ios -application │ │ │ └── _static.txt │ ├── development-environment │ │ ├── IDE-plugins │ │ │ └── _static.txt │ │ ├── debugging │ │ │ └── _static.txt │ │ ├── environment-setup │ │ │ └── _static.txt │ │ └── firmware_update │ │ │ └── _static.txt │ ├── get-started │ │ ├── document-contribution │ │ │ └── _static.txt │ │ ├── question-feedback │ │ │ └── _static.txt │ │ └── question-search │ │ │ └── _static.txt │ ├── hardware-related │ │ ├── chip-comparison │ │ │ └── _static.txt │ │ ├── development-board │ │ │ └── _static.txt │ │ └── hardware-design │ │ │ └── _static.txt │ ├── software-framework │ │ ├── ble-bt │ │ │ └── _static.txt │ │ ├── ethernet │ │ │ └── _static.txt │ │ ├── mesh │ │ │ └── _static.txt │ │ ├── peripherals │ │ │ └── _static.txt │ │ ├── protocols │ │ │ └── _static.txt │ │ ├── provisioning │ │ │ └── _static.txt │ │ ├── security │ │ │ └── _static.txt │ │ ├── storage │ │ │ └── _static.txt │ │ ├── system │ │ │ └── _static.txt │ │ └── wifi │ │ │ └── _static.txt │ └── test-verification │ │ └── power-consumption-verification │ │ └── _static.txt │ ├── _templates │ └── layout.html │ ├── application-solution │ ├── artificial-intelligence.rst │ ├── at-application.rst │ ├── audio-development-framework.rst │ ├── ble-mesh-development-framework.rst │ ├── camera-application.rst │ ├── esp-matter.rst │ ├── esp-now.rst │ ├── esp-rainmaker-cloud-service.rst │ ├── index.rst │ ├── third-party-cloud-service.rst │ └── wifi-mesh-development-framework.rst │ ├── commercial-faq │ └── index.rst │ ├── conf.py │ ├── development-environment │ ├── IDE-plugins.rst │ ├── debugging.rst │ ├── environment-setup.rst │ ├── firmware-update.rst │ └── index.rst │ ├── hardware-related │ ├── RF-related.rst │ ├── chip-comparison.rst │ ├── development-board.rst │ ├── hardware-design.rst │ ├── index.rst │ ├── process-and-ESD.rst │ └── production-test.rst │ ├── index.rst │ ├── instruction │ ├── document-contribution.rst │ ├── index.rst │ └── question-search.rst │ ├── software-framework │ ├── bt │ │ ├── ble.rst │ │ ├── br-edr.rst │ │ ├── index.rst │ │ └── other-bt.rst │ ├── coexistence.rst │ ├── ethernet.rst │ ├── index.rst │ ├── peripherals │ │ ├── adc.rst │ │ ├── dac.rst │ │ ├── gpio.rst │ │ ├── i2c.rst │ │ ├── i2s.rst │ │ ├── index.rst │ │ ├── lcd.rst │ │ ├── ledc.rst │ │ ├── mcpwm.rst │ │ ├── other-peripherals.rst │ │ ├── pcnt.rst │ │ ├── rmt.rst │ │ ├── sdio.rst │ │ ├── spi.rst │ │ ├── timer.rst │ │ ├── touch.rst │ │ ├── twai.rst │ │ ├── uart.rst │ │ └── usb.rst │ ├── protocols │ │ ├── esp-tls.rst │ │ ├── http.rst │ │ ├── index.rst │ │ ├── lwip.rst │ │ ├── mbedtls.rst │ │ ├── mqtt.rst │ │ └── other-protocols.rst │ ├── provisioning.rst │ ├── security.rst │ ├── storage │ │ ├── fatfs.rst │ │ ├── index.rst │ │ ├── nvs.rst │ │ ├── other-storages.rst │ │ ├── psram.rst │ │ ├── sd-sdio-mmc.rst │ │ ├── spi-flash.rst │ │ └── spiffs.rst │ ├── system.rst │ ├── thread.rst │ ├── wifi.rst │ └── zigbee.rst │ └── test-verification │ ├── index.rst │ └── power-consumption-verification.rst └── translate_config.yml /.github/ISSUE_TEMPLATE/ask_issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Ask issue 3 | about: Ask issue, need relevant answer issue 4 | title: 'Ask issue: ' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## Environment 11 | 12 | - Chip used: [ESP8266|ESP8285|ESP32|ESP32S2|ESP32S3|ESP32C3|none] 13 | - SDK version (run ``git describe --tags`` to find it): 14 | 15 | ## Ask Issue 16 | 17 | - Q: 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Object files 5 | *.o 6 | *.ko 7 | *.obj 8 | *.elf 9 | 10 | # Linker output 11 | *.ilk 12 | *.map 13 | *.exp 14 | 15 | # Precompiled Headers 16 | *.gch 17 | *.pch 18 | 19 | # Libraries 20 | *.lib 21 | *.a 22 | *.la 23 | *.lo 24 | 25 | # Shared objects (inc. Windows DLLs) 26 | *.dll 27 | *.so 28 | *.so.* 29 | *.dylib 30 | 31 | # Executables 32 | *.exe 33 | *.out 34 | *.app 35 | *.i*86 36 | *.x86_64 37 | *.hex 38 | *.pyc 39 | 40 | # Debug files 41 | *.dSYM/ 42 | *.su 43 | *.idb 44 | *.pdb 45 | 46 | # Kernel Module Compile Results 47 | *.mod* 48 | *.cmd 49 | .tmp_versions/ 50 | modules.order 51 | Module.symvers 52 | Mkfile.old 53 | dkms.conf 54 | 55 | # emacs 56 | .dir-locals.el 57 | 58 | # emacs temp file suffixes 59 | *~ 60 | .#* 61 | \#*# 62 | 63 | # eclipse settings 64 | .settings 65 | 66 | # VS Code settings 67 | .vscode 68 | 69 | # MacOS directory files 70 | .DS_Store 71 | 72 | # Doc build artifacts 73 | docs/_build/ 74 | docs/*/_build/ 75 | docs/*/sphinx-warning-log.txt 76 | docs/*/sphinx-warning-log-sanitized.txt 77 | 78 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | stages: 2 | - pre_check 3 | - auto_trans 4 | - build_docs 5 | - deploy 6 | 7 | workflow: 8 | rules: 9 | # Disable those non-protected push triggered pipelines 10 | - if: '$CI_COMMIT_REF_NAME != "master" && $CI_COMMIT_BRANCH !~ /^release\/v/ && $CI_COMMIT_TAG !~ /^v\d+\.\d+(\.\d+)?($|-)/ && $CI_PIPELINE_SOURCE == "push"' 11 | when: never 12 | # when running merged result pipelines, it would create a temp commit id. use $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA instead of $CI_COMMIT_SHA. 13 | # Please use PIPELINE_COMMIT_SHA at all places that require a commit sha 14 | - if: $CI_OPEN_MERGE_REQUESTS != null 15 | variables: 16 | PIPELINE_COMMIT_SHA: $CI_MERGE_REQUEST_SOURCE_BRANCH_SHA 17 | - if: $CI_OPEN_MERGE_REQUESTS == null 18 | variables: 19 | PIPELINE_COMMIT_SHA: $CI_COMMIT_SHA 20 | - when: always 21 | 22 | include: 23 | - '.gitlab/ci/rules.yml' 24 | - '.gitlab/ci/pre_check.yml' 25 | - '.gitlab/ci/build_docs.yml' 26 | - '.gitlab/ci/deploy.yml' 27 | - '.gitlab/ci/auto_trans.yml' -------------------------------------------------------------------------------- /.gitlab/ci/auto_trans.yml: -------------------------------------------------------------------------------- 1 | translate: 2 | extends: 3 | - .rules:auto_trans:translate 4 | image: python:3.8 5 | stage: auto_trans 6 | tags: 7 | - build_docs 8 | script: 9 | - echo "Begin Translation" 10 | - python3 --version 11 | - /usr/local/bin/python -m pip install --upgrade pip 12 | - git clone -b change/replace_the_model_with_gpt_4_1106_preview $AUTO_TRANSLATE_REPO 13 | - pip3 install -r ./auto-translate/requirements.txt 14 | - python3 ./auto-translate/check_line_num.py 15 | - echo "Check Completed" 16 | - git checkout $CI_COMMIT_REF_NAME 17 | - echo $TRANS_FILE 18 | - TRANS_FILES_STR=$(echo $TRANS_FILE | sed 's/\[//g' | sed 's/\]//g' | sed 's/"//g' | tr ',' ' ') 19 | - echo $TRANS_FILES_STR 20 | - python3 ./auto-translate/translate_rst_files.py $OPENAI_API_KEY $GITLAB_URL $CHATGPT_BOT_TOKEN $PROJECT_ID $CI_COMMIT_REF_NAME -f $TRANS_FILES_STR 21 | - echo "Translation Completed" 22 | -------------------------------------------------------------------------------- /.gitlab/ci/build_docs.yml: -------------------------------------------------------------------------------- 1 | variables: 2 | ESP_IDF_DOC_ENV_IMAGE: "$CI_DOCKER_REGISTRY/esp-idf-doc-env-v5.0:4-4" 3 | 4 | .before_script_install_requirements: 5 | before_script: 6 | # Use CI Tools 7 | - source .gitlab/ci/utils.sh 8 | - pip install -r docs/requirements.txt 9 | 10 | .build_docs_html_template: 11 | image: $ESP_IDF_DOC_ENV_IMAGE 12 | stage: build_docs 13 | extends: 14 | - .before_script_install_requirements 15 | tags: 16 | - build_docs 17 | variables: 18 | DOC_BUILDERS: "html" 19 | DOCS_DIR: $CI_PROJECT_DIR/docs 20 | dependencies: [] 21 | script: 22 | - cd $DOCS_DIR 23 | - build-docs -bs $DOC_BUILDERS -l $DOCLANG build 24 | - ./check_lang_folder_sync.sh 25 | 26 | .build_docs_pdf_template: 27 | image: $ESP_IDF_DOC_ENV_IMAGE 28 | stage: build_docs 29 | extends: 30 | - .before_script_install_requirements 31 | tags: 32 | - build_docs 33 | variables: 34 | DOCS_DIR: $CI_PROJECT_DIR/docs 35 | dependencies: [] 36 | script: 37 | - cd $DOCS_DIR 38 | - build-docs --skip-reqs-check -l $DOCLANG -bs latex 39 | 40 | build_docs_html: 41 | extends: 42 | - .build_docs_html_template 43 | - .rules:build:docs 44 | artifacts: 45 | when: always 46 | paths: 47 | - $DOCS_DIR/_build/*/*/*.txt 48 | - $DOCS_DIR/_build/*/*/html/* 49 | expire_in: 4 days 50 | parallel: 51 | matrix: 52 | - DOCLANG: "en" 53 | - DOCLANG: "zh_CN" 54 | 55 | build_docs_pdf: 56 | extends: 57 | - .build_docs_pdf_template 58 | - .rules:build:docs 59 | artifacts: 60 | when: always 61 | paths: 62 | - $DOCS_DIR/_build/*/*/latex/* 63 | - $DOCS_DIR/_build/*/*/*.txt 64 | expire_in: 4 days 65 | parallel: 66 | matrix: 67 | - DOCLANG: "en" 68 | - DOCLANG: "zh_CN" -------------------------------------------------------------------------------- /.gitlab/ci/deploy.yml: -------------------------------------------------------------------------------- 1 | variables: 2 | # Versioned esp-idf-doc env image to use for all document building jobs 3 | ESP_DOCS_ENV_IMAGE: "$CI_DOCKER_REGISTRY/esp-idf-doc-env-v5.0" 4 | 5 | push_master_to_github: 6 | stage: deploy 7 | only: 8 | - master 9 | - /^release\/v/ 10 | # when: on_success 11 | image: $CI_DEPLOY_DOCKER 12 | variables: 13 | GIT_STRATEGY: clone 14 | GITHUB_PUSH_REFS: refs/remotes/origin/release refs/remotes/origin/master 15 | before_script: 16 | - echo "skip default before_script" 17 | script: 18 | - mkdir -p ~/.ssh 19 | - chmod 700 ~/.ssh 20 | - echo -n $GH_PUSH_KEY >> ~/.ssh/id_rsa_base64 21 | - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa 22 | - chmod 600 ~/.ssh/id_rsa 23 | - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config 24 | - git remote add github git@github.com:espressif/esp-faq.git 25 | - ${CI_PROJECT_DIR}/.gitlab/ci/push_to_github.sh 26 | 27 | .deploy_docs_template: 28 | stage: deploy 29 | image: $ESP_DOCS_ENV_IMAGE 30 | tags: 31 | - deploy_docs 32 | needs: 33 | - job: "build_docs_html" 34 | artifacts: true 35 | optional: true 36 | - job: "build_docs_pdf" 37 | artifacts: true 38 | optional: true 39 | script: 40 | - source ${CI_PROJECT_DIR}/.gitlab/ci/utils.sh 41 | - add_doc_server_ssh_keys $DOCS_DEPLOY_PRIVATEKEY $DOCS_DEPLOY_SERVER $DOCS_DEPLOY_SERVER_USER 42 | - export GIT_VER=$(git describe --always) 43 | - pip install -r ${CI_PROJECT_DIR}/docs/requirements.txt 44 | - mkdir -p logs 45 | - deploy-docs | tee logs/doc-url.txt 46 | 47 | deploy_docs_preview: 48 | extends: 49 | - .deploy_docs_template 50 | - .rules:deploy:docs_preview 51 | variables: 52 | TYPE: "preview" 53 | DOCS_BUILD_DIR: "${CI_PROJECT_DIR}/docs/_build/" 54 | DOCS_DEPLOY_PRIVATEKEY: "$DOCS_PREVIEW_DEPLOY_KEY" 55 | DOCS_DEPLOY_SERVER: "$DOCS_PREVIEW_SERVER" 56 | DOCS_DEPLOY_SERVER_USER: "$DOCS_PREVIEW_SERVER_USER" 57 | DOCS_DEPLOY_PATH: "$DOCS_PREVIEW_PATH" 58 | DOCS_DEPLOY_URL_BASE: "$DOCS_PREVIEW_URL_BASE" 59 | artifacts: 60 | when: always 61 | paths: 62 | - logs/doc-url.txt 63 | expire_in: 4 days 64 | 65 | deploy_docs_production: 66 | extends: 67 | - .deploy_docs_template 68 | - .rules:deploy:docs_production 69 | variables: 70 | TYPE: "production" 71 | DOCS_BUILD_DIR: "${CI_PROJECT_DIR}/docs/_build/" 72 | DOCS_DEPLOY_PRIVATEKEY: "$DOCS_PROD_DEPLOY_KEY" 73 | DOCS_DEPLOY_SERVER: "$DOCS_PROD_SERVER" 74 | DOCS_DEPLOY_SERVER_USER: "$DOCS_PROD_SERVER_USER" 75 | DOCS_DEPLOY_PATH: "$DOCS_PROD_PATH" 76 | DOCS_DEPLOY_URL_BASE: "$DOCS_PROD_URL_BASE" 77 | 78 | post_links: 79 | stage: deploy 80 | tags: [deploy_docs] 81 | image: $ESP_DOCS_ENV_IMAGE 82 | needs: 83 | - deploy_docs_preview 84 | rules: 85 | # Run for all changes to a merge request's source branch 86 | - if: $CI_PIPELINE_SOURCE == 'merge_request_event' 87 | script: 88 | - ls -al logs 89 | - python3 ${CI_PROJECT_DIR}/.gitlab/tools/post-mr-note.py $GITLAB_MR_NOTE_TOKEN $CI_PROJECT_PATH $CI_MERGE_REQUEST_IID -------------------------------------------------------------------------------- /.gitlab/ci/pre_check.yml: -------------------------------------------------------------------------------- 1 | variables: 2 | ESP_IDF_DOC_ENV_IMAGE: "$CI_DOCKER_REGISTRY/esp-idf-doc-env-v5.0:4-4" 3 | 4 | .before_script_install_requirements: 5 | before_script: 6 | # Use CI Tools 7 | - source $CI_PROJECT_DIR/.gitlab/ci/utils.sh 8 | - pip install -r $CI_PROJECT_DIR/docs/requirements.txt 9 | 10 | .doc_linkcheck_template: 11 | stage: pre_check 12 | image: $ESP_DOCS_ENV_IMAGE 13 | allow_failure: true 14 | tags: 15 | - build_docs 16 | script: 17 | - cd $CI_PROJECT_DIR/docs 18 | - build-docs -l $DOCLANG linkcheck 19 | parallel: 20 | matrix: 21 | - DOCLANG: ["en", "zh_CN"] 22 | 23 | doc_linkcheck: 24 | extends: 25 | - .before_script_install_requirements 26 | - .doc_linkcheck_template 27 | - .rules:pre_check:linkcheck 28 | 29 | -------------------------------------------------------------------------------- /.gitlab/ci/push_to_github.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # gitlab-ci script to push current tested revision (tag or branch) to github 4 | 5 | set -ex 6 | 7 | if [ -n "${CI_COMMIT_TAG}" ]; then 8 | # for tags 9 | git push --force github "${CI_COMMIT_TAG}" 10 | else 11 | # for branches 12 | git push github --force "${CI_COMMIT_SHA}:refs/heads/${CI_COMMIT_REF_NAME}" 13 | fi 14 | -------------------------------------------------------------------------------- /.gitlab/ci/rules.yml: -------------------------------------------------------------------------------- 1 | ############ 2 | # Patterns # 3 | ############ 4 | 5 | 6 | # examples folder, in the alphabetic order 7 | .patterns-docs: &patterns-docs 8 | - "docs/**/*" 9 | 10 | 11 | ############## 12 | # if anchors # 13 | ############## 14 | .if-dev-push: &if-dev-push 15 | if: '$CI_COMMIT_REF_NAME != "master" && $CI_COMMIT_BRANCH !~ /^release\/v/ && $CI_COMMIT_TAG !~ /^v\d+\.\d+(\.\d+)?($|-)/ && ($CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "merge_request_event")' 16 | 17 | .if-linkcheck: &if-linkcheck 18 | if: '$CI_COMMIT_REF_NAME =~ /^maintain.*/ || $CI_COMMIT_BRANCH =~ /^linkcheck.*/' 19 | 20 | .if-protected: &if-protected 21 | if: '($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_BRANCH =~ /^release\/v/ || $CI_COMMIT_TAG =~ /^v\d+\.\d+(\.\d+)?($|-)/)' 22 | 23 | ################## 24 | # Auto Generated # 25 | ################## 26 | .if-trigger-job: &if-trigger-job 27 | if: '$CI_JOB_NAME =~ $BOT_DYNAMIC_TEST_JOBS && $BOT_DYNAMIC_TEST_JOBS' 28 | 29 | .if-label-auto-trans: &if-label-auto_trans 30 | if: '$BOT_LABEL_AUTO_TRANS || $CI_MERGE_REQUEST_LABELS =~ /^(?:[^,\n\r]+,)*auto_trans(?:,[^,\n\r]+)*$/i' 31 | 32 | .if-label-build_docs: &if-label-build_docs 33 | if: '$BOT_LABEL_BUILD_DOCS || $CI_MERGE_REQUEST_LABELS =~ /^(?:[^,\n\r]+,)*build_docs(?:,[^,\n\r]+)*$/i' 34 | 35 | .if-label-pre_check: &if-label-pre_check 36 | if: '$BOT_LABEL_PRE_CHECK || $CI_MERGE_REQUEST_LABELS =~ /^(?:[^,\n\r]+,)*pre_check(?:,[^,\n\r]+)*$/i' 37 | 38 | .if_label-deploy: &if-label-deploy 39 | if: '$BOT_LABEL_DEPLOY || $CI_MERGE_REQUEST_LABELS =~ /^(?:[^,\n\r]+,)*deploy(?:,[^,\n\r]+)*$/i' 40 | 41 | # For docs 42 | 43 | .rules:pre_check:linkcheck: 44 | rules: 45 | - <<: *if-linkcheck 46 | - <<: *if-label-pre_check 47 | - <<: *if-trigger-job 48 | 49 | .rules:pre_check:readme: 50 | rules: 51 | - <<: *if-protected 52 | - <<: *if-label-pre_check 53 | - <<: *if-trigger-job 54 | - <<: *if-dev-push 55 | changes: *patterns-docs 56 | - <<: *if-dev-push 57 | changes: *patterns-docs 58 | 59 | .rules:build:docs: 60 | rules: 61 | - <<: *if-protected 62 | - <<: *if-label-build_docs 63 | - <<: *if-trigger-job 64 | - <<: *if-dev-push 65 | changes: *patterns-docs 66 | - <<: *if-dev-push 67 | changes: *patterns-docs 68 | 69 | .rules:deploy:docs_preview: 70 | rules: 71 | - <<: *if-label-build_docs 72 | - <<: *if-trigger-job 73 | - <<: *if-dev-push 74 | changes: *patterns-docs 75 | - <<: *if-dev-push 76 | changes: *patterns-docs 77 | 78 | 79 | .rules:deploy:docs_production: 80 | rules: 81 | - <<: *if-protected 82 | 83 | .rules:auto_trans:translate: 84 | rules: 85 | - <<: *if-label-auto_trans 86 | - <<: *if-trigger-job 87 | 88 | 89 | .rules:deploy:docs_preview: 90 | rules: 91 | - <<: *if-label-build_docs 92 | - <<: *if-dev-push 93 | changes: *patterns-docs 94 | 95 | 96 | .rules:deploy:docs_production: 97 | rules: 98 | - <<: *if-protected 99 | -------------------------------------------------------------------------------- /.gitlab/ci/utils.sh: -------------------------------------------------------------------------------- 1 | # Modified from https://gitlab.com/gitlab-org/gitlab/-/blob/master/scripts/utils.sh 2 | 3 | function add_ssh_keys() { 4 | local key_string="${1}" 5 | mkdir -p ~/.ssh 6 | chmod 700 ~/.ssh 7 | echo -n "${key_string}" >~/.ssh/id_rsa_base64 8 | base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 >~/.ssh/id_rsa 9 | chmod 600 ~/.ssh/id_rsa 10 | } 11 | 12 | function add_doc_server_ssh_keys() { 13 | local key_string="${1}" 14 | local server_url="${2}" 15 | local server_user="${3}" 16 | add_ssh_keys "${key_string}" 17 | echo -e "Host ${server_url}\n\tStrictHostKeyChecking no\n\tUser ${server_user}\n" >>~/.ssh/config 18 | } -------------------------------------------------------------------------------- /.gitlab/tools/detect_inconsistent_line_num.py: -------------------------------------------------------------------------------- 1 | # the script to detect inconsistent line number between EN and CN documents 2 | # the command is : python3 detect_inconsistent_line_num.py 3 | 4 | import os 5 | import argparse 6 | 7 | ERROR_FILES = {} 8 | 9 | 10 | def reformat_target_file_by_src_file(target_file_path, src_file_path): 11 | """ 12 | To check the formatting of a translated file based on the format of a source file 13 | """ 14 | global ERROR_FILES 15 | with open(target_file_path, "r", errors='ignore') as tf, open(src_file_path, "r", errors='ignore') as sf: 16 | tf_line_number = 0 17 | tf_read_lines = tf.readlines() 18 | tf_max_len = len(tf_read_lines) 19 | 20 | for src_line in sf: 21 | if tf_line_number >= tf_max_len: 22 | ERROR_FILES[target_file_path] = tf_line_number + 1 # if src_file longer than target_file 23 | return 24 | tf_line = tf_read_lines[tf_line_number] 25 | src_line_strip = src_line.strip() 26 | tf_line_strip = tf_line.strip() 27 | 28 | if (tf_line.startswith('---') ^ src_line.startswith('---')) or (src_line_strip and not tf_line_strip) or ( 29 | not src_line_strip and tf_line_strip): 30 | ERROR_FILES[target_file_path] = tf_line_number + 1 # the file has error 31 | return 32 | 33 | tf_line_number += 1 34 | 35 | with open(src_file_path, "r", errors='ignore') as sf: # if src_file shorter than target_file 36 | sf_read_lines = sf.readlines() 37 | sf_max_len = len(sf_read_lines) 38 | if tf_max_len != sf_max_len: 39 | ERROR_FILES[target_file_path] = sf_max_len + 1 # the file has error 40 | return 41 | 42 | 43 | def get_out_file_path(file_name): 44 | _, pure_filename = os.path.split(file_name) 45 | out_file_path = None 46 | 47 | if '/en/' in file_name: 48 | out_file_path = file_name.replace('/en/', '/zh_CN/') 49 | elif '/zh_CN/' in file_name: 50 | out_file_path = file_name.replace('/zh_CN/', '/en/') 51 | else: 52 | print('\033[31m Not found the other file!\033[0m') 53 | 54 | return out_file_path 55 | 56 | 57 | def get_file_list(directory): 58 | """ 59 | Get all files in the directory or single file. 60 | """ 61 | file_list = [] 62 | if os.path.isfile(directory): 63 | return [directory] 64 | for path, _, files in os.walk(directory, topdown=True): 65 | subdir_file_list = [os.path.join(path, file) for file in files] 66 | file_list.extend(subdir_file_list) 67 | return file_list 68 | 69 | 70 | if __name__ == "__main__": 71 | """ 72 | This script will read all the files in the input directory 73 | and translate text stored in each file.11 74 | """ 75 | CMD_EPILOG = 'Example of use: sk-... (OPENAI_API_KEY)' 76 | parser = argparse.ArgumentParser(epilog=CMD_EPILOG, formatter_class=argparse.RawDescriptionHelpFormatter) 77 | parser.add_argument('filename', action='store', type=str, 78 | help='specify file or tcf(all files in translate_config.yml)') 79 | args = parser.parse_args() 80 | 81 | file_list = get_file_list(args.filename) 82 | 83 | for file in file_list: 84 | out_file_path = get_out_file_path(file) 85 | if out_file_path: 86 | reformat_target_file_by_src_file(out_file_path, file) 87 | 88 | if ERROR_FILES: 89 | print( 90 | '\033[31m These files have inconsistent line numbers between Chinese and English (begin line num):\033[0m') 91 | for error_file in ERROR_FILES: 92 | print(f'\033[31m {error_file} {ERROR_FILES[error_file]}\033[0m') -------------------------------------------------------------------------------- /.gitlab/tools/post-mr-note.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import sys, os, urllib3, argparse 4 | # Silence the irritating insecure warnings. 5 | urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) 6 | 7 | # Add the location of python-gitlab to the path so we can import it 8 | repo_top = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..')) 9 | python_gitlab_dir = os.path.join(repo_top, "external/python-gitlab") 10 | sys.path.append(python_gitlab_dir) 11 | import gitlab 12 | 13 | 14 | def getArgs(): 15 | """ 16 | Parse the command line arguments. 17 | Usage: python post-mr-note.py [PROJECT-TOKEN] [PROJECT] [MR-IID] 18 | Sample usage: python post-mr-note.py [PROJECT-TOKEN] espressif/esp-hardware-design-guidelines 7 19 | """ 20 | parser = argparse.ArgumentParser(description='Post note to existing MR.', 21 | formatter_class=argparse.ArgumentDefaultsHelpFormatter) 22 | parser.add_argument( "authkey", type=str, help="Project or personal access token for authentication with GitLab. Create one at https://gitlab.com/profile/personal_access_tokens" ) 23 | parser.add_argument( "project", type=str, help="Path to GitLab project in the form /") 24 | parser.add_argument( "mr_iid", type=str, help="Merge request number to post the message") 25 | parser.add_argument( "--url", help="Gitlab URL.", default='https://gitlab.espressif.cn:6688') 26 | return parser, parser.parse_args() 27 | 28 | 29 | class PythonGitlabNotes(): 30 | """ 31 | Collect links to artifacts saved by other jobs in logs folder. 32 | Post the links as a note to an existing merge request. 33 | """ 34 | def __init__(self, url, authkey, project, mr_iid): 35 | # Parse command line arguments 36 | self.url = url 37 | self.url_api = url + '/api/v4' 38 | self.authkey = authkey 39 | self.project_name = project 40 | self.mr_iid = mr_iid 41 | # Create python-gitlab server instance 42 | server = gitlab.Gitlab(self.url, myargs.authkey, api_version=4, ssl_verify=False) 43 | # Get an instance of the project and store it off 44 | self.project = server.projects.get(self.project_name) 45 | 46 | 47 | def collect_data(self): 48 | series_links = {} 49 | with open("logs/doc-url.txt", "r") as file: 50 | for line in file: 51 | if line.startswith('[document preview]'): 52 | tokens = line.split(']') 53 | desc_url = tokens[2] 54 | lang_chip_info = tokens[1] 55 | lang_chip = lang_chip_info.strip(']').strip('[').split('_') 56 | if len(lang_chip) == 1: 57 | language = 'en' 58 | chip_series = 'reserve' # Reserve for the future 59 | if len(lang_chip) == 2: 60 | language = 'zh_CN' 61 | chip_series = 'reserve' # Reserve for the future 62 | 63 | if chip_series in series_links: 64 | language_links = series_links[chip_series] 65 | language_links[language] = desc_url 66 | else: 67 | language_links = {language: desc_url} 68 | series_links[chip_series] = language_links 69 | self.series_links = series_links 70 | print(series_links) # Debugging line 71 | 72 | def prepare_note(self): 73 | """ 74 | Prepare a note with links to be posted in .md format. 75 | """ 76 | note = "Documentation preview:\n\n" 77 | for chip_series, language_links in self.series_links.items(): 78 | product_name = chip_series.upper() # Default value 79 | if chip_series == 'reserve': # Reserve for the future 80 | product_name = 'ESP-FAQ' 81 | elif chip_series == 'reserve2': # Reserve for the future 82 | product_name = 'ESP-FAQ' 83 | 84 | # note += f"- {product_name} " 85 | if 'zh_CN' in language_links: 86 | note += f"[ESP-FAQ CN]({language_links['zh_CN']})/" 87 | else: 88 | note += "ESP-FAQ CN" 89 | if 'en' in language_links: 90 | note += f"[ESP-FAQ EN]({language_links['en']})" 91 | else: 92 | note += "ESP-FAQ EN" 93 | note += "\n" 94 | self.note = note 95 | print(note) # Debugging line 96 | 97 | def post_note(self): 98 | """ 99 | Post the note to the merge request. 100 | """ 101 | # Get the MR 102 | mr = self.project.mergerequests.get(self.mr_iid) 103 | # Post the note to the MR 104 | mr.notes.create({'body': self.note}) 105 | 106 | def run(self): 107 | self.collect_data() 108 | self.prepare_note() 109 | self.post_note() 110 | 111 | 112 | if __name__ == '__main__': 113 | myParser, myargs = getArgs() 114 | sys.exit(PythonGitlabNotes(url=myargs.url, authkey=myargs.authkey, 115 | project=myargs.project, mr_iid=myargs.mr_iid).run()) 116 | -------------------------------------------------------------------------------- /.gitlab/tools/print_rst_file_path.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | def find_rst_files(folder_path): 5 | rst_files = [] 6 | for root, dirs, files in os.walk(folder_path): 7 | for file in files: 8 | if file.endswith(".rst"): 9 | rst_files.append(os.path.relpath(os.path.join(root, file), reference_path)) 10 | return rst_files 11 | 12 | # 获取命令行参数 13 | if len(sys.argv) != 3: 14 | print("请提供文件夹路径和参考文件路径作为命令行参数。") 15 | sys.exit(1) 16 | 17 | folder_path = sys.argv[1] 18 | reference_path = sys.argv[2] 19 | 20 | # 验证输入路径是否存在 21 | if not os.path.exists(folder_path): 22 | print("指定的文件夹路径不存在。") 23 | sys.exit(1) 24 | if not os.path.exists(reference_path): 25 | print("指定的参考文件路径不存在。") 26 | sys.exit(1) 27 | 28 | # 查找所有 rst 文件的相对路径并按文件名首字母排序 29 | rst_files = find_rst_files(folder_path) 30 | rst_files = sorted(rst_files) 31 | 32 | # 打印输出 33 | if rst_files: 34 | print("以下是所有的 .rst 文件的相对路径(按文件名首字母排序):") 35 | for rst_file in rst_files: 36 | print(rst_file) 37 | else: 38 | print("未找到任何 .rst 文件。") -------------------------------------------------------------------------------- /.gitlab/tools/script_user_guide.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | print_rst_file_path.py : 4 | 5 | python3 print_rst_file_path.py source_folder_path reference_path 6 | 7 | For example : python3 print_rst_file_path.py ../../docs/zh_CN ../../ 8 | 9 | ------------------------------- 10 | 11 | detect_inconsistent_line_num.py : 12 | 13 | python3 detect_inconsistent_line_num.py source_folder_path 14 | 15 | For example : python3 detect_inconsistent_line_num.py ../../docs/zh_CN -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ESP-FAQ Framework 2 | 3 | [![Documentation Status](https://dl.espressif.com/AE/docs/docs_latest.svg)](https://docs.espressif.com/projects/esp-faq/en/latest/) 4 | 5 | * [中文版](./README_CN.md) 6 | 7 | ESP-FAQ is a summary document for common problems launched by Espressif. 8 | 9 | ## Hosted Documentation 10 | 11 | * English: https://docs.espressif.com/projects/espressif-esp-faq/en/latest/ 12 | * 中文: https://docs.espressif.com/projects/espressif-esp-faq/zh_CN/latest/ 13 | 14 | ## ESP-FAQ Document framework 15 | 16 | ### language support 17 | 18 | * The document framework supports reStructuredText and Markdown lightweight markup languages. 19 | 20 | ### Document structure 21 | 22 | ``` bash 23 | docs 24 | ├── _static 25 | │ ├── espressif-logo.svg # Web logo 26 | │ └── theme_overrides.css # Web Style Sheet 27 | ├── zh_CN 28 | │ ├── _static # Inline resources 29 | │ ├── instruction # Instruction 30 | │ ├── commercial-faq # Commercial faq 31 | │ ├── development-environment # Development environment 32 | │ ├── application-solution # Application solution 33 | │ ├── hardware-related # Hardware related 34 | │ ├── software-framework # Software framework 35 | │ ├── test-verification # Test verification 36 | │ ├── config.py # Sphinx config 37 | │ ├── Makefile # Compile file 38 | │ └── index.rst # Home 39 | └── en 40 | ├── _static # Inline resources 41 | ├── instruction # Instruction 42 | ├── commercial-faq # Commercial faq 43 | ├── development-environment # Development environment 44 | ├── application-solution # Application solution 45 | ├── hardware-related # Hardware related 46 | ├── software-framework # Software framework 47 | ├── test-verification # Test verification 48 | ├── config.py # Sphinx config 49 | ├── Makefile # Compile file 50 | └── index.rst # Home 51 | ``` 52 | 53 | ## Resources 54 | 55 | * The [esp32.com forum](https://esp32.com/) is a place to ask questions and find community resources. 56 | 57 | * [Check the Issues section on github](https://github.com/espressif/esp-faq/issues) if you find a bug or have a feature request. Please check existing Issues before opening a new one. 58 | 59 | * If you're interested in contributing to ESP-IDF, please check the [Contributions Guide](https://docs.espressif.com/projects/espressif-esp-faq/en/latest/instruction/document-contribution.html). 60 | -------------------------------------------------------------------------------- /README_CN.md: -------------------------------------------------------------------------------- 1 | # Espressif FAQ 文档 2 | 3 | [![Documentation Status](https://dl.espressif.com/AE/docs/docs_latest.svg)](https://docs.espressif.com/projects/esp-faq/zh_CN/latest/) 4 | 5 | * [English Version](./README.md) 6 | 7 | ESP-FAQ 是由乐鑫官方推出的针对常见问题的总结文档。 8 | 9 | ## 文档托管 10 | 11 | * English: https://docs.espressif.com/projects/espressif-esp-faq/en/latest/ 12 | * 中文: https://docs.espressif.com/projects/espressif-esp-faq/zh_CN/latest/ 13 | 14 | ## ESP-FAQ 文档框架 15 | 16 | ### 语言支持 17 | 18 | * 文档框架支持 reStructuredText 和 Markdown 轻量标记语言。 19 | 20 | ### 文档结构 21 | 22 | ``` bash 23 | docs 24 | ├── _static 25 | │ ├── espressif-logo.svg # 网页徽标 26 | │ └── theme_overrides.css # 网页样式表 27 | ├── zh_CN 28 | │ ├── _static # 内联资源 29 | │ ├── instruction # 使用说明 30 | │ ├── commercial-faq # 商务问题 31 | │ ├── development-environment # 开发环境 32 | │ ├── application-solution # 应用方案 33 | │ ├── hardware-related # 硬件相关 34 | │ ├── software-framework # 软件平台 35 | │ ├── test-verification # 测试验证 36 | │ ├── config.py # 配置文件 37 | │ ├── Makefile # 编译文件 38 | │ └── index.rst # 主目录 39 | └── en 40 | ├── _static # 内联资源 41 | ├── instruction # 使用说明 42 | ├── commercial-faq # 商务问题 43 | ├── development-environment # 开发环境 44 | ├── application-solution # 应用方案 45 | ├── hardware-related # 硬件相关 46 | ├── software-framework # 软件平台 47 | ├── test-verification # 测试验证 48 | ├── config.py # 配置文件 49 | ├── Makefile # 编译文件 50 | └── index.rst # 主目录 51 | ``` 52 | 53 | ## 其它参考资源 54 | 55 | * 可以前往 [esp32.com 论坛](https://esp32.com/) 提问,挖掘社区资源。 56 | 57 | * 如果你在使用中发现了错误或者需要新的功能,请先[查看 GitHub Issues](https://github.com/espressif/esp-faq/issues),确保该问题不会被重复提交。 58 | 59 | * 如果你有兴趣为 ESP-FAQ 作贡献,请先阅读[贡献指南](https://docs.espressif.com/projects/espressif-esp-faq/zh_CN/latest/instruction/document-contribution.html)。 60 | -------------------------------------------------------------------------------- /docs/_static/application-solution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/_static/application-solution.png -------------------------------------------------------------------------------- /docs/_static/baidu_analytics.js: -------------------------------------------------------------------------------- 1 | var _hmt = _hmt || []; 2 | (function() { 3 | var hm = document.createElement("script"); 4 | hm.src = "https://hm.baidu.com/hm.js?2123d3df56dcba2a81f205421362a3bb"; 5 | var s = document.getElementsByTagName("script")[0]; 6 | s.parentNode.insertBefore(hm, s); 7 | })(); 8 | -------------------------------------------------------------------------------- /docs/_static/chip-marking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/_static/chip-marking.png -------------------------------------------------------------------------------- /docs/_static/development-environment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/_static/development-environment.png -------------------------------------------------------------------------------- /docs/_static/docs_version.js: -------------------------------------------------------------------------------- 1 | var DOCUMENTATION_VERSIONS = { 2 | DEFAULTS: { has_targets: false, 3 | supported_targets: [ "esp32" ] 4 | }, 5 | VERSIONS: [ 6 | { name: "latest", has_targets: true, supported_targets: [ "esp32", "esp32s2", "esp32s3", "esp32c3", "esp32h2", "esp8266", "esp32c2", "esp32c6" ] }, 7 | ], 8 | IDF_TARGETS: [ 9 | { text: "ESP32", value: "esp32"}, 10 | { text: "ESP32-S2", value: "esp32s2"}, 11 | { text: "ESP32-S3", value: "esp32s3"}, 12 | { text: "ESP32-C3", value: "esp32c3"}, 13 | { text: "ESP32-H2", value: "esp32h2"}, 14 | { text: "ESP8266", value: "esp8266"}, 15 | { text: "ESP32C2", value: "esp32c2"}, 16 | { text: "ESP32C6", value: "esp32c6"}, 17 | ] 18 | }; 19 | -------------------------------------------------------------------------------- /docs/_static/hardware-related.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/_static/hardware-related.png -------------------------------------------------------------------------------- /docs/_static/instruction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/_static/instruction.png -------------------------------------------------------------------------------- /docs/_static/js/chatbot_widget.css: -------------------------------------------------------------------------------- 1 | #kapa-widget-container { 2 | z-index: 10000 !important; 3 | position: absolute !important; 4 | } 5 | 6 | .mantine-Modal-root { 7 | z-index: 10000; 8 | position: absolute; 9 | } 10 | -------------------------------------------------------------------------------- /docs/_static/js/chatbot_widget_cn.js: -------------------------------------------------------------------------------- 1 | document.addEventListener("DOMContentLoaded", function () { 2 | var script = document.createElement("script"); 3 | script.src = "https://widget.kapa.ai/kapa-widget.bundle.js"; 4 | script.setAttribute("data-bot-protection-mechanism", "hcaptcha"); 5 | script.setAttribute("data-website-id", "ee0240d8-c343-4f0b-968e-aaad5a5d38a2"); 6 | script.setAttribute("data-modal-title", "ESP-FAQ 文档 AI 助手"); 7 | script.setAttribute("data-project-color", "#C62817"); 8 | script.setAttribute("data-project-logo", "https://dl.espressif.com/public/logo.png"); 9 | script.setAttribute("data-button-image", "https://dl.espressif.com/chatbot/Chatbot.png"); 10 | script.setAttribute("data-button-text-font-size", "0px"); 11 | script.setAttribute("data-button-border-radius", "50%"); 12 | script.setAttribute("data-button-bg-color", "#38393a"); 13 | script.setAttribute("data-button-border", "#38393a"); 14 | script.setAttribute("data-button-height", "45px"); 15 | script.setAttribute("data-button-width", "45px"); 16 | script.setAttribute("data-button-animation-enabled", "false"); 17 | script.setAttribute("data-button-image-height", "100%"); 18 | script.setAttribute("data-button-image-width", "100%"); 19 | script.setAttribute("data-button-padding", "0"); 20 | script.setAttribute("data-button-hover-animation-enabled", "false"); 21 | script.setAttribute("data-button-position-top", "50px"); 22 | script.setAttribute("data-button-position-left", "305px"); 23 | script.setAttribute("data-button-box-shadow", "0px 6px 12px 1px rgba(0,0,0,0.16)"); 24 | script.setAttribute("data-modal-override-open-class", "test-ai"); 25 | script.setAttribute("data-user-analytics-fingerprint-enabled", "true"); 26 | script.setAttribute("data-modal-example-questions-title", "问题示例"); 27 | script.setAttribute("data-modal-disclaimer", "欢迎使用乐鑫文档智能问答助手!本助手基于乐鑫的公开文档,旨在为您提供产品和服务的技术支持与解答。如有任何意见或建议,欢迎留下反馈!\n\n**注意**:本回答由 AI 生成,可能存在不准确之处,请核实重要信息。"); 28 | script.setAttribute("data-modal-example-questions", "ESP32-C3 最多支持连接几个低功耗蓝牙设备?"); 29 | script.async = true; 30 | document.head.appendChild(script); 31 | }); 32 | -------------------------------------------------------------------------------- /docs/_static/js/chatbot_widget_en.js: -------------------------------------------------------------------------------- 1 | document.addEventListener("DOMContentLoaded", function () { 2 | var script = document.createElement("script"); 3 | script.src = "https://widget.kapa.ai/kapa-widget.bundle.js"; 4 | script.setAttribute("data-bot-protection-mechanism", "hcaptcha"); 5 | script.setAttribute("data-website-id", "6b40a459-ba92-4a20-91eb-691bc46a653a"); 6 | script.setAttribute("data-project-name", "ESP-FAQ"); 7 | script.setAttribute("data-project-color", "#C62817"); 8 | script.setAttribute("data-project-logo", "https://dl.espressif.com/public/logo.png"); 9 | script.setAttribute("data-button-image", "https://dl.espressif.com/chatbot/Chatbot.png"); 10 | script.setAttribute("data-button-text-font-size", "0px"); 11 | script.setAttribute("data-button-border-radius", "50%"); 12 | script.setAttribute("data-button-bg-color", "#38393a"); 13 | script.setAttribute("data-button-border", "#38393a"); 14 | script.setAttribute("data-button-height", "45px"); 15 | script.setAttribute("data-button-width", "45px"); 16 | script.setAttribute("data-button-animation-enabled", "false"); 17 | script.setAttribute("data-button-image-height", "100%"); 18 | script.setAttribute("data-button-image-width", "100%"); 19 | script.setAttribute("data-button-padding", "0"); 20 | script.setAttribute("data-button-hover-animation-enabled", "false"); 21 | script.setAttribute("data-button-position-top", "50px"); 22 | script.setAttribute("data-button-position-left", "305px"); 23 | script.setAttribute("data-button-box-shadow", "0px 6px 12px 1px rgba(0,0,0,0.16)"); 24 | script.setAttribute("data-modal-override-open-class", "test-ai"); 25 | script.setAttribute("data-user-analytics-fingerprint-enabled", "true"); 26 | script.setAttribute("data-modal-disclaimer", "This custom large language model (LLM), trained on official documentation from espressif.com, is designed to provide technical support and answers related to Espressif’s products and services. Give it a try, share your thoughts, and let us know your feedback—we truly appreciate it! \n\n**Note**: AI-generated information may be incomplete or inaccurate. Always verify critical information with official sources."); 27 | script.setAttribute("data-modal-example-questions", "What should I do if the ESP32 is unable to connect to the router? ,What is the maximum number of BLE connections supported by ESP32-C3?"); 28 | script.async = true; 29 | document.head.appendChild(script); 30 | }); 31 | -------------------------------------------------------------------------------- /docs/_static/no-component.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/_static/no-component.png -------------------------------------------------------------------------------- /docs/_static/software-framework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/_static/software-framework.png -------------------------------------------------------------------------------- /docs/_static/test-verification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/_static/test-verification.png -------------------------------------------------------------------------------- /docs/_static/theme_overrides.css: -------------------------------------------------------------------------------- 1 | /* override table width restrictions */ 2 | @media screen and (min-width: 767px) { 3 | 4 | .wy-table-responsive table td { 5 | /* !important prevents the common CSS stylesheets from overriding 6 | this as on RTD they are loaded after this stylesheet */ 7 | white-space: normal !important; 8 | } 9 | 10 | .wy-table-responsive { 11 | overflow: visible !important; 12 | } 13 | } 14 | 15 | .wy-side-nav-search { 16 | background-color: #e3e3e3 !important; 17 | } 18 | 19 | .wy-side-nav-search input[type=text] { 20 | border-radius: 0px !important; 21 | border-color: #333333 !important; 22 | } 23 | 24 | .icon-home { 25 | color: #333333 !important; 26 | } 27 | 28 | .icon-home:hover { 29 | background-color: #d6d6d6 !important; 30 | } 31 | 32 | .version { 33 | color: #000000 !important; 34 | } 35 | 36 | a:hover { 37 | color: #bd2c2a !important; 38 | } 39 | 40 | .logo { 41 | width: 240px !important; 42 | } -------------------------------------------------------------------------------- /docs/build_example.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Install python3.8 and virtual environment 4 | sudo apt-get install python3.8 python3.8-venv 5 | 6 | # Create a virtual environment 7 | python3.8 -m venv ~/.pyenv3_8 8 | 9 | # Activate the virtual environment 10 | source ~/.pyenv3_8/bin/activate 11 | 12 | # Update pip 13 | pip install --upgrade pip 14 | 15 | # Install the pip package in requirements.txt 16 | pip install -r requirements.txt 17 | 18 | # Compile the document 19 | build-docs build 20 | 21 | # Exit the virtual environment 22 | deactivate 23 | -------------------------------------------------------------------------------- /docs/check_lang_folder_sync.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Check if folders with localized documentation are in sync 4 | # 5 | # 1. Traverse each folder with language version and generate a sorted list 6 | # of all the files inside 7 | # 2. Compare the sorted lists of files and flag differences 8 | # 9 | # Note: 10 | # All differences between folders with language versions should be resolved 11 | # before releasing documentation 12 | # 13 | 14 | RESULT=0 15 | STARS='***************************************************' 16 | 17 | find en -type f | cut -d/ -f2- | sort > file_list_en 18 | find zh_CN -type f | cut -d/ -f2- | sort > file_list_zh_CN 19 | 20 | # format is to display new or different filenames 21 | DIFF_FORMAT="--unchanged-line-format= --old-line-format=[en]:%L --new-line-format=[zh_CN]:%L" 22 | 23 | FOLDER_DIFFERENCES=$(diff $DIFF_FORMAT file_list_en file_list_zh_CN) 24 | if ! [ -z "$FOLDER_DIFFERENCES" ]; then 25 | echo "$STARS" 26 | echo "Build failed due to the following differences in 'en' and 'zh_CN' folders:" 27 | echo "$FOLDER_DIFFERENCES" 28 | echo "$STARS" 29 | echo "Please synchronize contents of 'en' and 'zh_CN' folders to contain files with identical names" 30 | RESULT=1 31 | fi 32 | 33 | # remove temporary files 34 | rm file_list_en file_list_zh_CN 35 | 36 | exit $RESULT 37 | -------------------------------------------------------------------------------- /docs/conf_common.py: -------------------------------------------------------------------------------- 1 | from esp_docs.conf_docs import * # noqa: F403,F401 2 | 3 | languages = ['en', 'zh_CN'] 4 | 5 | extensions += ['sphinx_copybutton', 6 | 'sphinxcontrib.wavedrom', 7 | ] 8 | 9 | # Disable format_esp_target 10 | extensions.remove('esp_docs.esp_extensions.format_esp_target') 11 | 12 | # Use wavedrompy as backend, instead of wavedrom-cli 13 | render_using_wavedrompy = True 14 | 15 | # link roles config 16 | project_homepage = 'https://github.com/espressif/esp-faq' 17 | github_repo = 'espressif/esp-faq' 18 | 19 | # Context used by sphinx_idf_theme 20 | html_context['github_user'] = 'espressif' 21 | html_context['github_repo'] = 'esp-faq' 22 | 23 | html_static_path = ['../_static'] 24 | 25 | # add chatbot widget 26 | html_css_files = ['js/chatbot_widget.css'] 27 | 28 | # add Tracking ID for Google Analytics 29 | google_analytics_id = 'G-1SP3XY5NKQ' 30 | 31 | # add html js files ID for Baidu Analytics 32 | html_js_files = ['baidu_analytics.js'] 33 | 34 | # Extra options required by sphinx_idf_theme 35 | project_slug = 'esp-faq' 36 | 37 | # Final PDF filename will contains target and version 38 | pdf_file_prefix = u'esp-faq' 39 | 40 | # The name of the Pygments (syntax highlighting) style to use. 41 | pygments_style = 'sphinx' 42 | 43 | # List of patterns, relative to source directory, that match files and 44 | # directories to ignore when looking for source files. 45 | exclude_patterns = ['_build'] 46 | 47 | linkcheck_anchors = False 48 | 49 | linkcheck_exclude_documents = ['index', # several false positives due to the way we link to different sections 50 | ] 51 | -------------------------------------------------------------------------------- /docs/en/_static/application-solution/android-application/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/application-solution/android-application/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/application-solution/arduino-application/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/application-solution/arduino-application/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/application-solution/artificial-intelligence/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/application-solution/artificial-intelligence/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/application-solution/at-application/AT_BLESCAN_Return_LOG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/application-solution/at-application/AT_BLESCAN_Return_LOG.png -------------------------------------------------------------------------------- /docs/en/_static/application-solution/at-application/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/application-solution/at-application/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/application-solution/audio-development-framework/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/application-solution/audio-development-framework/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/application-solution/cloud-service/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/application-solution/cloud-service/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/application-solution/ios -application/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/application-solution/ios -application/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/development-environment/IDE-plugins/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/development-environment/IDE-plugins/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/development-environment/debugging/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/development-environment/debugging/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/development-environment/environment-setup/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/development-environment/environment-setup/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/development-environment/firmware_update/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/development-environment/firmware_update/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/get-started/document-contribution/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/get-started/document-contribution/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/get-started/question-feedback/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/get-started/question-feedback/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/get-started/question-search/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/get-started/question-search/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/hardware-related/chip-comparison/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/hardware-related/chip-comparison/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/hardware-related/development-board/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/hardware-related/development-board/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/hardware-related/hardware-design/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/hardware-related/hardware-design/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/software-framework/ble-bt/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/software-framework/ble-bt/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/software-framework/ethernet/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/software-framework/ethernet/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/software-framework/mesh/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/software-framework/mesh/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/software-framework/peripherals/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/software-framework/peripherals/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/software-framework/protocols/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/software-framework/protocols/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/software-framework/provisioning/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/software-framework/provisioning/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/software-framework/security/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/software-framework/security/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/software-framework/storage/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/software-framework/storage/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/software-framework/system/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/software-framework/system/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/software-framework/wifi/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/software-framework/wifi/_static.txt -------------------------------------------------------------------------------- /docs/en/_static/test-verification/power-consumption-verification/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/en/_static/test-verification/power-consumption-verification/_static.txt -------------------------------------------------------------------------------- /docs/en/_templates/layout.html: -------------------------------------------------------------------------------- 1 | {% extends '!layout.html' %} 2 | {% block comments %} 3 |
4 |
5 |
Suggestion on this document?

 Provide feedback
6 | 7 |
No answer found? 8 |

 Check issues on GitHub
9 |
10 |
 Ask the ESP community 11 |
12 |
 Contact technical support 13 |
14 |
15 | {% endblock %} 16 | -------------------------------------------------------------------------------- /docs/en/application-solution/at-application.rst: -------------------------------------------------------------------------------- 1 | AT 2 | == 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | For ESP-AT FAQ, please go to `ESP-AT User Guide `_. 17 | 18 | -------------------------------------------------------------------------------- /docs/en/application-solution/esp-rainmaker-cloud-service.rst: -------------------------------------------------------------------------------- 1 | ESP RainMaker cloud service 2 | ============================= 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------------------------------------------------------------------------- /docs/en/application-solution/index.rst: -------------------------------------------------------------------------------- 1 | application solution 2 | ==================== 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | 9 | Artificial intelligence 10 | AT application 11 | Audio development framework 12 | BLE Mesh development framework 13 | Camera application  14 | ESP Matter 15 | ESP-NOW 16 | ESP RainMaker cloud service 17 | Third party cloud service 18 | Wi-Fi Mesh development framework 19 | -------------------------------------------------------------------------------- /docs/en/application-solution/third-party-cloud-service.rst: -------------------------------------------------------------------------------- 1 | Third-Party Cloud Service 2 | ============================= 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | Are there any examples for OTA upgrading? 19 | ---------------------------------------------------- 20 | 21 | Please refer to the following links: 22 | 23 | - For ESP8266, please refer to `ESP8266 OTA `_. 24 | - For ESP32 series, please refer to `ESP32 series OTA `_. 25 | 26 | -------------- 27 | 28 | How to integrate ESP32 with Tmall Genie? Any reference materials? 29 | -------------------------------------------------------------------------------- 30 | 31 | You can integrate ESP32 with Tmall Genie using the ``esp-aliyun`` SDK with reference to `Guide for Integrating ESP Devices with Alibaba Cloud `_. 32 | 33 | -------------- 34 | 35 | What is the difference between ``esp-aliyun`` and ``esp-ali-smartliving``? 36 | ---------------------------------------------------------------------------- 37 | 38 | - ``esp-aliyun`` is used for integration with "Internet of Things Platform". 39 | - ``esp-ali-smartliving`` is used for integration with "Smart Living IoT Platform". 40 | - Alibaba Cloud ensures the two platforms are interconnected in the cloud. They are functionally similar and can be used interchangeably. 41 | - For the differences between the two, please refer to `The differences between the Smart Living IoT Platform and the IoT Platform `_. 42 | 43 | -------------- 44 | 45 | How to ask questions and provide feedback when encountering issues in connecting Espressif products to the Espressif cloud platform? 46 | ------------------------------------------------------------------------------------------------------------------------------------------------ 47 | 48 | - For ESP RainMaker, the cloud platform developed by Espressif, submit feedback to `GitHub `_. 49 | - For other cloud platforms, please send the information about the specific platform along with your issues to sales@espressif.com. 50 | 51 | -------------- 52 | 53 | Can ESP32 and ESP8266 connect to Alexa or Google Home? 54 | --------------------------------------------------------- 55 | 56 | - Yes. For how to connect to Alexa, refer to the `aws_iot `_ example and make some configuration. 57 | - There are currently no examples for Google Home, but you can refer to the ESP32 application example in `esp-google-iot `_. 58 | 59 | -------------- 60 | 61 | What should I do to connect ESP32 to Alibaba Cloud via Ethernet and MQTT? 62 | -------------------------------------------------------------------------------------------------------------------------------- 63 | 64 | Use `esp-aliyun `_ but replace the Wi-Fi initialization code with Ethernet initialization. You can refer to the Ethernet examples under `ESP-IDF `_. 65 | 66 | -------------- 67 | 68 | How to generate triplet bin files in bulk on Alibaba Cloud? 69 | -------------------------------------------------------------- 70 | 71 | The instructions in the document have been updated. On version 4.4.X, please use the following command to generate the corresponding bin files: `python $IDF_PATH/tools/mass_mfg/mfg_gen.py generate multipule_mfg_config.csv multipule_mfg_values.csv scgw 0x4000`. 72 | -------------------------------------------------------------------------------- /docs/en/conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # English Language RTD & Sphinx config file 4 | # 5 | # Uses ../conf_common.py for most non-language-specific settings. 6 | 7 | # Importing conf_common adds all the non-language-specific 8 | # parts to this conf module 9 | try: 10 | from conf_common import * # noqa: F403,F401 11 | except ImportError: 12 | import os 13 | import sys 14 | sys.path.insert(0, os.path.abspath('../')) 15 | from conf_common import * 16 | 17 | import datetime 18 | 19 | current_year = datetime.datetime.now().year 20 | 21 | # General information about the project. 22 | project = u'ESP-FAQ' 23 | copyright = u'2020 - {}, Espressif Systems (Shanghai) Co., Ltd.'.format(current_year) 24 | pdf_title = u'ESP-FAQ Handbook' 25 | 26 | # The language for content autogenerated by Sphinx. Refer to documentation 27 | # for a list of supported languages. 28 | language = 'en' 29 | 30 | # Grouping the document tree into LaTeX files. List of tuples 31 | # (source start file, target name, title, 32 | # author, documentclass [howto, manual, or own class]). 33 | latex_documents = [ 34 | ('index', 'ReadtheDocsTemplate.tex', project, 35 | copyright, 'manual'), 36 | ] 37 | 38 | html_js_files += ['js/chatbot_widget_en.js'] 39 | -------------------------------------------------------------------------------- /docs/en/development-environment/IDE-plugins.rst: -------------------------------------------------------------------------------- 1 | IDE plugins 2 | =========== 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | How to add ESP32 development board on Arduino IDE? 19 | ----------------------------------------------------------------------------- 20 | 21 | - For installation instructions of Arduino-ESP32, please refer to `arduino-ide getting started `_. 22 | - For instructions on how to add development boards on Arduino IDE, please refer to `arduino Cores `_. 23 | 24 | ---------------- 25 | 26 | When using the Arduino IDE development platform, how to read the MAC address of the Wi-Fi that comes with ESP32? 27 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 28 | 29 | - Please refer to the `Arduino-ESP32 Development Framework `_. 30 | - Use "WiFi.macAddress()" to obtain the MAC address of ESP32's Wi-Fi. 31 | - Please also refer to the `WiFiClientStaticIP example `_. 32 | 33 | -------------- 34 | 35 | How to use the flash download tool to flash the bin file generated by Arduino to ESP32? 36 | ------------------------------------------------------------------------------------------------ 37 | 38 | - Please go to ``File`` -> ``Preferences`` -> ``Show verbose output during`` and select ``compilation``. After compilation succeeded, a Python flashing command will be printed with the bin file to be flashed and the corresponding flashing address. 39 | - Download the `flash download tool `_, select the bin file when using the tool to flash, and enter the corresponding flashing address. For more information, please refer to `Flash DownLoad Tool User Guide `_. 40 | 41 | ------------ 42 | 43 | How to update the esp32-arduino library version? 44 | --------------------------------------------------------------------------------------------- 45 | 46 | - Under the path ``Tool`` > ``Board`` > ``BoardManager``, search for ``ESP32`` to select and install the desired version of the `esp32-arduino `_ library. 47 | 48 | -------------- 49 | 50 | Can ESP32-SOLO-1 be developed using the Arduino software? 51 | --------------------------------------------------------- 52 | 53 | - Currently, the Arduino software development environment only supports the operation of ESP32 dual-core chips and does not support the operation of ESP32 single-core chips. Therefore, ESP32-SOLO-1 is not yet supported for development on Arduino software. 54 | - If you still prefer to use Arduino to build your code, you can use the `arduino-esp32 `_ library as an `ESP-IDF component `_ for development and testing. 55 | 56 | -------------------------------------------------------------------------------- /docs/en/development-environment/index.rst: -------------------------------------------------------------------------------- 1 | Development environment 2 | ======================= 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | 9 | IDE plugins 10 | Debugging 11 | Environment setup 12 | Firmware update 13 | -------------------------------------------------------------------------------- /docs/en/hardware-related/index.rst: -------------------------------------------------------------------------------- 1 | Hardware related 2 | ================ 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | 9 | Chip comparison 10 | Development board 11 | Hardware design 12 | RF related 13 | Process and ESD 14 | Production test 15 | -------------------------------------------------------------------------------- /docs/en/hardware-related/process-and-ESD.rst: -------------------------------------------------------------------------------- 1 | Process and ESD Protection 2 | ================================= 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | ---------------------- 17 | 18 | What should be paid attention to during the ESP32 ESD test? 19 | ------------------------------------------------------------------------------------- 20 | 21 | - The Electrostatic Discharge (ESD) test for ESP32 is conducted to ensure that the device has sufficient tolerance to withstand electrostatic discharge. The precautions are as follows: 22 | 23 | - ESD testing should be conducted in an ESD laboratory or ESD protection area, which should have good grounding protection and electrostatic discharge protection facilities. 24 | - When conducting ESD testing, please use ESD testing equipment that meets international standards, including ESD generators and ESD grounding mats, to ensure the accuracy of the test results. 25 | - When conducting ESD testing, please make sure you are using a stable 3.3 V voltage. If the EN trace is too long, it may cause a reboot. 26 | - ESP32 devices should be tested multiple times to verify the reliability of their tolerance, and the test results should be recorded and analyzed. 27 | - If the module does not respond, please check the voltage of the air discharge or contact discharge used in the test. 28 | -------------------------------------------------------------------------------- /docs/en/hardware-related/production-test.rst: -------------------------------------------------------------------------------- 1 | Production Test 2 | =================== 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | --------------- 17 | 18 | Why can some modules download firmware normally when using DIO/DOUT, but encounter program abnormality when using QOUT/QIO? 19 | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 20 | 21 | - Firstly, please check the modes supported by flash in the module and whether the module routing meets the requirements of modes. 22 | - Secondly, please check the QE bit of the status register of flash, which determines whether the flash supports the QUAD mode or not. 23 | - Different ESP chips/modules use flashes from different manufacturers. Some flashes have QE disabled by default. Thus, it is necessary to check whether the flash supports Quad mode through actual testing. 24 | - When ROM boots a second stage bootloader, the secondary read will fail if the configuration parameters are read in the QIO mode because the QE bit is disabled. 25 | - It is recommended to program firmware in the DIO mode and to configure the QIO mode in ``menuconfig``. The configuration enables the QE bit in the second stage bootloader and then boots the app bin to use the QUAD mode. 26 | 27 | --------------- 28 | 29 | How to get the production test tool? 30 | ------------------------------------------------------------ 31 | 32 | :CHIP\: ESP32 | ESP8266: 33 | 34 | - Please click `production test tool `_ to download. 35 | 36 | ---------------- 37 | 38 | When I use the ``esptool.py burn_custom_mac`` command to write the user-defined MAC address, why is the MAC address read by the ``esptool.py read_mac`` command still factory default? 39 | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 40 | 41 | - The ``esptool.py read_mac`` command can only read the MAC address written in eFuse BLOCK0 by default, but the user-defined MAC address written with the ``esptool.py burn_custom_mac`` command is in eFuse BLOCK3. You may use the ``espefuse.py get_custom_mac`` command to check the MAC address written to eFuse BLOCK3. 42 | - For more information, please refer to `esptool documentation `__. 43 | 44 | --------------- 45 | 46 | When downloading bin files to ESP32-WROVER-E (16 MB flash) using Flash Download Tool, multiple separate bin files can be downloaded successfully, but downloading the combined firmware (12 MB) failed. Why? 47 | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 48 | 49 | Since the combined firmware is mostly "0xFF" with relatively high compression rate, the amount of data after decompression would be relatively large for the same length of compressed data, resulting in a timeout error (default 7 seconds) after a long download time. To solve this issue, in Flash Download Tool, go to ``configure`` > ``esp32`` > ``spi_download``, and disable the compression configuration option as follows: 50 | 51 | .. code-block:: c 52 | 53 | compress = False 54 | no_compress = True 55 | -------------------------------------------------------------------------------- /docs/en/index.rst: -------------------------------------------------------------------------------- 1 | ESP-FAQ 2 | ============= 3 | :link_to_translation:`zh_CN:[中文]` 4 | 5 | .. role:: bolditalics 6 | :class: bolditalics 7 | 8 | ESP-FAQ is a summary document of frequently asked questions released by Espressif. This repository aims to help our users to quickly locate those questions and get answers through simple explanations. The current categories of FAQ cover: development environment, application solution, software framework, hardware related and test verification. 9 | 10 | ======================= =========================== ========================= 11 | |Instruction|_ |Development environment|_ |Application solution|_ 12 | ----------------------- --------------------------- ------------------------- 13 | `Instruction`_ `Development environment`_ `Application solution`_ 14 | ----------------------- --------------------------- ------------------------- 15 | |Software framework|_ |Hardware related|_ |Test verification|_ 16 | ----------------------- --------------------------- ------------------------- 17 | `Software framework`_ `Hardware related`_ `Test verification`_ 18 | ======================= =========================== ========================= 19 | 20 | .. |Instruction| image:: ../_static/instruction.png 21 | .. _Instruction: instruction/index.html 22 | 23 | .. |Development environment| image:: ../_static/development-environment.png 24 | .. _Development environment: development-environment/index.html 25 | 26 | .. |Application solution| image:: ../_static/application-solution.png 27 | .. _Application solution: application-solution/index.html 28 | 29 | .. |Software framework| image:: ../_static/software-framework.png 30 | .. _Software framework: software-framework/index.html 31 | 32 | .. |Hardware related| image:: ../_static/hardware-related.png 33 | .. _Hardware related: hardware-related/index.html 34 | 35 | .. |Test verification| image:: ../_static/test-verification.png 36 | .. _Test verification: test-verification/index.html 37 | 38 | 39 | .. toctree:: 40 | :hidden: 41 | 42 | Instruction 43 | Development environment 44 | Application solution 45 | Software framework 46 | Hardware related 47 | Test verification 48 | Commercial FAQ 49 | -------------------------------------------------------------------------------- /docs/en/instruction/index.rst: -------------------------------------------------------------------------------- 1 | Instruction 2 | ============= 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | This section provides instructions for using ESP-FAQ. The purpose of "Question search" is to help you quickly understand the search methods and categories of this repository, so as to save much time for searching. In the meantime, you are welcomed to make contributions directly to ESP-FAQ, such as fixing bugs and adding new documents. For detailed information about this process, please go to "Document contribution". 7 | 8 | .. toctree:: 9 | :maxdepth: 1 10 | 11 | Question search 12 | Document contribution 13 | -------------------------------------------------------------------------------- /docs/en/instruction/question-search.rst: -------------------------------------------------------------------------------- 1 | Question search 2 | =============== 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | This instruction includes the following two parts: 7 | 8 | - Question search techniques 9 | - Question classification framework 10 | 11 | Question Search Techniques 12 | ----------------------------- 13 | 14 | Currently, there are mainly two searching techniques: 15 | 16 | - Search keywords 17 | - Exclude a specific keyword 18 | 19 | Search key words 20 | ~~~~~~~~~~~~~~~~~~~ 21 | 22 | Extract keywords from your question and search for them, then the search results should list the best matches. 23 | 24 | For example, if you expect to ask a question as ``What is the Bluetooth LE Throughput for ESP32?`` 25 | 26 | Then just searching keywords such as ``ESP32``, ``BLE`` and ``throughput`` should give you the result. 27 | 28 | Exclude a Specific Keyword 29 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 30 | 31 | Add a tag ``-`` into the search content in the format: ``keyword -excluded keyword``. By doing so, the search results will not show the specific keyword you excluded. 32 | 33 | For example, if you search ``ESP32 -ble``, then any results with ``ble`` inside will not be shown. 34 | 35 | Question Classification Categories 36 | ------------------------------------ 37 | 38 | Once you have mastered the above mentioned ``question search techniques``, you can use the categories in ESP-FAQ for reference to extract keywords for the questions you expect to ask and then search for them. The framework of ESP-FAQ categories is shown as follows: 39 | 40 | - :doc:`Development environment <../development-environment/index>` 41 | - :doc:`Application solution <../application-solution/index>` 42 | - :doc:`Software framework <../software-framework/index>` 43 | - :doc:`Hardware related <../hardware-related/index>` 44 | - :doc:`Test verification <../test-verification/index>` 45 | - :doc:`Commercial FAQ <../commercial-faq/index>` 46 | -------------------------------------------------------------------------------- /docs/en/software-framework/bt/index.rst: -------------------------------------------------------------------------------- 1 | ========== 2 | Bluetooth 3 | ========== 4 | 5 | :link_to_translation:`zh_CN:[中文]` 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | 10 | ble 11 | br-edr 12 | other-bt 13 | -------------------------------------------------------------------------------- /docs/en/software-framework/bt/other-bt.rst: -------------------------------------------------------------------------------- 1 | Other Bluetooth 2 | ================= 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | How can I send Bluetooth HCI commands directly to ESP32-WROOM-32D module through the serial port? 19 | -------------------------------------------------------------------------------------------------------- 20 | 21 | - Please refer to `controller_hci_uart_esp32 `_. 22 | - When ESP32 is used as a controller, and the other device serves as a host, HCI commands can be sent to ESP32 via UART. 23 | -------------------------------------------------------------------------------- /docs/en/software-framework/index.rst: -------------------------------------------------------------------------------- 1 | Software framework 2 | ================== 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | 9 | Bluetooth 10 | Ethernet 11 | Coexistence 12 | Peripherals 13 | Protocols 14 | Provisioning 15 | Security 16 | Storage 17 | System 18 | Thread 19 | Wi-Fi 20 | Zigbee 21 | -------------------------------------------------------------------------------- /docs/en/software-framework/peripherals/dac.rst: -------------------------------------------------------------------------------- 1 | Digital-to-Analog Converter (DAC) 2 | ================================= 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | When using DAC output for ESP32-S2-Saola-1, the power supply is 3.3 V. But the actual tested voltage is only 3.1 V. Why? 19 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- 20 | 21 | Due to the presence of internal voltage drop and inter-chip differences, even when powered by 3.3 V, the actual maximum output is only around 3.2 V. 22 | -------------------------------------------------------------------------------- /docs/en/software-framework/peripherals/i2c.rst: -------------------------------------------------------------------------------- 1 | Inter-Integrated Circuit (I2C) 2 | ============================== 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | Does ESP8266 support I2C slave mode? 19 | --------------------------------------------------- 20 | 21 | Not supported. If you want to use this feature, we recommend using the ESP32 or ESP32-S2 chip. ESP32 example: `i2C_self_test `_. 22 | 23 | -------------- 24 | 25 | Is ESP8266 I2C realized via software programming? 26 | ----------------------------------------------------------------------- 27 | 28 | Yes, ESP8266 I2C is realized via GPIO software programming. 29 | 30 | -------------- 31 | 32 | Is it normal for some spikes to frequently appear on the data line when the ESP32 chip I2C is working (especially in fast mode), often after the falling edge of the 8th/9th clock? 33 | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 34 | 35 | The spike on the data line at the 8th/9th clocks is caused by the I2C master-slave control handover. It is a normal phenomenon and is mentioned in the I2C protocol. 36 | 37 | ------------------------ 38 | 39 | How can the ESP32 chip, as an I2C master, wait for the slave to process the data before receiving it? For example, when reading data through ``i2c_master_read_to_device``, the slave needs to return data immediately after accepting the command, but in reality, some slave devices need to wait for a while after receiving the command before they can return data. 40 | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 41 | 42 | This can be realized by dividing ``i2c_master_read_device`` into the following three steps: 43 | 44 | 1. Input commands and address: ``i2c_cmd_link_create_static`` > ``i2c_master_start`` > ``i2c_master_write_byte`` > ``i2c_master_cmd_begin`` > ``i2c_cmd_link_delete_static`` 45 | 2. Delay 46 | 3. Read data of the slave: ``i2c_cmd_link_create_static`` > ``i2c_master_read`` > ``i2c_master_stop`` > ``i2c_master_cmd_begin`` > ``i2c_cmd_link_delete_static`` 47 | 48 | -------------- 49 | 50 | When using the ESP32 chip, can GPIO32 and GPIO33 be configured as I2C_SDA and I2C_SCL respectively? 51 | ------------------------------------------------------------------------------------------------------------------------------------------------------ 52 | 53 | Yes. The I2C pins of the ESP32 chip can be remapped by any available GPIO. Please refer to Section 2.2, Pin Overview of `ESP32 Series Datasheet `_. If an external 32.768 kHz crystal is not required, GPIO32 and GPIO33 can be used as I2C pins. 54 | 55 | -------------- 56 | 57 | Why does the I2C bus occasionally receive incorrect data when Bluetooth or Wi-Fi is enabled on the ESP32 chip? 58 | ---------------------------------------------------------------------------------------------------------------------------------------------- 59 | 60 | This is due to an issue with the I2C FIFO on ESP32, which may cause data confusion when the I2C host reads data. A software fix has been made in release/v5.4 and subsequent versions. For chips released after ESP32 (such as ESP32-S3, ESP32-C3), this issue has been resolved through hardware fixes. 61 | 62 | -------------- 63 | 64 | Can the I2C and LP I2C be used simultaneously on ESP32-C6 when it is not in Deep-Sleep mode? 65 | ---------------------------------------------------------------------------------------------------------------------------------------------- 66 | 67 | Sure. In the ``esp_driver_i2c`` driver, you can select ``LP_I2C_PORT`` to enable the LP I2C function. For details, please refer to example: `esp-idf/components/esp_driver_i2c/test_apps/i2c_test_apps/main/test_lp_i2c `_ 68 | 69 | -------------- 70 | 71 | How to set clock stretching for I2C? 72 | ---------------------------------------------------------------------------------------------------------------------------------------------- 73 | 74 | In the ``esp_driver_i2c`` driver, you can set the ``scl_wait_us`` parameter in ``i2c_master_dev_t`` to change the SCL wait time, thereby achieving clock stretching. 75 | -------------------------------------------------------------------------------- /docs/en/software-framework/peripherals/i2s.rst: -------------------------------------------------------------------------------- 1 | Inter-IC Sound (I2S) 2 | ==================== 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | Does ESP32 support using crystal oscillator as the clock source of I2S? 19 | ---------------------------------------------------------------------------------------------------- 20 | 21 | No. Please go to `ESP32 Technical Reference Manual `_ to read about clock source configurations of I2S. 22 | 23 | --------------- 24 | 25 | When working as the I2S master, does ESP32 support connection to the I2S slave that only has the three signal lines, I2S_DATA, I2S_SCK, and I2S_WS? 26 | ----------------------------------------------------------------------------------------------------------------------------------------------------------- 27 | 28 | Yes, but the connection to MCLK depends on the requirements of the codec chip on the other side. 29 | 30 | ------------------------ 31 | 32 | Does the I2S interface of ESP32-C3 series chips support the PDM RX mode? 33 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 34 | 35 | - In the software driver, the I2S interface of ESP32-C3 series chips does not support the PDM RX mode. Unlike ESP32-S3, the PDM RX of ESP32-C3 does not have a module supporting converting from PDM to PCM, which means the acquired data is in the RAW PDM format. The data in this format can't be used directly in most cases. 36 | 37 | ---------------- 38 | 39 | Can the input and output BCK pin of ESP32-S3 I2S use the same pin? 40 | ------------------------------------------------------------------------------------------------------------------------------------------------------------- 41 | 42 | Yes. In the duplex mode, TX and RX achieve duplex functionality by binding these two signals to the same pin. 43 | 44 | ---------------- 45 | 46 | Is there a difference between using the Audio PLL (APLL) and PLL in I2S? 47 | ------------------------------------------------------------------------------------------------------------------------------------------------------------- 48 | 49 | APLL and PLL clock sources do not show a significant difference at lower sampling rates (144 kHz and below). 50 | -------------------------------------------------------------------------------- /docs/en/software-framework/peripherals/index.rst: -------------------------------------------------------------------------------- 1 | ============ 2 | Peripherals 3 | ============ 4 | 5 | :link_to_translation:`zh_CN:[中文]` 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | 10 | adc 11 | dac 12 | gpio 13 | i2c 14 | i2s 15 | lcd 16 | ledc 17 | mcpwm 18 | pcnt 19 | rmt 20 | sdio 21 | spi 22 | timer 23 | touch 24 | twai 25 | uart 26 | usb 27 | other-peripherals -------------------------------------------------------------------------------- /docs/en/software-framework/peripherals/mcpwm.rst: -------------------------------------------------------------------------------- 1 | Motor Control Pulse Width Modulator (MCPWM) 2 | =========================================== 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | Does ESP32 support using the MCPWM Timer to trigger AD sampling? 19 | -------------------------------------------------------------------------------------- 20 | 21 | AD sampling can be triggered in the callback of the MCPWM timer events ``on_ful```, ``on_empty``, ``on_stop``. Additionally, AD sampling can also be triggered in the callback of the MCPWM comparator event ``on_reach``. 22 | 23 | --------------- 24 | 25 | Can ESP32-S3 generate fully complementary PWM with accurate clock and duty cycle and adjustable dead band? 26 | --------------------------------------------------------------------------------------------------------------------- 27 | 28 | By measurement, ESP32-S3 can generate complementary output waveforms with the frequency of 10 k, the duty cycle accuracy of 1 us and the dead band accuracy of 100 ns by MCPWM. 29 | 30 | ------------- 31 | 32 | Does the ESP32-S3 support driving eight servos? 33 | -------------------------------------------------------------------------------------------------------------------------- 34 | 35 | Yes. As ESP32-S3 supports two MCPWM controllers, which includes three operators each, and each operator has two generators and two comparators. So, if each generator independently uses a comparator, it can produce a total of 2*3*2=12 PWM outputs with independently adjustable duty cycles, which can naturally meet the needs of eight servos. 36 | 37 | --------------------------- 38 | 39 | What are the advantages of MCPWM compared to LEDC? 40 | -------------------------------------------------------------------------------------------------------------------------- 41 | 42 | MCPWM supports complementary PWM output, center alignment, dead time insertion, carrier modulation, fault, capture events, etc., which are more advantageous in digital motor control, digital power supply, and FOC scenarios. 43 | 44 | ------------- 45 | 46 | Why is the PWM frequency output by MCPWM unstable? 47 | -------------------------------------------------------------------------------------------------------------------------- 48 | 49 | The MCPWM does not have a fractional divider, so under frequencies that cannot be divided evenly by the MCPWM clock source, the PWM frequency may become unstable. However, the average frequency remains accurate. 50 | -------------------------------------------------------------------------------- /docs/en/software-framework/peripherals/other-peripherals.rst: -------------------------------------------------------------------------------- 1 | Other Peripherals 2 | ================= 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | Can the REF_TICK clock frequency be modified? 19 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- 20 | 21 | :CHIP\: ESP32 | ESP32-S2 | ESP32-C3: 22 | 23 | No, the REF_TICK clock is fixed. 24 | 25 | -------------- 26 | 27 | Does ESP32 support PCI-E protocol? 28 | ----------------------------------------------------- 29 | 30 | No, it doesn't. 31 | 32 | ----------------- 33 | 34 | Does ESP32-P4 support video encoding and decoding? 35 | ----------------------------------------------------------------------------------------- 36 | 37 | Yes. ESP32-P4 Supports JPEG hardware encoding/decoding, H.264 hardware encoding, and H.264 software decoding. 38 | -------------------------------------------------------------------------------- /docs/en/software-framework/peripherals/pcnt.rst: -------------------------------------------------------------------------------- 1 | Pulse Counter (PCNT) 2 | ==================== 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | Does ESP8266 support pulse counting? 19 | ---------------------------------------------------------------- 20 | 21 | - The ESP8266 does not include a hardware pulse counting module, thus only supports counting via the interrupt of GPIO rising edge or falling edge. 22 | - When Wi-Fi is turned on in ESP8266, it may cause a vacuum in the GPIO sampling due to its high priority, thus interrupting the collected counts and causing data loss. 23 | - In conclusion, it is recommended to use ESP32 and subsequent chips for scenarios with high counting demands. 24 | 25 | ---------------- 26 | 27 | Can ESP32-S3 realize low-level pulse counting with a frequency of 200 k? 28 | ------------------------------------------------------------------------------ 29 | 30 | Yes. 31 | 32 | -------------------------- 33 | 34 | Can PCNT generate an interrupt when the count changes? 35 | -------------------------------------------------------------- 36 | 37 | PCNT will only generate an interrupt when it reaches the set threshold. Other count values can only be read by polling. 38 | 39 | -------------------------- 40 | 41 | What should I do if ESP32-C3 doesn't support PCNT? 42 | -------------------------------------------------------------- 43 | 44 | The `knob `_ software can be used for PCNT counting. Please note that this software can only be used for counting in quadrature decoding related application scenarios, and the counting frequency should not be too high. 45 | 46 | -------------------------- 47 | 48 | Can PCNT support multiple channels working simultaneously? Do signal and control necessarily need to be input in pairs? 49 | ---------------------------------------------------------------------------------------------------------------------------- 50 | 51 | PCNT supports multiple channels working simultaneously. The signal and control do not necessarily have to be used in pairs. If you do not want to use control, you can set it to -1. The count mode is configured using `pcnt_channel_set_edge_action`. 52 | 53 | ------------------- 54 | 55 | Is it possible to use ESP32 PCNT to calculate the time between two pulses? 56 | -------------------------------------------------------------------------------------------------------------- 57 | 58 | No, it's not possible. PCNT can only count pulses, it does not support calculating the time between two pulses. You can use RMT to calculate the time between two pulses. 59 | -------------------------------------------------------------------------------- /docs/en/software-framework/peripherals/sdio.rst: -------------------------------------------------------------------------------- 1 | Secure Digital Input Output (SDIO) 2 | ================================== 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | What is the maximum speed supported by the SDIO interface? 19 | -------------------------------------------------------------------------- 20 | 21 | - The maximum clock speed supported by ESP32 SDIO is 50 MHz, and ESP32 SDIO supports the Quad mode at the maximum. 22 | - The maximum clock speed supported by ESP32-S3 SDIO is 80 MHz, and ESP32-S3 SDIO supports the Octal mode at the maximum. 23 | - The practical speed is influenced by the read and write speed of storage media at the same time. 24 | 25 | -------------- 26 | 27 | Does the ESP8266 SDIO support connecting to an SD card? 28 | ---------------------------------------------------------------------- 29 | 30 | ESP8266 only has an SDIO slave interface, so it does not support connecting to an SD card. If you need an ESP chip to connect to an SD card, please choose one that supports the SD/MMC host interface, such as the ESP32-S3. 31 | 32 | -------------- 33 | 34 | What is the maximum capacity for ESP32 SD card? 35 | ----------------------------------------------------------------------- 36 | 37 | - In the SD3.01 Specifications, the SDXC card supports a maximum capacity of 2 TB (2048 GB). 38 | - The ESP32 SDMMC Host also complies with the SD3.01 Specifications, which means up to 2 TB areas of it can be accessed by peripherals. When accessing the card via SPI bus using the SDSPI driver, there are also 2 TB of areas can be accessed in hardware level. 39 | - In software level, the usable area of the card is also affected by the file system. 40 | 41 | -------------- 42 | 43 | Is it possible to use ESP32 SD card together with flash & PSRAM? 44 | --------------------------------------------------------------------------------------------- 45 | 46 | - Yes, they can be used simultaneously when they apply different pins. 47 | - Note that when ESP32 uses the SDMMC host driver, the SDMMC Slot0 pins in the ESP32-WROOM and ESP32-WROVER modules conflict with the flash. 48 | 49 | -------------- 50 | 51 | Does ESP-WROOM-S2 module support using SDIO as a slave? 52 | --------------------------------------------------------------------------------------- 53 | 54 | Yes, it does. 55 | 56 | ----------------- 57 | 58 | Since ESP32-S2 has removed the SDIO interface, does it still support external TF card? 59 | -------------------------------------------------------------------------------------------------------------------------------- 60 | 61 | You can use the SPI2 or SPI3 interface to connect to an external TF card. When doing so, please use the SPI mode of the TF card. 62 | 63 | ---------------- 64 | 65 | Does ESP32-S2 support eMMC? 66 | -------------------------------------------------------------------------------------------------- 67 | 68 | :CHIP\: ESP32-S2: 69 | 70 | No. 71 | 72 | ---------------------- 73 | 74 | Does ESP32-S2 support SDIO as a slave? 75 | ------------------------------------------------------------------------------------------- 76 | 77 | ESP32-S2 has no SDIO interface and does not support SDIO as a slave. 78 | 79 | ---------------- 80 | 81 | How does ESP32 enable and disable the interrupt for the SDIO slave to receive data? 82 | --------------------------------------------------------------------------------------------------------------------------- 83 | 84 | The data reception of the SDIO slave is related to the state of the mounted buffer. After the data is received, you need to call `sdio_slave_recv_load_buf `_ to release the buffer. Otherwise, the SDIO host will not be able to continue to send data to the SDIO slave. 85 | 86 | -------------- 87 | 88 | How to set the ESP32-C6 SDIO clock? 89 | -------------------------------------------------------------------------------------------------- 90 | 91 | The ESP32-C6 only supports SDIO slave mode, with the SDIO slave CLK dependent on the SDIO host settings. 92 | -------------------------------------------------------------------------------- /docs/en/software-framework/peripherals/timer.rst: -------------------------------------------------------------------------------- 1 | Timer 2 | ============ 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | What should I pay attention to when using the HW timer interrupt with ESP8266? 19 | ----------------------------------------------------------------------------------------------------------- 20 | 21 | - Please refer to `ESP8266 Technical Reference Manual `_ regarding the related APIs. 22 | - If you are using NonOS SDK, please refer to `ESP8266 Non-OS SDK API Reference `_. 23 | - Typically, the hardware interrupt callback function needs to be executed as quickly as possible, and the callback function should be placed in IRAM to avoid the impact of Cache being turned off. 24 | 25 | - RTOS SDK requires adding the linker attribute IRAM_ATTR before the function name. 26 | - NonOS SDK cannot add ICACHE_FLASH_ATTR (this attribute specifies the function is placed in flash) before the function name. 27 | 28 | ----------------------------------------------------------------------------------------------------- 29 | 30 | How to set interrupt priority for timers? 31 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- 32 | 33 | - The esp_timer, using ESP32 as an example, allows you to configure the interrupt priority by modifying the configuration item `CONFIG_ESP_TIMER_INTERRUPT_LEVEL `_ in Menuconfig. 34 | - The General Purpose Timer allows setting interrupt priority when registering the interrupt service function. For details, please refer to the API description of `timer_isr_callback_add `_. 35 | 36 | -------------- 37 | 38 | How to improve the timeliness of interrupt response in gptimer? 39 | --------------------------------------------------------------- 40 | 41 | Put the interrupt function and the corresponding callback into the IRAM. 42 | -------------------------------------------------------------------------------- /docs/en/software-framework/peripherals/twai.rst: -------------------------------------------------------------------------------- 1 | Two-Wire Automotive Interface (TWAI) 2 | ==================================== 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | What are the considerations when using the ESP32 TWAI® controller? 19 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 20 | 21 | Please refer to the `ESP32 Series SoC Errata `_ > Section *ESP32 TWAI Errata*. 22 | 23 | -------------- 24 | 25 | Does ESP32-S3 support CAN-FD? 26 | ---------------------------------------------------------------------- 27 | 28 | The ESP32-S3 itself does not integrate a CAN-FD controller, but users can still use a CAN-FD controller with an SPI interface, such as the MCP2518FD. In subsequent chips like the ESP32-C5, there are plans to support CAN-FD. 29 | 30 | -------------- 31 | 32 | Does ESP32 support interrupt mode for CAN reception? 33 | ---------------------------------------------------------------------- 34 | 35 | The TAWI driver already uses interrupt reception, and automatically stores the received information into the RX queue. 36 | -------------------------------------------------------------------------------- /docs/en/software-framework/protocols/index.rst: -------------------------------------------------------------------------------- 1 | ============ 2 | Protocols 3 | ============ 4 | 5 | :link_to_translation:`zh_CN:[中文]` 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | 10 | esp-tls 11 | http 12 | lwip 13 | mbedtls 14 | mqtt 15 | other-protocols -------------------------------------------------------------------------------- /docs/en/software-framework/provisioning.rst: -------------------------------------------------------------------------------- 1 | Provisioning 2 | ============ 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | ----------------------- 17 | 18 | Can I add any broadcast data I want to Android ESP-Touch (e.g., add a device ID so that ESP32 can receive this ID)? 19 | ------------------------------------------------------------------------------------------------------------------------------------------------------- 20 | 21 | - ESP-Touch is a communication protocol used to establish a Wi-Fi connection between a mobile phone and ESP8266/ESP32. It uses a special broadcast method to transmit Wi-Fi SSID and password. Typically, the data broadcasted by ESP-Touch should be in a fixed format and cannot include customized data. 22 | - If you want ESP32 to receive customized data such as device ID, you can consider using other communication protocols such as MQTT or HTTP. With these protocols, you can define data formats as you wish and communicate between an Android App and ESP32. 23 | - If you still want to broadcast customized data, you can use BluFi, which is the networking protocol based on Bluetooth LE. Please refer to the following references for BluFi: 24 | 25 | - Android APP:https://github.com/EspressifApp/EspBlufiForAndroid. 26 | - iOS APP:https://github.com/EspressifApp/EspBlufiForiOS. 27 | -------------------------------------------------------------------------------- /docs/en/software-framework/storage/index.rst: -------------------------------------------------------------------------------- 1 | ======= 2 | Storage 3 | ======= 4 | 5 | :link_to_translation:`zh_CN:[中文]` 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | 10 | fatfs 11 | nvs 12 | psram 13 | sd-sdio-mmc 14 | spi-flash 15 | spiffs 16 | other-storages 17 | -------------------------------------------------------------------------------- /docs/en/software-framework/storage/other-storages.rst: -------------------------------------------------------------------------------- 1 | Other Storages 2 | ============== 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | Can ESP32 use LittleFS file system? 19 | ------------------------------------------------------ 20 | 21 | LittleFS is a third-party component `esp_littlefs `_, which can be used directly in ESP-IDF. You can use the `mklittlefs `_ tool for the image of LittleFS file system. 22 | 23 | ---------------- 24 | 25 | How to check the memory usage (e.g., DRAM, IRAM, rodata) of ESP32 chips? 26 | ------------------------------------------------------------------------------------------------------------------ 27 | 28 | You can check the estimated occupied static storage of ESP32 chips by inputting the instruction ``idf.py size-components`` under corresponding directories in terminal. You can use `heap_caps_get_info `_ to obtain dynamic applied memory during operation. 29 | 30 | ----------------- 31 | 32 | What is the available size of RTC RAM in ESP8266 for users? 33 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 34 | 35 | - The available RTC RAM in ESP8266 for users is 512 bytes (0x200). Please see descriptions in`esp8266.ld `_. 36 | 37 | ---------------- 38 | 39 | How to enable exFAT? 40 | -------------------------------------------------------------------------------------------------- 41 | 42 | :CHIP\: ESP32: 43 | 44 | - please modify #define FF_FS_EXFAT 0 as #define FF_FS_EXFAT 1 , please reffer to `ffconf.h `_ for details. 45 | 46 | ---------------- 47 | 48 | Is there a limit to the number of partitions in the partition table of ESP32? 49 | --------------------------------------------------------------------------------------- 50 | 51 | - Yes. The length of partition table is 0xC00 bytes (can store up to 95 partition table entries). Please refer to the description in `partition table `_. 52 | 53 | ---------------- 54 | 55 | How to read the remaining memory of the ESP32 chip? 56 | ------------------------------------------------------------------------------------------------------------------------------- 57 | 58 | - The remaining memory of the chip RAM can be read through `esp_get_free_heap_size() `__. 59 | 60 | --------------- 61 | 62 | What should I pay attention to when using ``xTaskCreateStatic()`` in ESP-IDF? 63 | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 64 | 65 | - You can refer to the `xTaskCreateStatic() description `__. 66 | 67 | ------------ 68 | 69 | Based on the ESP-IDF SDK, when defining a global variable with `RTC_NOINIT_ATTR uint32_t counter = 0;`, the printed value is `1368610594`. What is the reason for this? 70 | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 71 | 72 | - The RTC_NOINIT_ATTR variable is compiled into the .rtc_noinit section, which is not cleared at startup. Therefore, assigning a value at variable initialization will not take effect. It only becomes effective when assigned after initialization. 73 | - When using `RTC_NOINIT_ATTR` to define a global variable, it is necessary to assign a value to the variable in the application code. The correct approach is as follows: 74 | 75 | .. code-block:: c 76 | 77 | RTC_NOINIT_ATTR uint32_t counter; 78 | counter = 0; 79 | printf("Counter value: %"PRIu32" \n",counter); 80 | 81 | -------------------------------------------------------------------------------- /docs/en/software-framework/storage/sd-sdio-mmc.rst: -------------------------------------------------------------------------------- 1 | SD/SDIO/MMC Driver 2 | ================== 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | Is it possible to use ESP8266 together with TF card? 19 | ------------------------------------------------------------------------ 20 | 21 | It is not recommended to use ESP8266 together with TF card. 22 | 23 | - Although ESP8266 can be connected to TF card in hardware level (communicate through SPI), the chip may run out of memory in different application scenarios due to its limited resources. Thus, it is not recommended to use ESP8266 with TF card. 24 | - If all you need is a Wi-Fi-only module that can be connected to a TF card, we recommend using chips like `ESP32-S2 `_. 25 | 26 | ---------------- 27 | 28 | What is the maximum capacity of eMMC supported by ESP32-S3? 29 | -------------------------------------------------------------------------------------------------------------- 30 | 31 | 2 TB is the limit for SD and eMMC protocols. There is no specific maximum capacity limit for the ESP32-S3. But if your application is built upon a filesystem, the maximum capacity may also be restricted by the filesystem. 32 | 33 | --------------- 34 | 35 | Does ESP32 support DDR52, HS200, HS400, and SDR52 modes when it is connected to an eMMC card? 36 | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 37 | 38 | - At the frequency of 40 MHz, ESP32 supports the DDR52 mode and does not support other modes. For details, please refer to `Supported Speed Modes `_. 39 | -------------------------------------------------------------------------------- /docs/en/software-framework/storage/spiffs.rst: -------------------------------------------------------------------------------- 1 | SPIFFS Filesystem 2 | ================= 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | --------------- 17 | 18 | Can SPIFFS partition be encrypted? 19 | ---------------------------------------------------------------- 20 | 21 | :CHIP\: ESP32, ESP32S2, ESP32S3, ESP32C3: 22 | 23 | - SPIFFS does not provide native disk encryption. However, as SPIFFS is realized based on flash, the data can be encrypted using flash encryption. Standard encryption libraries such as mbedtls or OpenSSL can be used to encrypt and decrypt files in SPIFFS. When writing files, the data is encrypted first, and then written to SPIFFS. When reading files, data is first read from SPIFFS, and then decrypted using corresponding decryption algorithms. 24 | 25 | ------------------- 26 | 27 | How do I store the keys and certs of ESP32 devices in SPIFFS? 28 | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 29 | 30 | You can generate an SPIFFS image from files and flash it to the corresponding partition. See `SPIFFS Filesystem `_ for details. 31 | 32 | -------------- 33 | 34 | Can ESP32 mount a SPIFFS file system partition in the external SPI flash? 35 | --------------------------------------------------------------------------------------------- 36 | 37 | Yes, this function has been added in ESP-IDF v4.0 and later versions. Please note that when two partitions are mounted to ESP32, it is not permitted for multiple tasks to write files into the same partition at the same time. 38 | -------------------------------------------------------------------------------- /docs/en/software-framework/thread.rst: -------------------------------------------------------------------------------- 1 | Thread 2 | ======= 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | ---------------- 17 | 18 | Does ESP32-H2, as an OpenThread RCP device, support building a Thread border router based on a Linux host? 19 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 20 | 21 | - Yes. ESP32-H2 can build an OpenThread border router via a Linux host. For detailed steps, please refer to: `OpenThread > Guides > Border Router > Raspberry Pi `_. 22 | - On the Linux host side, please run the `ot-br-posix `_ SDK; on the ESP32-H2 device side, please run the `esp-idf/examples/openthread/ot_rcp `_ example. 23 | - When `configuring the OpenThread RCP device `_ on ESP32-H2, please set the UART baud rate to 460800 bps. The configuration command is as follows: 24 | 25 | .. code-block:: c 26 | 27 | OTBR_AGENT_OPTS="-I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyUSB2?uart-baudrate=460800" 28 | 29 | - In addition, we also provide a solution for building a Thread border router based on the FreeRTOS system. For details, please refer to `OpenThread > Guides > Border Router > FreeRTOS `_. 30 | 31 | ---------------- 32 | 33 | Does the ESP chip equipped with an IEEE 802.15.4 module and supporting Thread allow interaction in the form of AT-like commands? 34 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 35 | 36 | Yes. OpenThread has released a public open-source `command line interface `__, which can be used for networking and parameter configuration. To try a specific demo, please refer to the `ot_cli example `__. 37 | -------------------------------------------------------------------------------- /docs/en/software-framework/zigbee.rst: -------------------------------------------------------------------------------- 1 | Zigbee 2 | ======= 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. raw:: html 7 | 8 | 15 | -------------------------------------------------------------------------------- /docs/en/test-verification/index.rst: -------------------------------------------------------------------------------- 1 | Test verification 2 | ================== 3 | 4 | :link_to_translation:`zh_CN:[中文]` 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | 9 | Power consumption verification 10 | -------------------------------------------------------------------------------- /docs/requirements.txt: -------------------------------------------------------------------------------- 1 | # This is a list of python packages used to generate documentation. This file is used with pip: 2 | # pip install --user -r requirements.txt 3 | # 4 | 5 | esp-docs==1.* 6 | sphinx-design==0.2.0 7 | 8 | linuxdoc 9 | urllib3 10 | python-gitlab -------------------------------------------------------------------------------- /docs/zh_CN/_static/application-solution/android-application/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/application-solution/android-application/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/application-solution/arduino-application/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/application-solution/arduino-application/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/application-solution/artificial-intelligence/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/application-solution/artificial-intelligence/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/application-solution/at-application/AT_BLESCAN_Return_LOG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/application-solution/at-application/AT_BLESCAN_Return_LOG.png -------------------------------------------------------------------------------- /docs/zh_CN/_static/application-solution/at-application/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/application-solution/at-application/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/application-solution/audio-development-framework/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/application-solution/audio-development-framework/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/application-solution/cloud-service/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/application-solution/cloud-service/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/application-solution/ios -application/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/application-solution/ios -application/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/development-environment/IDE-plugins/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/development-environment/IDE-plugins/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/development-environment/debugging/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/development-environment/debugging/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/development-environment/environment-setup/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/development-environment/environment-setup/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/development-environment/firmware_update/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/development-environment/firmware_update/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/get-started/document-contribution/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/get-started/document-contribution/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/get-started/question-feedback/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/get-started/question-feedback/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/get-started/question-search/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/get-started/question-search/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/hardware-related/chip-comparison/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/hardware-related/chip-comparison/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/hardware-related/development-board/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/hardware-related/development-board/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/hardware-related/hardware-design/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/hardware-related/hardware-design/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/software-framework/ble-bt/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/software-framework/ble-bt/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/software-framework/ethernet/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/software-framework/ethernet/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/software-framework/mesh/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/software-framework/mesh/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/software-framework/peripherals/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/software-framework/peripherals/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/software-framework/protocols/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/software-framework/protocols/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/software-framework/provisioning/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/software-framework/provisioning/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/software-framework/security/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/software-framework/security/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/software-framework/storage/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/software-framework/storage/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/software-framework/system/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/software-framework/system/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/software-framework/wifi/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/software-framework/wifi/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_static/test-verification/power-consumption-verification/_static.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/espressif/esp-faq/ca799e8a53c41a10e21ac518234b2f1fe6f4d911/docs/zh_CN/_static/test-verification/power-consumption-verification/_static.txt -------------------------------------------------------------------------------- /docs/zh_CN/_templates/layout.html: -------------------------------------------------------------------------------- 1 | {% extends '!layout.html' %} 2 | {% block comments %} 3 |
4 |
5 |
对本文档有建议?

 提交文档反馈
6 | 7 |
没找到答案? 8 | 10 | 12 | 14 |
15 | {% endblock %} 16 | -------------------------------------------------------------------------------- /docs/zh_CN/application-solution/artificial-intelligence.rst: -------------------------------------------------------------------------------- 1 | AI 应用 2 | ======= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | AI 图像识别产品可兼容哪些摄像头? 19 | ---------------------------------- 20 | 21 | 当前 ESP-EYE 主控芯⽚为 ESP32,可兼容 0V2640,OV3660,OV5640,OV7725 等多款摄像头。详见:`esp32-camera Github `_。 22 | 23 | -------------- 24 | 25 | ESP-WHO 支持使用 ESP-IDF 哪些版本? 26 | ----------------------------------------------------------------------------- 27 | 28 | 请前往 `ESP-WHO Github `_ 获取最新信息。 29 | 30 | -------------- 31 | 32 | 请问微信小程序 ESP-EYE 有相关资料吗? 33 | --------------------------------------------------------------------------- 34 | 35 | ESP-EYE demo 微信小程序的开源资料:`EspEyeForWeChat `_。 36 | 37 | ---------------------- 38 | 39 | `esp-skainet `_ 示例支持哪些语言呢? 40 | ---------------------------------------------------------------------------------------- 41 | 42 | 目前仅支持中文和英文。 43 | 44 | ---------------------- 45 | 46 | `ESP-DL `_ 支持哪些模型框架? 47 | ---------------------------------------------------------------------------------------- 48 | 49 | ESP-DL 所使用的 ESP-PPQ 量化工具支持直接对 ONNX 模型进行量化。Pytorch 和 TensorFlow 需要先转换为 ONNX 模型,因此请确保你的模型可以转换为 ONNX 模型。 50 | 51 | ---------------------- 52 | 53 | `ESP-DL `_ 支持上述三个平台(MXNet、Pytorch、TensorFlow)的所有的模型吗? 54 | ---------------------------------------------------------------------------------------------------------------------------------------------- 55 | 56 | 模型中所有算子必须为 ESP-DL 所支持的算子。有关支持的算子,请参考 `Operator Support State `_。 57 | 58 | ---------------------- 59 | 60 | `ESP-SKAINET `_ 模型文件支持放在 SD 卡中吗? 61 | ---------------------------------------------------------------------------------------- 62 | 63 | 支持放在 SD 卡中。 64 | 65 | ---------------------- 66 | 67 | `ESP-SKAINET `_ 如何定制命令词? 68 | ------------------------------------------------------------------------------------ 69 | 70 | 定制命令词,请查看 `自定义命令词方法 `__。 71 | 72 | ---------------------- 73 | 74 | 如何降低 AI 语音模型的系统占用? 75 | --------------------------------------- 76 | 77 | 可以选择关闭 AEC、AE、VAD 这三个功能。 78 | 79 | ---------------------- 80 | 81 | 16 位量化模型和 8 位量化模型有什么区别? 82 | ------------------------------------------------ 83 | 84 | 16 位量化模型的精度更高,结果更准确。8 位量化模型更轻量化。 85 | 86 | ---------------------- 87 | 88 | AI 语音模型如何修改麦克风通道数量? 89 | --------------------------------------- 90 | 91 | 可以在 AFE 中配置麦克风通道数和回采通道数。 92 | 93 | ---------------------- 94 | 95 | 如何拿到开发板中采集到的实际音频? 96 | --------------------------------------- 97 | 98 | 需要有 SD 卡接口,将音频文件存入到 SD 卡中。 99 | 100 | ---------------------- 101 | 102 | 有关 `ESP-SR GitHub `__ 的学习资料存放在哪里? 103 | --------------------------------------------------------------------------------------------------------------------- 104 | 105 | 请参考 `ESP-SR 用户指南 `_。 106 | 107 | ---------------------- 108 | 109 | 有关 `ESP-DL `__ 的学习资料存放在哪里? 110 | --------------------------------------------------------------------------------------------------- 111 | 112 | 请参考如下教程: 113 | 114 | - `如何使用 ESP-DL 部署手势识别 `_。 115 | - `行人检测 `_。 116 | - `人脸检测 `_。 117 | - `人脸识别 `_。 118 | 119 | ------------- 120 | 121 | ESP32-S3 如何自定义英文命令词进行识别? 122 | ----------------------------------------------------------------------------------------------------------------- 123 | 124 | - 对于 MultiNet6,需要准备 ``commands_en.txt`` 来自定义英文命令词。对于 MultiNet5,可使用 ``multinet_g2p.py`` 脚本将英文命令词转换为 multinet 可以识别的音素。具体请参考 `esp-sr/tool `_。 125 | -------------------------------------------------------------------------------- /docs/zh_CN/application-solution/at-application.rst: -------------------------------------------------------------------------------- 1 | AT 2 | == 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | 有关 ESP-AT 的常见问题请见 `ESP-AT 用户指南 `_. 17 | 18 | -------------------------------------------------------------------------------- /docs/zh_CN/application-solution/index.rst: -------------------------------------------------------------------------------- 1 | 应用方案 2 | ============= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | 9 | AI 应用 10 | AT 命令 11 | 音频应用框架 12 | BLE Mesh 应用框架 13 | 摄像头应用  14 | ESP Matter 15 | ESP-NOW 16 | ESP RainMaker 云服务 17 | 第三方云服务 18 | Wi-Fi Mesh 应用框架 19 | -------------------------------------------------------------------------------- /docs/zh_CN/application-solution/third-party-cloud-service.rst: -------------------------------------------------------------------------------- 1 | 第三方云服务 2 | =============== 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | OTA 升级有没有相关示例参考? 19 | ------------------------------- 20 | 21 | 请参考如下链接: 22 | 23 | - `ESP8266 OTA `_ 24 | - `ESP32 系列 OTA `_ 25 | 26 | -------------- 27 | 28 | ESP32 如何对接天猫精灵,是否有相应的资料? 29 | ------------------------------------------ 30 | 31 | ESP32 对接天猫精灵可以使用 ``esp-aliyun SDK``,可以参阅 `ESP 设备对接阿里云指南 `_。 32 | 33 | -------------- 34 | 35 | ``esp-aliyun`` 与 ``esp-ali-smartliving`` 的区别 ? 36 | --------------------------------------------------- 37 | 38 | - ``esp-aliyun`` 对接的是“物联网平台”。 39 | - ``esp-ali-smartliving`` 对接的是“生活物联网平台”。 40 | - 阿里云将两个平台在云端互通,使用功能上相似度较高,并可相互替代。 41 | - 两者区别可以参见 `生活物联网平台与物联网平台的区别 `_。 42 | 43 | -------------- 44 | 45 | 使用乐鑫的产品连接乐鑫云平台,遇到问题如何提问与反馈? 46 | -------------------------------------------------------------- 47 | 48 | - 如果您使用的乐鑫云平台是 ESP RainMaker,建议您直接将问题反馈至 `GitHub `_。 49 | - 如果是其他云平台,您可以将使用的云平台信息以及您的问题汇总,发送到 sales@espressif.com。 50 | 51 | -------------- 52 | 53 | ESP32 与 ESP8266 可以连接 Alexa 或者 Google Home 吗? 54 | --------------------------------------------------------- 55 | 56 | - 可以。Alexa 可以参考 `aws_iot `_,做一些 Alexa 配置即可。 57 | - Google Home 当前没有示例,可以参考 ESP32 参考示例 `esp-google-iot `_。 58 | 59 | -------------- 60 | 61 | ESP32 + 以太网 + MQTT 方式接入阿里云,应该怎么做? 62 | ------------------------------------------------------------------------------------------------------------- 63 | 64 | 使用 `esp-aliyun `_,将 Wi-Fi 初始化代码替换为 Ethernet 初始化即可。可以参考 ESP-IDF 下的 `Ethernet 示例 `_。 65 | 66 | -------------- 67 | 68 | 如何在阿里云上批量生成三元组 bin 文件? 69 | -------------------------------------------------------------- 70 | 71 | 文档中的指令已经更新。在 4.4.X 版本上,请使用以下指令生成对应的 bin 文件:`python $IDF_PATH/tools/mass_mfg/mfg_gen.py generate multipule_mfg_config.csv multipule_mfg_values.csv scgw 0x4000`。 72 | -------------------------------------------------------------------------------- /docs/zh_CN/conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # 3 | # English Language RTD & Sphinx config file 4 | # 5 | # Uses ../conf_common.py for most non-language-specific settings. 6 | 7 | # Importing conf_common adds all the non-language-specific 8 | # parts to this conf module 9 | try: 10 | from conf_common import * # noqa: F403,F401 11 | except ImportError: 12 | import os 13 | import sys 14 | sys.path.insert(0, os.path.abspath('../')) 15 | from conf_common import * 16 | 17 | import datetime 18 | 19 | current_year = datetime.datetime.now().year 20 | 21 | # General information about the project. 22 | project = u'ESP-FAQ' 23 | copyright = u'2020 - {}, 乐鑫信息科技(上海)股份有限公司'.format(current_year) 24 | pdf_title = u'ESP-FAQ 手册' 25 | 26 | # The language for content autogenerated by Sphinx. Refer to documentation 27 | # for a list of supported languages. 28 | language = 'zh_CN' 29 | 30 | # Grouping the document tree into LaTeX files. List of tuples 31 | # (source start file, target name, title, 32 | # author, documentclass [howto, manual, or own class]). 33 | latex_documents = [ 34 | ('index', 'ReadtheDocsTemplate.tex', project, 35 | copyright, 'manual'), 36 | ] 37 | 38 | html_js_files += ['js/chatbot_widget_cn.js'] 39 | -------------------------------------------------------------------------------- /docs/zh_CN/development-environment/IDE-plugins.rst: -------------------------------------------------------------------------------- 1 | IDE 插件 2 | ======== 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | Arduino IDE 如何添加 ESP32 开发板? 19 | ------------------------------------ 20 | 21 | - 关于 Arduino-ESP32 的安装指南,请参考 `arduino-ide 入门指南 `_。 22 | - 关于 Arduino IDE 添加开发板,请参考 `arduino Cores `_。 23 | 24 | ------------------------- 25 | 26 | 使用 Arduino IDE 开发平台,如何读取 ESP32 出厂自带的 Wi-Fi 的 MAC 地址? 27 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 28 | 29 | - Arduino-ESP32 开发框架为:https://github.com/espressif/arduino-esp32。 30 | - 使用 WiFi.macAddress() 获取 ESP32 的 Wi-Fi 的 MAC 地址。 31 | - 还可以参考 `WiFiClientStaticIP 例程 `_。 32 | 33 | ------------------------- 34 | 35 | 如何使用 Flash 下载工具将基于 Arduino 开发生成的 bin 文件烧录到 ESP32? 36 | ------------------------------------------------------------------------------------------------ 37 | 38 | - 请前往 ``File`` -> ``Preferences`` -> ``Show verbose output during`` 勾选 ``compilation``,编译成功后,会打印一条 Python 烧录命令,其中包含待烧录的 bin 文件以及对应的烧录地址。 39 | - 下载 `Flash 下载工具 `_,使用该工具烧录时选择 bin 文件,输入对应的烧录地址即可。更多信息请参阅 `Flash 下载工具用户指南 `_。 40 | 41 | ------------ 42 | 43 | 如何更新 esp32-arduino 库版本? 44 | --------------------------------------------------------------------------------------------- 45 | 46 | - 在 ``Tool`` > ``Board`` > ``BoardManager`` 路径下搜索 ``ESP32`` 来选择安装 `esp32-arduino `_ 库的版本。 47 | 48 | -------------- 49 | 50 | ESP32-SOLO-1 是否可以在 Arduino 软件上进行开发? 51 | ------------------------------------------------- 52 | 53 | - 目前 Arduino 软件开发环境仅支持 ESP32 双核芯片运行,不支持运行 ESP32 单核芯片,因此 ESP32-SOLO-1 尚不支持在 Arduino 软件上进行开发。 54 | - 如果您仍倾向于使用 Arduino 构建代码,可以将 `arduino-esp32 `_ 库用作 `ESP-IDF 的组件 `_ 进行开发测试。 55 | 56 | -------------------------------------------------------------------------------- /docs/zh_CN/development-environment/index.rst: -------------------------------------------------------------------------------- 1 | 开发环境 2 | ============= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | 9 | IDE 插件 10 | 调试分析 11 | 环境搭建 12 | 固件升级 13 | -------------------------------------------------------------------------------- /docs/zh_CN/hardware-related/chip-comparison.rst: -------------------------------------------------------------------------------- 1 | 芯片功能对比 2 | ============ 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | 请从编程开发⽅式、性能表现、功耗表现等⽅⾯列举⼀下 ESP32 单核与双核的区别? 19 | ------------------------------------------------------------------------------------------------------ 20 | 21 |  ESP32 单核与双核的主要差异是双核多了⼀个独⽴核⼼,可以把⼀些实时性⾼的操作放在该独⽴核⼼上。 22 | 23 |  - 单核与双核的编程⽅式⼀致,不过单核芯片需要配置 FreeRTOS 运⾏在单核上,双核芯片则无需此步骤。配置路径:``make menuconfig`` > ``Component config`` > ``FreeRTOS`` > ``[*] Run FreeRTOS only on first core``。 24 |  - 性能表现仅在⾼负载运算时有差异(例如 AI 算法,⾼实时性中断),其余使⽤上⽆明显差异。 25 |  - 功耗仅在 Modem-sleep 模式下会有细微差别,此时双核芯片的功耗略高于单核芯片。详情可参考 `《ESP32 技术参考手册》 `_。 26 | 27 | -------------- 28 | 29 | ESP32 芯片版本 v3.0 在软硬件使⽤上和之前版本的芯片有什么区别呢? 30 | ------------------------------------------------------------------------ 31 | 32 | - 软件上使⽤⽆区别,是兼容之前的固件的,硬件上修复了⼀些 bug。 33 | - 具体的设计变化可以参考⽂档 `《ESP32 芯片版本 v3.0 使用指南》 `_。 34 | 35 | -------------- 36 | 37 | ESP32 的 GPIO34 ~ GPIO39 管脚是否只能设置为输入模式? 38 | ----------------------------------------------------- 39 | 40 | - ESP32 的 GPIO34 ~ GPIO39 只能设置为输入模式,没有软件上拉或下拉功能,不能设置为输出模式。 41 | - 详情可参见 `外设说明 `_。 42 | 43 | -------------- 44 | 45 | ESP32 有适配 Linux 平台驱动吗? 46 | ------------------------------- 47 | 48 | 有适配,请参考 `esp-hosted `_ 示例。 49 | 50 | .. note:: 该示例适配 802.3 协议,并不是 802.11 协议。 51 | 52 | -------------- 53 | 54 | 模组屏蔽盖上的二维码扫描数据如何解读? 55 | -------------------------------------------- 56 | 57 | - 若二维码扫描后读取数据为 0920118CAAB5D2B7B4,那么其中 09 为工厂代码,20 为 20** 生产年份(本示例中为 2020 年),11 为本年第几周生产,后 12 位 8CAAB5D2B7B4 为设备 MAC 地址。关于此信息的最新说明,请参考 `《模组包装信息》 `_。 58 | 59 | -------------- 60 | 61 | ESP32 的 VDD3P3_RTC 是否支持单独电池供电? 62 | ------------------------------------------------------ 63 | 64 | - ESP32 内部 RTC 域不可以独立工作,需要主 CPU 参与配置,单独使用电池供电时依然无法抵御突然掉电的情况。 65 | - 如果需要系统掉电时时钟信息保存,可以添加外部 RTC 时钟芯片。 66 | 67 | -------------- 68 | 69 | ESP32-PICO-D4 和 ESP32-PICO-V3 以及 ESP32-PICO-V3-02 有什么区别? 70 | ----------------------------------------------------------------------- 71 | 72 | - 内置芯片版本:ESP32-PICO-V3 和 ESP32-PICO-V3-02 的核心是 ESP32 (ECO V3) 芯片, ESP32-PICO-D4 的核心是 ESP32 (ECO V1) 芯片。 73 | - 封装尺寸:ESP32-PICO-D4 和 ESP32-PICO-V3 的尺寸为 7 × 7 × 0.94 (mm),ESP32-PICO-V3-02 的尺寸为 7 × 7 × 1.11 (mm)。 74 | - 内置 flash:ESP32-PICO-D4 和 ESP32-PICO-V3 集成了 4 MB 的 SPI Flash,而 ESP32-PICO-V3-02 集成了 8 MB flash 和 2 MB PSRAM。 75 | - 管脚差异:可以参考 `《ESP32­-PICO-­V3-­02 技术规格书》 `_ 中的“与 ESP32-PICO­-V3 和 ESP32-­PICO-­D4 兼容性”章节。 76 | 77 | --------------- 78 | 79 | ESP8266 是否支持 32 MHz 晶振频率? 80 | -------------------------------------------------------------------------------------------------------------------------------- 81 | 82 | - 不支持,ESP8266 支持 26 MHz 和 40 MHz 晶振频率,推荐用 26 MHz。 83 | 84 | --------------- 85 | 86 | ESP 系列产品是否支持 Zephyr? 87 | ----------------------------------------------------------------------------------------------------------------------------------------- 88 | 89 | - ESP 系列产品对 Zephyr 的支持可以参考 `乐鑫对 Zephyr 的最新支持 `_,目前仅适配了部分功能模块,后续会进一步更新。如果您有相关的功能需求,可以先在 `Zephyr Github issue `_ 上查询或者提问。 90 | - 也可以从 `Zephyr 官方文档 `_ 的 `XTENSA Boards `_ 和 `RISCV Boards `_ 找到 ESP 产品的相关资料。 91 | 92 | --------------- 93 | 94 | 如何通过芯片丝印,识别芯片版本? 95 | ------------------------------------------------------------------- 96 | 97 | 芯片版本可通过查看芯片丝印最下方 Espressif Tracking Information 行的第二位进行识别。 98 | 99 | .. image:: ../../_static/chip-marking.png 100 | :width: 400 101 | :alt: 芯片丝印示意图 102 | 103 | - 有关不同芯片版本的详细差异,请从乐鑫 `文档页面 `_ 查看对应芯片系列的勘误表文档。 104 | - 有关芯片丝印的完整介绍,请参考 `《乐鑫芯片包装信息》 `_。 105 | -------------------------------------------------------------------------------- /docs/zh_CN/hardware-related/index.rst: -------------------------------------------------------------------------------- 1 | 硬件相关 2 | ============= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | 9 | 芯片功能对比 10 | 开发板使用 11 | 硬件设计 12 | 射频相关 13 | 工艺与防护 14 | 生产测试 15 | -------------------------------------------------------------------------------- /docs/zh_CN/hardware-related/process-and-ESD.rst: -------------------------------------------------------------------------------- 1 | 工艺与 ESD 防护 2 | ================= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | ESP32 ESD 测试注意事项有哪些? 19 | ----------------------------------------------------------------------- 20 | 21 | - ESP32 的 ESD(Electrostatic Discharge,静电放电)测试是为了确保 ESP32 设备在遭受静电放电时具有足够的耐受能力。注意事项如下: 22 | 23 | - ESD 测试应该在 ESD 实验室或者 ESD 防护区域进行,这些地方需要具备良好的接地保护和静电放电保护设施。 24 | - 在进行 ESD 测试时,应该使用符合国际标准的 ESD 测试设备,包括 ESD 发生器和 ESD 接地垫等,以确保测试结果的准确性。 25 | - 在进行 ESD 测试时,需要稳定的 3.3 V 电压,EN trace 如果太长,容易导致重启。 26 | - 应对 ESP32 设备进行多次测试,以验证其耐受能力的可靠性,并对测试结果进行记录和分析。 27 | - 如模组无反应,请确认测试的空气放电或接触放电的具体电压。 28 | -------------------------------------------------------------------------------- /docs/zh_CN/hardware-related/production-test.rst: -------------------------------------------------------------------------------- 1 | 生产测试 2 | ======== 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | 为什么部分模组使用 DIO/DOUT 时可以正常下载固件,但使用 QOUT/QIO 时程序无法正常运行? 19 | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- 20 | 21 | - 首先需要确认模组内 flash 支持哪些模式,以及模组设计的走线是否满足模式需要。 22 | - 其次检测 flash 状态寄存器的 QE 位,该 bit 位控制 flash 是否使能四线模式。 23 | - 不同的乐鑫芯片/模组采用 flash 厂家不同,部分厂商 flash 默认 QE 关闭。需要通过实际测试判断是否支持四线模式。 24 | - 当 ROM 引导二级引导加载程序时,如果配置的参数使用 QIO 方式读取,会因 QE 关闭而二次读取失败。 25 | - 建议模组使用 DIO 模式烧录,在 menuconfig 中配置 QIO 模式,该配置会在二级引导加载程序中配置 QE 位使能,进而引导 app bin 使用四线模式。 26 | 27 | --------------- 28 | 29 | 如何获取产测工具? 30 | -------------------------------------------------------------------------------------------------- 31 | 32 | :CHIP\: ESP32 | ESP8266: 33 | 34 | - 请点击 `产测工具 `_ 进行下载。 35 | 36 | -------------- 37 | 38 | ESP32 使用 ``esptool.py burn_custom_mac`` 命令写入用户自定义 MAC 地址,为什么通过 ``esptool.py read_mac`` 读到的还是出厂默认的 MAC 地址? 39 | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 40 | 41 | - ``esptool.py read_mac`` 命令默认只能读到出厂写在 eFuse BLOCK0 的 MAC 地址,而使用 ``esptool.py burn_custom_mac`` 命令写入的用户自定义的 MAC 地址是写到 eFuse BLOCK3 中,可以使用 ``espefuse.py get_custom_mac`` 命令来查询写入 eFuse BLOCK3 中的 MAC 地址。 42 | - 更多信息可以参考 `esptool 文档 `__。 43 | 44 | --------------- 45 | 46 | ESP32-WROVER-E (16 MB flash)模组使用 Flash 下载工具下载多个单独的 bin 文件成功,但下载合并的固件 (12 MB) 失败,是什么原因? 47 | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 48 | 49 | 由于合并后的固件绝大部分都是 "0xFF",压缩率比较高,同样长度的压缩数据解压后的数据量比较大,导致烧录时间久出现烧录超时(默认 7 秒)报错。可以关闭 Flash 下载工具里的 ``configure`` > ``esp32`` > ``spi_download`` 文件里的压缩配置选项来下载合并的固件,如下: 50 | 51 | .. code-block:: c 52 | 53 | compress = False 54 | no_compress = True 55 | -------------------------------------------------------------------------------- /docs/zh_CN/index.rst: -------------------------------------------------------------------------------- 1 | ESP-FAQ 2 | ============= 3 | :link_to_translation:`en:[English]` 4 | 5 | .. role:: bolditalics 6 | :class: bolditalics 7 | 8 | ESP-FAQ 是由乐鑫官方推出的针对常见问题的总结。在线帮助我们的用户快速检索经常问到的问题,通过简单的解释获得解答。目前常见问题的种类涵盖:开发环境、应用方案、软件平台、硬件相关和测试测试。 9 | 10 | ================== ================== ================== 11 | |使用说明|_ |开发环境|_ |应用方案|_ 12 | ------------------ ------------------ ------------------ 13 | `使用说明`_ `开发环境`_ `应用方案`_ 14 | ------------------ ------------------ ------------------ 15 | |软件平台|_ |硬件相关|_ |测试校验|_ 16 | ------------------ ------------------ ------------------ 17 | `软件平台`_ `硬件相关`_ `测试校验`_ 18 | ================== ================== ================== 19 | 20 | .. |使用说明| image:: ../_static/instruction.png 21 | .. _使用说明: instruction/index.html 22 | 23 | .. |开发环境| image:: ../_static/development-environment.png 24 | .. _开发环境: development-environment/index.html 25 | 26 | .. |应用方案| image:: ../_static/application-solution.png 27 | .. _应用方案: application-solution/index.html 28 | 29 | .. |软件平台| image:: ../_static/software-framework.png 30 | .. _软件平台: software-framework/index.html 31 | 32 | .. |硬件相关| image:: ../_static/hardware-related.png 33 | .. _硬件相关: hardware-related/index.html 34 | 35 | .. |测试校验| image:: ../_static/test-verification.png 36 | .. _测试校验: test-verification/index.html 37 | 38 | 39 | .. toctree:: 40 | :hidden: 41 | 42 | 使用说明 43 | 开发环境 44 | 应用方案 45 | 软件平台 46 | 硬件相关 47 | 测试校验 48 | 商务问题 49 | -------------------------------------------------------------------------------- /docs/zh_CN/instruction/index.rst: -------------------------------------------------------------------------------- 1 | 使用说明 2 | ============= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | 本节为 ESP-FAQ 的使用说明。“问题查找”旨在帮助您快速了解该网站的搜索方法及分类框架,节省问题查找时间。同时,我们诚挚欢迎您对 ESP-FAQ 直接做出错误修复、新文档添加等优化贡献,具体操作流程可参见“文档贡献”。 7 | 8 | .. toctree:: 9 | :maxdepth: 1 10 | 11 | 问题查找 12 | 文档贡献 13 | -------------------------------------------------------------------------------- /docs/zh_CN/instruction/question-search.rst: -------------------------------------------------------------------------------- 1 | 问题搜索 2 | ======== 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | 此指南目前有以下两个部分: 7 | 8 | - 搜索问题技巧 9 | - 问题分类框架 10 | 11 | 搜索问题技巧 12 | ------------ 13 | 14 | 目前可以归纳出以下 2 种搜索问题的技巧: 15 | 16 | - 搜索关键词 17 | - 排除某个关键词 18 | 19 | 搜索关键词 20 | ~~~~~~~~~~ 21 | 22 | 将问题中的关键词提取出来并搜索它们,此时搜索结果会得到最匹配的结果。 23 | 24 | 比如问题为:``ESP32 的 Bluetooth LE 吞吐量是多少?`` 25 | 26 | 此时搜索:``ESP32``、``BLE`` 和 ``吞吐量`` 等关键字为宜。 27 | 28 | 排除某个关键词 29 | ~~~~~~~~~~~~~~ 30 | 31 | 在搜索内容中添加一个标识符 ``-``, 格式为: ``关键词 -排除关键词``。此时搜索结果不会出现有排除关键词的结果。 32 | 33 | 比如搜索:``ESP32 -ble``。任何搜索结果中有 ``ble`` 的结果将会被过滤。 34 | 35 | 问题分类框架 36 | ------------ 37 | 38 | 在掌握上述 ``搜索问题技巧`` 后,可以利用 ESP-FAQ 已经做好的分类来提取想搜索问题里的关键词并搜索。以下是此网站的框架: 39 | 40 | - :doc:`开发环境 <../development-environment/index>` 41 | - :doc:`应用方案 <../application-solution/index>` 42 | - :doc:`软件平台 <../software-framework/index>` 43 | - :doc:`硬件相关 <../hardware-related/index>` 44 | - :doc:`测试校验 <../test-verification/index>` 45 | - :doc:`商务问题 <../commercial-faq/index>` 46 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/bt/index.rst: -------------------------------------------------------------------------------- 1 | ===== 2 | 蓝牙 3 | ===== 4 | 5 | :link_to_translation:`en:[English]` 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | 10 | ble 11 | br-edr 12 | other-bt 13 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/bt/other-bt.rst: -------------------------------------------------------------------------------- 1 | 其他蓝牙 2 | =============== 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | --------------- 17 | 18 | 怎样通过串口给 ESP32-WROOM-32D 模块直接发送蓝牙 HCI 命令? 19 | ----------------------------------------------------------------- 20 | 21 | - 请参考例程 `controller_hci_uart_esp32 `_。 22 | - ESP32 用作 controller,其他设备作为 host,可通过 UART 给 ESP32 发送 HCI 指令。 23 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/coexistence.rst: -------------------------------------------------------------------------------- 1 | 共存 2 | ==== 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | Wi-Fi 和蓝牙共存时,支持哪些共存场景? 19 | -------------------------------------------- 20 | 21 |   支持的共存场景请参考 `共存文档 `_。 22 | 23 | -------------- 24 | 25 | Wi-Fi 和 ESP-BLE-MESH 共存时,为什么 Wi-Fi 吞吐量很低? 26 | -------------------------------------------------------- 27 | 28 | 未搭载 PSRAM 的 ESP32-DevKitC 开发板,Wi-Fi 和 ESP-BLE-MESH 共存可以正常运行,但是吞吐率较低。当 Wi-Fi 和 ESP-BLE-MESH 共存时,搭载 PSRAM 的 ESP32-DevKitC 速率可以稳定在 1 Mbps 以上。 29 | 30 | 应使能 menuconfig 中的一些配置来支持 PSRAM: 31 | 32 | - ``ESP32-specific --> Support for external,SPI-connected RAM --> Try to allocate memories of Wi-Fi and LWIP...`` 33 | - ``Bluetooth --> Bluedriod Enable --> BT/BLE will first malloc the memory from the PSRAM`` 34 | - ``Bluetooth --> Bluedriod Enable --> Use dynamic memory allocation in BT/BLE stack.`` 35 | - ``Bluetooth --> Blutooth controller --> BLE full scan feature supported.`` 36 | - ``Wi-Fi --> Software controls Wi-Fi/Bluetooth coexistence --> Wi-Fi`` 37 | 38 | -------------- 39 | 40 | ESP32 的 ESP-WIFI-MESH 和 Bluetooth® LE Mesh 可以同时支持吗? 41 | ------------------------------------------------------------------ 42 | 43 | 不支持。 44 | 45 | ESP32 的 ESP-WIFI-MESH 和 BLE 可以同时支持,或者 ESP32 Wi-Fi STA 模式和 BLE Mesh 可以同时支持。 46 | 47 | -------------- 48 | 49 | ESP32 蓝牙和 Wi-Fi 能否同时使用? 50 | ---------------------------------------- 51 | 52 | ESP32 的 Wi-Fi 和蓝牙可共存,但需要分时控制,可在 menuconfig 中使能 Wi-Fi 和蓝牙共存设置。如下: 53 | 54 | :IDF\: release/v5.0: 55 | 56 | ``menuconfig -> Component config -> Wi-Fi -> Software controls WiFi/Bluetooth coexistence (Enable)`` 57 | 58 | :IDF\: release/v5.1 以及以上版本: 59 | 60 | ``menuconfig -> Component config -> Wireless Coexistence -> Software controls WiFi/Bluetooth coexistence (Enable)`` 61 | 62 | -------------- 63 | 64 | Wi-Fi、Bluetooth® LE 和 A2DP Sink 共存,进入 Bluetooth LE 扫描的时候音频数据接收会丢失、卡顿。怎么解决? 65 | -------------------------------------------------------------------------------------------------------- 66 | 67 | - 使用 RingBuf 缓存音频数据 68 | - 暂停播放音乐,并增加提示音,例如:正在扫描设备。 69 | 70 | -------------- 71 | 72 | BLE adverting (Connectable) + iBeacon sending(advertising) 可以共存吗?? 73 | -------------------------------------------------------------------------------------------------- 74 | 75 | :IDF\: release/v4.0以及以上版本 | CHIP\: ESP32: 76 | 77 | - 硬件上还未支持,应用层可以通过定时轮询发广播包的方式来完成。 78 | 79 | :IDF\: release/v4.3 以及以上版本 | CHIP\: ESP32-C3|ESP32-S3: 80 | 81 | - 可以。 82 | 83 | -------------- 84 | 85 | ESP32 的蓝牙双模如何共存及使用? 86 | ------------------------------------ 87 | 88 | ESP32 支持的双模蓝牙并没有特殊的地方,不需要做复杂的配置或调用即可使用。从开发者的⻆度来看,Bluetooth® LE 调用 Bluetooth LE 的 API,经典蓝牙调用经典蓝牙的 API。 89 | 90 | 经典蓝牙与 Bluetooth LE 共存示例可参考 `a2dp_gatts_coex 示例 `_。 91 | 92 | -------------- 93 | 94 | ESP32 的蓝⽛和 Wi-Fi 如何共存? 95 | ---------------------------------- 96 | 97 | 在 ``menuconfig`` 中,有个特殊选项 ``Software controls WiFi/Bluetooth coexistence``,⽤于通过软件来控制 ESP32 的蓝⽛和 Wi-Fi 共存,可以平衡 Wi-Fi、蓝⽛控制 RF 的共存需求。 98 | 99 | - 如果使能 ``Software controls WiFi/Bluetooth coexistence`` 选项,Bluetooth® LE scan 间隔不应超过 ``0x100 slots`` (约 160 ms)。若只是 Bluetooth LE 与 Wi-Fi 共存,则开启这个选项和不开启均可正常使⽤。但不开启的时候需要注意 Bluetooth LE scan window 应大于 150 ms,并且 Bluetooth LE scan interval 尽量⼩于 500 ms。 100 | - 若经典蓝⽛与 Wi-Fi 共存,则建议开启这个选项。 101 | 102 | --------------- 103 | 104 | Wi-Fi 和 蓝牙共存时,频繁通信出现 ELxXX error(比如 ELx200)如何解决? 105 | -------------------------------------------------------------------------------------------------- 106 | 107 | :CHIP\: ESP32: 108 | 109 | - 该问题目前已在 commit 386a8e37f19fecc9ef62e72441e6e1272fa985b9 修补,请切换至对应的 commit 进行测试。 110 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/index.rst: -------------------------------------------------------------------------------- 1 | 软件平台 2 | ============= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | 9 | 蓝牙 10 | 以太网 11 | 共存 12 | 外设 13 | 协议 14 | 配置 15 | 安全 16 | 储存 17 | 系统 18 | Thread 19 | Wi-Fi 20 | Zigbee 21 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/peripherals/dac.rst: -------------------------------------------------------------------------------- 1 | 数字模拟转换器 (DAC) 2 | ========================= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | ESP32-S2-Saola-1 使用 DAC 输出时,采用 3.3 V 进行供电,为什么实际测试电压只有 3.1 V? 19 | ----------------------------------------------------------------------------------------------------------- 20 | 21 | 由于存在内部压降,且存在片间差异,即使使用 3.3 V 供电,实际最大输出只有 3.2 V 左右。 22 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/peripherals/i2c.rst: -------------------------------------------------------------------------------- 1 | I2C 驱动程序 2 | ================ 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | ESP8266 是否支持 I2C 从机模式? 19 | ------------------------------------------------- 20 | 21 | 不支持,如果要使用此功能,推荐使用 ESP32 或者 ESP32-S2 芯片。ESP32 参考示例: `i2C_self_test `_。 22 | 23 | -------------- 24 | 25 | ESP8266 I2C 是软件模拟的吗? 26 | ------------------------------------- 27 | 28 | ESP8266 I2C 是使用 GPIO 软件模拟。 29 | 30 | -------------- 31 | 32 | 当 ESP32 芯片 I2C 在工作时(尤其是处于快速模式时),数据线上经常出现一些尖峰,往往在第 8/9 个时钟的下降沿之后,这是否正常? 33 | --------------------------------------------------------------------------------------------------------------------------------------------- 34 | 35 | 发生在 8/9 个时钟时数据线上的尖峰是由于 I2C 主从机控制权交接导致的,属于 I2C 协议里提到的正常现象。 36 | 37 | -------------- 38 | 39 | ESP32 芯片作为 I2C 主机怎样才能等待从机处理数据后再接收?例如通过 ``i2c_master_read_to_device`` 读取数据时, 需要从机接受命令后立即返回数据,但是实际的一些从机设备接收到命令后需要等待一段时间才能返回数据。 40 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 41 | 42 | 可以自行将 ``i2c_master_read_device`` 拆分成三部分进行实现: 43 | 44 | 1. 写命令和地址:``i2c_cmd_link_create_static`` > ``i2c_master_start`` > ``i2c_master_write_byte`` > ``i2c_master_cmd_begin`` > ``i2c_cmd_link_delete_static`` 45 | 2. 延时 46 | 3. 读从机数据:``i2c_cmd_link_create_static`` > ``i2c_master_read`` > ``i2c_master_stop`` > ``i2c_master_cmd_begin`` > ``i2c_cmd_link_delete_static`` 47 | 48 | -------------- 49 | 50 | 使用 ESP32 芯片时,能否将 GPIO32 和 GPIO33 分别配置为 I2C_SDA 和 I2C_SCL? 51 | ---------------------------------------------------------------------------------------------------------------------------------------------- 52 | 53 | 可以,ESP32 的 I2C 管脚可以使用任何空闲的 GPIO 进行重映射。请参阅 `ESP32 技术规格书 `_ 的 2.2 小节,管脚概述部分。如果不需要外部 32.768 kHz 晶振,则可以使用 GPIO32 和 GPIO33 作为 I2C 管脚。 54 | 55 | -------------- 56 | 57 | 使用 ESP32 芯片时,如果启用蓝牙或 Wi-Fi 功能,为什么 I2C 总线有概率接收到错误数据? 58 | ---------------------------------------------------------------------------------------------------------------------------------------------- 59 | 60 | 这是由于 ESP32 的 I2C FIFO 存在问题,可能导致 I2C 主机在读取数据时出现数据错乱。该问题已在 release/v5.4 及后续版本中进行了软件修复。在 ESP32 之后的芯片(如 ESP32-S3、ESP32-C3)中,已通过硬件修复解决了此问题。 61 | 62 | -------------- 63 | 64 | ESP32-C6 未进入 DeepSleep 模式时,是否可以同时使用 I2C 和 LP I2C? 65 | ---------------------------------------------------------------------------------------------------------------------------------------------- 66 | 67 | 可以。在 ``esp_driver_i2c`` 驱动中,可以选择 ``LP_I2C_PORT`` 以启用 LP I2C 功能。具体实现请参考例程:`esp-idf/components/esp_driver_i2c/test_apps/i2c_test_apps/main/test_lp_i2c `_ 68 | 69 | -------------- 70 | 71 | 如何为 I2C 设置时钟延展? 72 | ---------------------------------------------------------------------------------------------------------------------------------------------- 73 | 74 | 在 ``esp_driver_i2c`` 驱动中,可以设置 ``i2c_master_dev_t`` 中的 ``scl_wait_us`` 参数来更改 SCL 等待时间,从而实现时钟延展。 75 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/peripherals/i2s.rst: -------------------------------------------------------------------------------- 1 | 集成电路内置音频总线 (I2S) 2 | =============================== 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | ESP32 是否支持使用晶振作为 I2S 的时钟源? 19 | ------------------------------------------------------------------------ 20 | 21 | ESP32 不支持使用晶振作为 I2S 的时钟源,可阅读 `《ESP32 技术参考手册》 `_ 来了解 I2S 的时钟源配置。 22 | 23 | --------------- 24 | 25 | 若 I2S 从设备只有 I2S_DATA、I2S_SCK 和 I2S_WS 这三根信号线,ESP32 作为 I2S 主设备时,是否支持这种连接方式? 26 | --------------------------------------------------------------------------------------------------------------------------------------- 27 | 28 | 支持,但是是否接 MCLK 要看对端编码解码芯片的要求。 29 | 30 | ---------------- 31 | 32 | ESP32-C3 的 I2S 接口是否支持 PDM RX 模式? 33 | ------------------------------------------------------------------------------------------------------------------------------------------------------------- 34 | 35 | - 在软件驱动上,ESP32-C3 的 I2S 接口不支持使用 PDM RX 模式。与 ESP32-S3 不同,ESP32-C3 的 I2S 接口的 PDM RX 没有 PDM to PCM 格式转换的模块,这意味着读取的数据是 RAW PDM 格式,此格式的数据在大多数情况下不能直接使用。 36 | 37 | ---------------- 38 | 39 | ESP32-S3 I2S 的输入输出引脚 BCK 是否可以使用同一个引脚? 40 | ------------------------------------------------------------------------------------------------------------------------------------------------------------- 41 | 42 | 可以,在 duplex 模式下,TX 和 RX 就是通过将这两个信号绑定到同一引脚来实现 duplex 模式。 43 | 44 | ---------------- 45 | 46 | I2S 使用音频 PLL (APLL) 与 PLL 是否存在区别? 47 | ------------------------------------------------------------------------------------------------------------------------------------------------------------- 48 | 49 | APLL 与 PLL 时钟源在较低采样率 (144 kHz 及以下) 下没有明显区别。 50 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/peripherals/index.rst: -------------------------------------------------------------------------------- 1 | ===== 2 | 外设 3 | ===== 4 | 5 | :link_to_translation:`en:[English]` 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | 10 | adc 11 | dac 12 | gpio 13 | i2c 14 | i2s 15 | lcd 16 | ledc 17 | mcpwm 18 | pcnt 19 | rmt 20 | sdio 21 | spi 22 | timer 23 | touch 24 | twai 25 | uart 26 | usb 27 | other-peripherals -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/peripherals/ledc.rst: -------------------------------------------------------------------------------- 1 | LED PWM 控制器 (LEDC) 2 | ========================= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | ESP8266 PWM 频率范围是多少呢? 19 | ---------------------------------------------------- 20 | 21 | ESP8266 PWM 是软件模拟的,受定时器限制 CLK 最大为 1 M。推荐频率为 1 K,也可以通过降低占空比分辨率的方式提高频率。 22 | 23 | -------------- 24 | 25 | ESP32 GPIO 管脚输出 PWM 存在限制吗?是否可以分配至任意一个 I/O 上? 26 | ------------------------------------------------------------------------------------------------------------------------------------------ 27 | 28 | - ESP32 PWM 可通过 IO Matrix 切换至任意 GPIO 输出。除了只有输⼊功能的 I/O(例如:GPIO34 ~ GPIO39)之外,理论上 PWM 可以输出到任何管脚。 29 | - 实际使用中仍会受到模组与芯片限制、模组未引出管脚或 flash 占用等情况影响。 30 | 31 | -------------- 32 | 33 | ESP8266 NonOS SDK PWM 的变化缓慢,有哪些原因? 34 | -------------------------------------------------------------- 35 | 36 | - 如果使用 SDK example/IOT_demo 中的渐变 API,如 ``light_set_aim`` 或 ``light_set_aim_r`` 这些 API,需要渐变的过程。 37 | - 若需要 PWM Duty 设置后⽴即⽣效,则可以调⽤接⼝ ``pwm_set_duty``,需要注意调⽤ ``pwm_set_duty`` 后要调⽤ ``pwm_start`` 此次设置才能⽣效。 38 | 39 | -------------- 40 | 41 | ESP32 LEDC 递减渐变,Duty 值溢出错误,如何解决? 42 | -------------------------------------------------------------- 43 | 44 | 使⽤ LEDC 的过程中,应避免以下三个条件同时成⽴: 45 | 46 | - LEDC 启动递减渐变功能; 47 | - LEDC 渐变过程中 Scale 寄存器设置为 1; 48 | - LEDC 递减渐变开始时刻或者过程中的某⼀时刻,Duty 值为 2 :sup:`LEDC_HSTIMERx_DUTY_RES` 或 2 :sup:`LEDC_LSTIMERx_DUTY_RES`。 49 | 50 | --------------------- 51 | 52 | ESP8266 通过直接写硬件定时器 FRC1 的寄存器产⽣ PWM,发现初始化 Wi-Fi 时,Wi-Fi 产⽣的中断会⼲扰硬件定时器的中断,导致错误的 PWM 输出,是否可以使⽤ FRC2 产⽣ PWM?是否可以使 FRC1 的优先级⾼于 Wi-Fi? 53 | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 54 | 55 | 不可以使⽤ FRC2,其被系统占⽤。Wi-Fi 使⽤ NMI 中断,其优先级⾼于其他普通中断,推荐使⽤ ESP8266 RTOS SDK 的 PWM 库,参考 `ESP8266_RTOS_SDK/examples/peripherals/pwm `_。 56 | 57 | ---------------- 58 | 59 | 使用 v3.3.3 版本 ESP-IDF 在 ESP32 设备上测试 ledc 例程,当启用了 auto light sleep,LED PWM 无输出;但不启用 auto light sleep,LED PWM 有输出。ESP-IDF 编程指南里关于 `LED PWM `_ 的说明表示 LED PWM 在 Sleep 模式下是能工作的,请问是什么原因? 60 | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 61 | 62 | esp-idf v3.3.3 版本的 SDK 不支持 LED PWM 在 Sleep 模式下工作。请使用新版的 esp-idf(v4.0 以上版本)下的 LEDC 例程来测试,例如 esp-idf release/v4.2 版本的 SDK,且需要将 LED PWM 时钟源改为内部 RTC8M 时钟源。如下: 63 | 64 | .. code-block:: c 65 | 66 | ledc_timer_config_t ledc_timer = { 67 | .duty_resolution = LEDC_TIMER_13_BIT, 68 | .freq_hz = 5000, 69 | .speed_mode = LEDC_LOW_SPEED_MODE, 70 | .timer_num = LEDC_TIMER_0, 71 | .clk_cfg = LEDC_USE_RTC8M_CLK, 72 | }; 73 | 74 | -------------- 75 | 76 | ESP32 PWM 支持两路死区互补输出吗? 77 | -------------------------------------------------------------- 78 | 79 | - LEDC 不支持,MCPWM 外设支持两路死区互补输出。 80 | - 实测 ESP32-S3 可以通过 MCPWM 产生频率 10 k、占空比精度 1 us、死区精度 100 ns 的互补输出波形。 81 | 82 | --------------------------- 83 | 84 | LEDC 支不支持硬件伽马调光? 85 | -------------------------------------------------------------- 86 | 87 | 支持宏 ``SOC_LEDC_GAMMA_CURVE_FADE_SUPPORTED`` 的芯片可以启用硬件伽马调光功能,需要调用 ``ledc_fill_multi_fade_param_list`` 和 ``ledc_set_multi_fade_and_start`` 来实现。 88 | 89 | -------------- 90 | 91 | ESP32 LEDC 引脚如何 deinit 或 uninstall 给其他外设使用? 92 | -------------------------------------------------------------- 93 | 94 | 要释放 LEDC 引脚以供其他外设使用,只需调用 ``ledc_stop`` 接口,无需调用其他 API。 95 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/peripherals/mcpwm.rst: -------------------------------------------------------------------------------- 1 | 电机控制脉宽调制器 (MCPWM) 2 | ================================ 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | ESP32 支持使用 MCPWM 的定时器来触发 AD 采样吗? 19 | -------------------------------------------------------------------------------------- 20 | 21 | 可以在 MCPWM 的定时器事件 ``on_full``、``on_empty``、``on_stop`` 的回调中触发 AD 采样。此外还可以在 MCPWM 的比较器事件 ``on_reach`` 回调中触发 AD 采样。 22 | 23 | -------------------- 24 | 25 | ESP32-S3 能够产生完全互补的 PWM 吗,要求时钟精确,占空比精确,死区可调节? 26 | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 27 | 28 | 实测 ESP32-S3 可以通过 MCPWM 产生频率 10 k、占空比精度 1 us、死区精度 100 ns 的互补输出波形。 29 | 30 | ------------- 31 | 32 | ESP32-S3 是否支持驱动八个舵机? 33 | -------------------------------------------------------------------------------------------------------------------------- 34 | 35 | 支持。ESP32-S3 支持两个 MCPWM 控制器,每个 MCPWM 控制器包含三个操作器,每个操作器有两个生成器和两个比较器。如果每个生成器独立使用一路比较器,就能总共产生 2*3*2=12 个占空比独立可调的 PWM 输出,自然可以满足八个舵机的需求。 36 | 37 | --------------------------- 38 | 39 | MCPWM 相较于 LEDC 的优势有哪些? 40 | -------------------------------------------------------------------------------------------------------------------------- 41 | 42 | MCPWM 支持互补 PWM 输出、中心对齐、死区插入、载波调制、falut、捕获事件等,在数字电机控制、数字电源、FOC 场景下更具优势。 43 | 44 | ------------- 45 | 46 | MCPWM 输出 PWM 频率为什么不稳定? 47 | -------------------------------------------------------------------------------------------------------------------------- 48 | 49 | MCPWM 没有小数分频器,因此在无法被 MCPWM 时钟源整除的频率下,可能会出现 PWM 频率不稳定的情况,但平均频率是准确的。 -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/peripherals/other-peripherals.rst: -------------------------------------------------------------------------------- 1 | 其他外设 2 | ================= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | REF_TICK 时钟频率可以修改吗 ? 19 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- 20 | 21 | :CHIP\: ESP32 | ESP32-S2 | ESP32-C3: 22 | 23 | 不可以修改,REF_TICK 时钟是固定的。 24 | 25 | -------------- 26 | 27 | ESP32 是否⽀持 PCI-E 协议? 28 | ------------------------------------- 29 | 30 | ESP32 不支持 PCI-E 协议。 31 | 32 | ----------------- 33 | 34 | ESP32-P4 是否支持视频编解码? 35 | ----------------------------------------------------------------------------------------- 36 | 37 | 支持 JPEG 硬件编解码、H.264 硬件编码和 H.264 软件解码。 38 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/peripherals/pcnt.rst: -------------------------------------------------------------------------------- 1 | 脉冲计数器 (PCNT) 2 | ======================= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | ESP8266 可以实现脉冲计数吗? 19 | ------------------------------------------------------- 20 | 21 | - ESP8266 未包含硬件脉冲计数模块,所以仅支持通过 GPIO 上升沿或下降沿中断实现脉冲计数。 22 | - ESP8266 芯片中 Wi-Fi 开启后由于优先级太高可能会导致 GPIO 采样出现真空,中断采集的计数丢数据。 23 | - 综上,在计数要求较为严格的场景推荐使用 ESP32 以及后续推出的芯片。 24 | 25 | ---------------------------------- 26 | 27 | ESP32-S3 可以通过 PCNT 实现频率为 200 k 的低电平脉冲计数吗? 28 | ----------------------------------------------------------------------------------------------------------------------------------------------- 29 | 30 | 可以。 31 | 32 | -------------------------- 33 | 34 | PCNT 可以在计数变化的时候产生中断吗? 35 | -------------------------------------------------------------- 36 | 37 | PCNT 只会在达到设置的阈值时才会产生中断,其他计数值只能通过轮询的方式读取。 38 | 39 | -------------------------- 40 | 41 | ESP32-C3 不支持 PCNT 我该怎么办? 42 | -------------------------------------------------------------- 43 | 44 | 可以使用软件 `knob `_ 进行 PCNT 的计数 。注意,该软件只能用于计数正交解码相关应用场景,并且计数频率不能太高。 45 | 46 | -------------------------- 47 | 48 | PCNT 是否可以支持多路同时工作?signal 与 control 是否一定要成对输入? 49 | ---------------------------------------------------------------------------------------------------------------------------- 50 | 51 | PCNT 支持多路同时工作。signal 与 control 不一定要成对使用,如果不想使用 control,可以将其设置为 -1,计数模式使用 `pcnt_channel_set_edge_action` 进行配置。 52 | 53 | ------------------- 54 | 55 | 是否可以使用 ESP32 PCNT 来计算两个脉冲之间的时间? 56 | -------------------------------------------------------------------------------------------------------------- 57 | 58 | 不可以。PCNT 只能对脉冲进行计数,不支持计算两个脉冲之间的时间。可以使用 RMT 来计算两个脉冲之间的时间。 59 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/peripherals/sdio.rst: -------------------------------------------------------------------------------- 1 | 安全数字输入输出 (SDIO) 2 | ============================= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | SDIO 最⾼速度能⽀持到多少? 19 | -------------------------------------- 20 | 21 | - ESP32 SDIO 时钟最高 50 MHz,最⾼支持 4-线 模式。 22 | - ESP32-S3 SDIO 时钟最高 80 MHz,最⾼支持 8-线 模式。 23 | - 实际应用速率,同时受到存储媒介读写速率影响。 24 | 25 | -------------- 26 | 27 | ESP8266 的 SDIO 是否⽀持连接 SD 卡? 28 | -------------------------------------------- 29 | 30 | ESP8266 仅有 SDIO 从机接口,因此不⽀持连接 SD 卡。如需要 ESP 芯片连接 SD 卡,请选择支持 SD/MMC 主机接口的 ESP 芯片如 ESP32-S3。 31 | 32 | -------------- 33 | 34 | ESP32 SD 卡支持的最大容量是多少? 35 | ------------------------------------------------- 36 | 37 | - SD3.01 规范中 SDXC 的卡最大支持 2 TB (2048 GB) 容量。 38 | - ESP32 的 SDMMC 主机符合 SD3.01 协议,通过该外设可以访问最多 2 TB 的区域;使用 SDSPI 驱动通过 SPI 总线访问卡时,硬件也支持访问 2 TB 的区域。 39 | - 在软件层面上,卡能使用的空间还受文件系统的影响。 40 | 41 | -------------- 42 | 43 | ESP32 SD 卡是否可以与 flash & PSRAM 共同使用? 44 | --------------------------------------------------------------- 45 | 46 | - 在引脚互不占用的情况下是可以共同使用 47 | - 需注意,当 ESP32 采用 SDMMC 主机驱动时,ESP32-WROOM 和 ESP32-WROVER 模组的 SDMMC Slot0 引脚与 flash 冲突。 48 | 49 | -------------- 50 | 51 | 使用 ESP-WROOM-S2 模组,是否支持 SDIO 作从机? 52 | ---------------------------------------------------------------------------- 53 | 54 | ESP-WROOM-S2 支持 SDIO 作从机。 55 | 56 | ----------------- 57 | 58 | ESP32-S2 取消了 SDIO 接口,是否还支持外接 TF 卡? 59 | ---------------------------------------------------------------- 60 | 61 | ESP32-S2 可使用 SPI2 或 SPI3 接口外接 TF 卡,此时使用 TF 卡的 SPI 模式。 62 | 63 | ---------------- 64 | 65 | ESP32-S2 支持 eMMC 吗? 66 | -------------------------------------------------------------------------------------------------- 67 | 68 | :CHIP\: ESP32-S2: 69 | 70 | 不支持。 71 | 72 | ---------------- 73 | 74 | ESP32-S2 是否支持 SDIO 作从机? 75 | ---------------------------------------------------------------------------------------- 76 | 77 | ESP32-S2 没有 SDIO 接口,不支持 SDIO 作从机。 78 | 79 | ---------------- 80 | 81 | ESP32 如何开启和关闭 SDIO 从机接收数据的中断? 82 | -------------------------------------------------------------------------------------------------------------- 83 | 84 | SDIO 从机数据接收与挂载的 buffer 状态有关,接收完之后需要调用 `sdio_slave_recv_load_buf `_ 释放 buffer,否则 SDIO 主机将无法继续向 SDIO 从机发送数据。 85 | 86 | -------------- 87 | 88 | 如何设置 ESP32-C6 SDIO 时钟? 89 | -------------------------------------------------------------------------------------------------- 90 | 91 | ESP32-C6 仅支持 SDIO 从机模式,SDIO 从机 CLK 取决于 SDIO 主机设置。 92 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/peripherals/timer.rst: -------------------------------------------------------------------------------- 1 | 定时器 2 | ============ 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | ESP8266 使⽤ HW 定时器中断有哪些注意事项? 19 | ------------------------------------------------------- 20 | 21 | - 可以参考相关 API 文档 `《ESP8266 技术参考手册》 `_。 22 | - 如果使用 NonOS SDK,可参考 `《ESP8266 Non-OS SDK API 参考》 `_。 23 | - 通常情况下,硬件中断回调函数需要尽快执行结束,并且将回调函数放入 IRAM 中,避免 Cache 关闭的影响。 24 | 25 | - RTOS SDK 需要在函数名前添加链接器属性 IRAM_ATTR。 26 | - NonOS SDK 不能在函数名前添加 ICACHE_FLASH_ATTR(该属性指定函数放在 flash 中)。 27 | 28 | ----------------------------------------------------------------------------------------------------- 29 | 30 | 定时器如何设置中断优先级呢? 31 | ----------------------------------------------------------------------------------------------------- 32 | 33 | - esp_timer 以 ESP32 为例,可以通过在 Menuconfig 中修改配置项 `CONFIG_ESP_TIMER_INTERRUPT_LEVEL `_ 来配置中断优先级。 34 | - General-Purpose Timer 可以在注册中断服务函数时设置中断优先级,具体请参考 `timer_isr_callback_add `_ 的 API 说明。 35 | 36 | -------------- 37 | 38 | 如何提高 gptimer 中断响应的及时性? 39 | --------------------------------------------------------------- 40 | 41 | 可以将中断函数与相应的 callback 放入到 IRAM 中。 -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/peripherals/touch.rst: -------------------------------------------------------------------------------- 1 | 触摸传感器 2 | ============ 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | 使用 ESP32/ESP32-S2/ESP32-S3 Touch 是否可以通过 EMS 传导抗扰测试? 19 | ----------------------------------------------------------------------------- 20 | 21 | EMS 传导抗扰测试是整机测试,受到内外部电源、电路、外部环境等因素共同影响。由于 ESP32/ESP32-S2/ESP32-S3 Touch 抗干扰能力较差,如果用户有该项测试需求,建议外接专用 Touch IC。 22 | 23 | 使⽤ ESP32 做触摸相关应⽤时,哪⾥有相关资料可参考? 24 | ------------------------------------------------------------------ 25 | 26 | 请参考推荐的 `软硬件设计 `_。 27 | 28 | -------------- 29 | 30 | ESP32-S2 Touch Sensor 的防水功能是在有水时屏蔽 Touch 还是有水时仍然能识别 Touch 事件? 31 | ---------------------------------------------------------------------------------------------------------- 32 | 33 | ESP32-S2 Touch Sensor 的防水功能可以在有少量水珠场景下正常工作。在有大面积积水(Touch 触点区域被完全覆盖)的情况下,Touch 会暂时锁定,直到积水被清除后 Touch 才能恢复正常工作。 34 | 35 | -------------- 36 | 37 | ESP32-S2 Touch Sensor 的防水流功能在屏蔽有水流的 Touchpad 时,是否能够保持未沾水的 Pad 仍能使用? 38 | ---------------------------------------------------------------------------------------------------------------------- 39 | 40 | 可以,可通过软件选择具体屏蔽的通道。 41 | 42 | -------------- 43 | 44 | 是否有推荐的可以用于 Touch Sensor 测试、稳定触发 Touch Sensor 并且参数与人手触摸时参数接近的材料? 45 | ---------------------------------------------------------------------------------------------------------------------------------------------------------- 46 | 47 | 对一致性要求较高的实验,可使用手机电容笔来替代人手进行测试。 48 | 49 | -------------- 50 | 51 | Touch Sensor 的管脚能否重映射? 52 | ---------------------------------------------------------------- 53 | 54 | 不能,因为 Touch Sensor 属于模拟信号处理。 55 | 56 | -------------- 57 | 58 | 在覆盖亚克力板后,Touch Sensor 检测阈值是否需要重新设置? 59 | ----------------------------------------------------------------------------------------------- 60 | 61 | 需要重新设置一个阈值。 62 | 63 | -------------- 64 | 65 | Touch Sensor 能否检测是否有亚克力板覆盖,以便在添加或移除亚克力板时,自动切换预设定的检测阈值? 66 | ---------------------------------------------------------------------------------------------------- 67 | 68 | 暂时不能自动适应覆盖层物理参数变化所带来的影响。 69 | 70 | ---------------- 71 | 72 | ESP32 触摸屏有哪些参考驱动? 73 | -------------------------------------------------------------- 74 | 75 | - 代码请参考 `touch_panel_code `_。 76 | - 文档请参考 `touch_panel_doc `_。 77 | 78 | --------------- 79 | 80 | Touch Sensor 从碰触那一刻到芯片检测到触摸事件并发出指令信号的时间是多少? 81 | ---------------------------------------------------------------------------------------------------------------------------- 82 | 83 | 如果使用了 n 个通道,每个通道测量时间 2 ms 左右,轮询一圈出结果就是 2n ms。 84 | 85 | --------------- 86 | 87 | 使用 ESP32-S3 触摸引脚,当触摸脚接地后反馈用人体直接接触引脚多次后,发现之前定义的四个引脚值变为一个固定常数,成失效状态,这是为什么? 88 | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 89 | 90 | 触摸脚就不能接地,接地后就是这个现象。 91 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/peripherals/twai.rst: -------------------------------------------------------------------------------- 1 | 双线汽车接口 (TWAI) 2 | ====================== 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | 在使用 ESP32 TWAI® 控制器时有哪些注意事项? 19 | ---------------------------------------------------------------------- 20 | 21 | 请参考 `《ESP32 系列芯片勘误表》 `_ > 章节 ESP32 TWAI 相关问题。 22 | 23 | -------------- 24 | 25 | ESP32-S3 支持 CAN-FD 吗? 26 | ---------------------------------------------------------------------- 27 | 28 | ESP32-S3 本身没有集成 CAN-FD 控制器,但用户仍然可以使用 SPI 接口的 CAN-FD 控制器,例如 MCP2518FD。在后续的芯片例如 ESP32-C5 中,有计划支持 CAN-FD。 29 | 30 | -------------- 31 | 32 | ESP32 有 CAN 接收中断模式吗? 33 | ---------------------------------------------------------------------- 34 | 35 | TAWI 驱动程序已经使用了中断接收,并自动将接收到的信息存储到 RX 队列中。 36 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/protocols/index.rst: -------------------------------------------------------------------------------- 1 | ===== 2 | 协议 3 | ===== 4 | 5 | :link_to_translation:`en:[English]` 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | 10 | esp-tls 11 | http 12 | lwip 13 | mbedtls 14 | mqtt 15 | other-protocols -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/provisioning.rst: -------------------------------------------------------------------------------- 1 | 配置 2 | ==== 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | ---------------- 17 | 18 | 安卓 ESP-Touch 可以添加自己想要广播的数据吗(如添加设备 ID,希望 ESP32 能接收到这个 ID)? 19 | ------------------------------------------------------------------------------------------------------------ 20 | 21 | - ESP-Touch 是一个用于在手机和 ESP8266/ESP32 之间建立 Wi-Fi 连接的通信协议,它使用一种特殊的广播方式来传输 Wi-Fi SSID 和密码信息。通常情况下,ESP-Touch 广播的数据是固定格式的,不能直接添加自定义数据。 22 | - 如果您希望 ESP32 能够接收到设备 ID 等自定义数据,您可以考虑使用其他通信协议,例如 MQTT、HTTP 等。使用这些协议,您可以自由地定义数据格式,并在 Android 应用程序和 ESP32 之间进行通信。 23 | - 如果您仍然希望广播自定义数据,建议使用 BluFi,这是基于 Bluetooth LE 的配网协议。请参见: 24 | 25 | - Android APP:https://github.com/EspressifApp/EspBlufiForAndroid。 26 | - iOS APP:https://github.com/EspressifApp/EspBlufiForiOS。 27 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/storage/fatfs.rst: -------------------------------------------------------------------------------- 1 | FAT 文件系统 2 | ============= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | 意外的断电导致 FatFs 文件系统损坏如何改善? 19 | -------------------------------------------------------- 20 | 21 | 因为 FatFs 设计不支持 write transactions,因此意外断电可能会导致分区错误,并且无法通过简单修改 FatFs 来修复这个问题。目前建议:可以通过创建两个相同的 FatFs 分区进行双备份来从应用层避免该问题,也可以选择使用具有更高安全性的文件系统,如:`LittleFS `_ 和 `SafeFAT `_ (收费)。 22 | 23 | -------------- 24 | 25 | 如何制作并烧录一个 FatFs 文件系统的镜像? 26 | ------------------------------------------------------ 27 | 28 | ESP-IDF 中未提供相关工具,需要借助第三方工具,完整示例过程如下: 29 | 30 | - 第一步:使用 `mkfatfs `_ 工具从一个指定文件夹创建镜像,例如从 file_image 文件夹创建大小为 1048576 Byte、名为 fat_img.bin 的镜像: 31 | 32 | .. code-block:: text 33 | 34 | ./mkfatfs -c file_image -s 1048576 ./fat_img.bin 35 | 36 | - 第二步:烧录镜像,例如烧录到 0x110000 地址: 37 | 38 | .. code-block:: text 39 | 40 | esptool.py -p /dev/ttyUSB1 -b 460800 --before default_reset --after hard_reset write_flash --flash_mode dio --flash_size detect --flash_freq 80m 0x110000 ~/Desktop/fat_img.bin; 41 | 42 | - 第三步:在程序中挂载: 43 | 44 | .. code-block:: c 45 | 46 | static void initialize_filesystem() { 47 | static wl_handle_t 48 | wl_handle = WL_INVALID_HANDLE; 49 | const esp_vfs_fat_mount_config_t 50 | mount_config = { .max_files = 10, }; 51 | ESP_LOGI(TAG, "Mounting FATfilesystem"); 52 | esp_err_t err = esp_vfs_fat_spiflash_mount("/spiflash", "storage", &mount_config, &wl_handle); 53 | if (err != ESP_OK) { 54 | ESP_LOGE(TAG, "Failed to mount FATFS (%s)", esp_err_to_name(err)); 55 | return; 56 | } 57 | } 58 | 59 | 60 | .. Note:: 61 | 这里烧录的地址一定要是分区表里 FatFs 对应分区的地址,创建的镜像需要与分区表中设置的大小一致。menuconfig 中的 ``Component config`` > ``Wear Levelling`` > ``Wear Levelling library sector size`` 需要设置为 512,否则将导致挂载失败。 62 | 63 | -------------- 64 | 65 | FATFS 与 SPIFFS 这两种文件系统有何差异,我们怎么选择? 66 | ---------------------------------------------------------------- 67 | 68 | 请参考 `文件系统 `_。 69 | 70 | -------------- 71 | 72 | FatFs 支持的最大容量是多少? 73 | ---------------------------------------------------------------- 74 | 75 | FAT32 文件系统最大支持 2 TB 的容量,但是由于部分操作系统的限制(例如 Windows),目前 FatFs 普遍最大只在 32 GB 的存储设备上使用。大于 32 GB 的存储设备,一般默认会使用 exFAT 等文件系统。 76 | 77 | -------------- 78 | 79 | 使用 FAT 文件系统时,文件名稍微长一点的文件无法打开,该如何处理? 80 | -------------------------------------------------------------------------------------------------------------------------------------------------- 81 | 82 | 可以在 ``menuconfig`` -> ``Component config`` -> ``FAT Filesystem support`` -> ``Long filename support 中进行修改,选择 ``Long filename buffer in heap`` 或 ``Long filename buffer on stack`` 配置项。然后可以在 ``Component config`` -> ``FAT Filesystem support`` -> ``Max long filename length`` 中修改最大的文件名长度。 83 | 84 | ---------------------------------------------------------------------- 85 | 86 | 使用 `ext_flash_fatfs `_ 示例测试,分区表中将 fatffs 分区设置小于 512 KB 时,会报 ``vfs_fat_spiflash:f_mks failed(14),config:Failed to mount FATFS(ESP_FAIL)`` 错误,如何解决? 87 | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 88 | 89 | FAT 分区的最小扇区数是 128,所以文件系统的最小尺寸是 128*4+4*4=528 KB,额外的 4 个扇区需要用于磨损均衡信息,所以至少需要保证 fatffs 分区 size 不小于 528 KB。 90 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/storage/index.rst: -------------------------------------------------------------------------------- 1 | ===== 2 | 储存 3 | ===== 4 | 5 | :link_to_translation:`en:[English]` 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | 10 | fatfs 11 | nvs 12 | psram 13 | sd-sdio-mmc 14 | spi-flash 15 | spiffs 16 | other-storages -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/storage/nvs.rst: -------------------------------------------------------------------------------- 1 | 非易失性存储 (NVS) 2 | ==================== 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | 若每分钟保存或者更新数据到 flash 中,ESP32 设备的 NVS 能否满足该需求? 19 | ----------------------------------------------------------------------------------- 20 | 21 | 根据 `NVS 说明 `_,NVS 库在其操作中主要使用两个实体:页面和条目。逻辑页面对应 flash 的一个物理扇区。假设 flash 扇区大小为 4096 字节,每个页面可容纳 126 个条目(每个条目大小为 32 字节),页面的其余部分用于页头部(32 字节)和条目状态位图(32 字节)。每个扇区的典型 flash 寿命为 100 k 个擦除周期。假设期待设备的运行时间为 10 年,每分钟写入 flash 的数据大小为 4 字节,并且不使用 flash 加密,计算 flash 写操作的次数为:60×24×365×10=5256000。这样,在 NVS 中会导致不超过 42 k 个擦除周期 (5256000/126),而 42 k < 100 k,因此,即使在没有多扇区影响的情况下也可以支持。在实际使用中,分配给 NVS 的大小一般为多个扇区,NVS 会在多扇区之间分配擦除周期,那么每个扇区的擦除周期的次数必然小于 42 k。 22 | 23 | 因此,理论上 NVS 可以满足该擦写需求,实际不同 flash 型号的寿命可能会有差异,需要根据实际情况进行评估。 24 | 25 | -------------- 26 | 27 | 每次写入 1 KB 或以下的数据,执行 10,000,000 次擦除/写入操作是否可行? 28 | ----------------------------------------------------------------------------------- 29 | 30 | 若每次写入的数据量为 1 KB,而 flash 的最小可擦除单位为一个页面 (4 KB),则单个擦除块可视为包含 4 个 1 KB 的逻辑地址。因此,10,000,000 次写入操作等效于对单个页面进行 2,500,000 次擦写周期 (10,000,000 * 1 KB / 4 KB)。为了确保不超过每个物理块的擦写限制(100,000 次),至少需要 25 个 4 KB 的物理块来均摊这些操作(2,500,000 次 / 100,000 次/块 = 25 块)。 31 | 32 | 考虑到每个扇区的实际可用空间可能因系统开销而有所减少,以及为了提高系统的可靠性和稳定性,建议预留更多的物理空间。例如,可以分配大约 150 KB 的空间,以确保有足够的余地应对额外的系统需求和未来的扩展。 33 | 34 | -------------- 35 | 36 | NVS 是否具有磨损均衡? 37 | ---------------------------- 38 | 39 | 是的,NVS(Non-Volatile Storage)具有磨损均衡(wear leveling)功能。在使用 flash 存储数据时,由于 flash 的写入和擦除次数有限,会导致一些存储块的寿命比其他块更短,从而影响整个存储器的寿命。为了解决这个问题,NVS 使用的不是 ESP-IDF 中的 wear_levelling 组件,而是在其内部实现的一种擦写平衡机制,将数据均匀地分布在 flash 的各个存储块中,使得每个存储块的使用次数尽可能相等,从而延长整个 flash 的寿命。 40 | 41 | 详细文档可见:`磨损均衡 API `_。 42 | 43 | -------------- 44 | 45 | NVS 扇区是否会因写入时意外断电而损坏? 46 | ------------------------------------------------ 47 | 48 | NVS 设计之初就具有抵抗意外断电的能力,因此不会损坏。 49 | 50 | -------------- 51 | 52 | 配置好的 Wi-Fi SSID 和 PASSWORD 在 ESP 系列开发板上重新上电后是否会消失,需要重新输入吗? 53 | ------------------------------------------------------------------------------------------------------------------------------------------------------------ 54 | 55 | - 默认会存在 NVS 里,不会因为掉电而消失,您也可以通过 ``esp_wifi_set_storage()`` 设置,此时分为两种情况: 56 | 57 | - 如果想要实现掉电保存 Wi-Fi SSID 和 PSAAWORD,可通过调用 ``esp_wifi_set_storage(WIFI_STORAGE_FLASH)`` 将 Wi-Fi 信息存储在 flash 内。 58 | - 如果想要实现掉电不保存 Wi-Fi SSID 和 PASSWORD 的操作,可通过调用 ``esp_wifi_set_storage(WIFI_STORAGE_RAM)`` 将 Wi-Fi 信息存储在 RAM 内。 59 | 60 | ----------------- 61 | 62 | 如何实现存储的用户数据支持掉电保存,不被 OTA 擦除,且支持重写或改写? 63 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- 64 | 65 | - 根据需求,需要使用非易失性存储,存储数据的区域只有 eFuse 或 flash。考虑到需要修改,只能使用 flash。推荐使用 NVS 或 MFG 机制。请参考: 66 | 67 | - `MFG 量产程序 `_ 68 | - `NVS 分区生成程序 `_ 69 | 70 | -------------- 71 | 72 | NVS 库提供的 API 是否线程安全? 73 | ------------------------------------------------------------------------------------------------------------------------------------------------------------ 74 | 75 | - 初始化和去初始化的 NVS 函数不是线程安全的,但是其它 NVS 函数 (open/get/set/commit/close) 是线程安全的。 76 | 77 | ---------------- 78 | 79 | ESP-IDF SDK 中的 NVS 错误码对应的是什么原因? 80 | ---------------------------------------------------------------------------------------------------------------------- 81 | 82 | - ESP-IDF SDK 中对应的 NVS 错误码说明参考 `esp-idf/components/nvs_flash/include/nvs.h `__。 83 | 84 | ---------------- 85 | 86 | 在 NVS 写数据时,是否会禁用 cache ? 87 | ------------------------------------------------------------------------------------------------------- 88 | 89 | - 在 NVS 写数据时会关闭 cache,且不可以在中断函数中调用任何操作 flash 的函数。 90 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/storage/other-storages.rst: -------------------------------------------------------------------------------- 1 | 其他存储相关 2 | ============ 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | ESP32 是否可以使用 LittleFS 文件系统? 19 | --------------------------------------------------- 20 | 21 | LittleFS 为第三方移植组件 `esp_littlefs `_,可直接在 ESP-IDF 中使用。匹配 LittleFS 文件系统镜像的工具为 `mklittlefs `_。 22 | 23 | ---------------- 24 | 25 | ESP32 如何查看芯片内存(例如:DRAM、IRAM、rodata)使用情况? 26 | ------------------------------------------------------------------------------------------------------------------ 27 | 28 | 可以在工程终端目录下输入 ``idf.py size-components`` 指令来查看静态存储空间使用估算情况。如需查询运行时内存动态申请信息,请使用 `heap_caps_get_info `_ 查询。 29 | 30 | ----------------- 31 | 32 | ESP8266 用户可用的 RTC RAM 是多大? 33 | ---------------------------------------------------------------------------------------------- 34 | 35 | - ESP8266 用户可用的 RTC RAM 为 512 字节 (0x200)。可参见 `esp8266.ld `_ 文件说明。 36 | 37 | ---------------- 38 | 39 | 如何使能 exFAT? 40 | -------------------------------------------------------------------------------------------------- 41 | 42 | :CHIP\: ESP32: 43 | 44 | - 需要在代码中将 #define FF_FS_EXFAT 0 修改为 #define FF_FS_EXFAT 1 , 具体的请参考 `ffconf.h `_。 45 | 46 | ---------------- 47 | 48 | ESP32 分区表中的分区数量有限制吗? 49 | ----------------------------------------------- 50 | 51 | - 有限制,分区表的长度为 0xC00 字节(最多可以保存 95 条分区表条目)。参考链接 `分区表 `_ 的说明。 52 | 53 | ---------------- 54 | 55 | ESP32 如何读取芯片剩余内存? 56 | -------------------------------------------------------------------------------------------------- 57 | 58 | - 可通过 `esp_get_free_heap_size() `__ 来读取芯片 RAM 剩余内存。 59 | 60 | --------------- 61 | 62 | 在 ESP-IDF 下使用 xTaskCreateStatic() 需要注意什么? 63 | ----------------------------------------------------------------------------------------------------------------------------------------------------- 64 | 65 | - 可以参考 `xTaskCreateStatic() 说明 `__。 66 | 67 | ------------ 68 | 69 | 基于 ESP-IDF SDK,使用 `RTC_NOINIT_ATTR uint32_t counter = 0 ;` 定义一个全局变量,打印出来的值为 `1368610594`,这是什么原因? 70 | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 71 | 72 | - RTC_NOINIT_ATTR 变量会被编译到 .rtc_noinit 区域,这个区域并不是在启动时清零,所以在变量初始化时赋值不会生效,需要在初始化后进行赋值才是有效的。 73 | - 当使用 `RTC_NOINIT_ATTR` 定义一个全局变量时,需要在应用代码中对变量进行赋值,正确的写法如下: 74 | 75 | .. code-block:: c 76 | 77 | RTC_NOINIT_ATTR uint32_t counter; 78 | counter = 0; 79 | printf("Counter value: %"PRIu32" \n",counter); 80 | 81 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/storage/sd-sdio-mmc.rst: -------------------------------------------------------------------------------- 1 | SD/SDIO/MMC 驱动 2 | ====================== 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | ESP8266 是否可以搭配 TF 卡使用? 19 | ----------------------------------------- 20 | 21 | 不建议这么使用。 22 | 23 | - 虽然硬件上是可以连接的(通过 SPI 与 TF 卡通信),但是因为 ESP8266 的资源有限,根据不同的应用场景,很可能会出现内存不足等情况。所以不建议 ESP8266 搭配 TF 卡使用。 24 | - 如果您只需要单 Wi-Fi 模组,并且要连接 TF 卡,建议使用 `ESP32-S2 `_ 等芯片。 25 | 26 | ---------------- 27 | 28 | ESP32-S3 支持的 EMMC 最大容量是多少? 29 | -------------------------------------------------------------------------------------------------------------- 30 | 31 | 2 TB 是 SD 和 eMMC 协议的限制。ESP32-S3 没有具体的最大容量限制。但如果你的应用是建立在文件系统之上的,最大容量也可能受到文件系统的限制。 32 | 33 | ----------------- 34 | 35 | ESP32 外接 eMMC 卡时,是否支持 DDR52/HS200/HS400/SDR52 模式? 36 | ----------------------------------------------------------------------------------------------------------------------------------------------------------- 37 | 38 | - 在频率为 40 MHz 时,支持 DDR52 模式,其他模式不支持。支持的模式参见 `Supported Speed Modes `_ 说明。 39 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/storage/spi-flash.rst: -------------------------------------------------------------------------------- 1 | SPI Flash 2 | ========= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | -------------- 17 | 18 | ESP32 flash 空间与使用要求是什么? 19 | --------------------------------------- 20 | 21 | 外部 flash 可以同时映射到 CPU 指令和只读数据空间。ESP32 外部 flash 最大可支持 16 MB。 22 | 23 | - 当映射到 CPU 指令空间时,一次最多可映射 11 MB + 248 KB。如果一次映射超过 3 MB + 248 KB, 则 Cache 性能可能由于 CPU 的推测性读取而降低。 24 | - 当映射到只读数据空间时,一次最多可以映射 4 MB。支持 8-bit、16-bit 和 32-bit 读取。 25 | - 需要在编写代码时指定 flash 分区表,即将 flash 划分为不同的分区,如 app 分区、data 分区、OTA 分区等,并指定每个分区的大小和偏移地址 26 | - 在使用 flash 时,需要注意 flash 的使用寿命问题。由于 flash 的擦写次数有限,需要合理规划和管理 flash 的使用,例如使用 wear leveling 等技术来延长 flash 的寿命。 27 | - 在使用 flash 时,需要注意 flash 写操作会占用 CPU 时间,可能会影响系统的响应速度,因此需要尽量减少 flash 写操作的频率。 28 | 29 | -------------- 30 | 31 | ESP8266 的模组,有哪些扇区可以自主使用? 32 | ------------------------------------------------ 33 | 34 | - SDK rel3.0 之前的版本,除 bootloader 与 app bin 外还会在设置的 flash 大小的尾部会保留扇区如下:1 个存放系统信息,1 个存储 OTA 信息,1 个存放 RF 校准信息。 35 | - SDK rel3.0 及其以后的版本使用 partition_table 来管理 flash,除该文件自身与 bootloader 外,其余 bin 文件均在 partition_table 标注。 36 | 37 | -------------- 38 | 39 | ESP8266 如何读取 flash 数据? 40 | ------------------------------------------------------------------------- 41 | 42 | - 可使用 ESP8266-RTOS-SDK 下的脚本工具读 flash ,读 flash 方式如下: 43 | 44 | - 安装 python 环境以及工具依赖的包文件; 45 | - 进入 ESP8266_RTOS_SDK/components/esptool_py/esptool 路径下; 46 | - 执行 ``python esptool.py --chip esp8266 --port /dev/ttyUSB0 --baud 115200 read_flash 0x0 0x400000 esp8266.bin``。该命令中 "esp8266.bin" 为自定义名称,读取到的 flash 数据将会生成名为 "esp8266.bin" 的文件,命令中 "/dev/ttyUSB0" 为 linux 环境中的串口号,其他环境以及系统中会有不同。 47 | 48 | ---------------- 49 | 50 | 不同的 ESP32 模组为何出现 flash 擦除时间不一致? 51 | ---------------------------------------------------------------------------------------------------------------------------------------------- 52 | 53 | - 不同的 ESP32 模组可能具有不同的 flash 芯片或 flash 控制器,这些硬件组件可能会对擦除时间产生影响,部分型号的 flash 进行擦除时没有空块跳过的机制,所以耗时较长。具体而言,不同的 flash 芯片可能具有不同的擦除时间,例如 SPI flash 和 QSPI flash 具有不同的擦除时间,即使是同一类型的 flash 芯片也可能存在不同的擦除时间,这取决于其封装和生产批次等因素。此外,不同的 flash 控制器的设计和性能也可能对擦除时间产生影响。因此,不同的 ESP32 模组可能会使用不同的 flash 芯片或 flash 控制器,从而导致擦除时间的不一致。 54 | 55 | ------------------ 56 | 57 | 使用 ESP32-S3-WROOM-2-32R8V 模组,设置 flash SPI mode 为 QIO 模式,固件运行时打印如下错误是什么原因? 58 | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 59 | 60 | .. code-block:: text 61 | 62 | E (47) qio_mode: Failed to set QIE bit, not enabling QIO mode 63 | 64 | ESP32-S3-WROOM-2-32R8V 模组使用的是 32 MB Octal SPI flash 和 8 MB Octal SPI RAM。请在配置选项中开启 Octal SPI flash 和 Octal PSRAM 的设置: 65 | 66 | - ``(Top)`` > ``Serial flasher config`` > ``[*] Enable Octal Flash`` > ``Flash SPI mode (OPI)`` 67 | - ``(Top)`` > ``Component config`` > ``ESP PSRAM`` > ``Support for external, SPI-connected RAM`` > ``SPI RAM config`` > ``Mode (QUAD/OCT) of SPI RAM chip in use`` 68 | 69 | ---------------- 70 | 71 | 如何判断 ESP-IDF 是否已经支持某款 flash? 72 | ---------------------------------------------------------------------------------------------------------------------------------------------- 73 | 74 | - 可以参考 `Optional features for flash `__ 来进一步了解 ESP-IDF 支持的 flash 信息,需要注意的是,此文档仅说明 ESP-IDF 代码已支持这些 flash 的特性,并不是乐鑫认证的稳定 flash 列表。 75 | - 如需要 flash 选型的进一步支持,可以联系 `乐鑫商务 `_。 76 | 77 | 78 | ----------------- 79 | 80 | 基于 ESP32-S3 芯片外接 SPI flash,支持单次写入的数据量是多大? 81 | ------------------------------------------------------------------------------------------------------------------------- 82 | 83 | - ESP32-S3 硬件限制外接 SPI flash 只允许单次写入最大 64 字节数据。 84 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/storage/spiffs.rst: -------------------------------------------------------------------------------- 1 | SPIFFS 文件系统 2 | ======================= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | --------------- 17 | 18 | SPIFFS 支持磁盘加密吗? 19 | ---------------------------------------------------------------- 20 | 21 | :CHIP\: ESP32, ESP32S2, ESP32S3, ESP32C3: 22 | 23 | - SPIFFS 不提供原生的磁盘加密功能,但 SPIFFS 建立在 flash 上,可以使用 flash 加密对该部分的数据进行加密。可以使用标准的加密库,如 mbedtls 或 OpenSSL,来加密和解密 SPIFFS 中的文件。在写入文件时,先将数据进行加密,然后再写入 SPIFFS。在读取文件时,先从 SPIFFS 读取数据,然后再使用相应的解密算法进行解密。 24 | 25 | ---------------- 26 | 27 | 如何将 ESP32 设备的 key 和 certs 存储到 SPIFFS 中呢? 28 | --------------------------------------------------------- 29 | 30 | 可将文件生成 SPIFFS 镜像后烧录到对应分区,可参考 `SPIFFS 文件系统 `_。 31 | 32 | -------------- 33 | 34 | ESP32 是否可以在外挂的 SPI flash 中挂载 SPIFFS 文件系统分区? 35 | --------------------------------------------------------------- 36 | 37 | 在 ESP-IDF v4.0 以及之后的版本添加了该功能。需要注意的是,当挂载了两个分区时,不能多个任务同时向一个分区写入文件。 38 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/thread.rst: -------------------------------------------------------------------------------- 1 | Thread 2 | ====== 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | 16 | ---------------- 17 | 18 | ESP32-H2 作为 OpenThread RCP 设备,是否支持基于 Linux 主机来构建 Thread 边界路由器 (OpenThread border router) ? 19 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 20 | 21 | - 支持。ESP32-H2 可以通过 Linux 主机构建 OpenThread 边界路由器,详细步骤请参考:`OpenThread > 指南 > 边界路由器 > 树莓派 `_。 22 | - 在 Linux 主机端,请运行 `ot-br-posix `_ SDK;在 ESP32-H2 设备端,请运行 `esp-idf/examples/openthread/ot_rcp `_ 例程。 23 | - 基于 ESP32-H2 `配置 OpenThread RCP 设备 `_ 时,请将 UART 波特率设置为 460800 bps,配置命令如下: 24 | 25 | .. code-block:: c 26 | 27 | OTBR_AGENT_OPTS="-I wpan0 -B wlan0 spinel+hdlc+uart:///dev/ttyUSB2?uart-baudrate=460800" 28 | 29 | - 此外,我们还提供了基于 FreeRTOS 系统构建 Thread 边界路由器的方案。详情请参见 `OpenThread > 指南 > 边界路由器 > FreeRTOS `_。 30 | 31 | ---------------- 32 | 33 | 配备 IEEE 802.15.4 模块并支持 Thread 的 ESP 芯片是否支持通过类似 AT 指令的形式来进行交互? 34 | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 35 | 36 | 支持。OpenThread 发布了公用开源的 `命令行接口 `__,可用于组网和参数配置。如果想体验具体的 Demo,可参考 `ot_cli 示例 `__。 37 | -------------------------------------------------------------------------------- /docs/zh_CN/software-framework/zigbee.rst: -------------------------------------------------------------------------------- 1 | Zigbee 2 | ====== 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. raw:: html 7 | 8 | 15 | -------------------------------------------------------------------------------- /docs/zh_CN/test-verification/index.rst: -------------------------------------------------------------------------------- 1 | 测试校验 2 | ============= 3 | 4 | :link_to_translation:`en:[English]` 5 | 6 | .. toctree:: 7 | :maxdepth: 1 8 | 9 | 功耗测试指南 10 | -------------------------------------------------------------------------------- /translate_config.yml: -------------------------------------------------------------------------------- 1 | 2 | 3 | specified_files: 4 | # application-solution 5 | - docs/zh_CN/application-solution/artificial-intelligence.rst 6 | - docs/zh_CN/application-solution/at-application.rst 7 | - docs/zh_CN/application-solution/audio-development-framework.rst 8 | - docs/zh_CN/application-solution/ble-mesh-development-framework.rst 9 | - docs/zh_CN/application-solution/camera-application.rst 10 | - docs/zh_CN/application-solution/esp-matter.rst 11 | - docs/zh_CN/application-solution/esp-now.rst 12 | # - docs/zh_CN/application-solution/esp-rainmaker-cloud-service.rst 13 | - docs/zh_CN/application-solution/index.rst 14 | - docs/zh_CN/application-solution/wifi-mesh-development-framework.rst 15 | - docs/zh_CN/application-solution/third-party-cloud-service.rst 16 | 17 | # commercial-faq 18 | - docs/zh_CN/commercial-faq/index.rst 19 | 20 | # development-environment 21 | - docs/zh_CN/development-environment/IDE-plugins.rst 22 | - docs/zh_CN/development-environment/debugging.rst 23 | - docs/zh_CN/development-environment/environment-setup.rst 24 | - docs/zh_CN/development-environment/firmware-update.rst 25 | - docs/zh_CN/development-environment/index.rst 26 | 27 | # hardware-related 28 | - docs/zh_CN/hardware-related/RF-related.rst 29 | - docs/zh_CN/hardware-related/chip-comparison.rst 30 | - docs/zh_CN/hardware-related/development-board.rst 31 | - docs/zh_CN/hardware-related/hardware-design.rst 32 | - docs/zh_CN/hardware-related/index.rst 33 | - docs/zh_CN/hardware-related/process-and-ESD.rst 34 | - docs/zh_CN/hardware-related/production-test.rst 35 | 36 | # index 37 | - docs/zh_CN/index.rst 38 | 39 | # instruction 40 | - docs/zh_CN/instruction/document-contribution.rst 41 | - docs/zh_CN/instruction/index.rst 42 | - docs/zh_CN/instruction/question-search.rst 43 | 44 | # software-framework 45 | - docs/zh_CN/software-framework/bt/ble.rst 46 | - docs/zh_CN/software-framework/bt/br-edr.rst 47 | - docs/zh_CN/software-framework/bt/index.rst 48 | - docs/zh_CN/software-framework/bt/other-bt.rst 49 | - docs/zh_CN/software-framework/coexistence.rst 50 | - docs/zh_CN/software-framework/ethernet.rst 51 | - docs/zh_CN/software-framework/index.rst 52 | - docs/zh_CN/software-framework/peripherals/adc.rst 53 | - docs/zh_CN/software-framework/peripherals/dac.rst 54 | - docs/zh_CN/software-framework/peripherals/gpio.rst 55 | - docs/zh_CN/software-framework/peripherals/i2c.rst 56 | - docs/zh_CN/software-framework/peripherals/i2s.rst 57 | - docs/zh_CN/software-framework/peripherals/index.rst 58 | # - docs/zh_CN/software-framework/peripherals/lcd.rst 59 | - docs/zh_CN/software-framework/peripherals/ledc.rst 60 | - docs/zh_CN/software-framework/peripherals/mcpwm.rst 61 | - docs/zh_CN/software-framework/peripherals/other-peripherals.rst 62 | - docs/zh_CN/software-framework/peripherals/pcnt.rst 63 | - docs/zh_CN/software-framework/peripherals/rmt.rst 64 | - docs/zh_CN/software-framework/peripherals/sdio.rst 65 | - docs/zh_CN/software-framework/peripherals/spi.rst 66 | - docs/zh_CN/software-framework/peripherals/timer.rst 67 | - docs/zh_CN/software-framework/peripherals/touch.rst 68 | - docs/zh_CN/software-framework/peripherals/twai.rst 69 | - docs/zh_CN/software-framework/peripherals/uart.rst 70 | - docs/zh_CN/software-framework/peripherals/usb.rst 71 | - docs/zh_CN/software-framework/protocols/esp-tls.rst 72 | - docs/zh_CN/software-framework/protocols/http.rst 73 | - docs/zh_CN/software-framework/protocols/index.rst 74 | - docs/zh_CN/software-framework/protocols/lwip.rst 75 | - docs/zh_CN/software-framework/protocols/mbedtls.rst 76 | - docs/zh_CN/software-framework/protocols/mqtt.rst 77 | - docs/zh_CN/software-framework/protocols/other-protocols.rst 78 | - docs/zh_CN/software-framework/provisioning.rst 79 | - docs/zh_CN/software-framework/security.rst 80 | - docs/zh_CN/software-framework/storage/fatfs.rst 81 | - docs/zh_CN/software-framework/storage/index.rst 82 | - docs/zh_CN/software-framework/storage/nvs.rst 83 | - docs/zh_CN/software-framework/storage/other-storages.rst 84 | - docs/zh_CN/software-framework/storage/psram.rst 85 | - docs/zh_CN/software-framework/storage/sd-sdio-mmc.rst 86 | - docs/zh_CN/software-framework/storage/spi-flash.rst 87 | - docs/zh_CN/software-framework/storage/spiffs.rst 88 | - docs/zh_CN/software-framework/system.rst 89 | - docs/zh_CN/software-framework/thread.rst 90 | - docs/zh_CN/software-framework/wifi.rst 91 | - docs/zh_CN/software-framework/zigbee.rst 92 | 93 | # test-verification 94 | - docs/zh_CN/test-verification/index.rst 95 | - docs/zh_CN/test-verification/power-consumption-verification.rst 96 | 97 | target_language: EN-CN 98 | 99 | trans_dict: 100 | pin: 管脚 101 | example: 例程 102 | provision: 配网 103 | unicast address: 单播地址 104 | node: 节点 105 | datasheet: 技术规格书 106 | 107 | target_language_folder: ./ --------------------------------------------------------------------------------