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

TTGO LoRa32代码在Arduino IDE正常但PlatformIO运行故障求助

问题:TTGO LoRa32在PlatformIO中启动失败(assert failed: do_core_init startup.c:298)

问题背景

使用TTGO LoRa32 SX1276 OLED板完成作业,代码在Arduino IDE中可正常运行,但在PlatformIO中配置对应板卡和依赖库后,板载屏幕始终黑屏,串口监视器输出启动失败错误。尝试切换ttgo-lora32-v1和ttgo-lora32-v21两种板卡配置,故障现象一致。

串口错误信息

ELF file SHA256: 0000000000000000

Rebooting...
ets Jul 29 2019 12:21:46

rst:0xc (SW_CPU_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:1184
load:0x40078000,len:13132
load:0x40080400,len:3036
entry 0x400805e4

assert failed: do_core_init startup.c:298 (flash_ret == ESP_OK)


Backtrace:0x400837b9:0x3ffe3aa00x40088135:0x3ffe3ac0 0x4008cff9:0x3ffe3ae0 0x400dd3fe:0x3ffe3c10 0x40082ed5:0x3ffe3c40 0x400792ba:0x3ffe3c90  |<-CORRUPTED

PlatformIO配置

ttgo-lora32-v21配置

[env:ttgo-lora32-v21]
platform = espressif32
board = ttgo-lora32-v21
framework = arduino
lib_deps = 
    sandeepmistry/LoRa@^0.8.0
    adafruit/Adafruit GFX Library@^1.11.8
    adafruit/Adafruit SSD1306@^2.5.7

ttgo-lora32-v1配置

[env:ttgo-lora32-v1]
platform = espressif32
board = ttgo-lora32-v1
framework = arduino
lib_deps = 
    sandeepmistry/LoRa@^0.8.0
    adafruit/Adafruit GFX Library@^1.11.8
    adafruit/Adafruit SSD1306@^2.5.7

运行代码

//Libraries for LoRa
#include <SPI.h>
#include <LoRa.h>

//Libraries for OLED Display
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

//define the pins used by the LoRa transceiver module
#define SCK 5
#define MISO 19
#define MOSI 27
#define SS 18
#define RST 14
#define DIO0 26

//433E6 for Asia
//866E6 for Europe
//915E6 for North America
#define BAND 866E6

//OLED pins
#define OLED_SDA 4
#define OLED_SCL 15 
#define OLED_RST 16
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RST);

String LoRaData;

void setup() { 
  //reset OLED display via software
  pinMode(OLED_RST, OUTPUT);
  digitalWrite(OLED_RST, LOW);
  delay(20);
  digitalWrite(OLED_RST, HIGH);
  
  //initialize OLED
  Wire.begin(OLED_SDA, OLED_SCL);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c, false, false)) { // Address 0x3C for 128x32
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }

  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("LORA RECEIVER ");
  display.display();
  
  //initialize Serial Monitor
  Serial.begin(115200);

  Serial.println("LoRa Receiver Test");
  
  //SPI LoRa pins
  SPI.begin(SCK, MISO, MOSI, SS);
  //setup LoRa transceiver module
  LoRa.setPins(SS, RST, DIO0);

  if (!LoRa.begin(BAND)) {
    Serial.println("Starting LoRa failed!");
    while (1);
  }
  Serial.println("LoRa Initializing OK!");
  display.setCursor(0,10);
  display.println("LoRa Initializing OK!");
  display.display();  
}

void loop() {
  //try to parse packet
  int packetSize = LoRa.parsePacket();
  if (packetSize) {
    //received a packet
    Serial.print("Received packet ");

    //read packet
    while (LoRa.available()) {
      LoRaData = LoRa.readString();
      Serial.print(LoRaData);
    }

    //print RSSI of packet
    int rssi = LoRa.packetRssi();
    Serial.print(" with RSSI ");    
    Serial.println(rssi);

   // Dsiplay information
   display.clearDisplay();
   display.setCursor(0,0);
   display.print("LORA RECEIVER");
   display.setCursor(0,20);
   display.print("Received packet:");
   display.setCursor(0,30);
   display.print(LoRaData);
   display.setCursor(0,40);
   display.print("RSSI:");
   display.setCursor(30,40);
   display.print(rssi);
   display.display();   
  }
}

解决方案

1. 指定兼容的espressif32平台版本

过高版本的espressif32平台可能与旧板卡定义冲突,修改platform.ini,指定稳定兼容版本:

[env:ttgo-lora32-v21]
platform = espressif32@3.5.0
board = ttgo-lora32-v21
framework = arduino
lib_deps = 
    sandeepmistry/LoRa@^0.8.0
    adafruit/Adafruit GFX Library@^1.11.8
    adafruit/Adafruit SSD1306@^2.5.7

2. 调整初始化顺序,避免总线冲突

原代码先初始化OLED再初始化SPI,可能导致ESP32总线资源冲突,修改setup函数顺序:先初始化串口,再初始化SPI和LoRa,最后初始化OLED:

void setup() { 
  //initialize Serial Monitor first
  Serial.begin(115200);
  Serial.println("LoRa Receiver Test");
  
  //SPI LoRa pins
  SPI.begin(SCK, MISO, MOSI, SS);
  //setup LoRa transceiver module
  LoRa.setPins(SS, RST, DIO0);

  if (!LoRa.begin(BAND)) {
    Serial.println("Starting LoRa failed!");
    while (1);
  }
  Serial.println("LoRa Initializing OK!");

  //reset OLED display via software
  pinMode(OLED_RST, OUTPUT);
  digitalWrite(OLED_RST, LOW);
  delay(20);
  digitalWrite(OLED_RST, HIGH);
  
  //initialize OLED
  Wire.begin(OLED_SDA, OLED_SCL);
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) { //简化初始化参数
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }

  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("LORA RECEIVER ");
  display.setCursor(0,10);
  display.println("LoRa Initializing OK!");
  display.display();  
}

3. 验证OLED引脚匹配

确认板卡型号对应的OLED引脚:

  • TTGO LoRa32 v1:OLED_SDA=4,OLED_SCL=15(与代码一致)
  • TTGO LoRa32 v21:OLED_SDA=21,OLED_SCL=22(需修改代码中引脚定义)

4. 清理缓存重新编译

删除项目根目录下的.pio文件夹,重新下载依赖并编译,避免缓存导致的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:50:02