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)