|
|
第1行: |
第1行: |
| ![微信图片\_20240902233048.jpg](https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/bbd5838afcc94925b571808e19c87eaf~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgZmVmamxzZGZkZnN4:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTk0MzU5MjI4OTQ1MTg5NSJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1726067633&x-orig-sign=SfzBQL6zqFJVZmAofUevGQIfhiM%3D)
| |
|
| |
|
| ![微信图片\_20240902233058.jpg](https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/7179738620324ce1962790a1bc2db1b8~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgZmVmamxzZGZkZnN4:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTk0MzU5MjI4OTQ1MTg5NSJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1726067633&x-orig-sign=2m4cbUW6pWDYD7bHkbgzkA%2BTKls%3D)
| | test |
| | |
| ## ESPduino(ESP8266)/WeMos D1(ESP8266)
| |
| | |
| //WeMos D1(ESP8266) 使用ESP-12F模组,SMD-22封装,而ESPduino使用安信可的ESP-13模组,SMD-18封装. <img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3746415d336544f0b301b301fe52656d~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=901&h=1198&s=1199992&e=png&b=f0e9e8" width="40%">
| |
| | |
| ![OIP-C.jpg](https://p0-xtjj-private.juejin.cn/tos-cn-i-73owjymdk6/f2814088724b4f97949c4c1937d7b569~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAgZmVmamxzZGZkZnN4:q75.awebp?policy=eyJ2bSI6MywidWlkIjoiMTk0MzU5MjI4OTQ1MTg5NSJ9&rk3s=f64ab15b&x-orig-authkey=f32326d3454f2ac7e96d3d06cdbb035152127018&x-orig-expires=1726067633&x-orig-sign=trMxGhRxyy7xC0TpIv3tM%2FDStfU%3D)
| |
| | |
| //ESPDuino使用安信可的ESP-13模块(该模块使用ESP8266EX 芯片),该模块的pinout如下: <img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3ad1aa50fd1d4dc9b2329d7c400c65fc~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=1587&h=1469&s=162526&e=png&b=fefefe" width="65%">
| |
| | |
| 标准arduino IDE开发ESPDuino,需要在“首选项”->"其他开发板管理器地址"下输入:
| |
| \`
| |
| <https://arduino.esp8266.com/stable/package_esp8266com_index.json>
| |
| //ESPDuino使用ESP-13模块(很多书上误写为ESP-12模块) <img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/41bc69e4571d4a4eb7630ec08fba5630~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=1322&h=615&s=62414&e=png&b=f9f9f9" width="55%">
| |
| ESP-13模块的原理图:
| |
| ![image](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d25db74ac50d4daaaabbcd8197e366e9~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=2095\&h=1637\&s=483546\&e=png\&b=fdfcfc)
| |
| | |
| ## ESP32
| |
| | |
| ### 常用arduino库
| |
| | |
| | 名称 | 库头文件 | 用法 | 在ESP32上是否能使用 |
| |
| | --------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------- | ------------ |
| |
| | debug库 | #include "Arduino\_DebugUtils.h" | <p>setup()阶段:Debug.timestampOn(); <br>loop()阶段:DEBUG\_INFO("i = %d,0x%02x", i,i);</p> | Y |
| |
| | Serial Plotter库,Serial Plotter 可以将串口发送的数据以图表的形式显示出来,适合观察数据的变化趋势 | | | |
| |
| | Debugger:这个库可以让你在 Arduino 程序中使用断点、单步执行等调试功能,就像在 PC 上使用集成开发环境调试程序一样。 | #include \<Debugger.h\> | | 有报错?? |
| |
| | SimpleDebug:这是一个简单的调试库,它允许你通过串口发送调试信息,并且可以设置不同的调试级别。 | | | |
| |
| | DebugLib:这个库为 Arduino 提供了一个简单而强大的调试功能,支持宏定义来启用或禁用调试代码,无需修改代码即可切换调试模式。 | | | |
| |
| | <p>Logging | | | |
| |
| | |
| 提供了日志功能,支持不同级别的日志输出,比如调试、信息、警告、错误等。
| |
| | |
| assert
| |
| | |
| 虽然不是库,但 C++ 标准库中的 assert 宏可以在条件不满足时停止程序运行,是检查假设条件的好方法。
| |
| | |
| elibcppdbg
| |
| | |
| 这个库提供了类似标准 C++ 库中的流输出功能,可以将信息输出到串口,方便调试。
| |
| | |
| NeoDebug
| |
| | |
| 一个为 Arduino 设计的轻量级调试库,支持多种数据类型的输出,还可以自定义调试等级。
| |
| | |
| FPRETTY
| |
| | |
| 一个简单的库,用于格式化串口输出,使得调试信息更加易于阅读。</p> | | | |
| |
| | |
| \| | | | |
| |
| \| | | | |
| |
| \| | | | |
| |
| | |
| ## AI回答
| |
| | |
| ### Q:arduino IDE编译不同开发板时,ino代码如何区分当前是哪种开发板
| |
| | |
| ### A:
| |
| | |
| 在 Arduino IDE 中,当你选择不同的开发板时,编译器会包含对应开发板的特定头文件和定义,这允许你在代码中通过条件编译来区分当前是哪种开发板。以下是一些方法来区分不同的开发板:
| |
| | |
| 1. **使用预定义的宏**:
| |
| 每个开发板在编译时都会定义一些特定的宏,例如 `ARDUINO`,`ARDUINO_ARCH_{ARCH}` 和 `BOARD` 等。你可以通过这些宏来判断当前的板子。
| |
| ```cpp
| |
| #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. **检查`BOARD`宏**:
| |
| `BOARD`宏通常包含了开发板的名称,你可以用它来区分不同的开发板。
| |
| ```cpp
| |
| #if defined(BOARD) && (BOARD == "AVR_UNO" || BOARD == "AVR_MEGA2560")
| |
| // 代码适用于 Uno 或 Mega2560
| |
| #elif defined(BOARD) && BOARD == "SAMD_ZERO"
| |
| // 代码适用于 Zero 或 itsybitsy_m0
| |
| #endif
| |
| ```
| |
| 3. **检查特定开发板的功能或引脚定义**:
| |
| 某些开发板可能有特定的功能或引脚定义,你可以检查这些来区分开发板。
| |
| ```cpp
| |
| #if defined(__AVR_ATmega328P__)
| |
| // 代码专门为基于 ATmega328P 的开发板编写
| |
| #elif defined(__SAM3X8E__)
| |
| // 代码专门为基于 SAM3X8E 的开发板编写
| |
| #endif
| |
| ```
| |
| 4. **自定义宏**:
| |
| 在项目的 `platform.local.txt` 或 `boards.txt` 文件中,你可以为特定的开发板定义自定义宏。然后在代码中使用这些宏。
| |
| 5. **使用`pins_arduino.h`文件**:
| |
| 每个 Arduino 开发板都有自己的 `pins_arduino.h` 文件,定义了该板的引脚映射。虽然这个文件通常不直接在 `.ino` 文件中使用,但你可以通过包含它来获取板级信息。
| |
| ```cpp
| |
| #include <pins_arduino.h>
| |
| #if defined(PIN_A0)
| |
| // 根据引脚定义区分
| |
| #endif
| |
| ```
| |
| | |
| 使用这些方法,你可以在 `.ino` 文件中根据不同的开发板编写特定的代码段,从而确保代码可以在不同的硬件平台上正确运行。记得在编写条件编译代码时,始终要有一个默认的路径,以处理未定义的情况。
| |