Quick reference card - ESP8266/ESPduino/ESP32

251 阅读9分钟

ESP系列芯片对比

微信图片_20250107223556.png

微信图片_20240902233048.jpg

微信图片_20240902233058.jpg

image.png

ESP8266

ESPduino(安信可 ESP-13模块)

ESPduino使用安信可的ESP-13模组,SMD-18封装.而ESPDUINO是GPIO16拉低是亮LED.

//ESPDuino使用安信可的ESP-13模块(该模块使用ESP8266EX 芯片),该模块的pinout如下:

//ESPDuino使用ESP-13模块(<基于ESPDuino的智慧物联开发宝典>一书中误写为ESP-12模块) ESP-13模块的原理图: image

//使用《基于ESPDuino的智慧物联开发宝典》一书配套的开发板(没有Flash按键的板子)时,在arduino IDE 2.X下使用时,需要如下配置:

图片.png

否则会出现 A fatal esptool.py error occurred: Failed to connect to ESP8266: Timed out waiting for packet header 报错.

//板载LED 是GPIO16

WeMos D1 R1(ESP-12F模组)

//WeMos D1(ESP8266) 使用ESP-12F模组,SMD-22封装,D1 R1的GPIO2拉高是LED亮.

图片.png

Arduino-master\variants\d1\pins_arduino.h


static const uint8_t D15  = GPIO5;   //SCL
static const uint8_t D14  = GPIO4;   //SDA
static const uint8_t D13  = GPIO14;  //SPI
static const uint8_t D12  = GPIO12;  //SPI
static const uint8_t D11  = GPIO13;  //SPI
static const uint8_t D10  = GPIO15;  //SPI
static const uint8_t D9   = GPIO2;
static const uint8_t D8   = GPIO0;
static const uint8_t D7   = GPIO13;
static const uint8_t D6   = GPIO12;
static const uint8_t D5   = GPIO14;
static const uint8_t D4   = GPIO4;   //SDA
static const uint8_t D3   = GPIO5;   //SCL
static const uint8_t D2   = GPIO16;
static const uint8_t D1   = GPIO1;
static const uint8_t D0   = GPIO3;

//arduino IDE中选择"LOLIN(WEMOS)D1 ER1":

图片.png

//板载LED 是GPIO2

WeMos D1 R2

//和WeMos D1 R1在板子上有如下红圈的区别:

图片.png

ESP32

常用arduino库

名称库头文件用法在ESP32上是否能使用
debug库#include "Arduino_DebugUtils.h"

setup()阶段:Debug.timestampOn();
loop()阶段:DEBUG_INFO("i = %d,0x%02x", i,i);

Y
Serial Plotter库,Serial Plotter 可以将串口发送的数据以图表的形式显示出来,适合观察数据的变化趋势
Debugger:这个库可以让你在 Arduino 程序中使用断点、单步执行等调试功能,就像在 PC 上使用集成开发环境调试程序一样。#include <Debugger.h>有报错??
SimpleDebug:这是一个简单的调试库,它允许你通过串口发送调试信息,并且可以设置不同的调试级别。
DebugLib:这个库为 Arduino 提供了一个简单而强大的调试功能,支持宏定义来启用或禁用调试代码,无需修改代码即可切换调试模式。

AI回答

Q:arduino IDE编译不同开发板时,ino代码如何区分当前是哪种开发板

A:

