Docker搭建ESPIDF环境,程序下载

文章目录

  • 一、前言
  • 二、文件准备
  • [三、.devcontainer 文件](#三、.devcontainer 文件)
    • [3.1 Dockerfile](#3.1 Dockerfile)
    • [3.2 devcontainer.json](#3.2 devcontainer.json)
    • [3.3 容器里面打开工程](#3.3 容器里面打开工程)
  • 四、编译下载程序
    • [4.1 运行esptool 服务端](#4.1 运行esptool 服务端)
    • [4.2 vscode 客户端配置](#4.2 vscode 客户端配置)
    • [4.3 下载程序](#4.3 下载程序)
  • 五、遇到的问题

一、前言

在使用ESP-IDF开发ESP32的时候,环境配置的复杂性和兼容性问题往往是开发者在入门和实践阶段面临的首要挑战。从工具链的安装、Python依赖 的版本协调,到系统路径的配置,这些步骤不仅耗时耗力,还可能因开发机环境的差异而遭遇意外错误。

Docker 技术为这一难题提供了优雅的解决方案------通过容器化封装一个标准、统一、可复现的 ESP-IDF 开发环境,使得任何开发者都能在瞬间获得一个开箱即用、与宿主环境隔离且功能完备的构建框架。这不仅极大地简化了项目的启动流程,也为团队协作和持续集成奠定了坚实的基础。

本文将详细介绍如何基于 Docker 快速搭建 ESP-IDF 开发环境,旨在帮助开发者摆脱环境配置的困扰,将精力专注于更具创造性的应用开发本身。

二、文件准备

三、.devcontainer 文件

在项目文件下面创建一个 .devcontainer 的文件夹

3.1 Dockerfile

.devcontainer 文件夹下面创建 Dockerfile 文件

dockerfile 复制代码
# 定义构建参数 DOCKER_TAG,默认值为 'latest',可在构建时通过 --build-arg 覆盖
ARG DOCKER_TAG=latest

# 基于乐鑫官方 ESP-IDF 镜像构建,版本由 DOCKER_TAG 指定
FROM espressif/idf:${DOCKER_TAG}

# 设置系统语言环境为 UTF-8,确保终端字符编码正确
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8

# 可选:安装 udev 管理设备节点(当前被注释)
# RUN apt-get update -y && apt-get install udev -y

# 将 IDF 环境变量初始化命令添加到 bashrc,启动 shell 时自动加载
RUN echo "source /opt/esp/idf/export.sh > /dev/null 2>&1" >> ~/.bashrc

# 指定容器启动时执行的入口脚本(用于处理设备权限等)
ENTRYPOINT [ "/opt/esp/entrypoint.sh" ]

# 默认容器启动命令:启动 bash shell
CMD ["/bin/bash", "-c"]

3.2 devcontainer.json

.devcontainer 文件夹下面创建 devcontainer.json 文件

json 复制代码
{
  "name": "ESP-IDF QEMU",  // 开发容器显示名称
  "build": {
    "dockerfile": "Dockerfile"  // 指定构建使用的 Dockerfile
  },
  "customizations": {
    "vscode": {
      "settings": {
        "terminal.integrated.defaultProfile.linux": "bash",  // 设置默认终端为 bash
        "idf.espIdfPath": "/opt/esp/idf",  // ESP-IDF 框架路径
        "idf.toolsPath": "/opt/esp",       // IDF 工具链路径
        "idf.gitPath": "/usr/bin/git"      // 指定 git 执行路径
      },
      "extensions": [  // 推荐安装的 VSCode 扩展
        "espressif.esp-idf-extension",  // 乐鑫官方 ESP-IDF 扩展
        "espressif.esp-idf-web"        // ESP-IDF Web 工具扩展
      ]
    }
  },
  "runArgs": [  // 容器运行时参数
    "--privileged"  // 授予特权模式(访问 USB 设备等硬件)
  ]
}

3.3 容器里面打开工程

使用 ctrl+shift+p 选择Dev Containers: Reopen in Container

四、编译下载程序

4.1 运行esptool 服务端

在宿主主机上面运行 esptool

ssh 复制代码
.\esp_rfc2217_server.exe -v -p 4000 COM6

COM6 :连接esp32的串口号

4000: 和 docker通讯的端口号

会提示使用 rfc2217://192.168.1.7:4000?ign_set_control 作为端口号

4.2 vscode 客户端配置

修改.code ->settings.json 文件的串口端口号

json 复制代码
"idf.port": "rfc2217://192.168.1.7:4000?ign_set_control"

4.3 下载程序

五、遇到的问题

  • vscode 和docker 容器里面的vscode-server版本不兼容

    这个问题是因为vscode太老了,esp-idf容器的 ubuntu24.04 的版本,更新vscode,使得和ubuntu的vscode-server一致。

解决方案:vscode连接ubuntu18报Gilbc2.28错-CSDN博客

相关推荐
xqlily2 小时前
自动化专业核心课《计算机控制技术》导览---数字时代的控制中枢
运维·自动化
linweidong2 小时前
云服务器磁盘空间管理:binlog导致磁盘快速增长的应对策略与自动化实践
运维·服务器·自动化·binlog·容器化·磁盘管理·运维面经
代码79722 小时前
【无标题】使用 Playwright 实现跨 Chromium、Firefox、WebKit 浏览器自动化操作
运维·前端·深度学习·华为·自动化
失因2 小时前
Nginx 核心功能配置:访问控制、用户认证、HTTPS 与 URL 重写等
运维·nginx·https
COWORKSHOP2 小时前
华为芯片泄密案警示:用Curtain e-locker阻断内部数据泄露
运维·服务器·前端·数据库·安全·华为
namekong83 小时前
在 Ubuntu 上可以用几个常用命令查看系统运行情况(内存、CPU、硬盘占用等
linux·运维·服务器
wheeldown3 小时前
【Linux】Linux下的静态链接的底层逻辑
linux·运维·服务器
gsfl3 小时前
环境搭建,Ubuntu 安装、客户端使用与性能认知
linux·运维·ubuntu
liu****3 小时前
负载均衡式的在线OJ项目编写(五)
运维·c++·负载均衡·个人开发