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

ESP32 Wroom VSPI与MAX6675通信配置及编译错误排查求助

问题解决:ESP32与MAX6675硬件SPI通信编译错误

错误原因

编译报错的核心是变量作用域问题:你在setup()函数内部定义的MAX6675 sonde(slaveSelectPin)是局部变量,仅在setup()范围内有效,loop()函数无法访问该变量,因此编译器提示'sonde' was not declared in this scope。

修复步骤

1. 修改spi_dan.ino代码,调整变量作用域

将sonde的声明移到全局作用域,让loop()可以正常访问:

/*
 Name:      spi_dan.ino
 Created:   02/02/2024 20:11:18
 Author:    Daniel
*/
#include <Arduino.h>
#include <SPI.h>
#include "MAX6675.h"

// Définit la broche comme sélection d'esclave : 
const int slaveSelectPin = 5;
float x;
MAX6675 sonde(slaveSelectPin); // 全局声明实例

void setup() {
    Serial.begin(115200);
    // 移除setup内的局部实例声明
}
void loop() {
    x = sonde.readTempC();
    Serial.println(x);
    delay(1000);
}

2. 补充MAX6675类的实现文件(MAX6675.cpp)

你的头文件仅声明了类结构,但未实现构造函数和成员方法,后续编译会出现未定义引用错误。需在项目目录下创建MAX6675.cpp文件并添加以下代码:

#include "MAX6675.h"
#include <SPI.h>

MAX6675::MAX6675(int16_t SSPin) {
    _SSPin = SSPin;
    pinMode(_SSPin, OUTPUT);
    digitalWrite(_SSPin, HIGH);
    _lastCallTime = 0;
    _currentTemp = 0.0;
}

float MAX6675::readTempC() {
    // 遵循MAX6675的转换周期要求
    if (millis() - _lastCallTime < MAX6675_READ_PERIOD) {
        return _currentTemp;
    }
    _lastCallTime = millis();

    digitalWrite(_SSPin, LOW);
    SPI.beginTransaction(MAX6675_Settings);
    _incomingMessage = SPI.transfer16(0x00);
    SPI.endTransaction();
    digitalWrite(_SSPin, HIGH);

    // 检查热电偶开路状态
    if (_incomingMessage & MAX6675_THERMOCOUPLE_OPEN_BIT) {
        _currentTemp = MAX6675_THERMOCOUPLE_OPEN;
    } else {
        // 转换温度值:数据位为13位,乘以0.25℃分辨率
        _currentTemp = (_incomingMessage >> 3) * MAX6675_CONVERSION_RATIO;
    }
    return _currentTemp;
}

float MAX6675::readTempF() {
    // 摄氏度转华氏度
    return readTempC() * 9.0 / 5.0 + 32.0;
}

3. 验证编译

将MAX6675.h和MAX6675.cpp放在与spi_dan.ino相同的项目目录下,重新编译即可解决所有错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:38:18