在 Arduino IDE 中,当你选择不同的开发板时,编译器会包含对应开发板的特定头文件和定义,这允许你在代码中通过条件编译来区分当前是哪种开发板。以下是一些方法来区分不同的开发板:

  1. 使用预定义的宏: 每个开发板在编译时都会定义一些特定的宏,例如 ARDUINOARDUINO_ARCH_{ARCH}BOARD 等。你可以通过这些宏来判断当前的板子。
    #ifdef ARDUINO_AVR_UNO
    // 代码专门为 Arduino Uno 编写
    #elif defined(ARDUINO_SAM_DUE)
    // 代码专门为 Arduino Due 编写
    #elif defined(ARDUINO_ARCH_ESP8266)
    // 代码专门为 ESP8266 编写
    #elif defined(ARDUINO_ARCH_ESP32)
    // 代码专门为 ESP32 编写
    #endif
    
  2. 检查BOARDBOARD宏通常包含了开发板的名称,你可以用它来区分不同的开发板。
    #if defined(BOARD) && (BOARD == "AVR_UNO" || BOARD == "AVR_MEGA2560")
    // 代码适用于 Uno 或 Mega2560
    #elif defined(BOARD) && BOARD == "SAMD_ZERO"
    // 代码适用于 Zero 或 itsybitsy_m0
    #endif
    
  3. 检查特定开发板的功能或引脚定义: 某些开发板可能有特定的功能或引脚定义,你可以检查这些来区分开发板。
    #if defined(__AVR_ATmega328P__)
    // 代码专门为基于 ATmega328P 的开发板编写
    #elif defined(__SAM3X8E__)
    // 代码专门为基于 SAM3X8E 的开发板编写
    #endif
    
  4. 自定义宏: 在项目的 platform.local.txtboards.txt 文件中,你可以为特定的开发板定义自定义宏。然后在代码中使用这些宏。
  5. 使用pins_arduino.h文件: 每个 Arduino 开发板都有自己的 pins_arduino.h 文件,定义了该板的引脚映射。虽然这个文件通常不直接在 .ino 文件中使用,但你可以通过包含它来获取板级信息。
    #include <pins_arduino.h>
    #if defined(PIN_A0)
    // 根据引脚定义区分
    #endif
    

使用这些方法,你可以在 .ino 文件中根据不同的开发板编写特定的代码段,从而确保代码可以在不同的硬件平台上正确运行。记得在编写条件编译代码时,始终要有一个默认的路径,以处理未定义的情况。

Q:arduino 2版本如何选择esp8266开发板

A: 在Arduino IDE 2版本中选择ESP8266开发板的步骤如下:

  1. 打开Arduino IDE:首先确保你已经安装了Arduino IDE 2版本。

  2. 添加开发板管理器URL

    • 进入Arduino IDE的“文件”菜单,选择“首选项”(Preferences)。
    • 在“附加开发板管理器网址”(Additional Boards Manager URLs)字段中,输入以下URL: arduino.esp8266.com/stable/pack… 如果已经添加了其他URL,请用逗号分隔。
  3. 打开开发板管理器

    • 通过菜单栏的“工具”(Tools)->“开发板”(Board)->“开发板管理器”(Board Manager)打开开发板管理器。
  4. 安装ESP8266平台

    • 在开发板管理器中搜索“ESP8266”。
    • 找到“esp8266 by ESP8266 Community”并点击安装。
  5. 选择ESP8266开发板型号

    • 安装完成后,在“工具”(Tools)菜单中选择“开发板”(Board)子菜单。
    • 从下拉菜单中选择你拥有的ESP8266开发板型号,例如NodeMCU、Wemos D1等。
  6. 选择端口

    • 在“工具”(Tools)菜单的“端口”(Port)子菜单中,选择你的ESP8266模块连接的USB端口。

完成以上步骤后,你就可以开始使用Arduino IDE 2版本来编写和上传代码到你的ESP8266开发板了。

Q:ESP32 如何在线调试?

A:

ESP32的在线调试可以通过多种方式实现,以下是几种常见的方法:

1. 使用命令行调试

使用GDB(GNU Debugger)和OpenOCD(Open On-Chip Debugger)进行命令行调试。具体步骤如下:

  1. 安装OpenOCD

    • 确保你的开发环境中已经安装了OpenOCD。通常在安装ESP-IDF时会自动安装。
  2. 启动OpenOCD

    • 打开终端,导航到你的项目目录,运行以下命令启动OpenOCD:

      sh复制

      openocd -f board/esp32s3-builtin.cfg
      
    • 如果使用外部ESP-Prog调试器,配置文件可能不同,例如 board/esp32-prog.cfg

  3. 启动GDB

    • 在另一个终端窗口中,运行以下命令启动GDB并连接到OpenOCD:

      sh复制

      xtensa-esp32-elf-gdb -q -x build/gdbinit/symbols -x build/gdbinit/prefix_map -x build/gdbinit/connect build/blink.elf
      
    • 这将加载符号表并连接到目标设备。如果连接成功,你会看到类似以下的输出:

      复制

      Reading symbols from build/blink.elf...
      add symbol table from file "/home/user-name/esp-idf/examples/get-started/blink/build/bootloader/bootloader.elf"
      [Switching to Thread 1070141764]
      app_main () at /home/user-name/esp-idf/examples/get-started/blink/main/blink_example_main.c:95
      95          configure_led();
      
  4. 设置断点和开始调试

    • 在GDB中,你可以设置断点并开始调试。例如,设置一个断点在 app_main 函数:

      sh复制

      (gdb) break app_main
      
    • 运行程序:

      sh复制

      (gdb) run
      
    • 当程序运行到断点时,会暂停,你可以查看变量、单步执行等操作。

