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

ESP32同时使用Wifi与DallasTemperature出现Guru Meditation Error如何解决

ESP32同时使用WiFi与DS18B20传感器报错解决方案

问题根因

  • 串口初始化顺序错误:connectToWiFi函数中已调用串口输出方法,但你在setup中先执行WiFi连接再初始化串口,未初始化的串口操作会触发非法内存访问。
  • 代码语法缺陷:你提供的代码中setup函数缺少闭合的}符号,会导致程序运行时栈结构异常。
  • 库版本与资源冲突:你使用的2.0.0版本ESP32核心包搭配旧版OneWire库时,WiFi射频操作和OneWire直接读写GPIO寄存器的逻辑存在时序冲突,调用sensors.begin()时会触发LoadProhibited错误。

修复方案

  1. 调整初始化顺序,将串口初始化放在setup第一行,先初始化DS18B20传感器再连接WiFi,避免资源抢占。
  2. 补全代码的闭合括号,修正语法问题。
  3. 优先选择GPIO4、GPIO18、GPIO19这类与WiFi外设无复用关系的引脚连接DS18B20的数据线,避免硬件冲突。
  4. 升级OneWire库到2.3.5及以上版本,修复ESP32下与WiFi的兼容问题。

修复后参考代码

#include <OneWire.h>
#include <DallasTemperature.h>
#include <WiFi.h>

// Wifi Settings
#define WIFI_NETWORK "name"
#define WIFI_PASSWORD "pass"
#define WIFI_TIMOUT_MS 20000

// 建议更换到GPIO4等无复用引脚
const int oneWireBus = 4;
OneWire oneWire(oneWireBus);
DallasTemperature sensors(&oneWire);
int status;

int connectToWiFi() {
    Serial.println(" ");
    Serial.print("Connencting to WiFi");
    Serial.print(" ");
    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_NETWORK, WIFI_PASSWORD);

    unsigned long startAttemptTime = millis();

    while(WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < WIFI_TIMOUT_MS) {
        Serial.print(".");
        delay(700);
    }

    if (WiFi.status() != WL_CONNECTED) {
        Serial.println("Failed connect to WiFi!");
        return 0;
    }
    else {
        Serial.print("Connected to WiFi:");
        Serial.println(WIFI_NETWORK);
        Serial.println(WiFi.localIP());
        return 1;
    }
}

void setup() {
    // 先初始化串口
    Serial.begin(115200);
    // 先初始化传感器再连接WiFi
    sensors.begin();
    status = connectToWiFi();
}

void loop() {
        
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:36:04