You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32(M5Stamp Pico)同时使用SoftwareSerial与BluetoothSerial编译报错求助

ESP32(M5Stamp Pico)SoftwareSerial与蓝牙库兼容问题解决

问题背景

自制搭载M5Stamp Pico与LoRa模块的电路板,需在21、22引脚通过SoftwareSerial与LoRa通信,同时用蓝牙实现手机串口数据传输,但同时引入SoftwareSerial与BluetoothSerial库时出现编译错误:

C:\Path...\AppData\Local\Temp\arduino-sketch-C3A1C31318E964BF44FA1E35A7FE7344\libraries\espsoftwareserial-main\SoftwareSerial.cpp.o: in function std::function<void ()>::operator()() const':
c:\Path...\arduino15\packages\m5stack\tools\xtensa-esp32-elf-gcc\gcc8_4_0-esp-2021r2-patch5\xtensa-esp32-elf\include\c++\8.4.0\bits\std_function.h:686:(.iram1.66[_ZNK8delegate6detail12DelegateImplIPvvEclEv]+0x24): dangerous relocation: l32r: literal placed after use: .literal._ZNK8delegate6detail12DelegateImplIPvvEclEv
collect2.exe: error: ld returned 1 exit status

核心需求

  • 在M5Stamp Pico的21、22引脚实现与LoRa模块的串口通信
  • 同时实现手机与电路板的蓝牙串口数据传输
  • 解决库兼容问题或找到可行的替代方案

已尝试方案

  • 网上搜索相关错误解决方案,无效
  • 测试其他蓝牙库,未找到支持串口传输的替代库

解决方案

方案1:修改SoftwareSerial库编译配置(快速修复)

该错误源于espsoftwareserial库的代码被分配到iram1内存段,与BluetoothSerial的内存布局冲突。修改库配置强制移出iram段:

  1. 找到Arduino库目录下的espsoftwareserial-main文件夹
  2. 打开library.properties文件,添加编译宏:
build.extra_flags=-DESP_SOFTWARE_SERIAL_NO_IRAM
  1. 清理Arduino项目缓存(菜单栏项目→清理项目文件)后重新编译

方案2:用硬件串口替代SoftwareSerial(推荐)

M5Stamp Pico基于ESP32-Pico-D4,自带3个硬件串口,完全无需依赖SoftwareSerial,稳定性和性能更优。可通过引脚映射将硬件串口2指定到21、22引脚:

#include <BluetoothSerial.h>

BluetoothSerial SerialBT;
HardwareSerial radio(2); // 使用硬件串口2

void setup() {
  Serial.begin(115200);
  SerialBT.begin("M5Stamp_LoRa"); // 设置蓝牙设备名称
  // 映射串口2到21(RX)、22(TX),波特率匹配LoRa模块参数
  radio.begin(9600, SERIAL_8N1, 21, 22);
}

void loop() {
  // LoRa数据转发到蓝牙
  if (radio.available()) {
    String loraData = radio.readStringUntil('\n');
    SerialBT.println(loraData);
  }
  // 蓝牙数据转发到LoRa
  if (SerialBT.available()) {
    String btData = SerialBT.readStringUntil('\n');
    radio.println(btData);
  }
}

方案3:替换蓝牙库

若坚持使用SoftwareSerial,可尝试用ESP32 BLE Serial库替代BluetoothSerial(经典蓝牙)。BLE串口库的内存占用模式与SoftwareSerial冲突概率更低,且支持手机通过BLE串口助手实现数据传输。

内容的提问来源于stack exchange,提问作者Roman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:25:33