2. 使用Eclipse调试

Eclipse是一个功能强大的集成开发环境,支持ESP-IDF项目的调试。具体步骤如下:

  1. 安装Eclipse和IDF Eclipse插件

    • 下载并安装Eclipse IDE。
    • 安装IDF Eclipse插件,可以通过Eclipse的 Help > Install New Software 菜单进行安装。
  2. 配置调试环境

    • 打开Eclipse,进入 Run > Debug Configuration,双击 GDB Hardware Debugging 新建一个配置。

    • 在配置窗口中,输入配置名称,例如 “Blink checking”。

    • 配置GDB命令行选项,确保 miDebuggerPath 指向 xtensa-esp32-elf-gdb

    • 设置 program 为你的项目生成的 .elf 文件路径。

    • 添加启动命令,例如:

      sh复制

      target remote :3333
      set remote hardware-watchpoint-limit 2
      mon reset halt
      thb app_main
      flushregs
      
  3. 启动OpenOCD

    • 在终端中启动OpenOCD,命令同上。
  4. 启动调试

    • 在Eclipse中,点击 Debug 按钮启动调试。如果连接成功,程序会停在设置的断点处,你可以在Eclipse的调试视图中进行单步调试、查看变量等操作。

3. 使用VSCode调试

VSCode是一个轻量级的代码编辑器,支持ESP-IDF项目的调试。具体步骤如下:

  1. 安装VSCode和ESP-IDF插件

    • 下载并安装VSCode。
    • 安装ESP-IDF插件,可以通过VSCode的扩展市场进行安装。
  2. 配置调试环境

    • 在项目目录下,创建或修改 .vscode/launch.json 文件,内容如下:

      JSON复制

      {
        "version": "0.2.0",
        "configurations": [
          {
            "name": "ESP32-S3 DEBUG",
            "type": "cppdbg",
            "request": "launch",
            "MIMode": "gdb",
            "miDebuggerPath": "${command:espIdf.getXtensaGdb}",
            "program": "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf",
            "windows": {
              "program": "${workspaceFolder}\build\${command:espIdf.getProjectName}.elf"
            },
            "cwd": "${workspaceFolder}",
            "environment": [{ "name": "PATH", "value": "${config:idf.customExtraPaths}" }],
            "setupCommands": [
              { "text": "target remote :3333" },
              { "text": "set remote hardware-watchpoint-limit 2" },
              { "text": "mon reset halt" },
              { "text": "thb app_main" },
              { "text": "flushregs" }
            ],
            "externalConsole": false,
            "logging": {
              "engineLogging": true
            }
          }
        ]
      }
      
  3. 启动OpenOCD

    • 在终端中启动OpenOCD,命令同上。
  4. 启动调试

    • 在VSCode中,点击 F5 启动调试。如果连接成功,程序会停在设置的断点处,你可以在VSCode的调试视图中进行单步调试、查看变量等操作。

4. 使用ESP-Prog调试板

ESP-Prog是一款乐鑫推出的开发调试工具,支持ESP32的JTAG在线调试。具体步骤如下:

  1. 硬件连接

    • 通过USB线连接ESP-Prog调试板和电脑。
    • 用Pin header选择Program/JTAG接口上的电源输出电压。
    • 用灰排线连接调试板和ESP32开发板。
  2. 安装驱动

    • 在电脑端安装FT2232HL芯片驱动。电脑端识别到两个端口,表明驱动已安装成功。
  3. 启动OpenOCD

    • 在终端中启动OpenOCD,命令同上。
  4. 启动GDB

    • 在另一个终端窗口中启动GDB,命令同上。
  5. 设置断点和开始调试

    • 在GDB中设置断点并开始调试,操作同上。

通过以上几种方法,你可以根据自己的开发环境和需求选择合适的调试方式。希望这些信息对你有所帮助!