ESPHome & Max31855

So I have been trying to monitor the temperature of my Wood Fired Oven and have a few issues, maybe this is a sign not to mix old and new but anyway.

The plan is to monitor 5 K-Type Thermocouples I have embedded within the oven. To this end I have an ESP Dev board, 5x Max31855 breakout boards, an i2c display for temp and a DHT22 as why not.

esphome:
  name: pizza-oven
  platform: ESP8266
  board: esp01_1m

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Pizza Oven Fallback"
    password: !secret fb_password

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: !secret api_password

ota:
  password: !secret ota_password

# Example configuration entry
spi:
  miso_pin: 12
  clk_pin: 14

sensor:
  - platform: max31855
    name: "WFO Temperature 1"
    id: oven_temp1
    cs_pin: 13
    update_interval: 60s
  - platform: max31855
    name: "WFO Temperature 2"
    id: oven_temp2
    cs_pin: 1
    update_interval: 60s
  - platform: max31855
    name: "WFO Temperature 3"
    id: oven_temp3
    cs_pin: 15
    update_interval: 60s
  - platform: max31855
    name: "WFO Temperature 4"
    id: oven_temp4
    cs_pin: 0
    update_interval: 60s
  - platform: max31855
    name: "WFO Temperature 5"
    id: oven_temp5
    cs_pin: 5
    update_interval: 60s
  - platform: max31855
    name: "WFO Temperature 6"
    id: oven_temp6
    cs_pin: 16
    update_interval: 60s
  - platform: dht
    pin: 3
    temperature:
      name: "Patio Temperature"
    humidity:
      name: "Patio Room Humidity"
    update_interval: 60s

# Example configuration entry
i2c:
  sda: 4
  scl: 2

#Font
font:
  - file: "arial.ttf"
    id: my_font
    size: 55

display:
  - platform: ssd1306_i2c
    model: "SSD1306 128x64"
    address: 0x3C
    update_interval: 10s
    lambda: |-
      it.print(0, 10, id(my_font), "Hello World!");
#      if (id(oven_temp1).state > 40) {
#        it.printf(64, 32, id(my_font), TextAlign::CENTER , "%.0f°", id(oven_temp1).state);
#      } else {
#        it.print(0, 0, id(my_font), "Off");
#      }

It appears to mostly be working with some intermittent faults, but the temp readings are way out.

Any thoughts/help much appreciated.


Here is a thread about my journey with a thermocouple in a gas BBQ. In a nutshell, ferrit chokes, capacitors and a metal enclosure helped.

That one measurement looks inverted, idk if that is what happens if you switch + and -. It appears you’re powering all the tc’s through the 8266? That may be too much to pull through the esp. For something like this, where I have multiple daughter boards, I’d power them directly.

edit
Pin 1 is the tx pin and is not suitable as an input high at boot.

Thanks for the thoughts.

I may well have to add some filtering on the tc lines and see what happens.

Interesting point on the power, the design is to be feed from a separate PS via the green terminals but for testing I used USB power, but good point there maybe not enough.

Pin 1 is TX but CS is an output so should be ok if not ideal?

1 Like

It’s high at boot while the serial interface is initializing, I don’t know if that would effect discovery. have you set the logger to VERY_VERBOSE and looked at the debug, hiccups, errors?

Is anyone here using the MAX31855 having unreasonable values (shifted upwards non-linearly)?
I have a problem after compiling and uploading ESPHome to version 2021.10.2 (previously 1.16.2)

Did the filtering help? I am planning on doing this exact setup and wondering how it is working now? What was your solution?

Sadly never got it working properly but didn’t do much more work on it.
Maybe one day I’ll have time to look at it again.