Various questions using BBQ cooking monitor

That’s the version of your Arduino IDE.

You should be using Arduino Core 2.5.0-beta2

Pete.

Peter, do I need to roll back? It shows 2.5.0-beta3.

If Beta3 is available then go with it.

Pete.

That’s what is currently on. :frowning:

Does the error maybe point to the MAX31855 being a culprit?

The text in bold seems to be very similar to the version of the Arduino core that you’re running, so maybe that’s where the issue is. You could try a new, or portable, install of the Arduino IDE plus all the required libraries.
Either way, it’s not really a Blynk related thing.

Pete.

I appreciate all the help Pete!

I tried reinstalling everything all fresh, new libraries and even the Arduino IDE. Still same exact set of errors. How confident are you in that Max31855 library? I have a weird suspicion that something in there is not good.

Does anyone else have any suggestions? I’m about to return all the components to amazon since I can’t get this all to work out.

I have no idea, I’ve never used the library or these sensors but with the library installed it compiles fine for me:

Sketch uses 353424 bytes (33%) of program storage space. Maximum is 1044464 bytes.
Global variables use 32888 bytes (40%) of dynamic memory, leaving 49032 bytes for local variables. Maximum is 81920 bytes.

Pete.

This is what the Arduino IDE spits-out when I select “Show verbose output during compilation” in the File/Preferences menu:
https://pastebin.com/iqE1sNEx

These were my Board options:
image

You might want to do a side-by-side comparison to see where the compilation process varies.

You’ll see that down towards the bottom I have a number of “Multiple libraries were found” messages, and it shows which library was used and which were ignored.
My guess is that you’ll have the same, and that at some point an incompatible library is being used instead of the one that’s needed, so this is where I’d start.

Pete.

here’s my current code:

try usign that and see if you get errors?

//heat and food temp monitor
//MAX31855 (2 pieces)
//Blynk
//Piezo alarm - TBC
//OLED display
//OTA update = http://192.168.0.5/update **check this!!!

#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPUpdateServer.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <Wire.h>
#include <MAX31855.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <TimeLib.h>
#include "RunningMedian.h"

#define debug 1 // turns debugging serial prints on/off.
#define BLYNK_PRINT Serial //this is the debugging for Blynk

#define MISO 14 //data out/signal out
#define SCK 16 // clock
#define heatCS 13 //chip select
#define foodCS 12 //chip select

MAX31855 foodProbe = MAX31855(MISO, foodCS, SCK);
MAX31855 heatProbe = MAX31855(MISO, heatCS, SCK);

#define piezoBuzzer 2 // pin for piezo buzzer, is ALSO the internal ESP8266 blue LED... 
// NB - pins 4 & 5 are SDA & SCL for OLED on ESP8266
#define OLED_RESET 3 //CAREFUL OF CHANGING THIS PIN ASSIGNMENT!!!!!!!!! (try to remove it later on...)

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH  16
static const unsigned char PROGMEM logo16_glcd_bmp[] =
{ B00000000, B11000000,
  B00000001, B11000000,
  B00000001, B11000000,
  B00000011, B11100000,
  B11110011, B11100000,
  B11111110, B11111000,
  B01111110, B11111111,
  B00110011, B10011111,
  B00011111, B11111100,
  B00001101, B01110000,
  B00011011, B10100000,
  B00111111, B11100000,
  B00111111, B11110000,
  B01111100, B11110000,
  B01110000, B01110000,
  B00000000, B00110000
};

Adafruit_SSD1306 display(OLED_RESET);

RunningMedian samplesFoodTemperature = RunningMedian(10); //this takes 10 samples
RunningMedian samplesHeatTemperature = RunningMedian(10); //this takes 10 samples

WiFiClient client;
ESP8266WebServer httpServer(80);
ESP8266HTTPUpdateServer httpUpdater;
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);

SimpleTimer timer;

const char* host = "esp8266_DUAL_MAX31855"; // will be "esp8266_XYZ.local/update" in web browser

const char* ssid = "HackerProof";
const char* password = "passw0rd";
char authBlynk[] = "1234567890";

int startHeat, heatTime, startHeatTime, heatTimerTimer;
int startFood, foodTime,  startFoodTime, foodTimerTimer;
int heatTemperature, foodTemperature;
int medianHeatTemperature, medianFoodTemperature;
int heatTemperatureMax = 0;
int foodTemperatureMax = 0;
int displayFreq = 2000L; // sets display update frequency
int displayTimer2, displayTimer3;

int heatWarningOffset = 12; //this is how much below the full warning temp the "pre" warning temp is.
int foodWarningOffset = 4; //this is how much below the full warning temp the "pre" warning temp is.

int foodWarningStep = 2; //amount food warning temp is incremented by Blynk slider
int foodWarningTemp = 55; //starting number in Celcius
int heatWarnStep = 5; //amount heat warnign temp is incremented by Blynk slider
int heatWarningTemp = 200; //starting number in Celcius

int heat_h, heat_m, heat_s;
int food_h, food_m, food_s;

int setMode;

int heatTempChange, foodTempChange;

unsigned long notifyPeriodHeat = 0;
const long notifyTimeHeat = 60L * 1000L; //means its 60 seconds between Heat notifications
unsigned long notifyPeriodFood = 0;
const long notifyTimeFood = 60L * 1000L; //means its 60 seconds between Food notifications

BLYNK_WRITE(V1)   // start heat timer button
{
  startHeat = param.asInt();
  if (startHeat == 1)
  {
    startHeatTime = now();
    heatTimer();
  }
}

void heatTimer()
{
  heatTimerTimer = timer.setTimeout(20L * 1000L, heatTimer);// timing counts every 30 seconds
  if (startHeat == 1)
  {
    heat_s = (now() - startHeatTime);
    heat_m = heat_s / 60;
    heat_h = heat_s / 3600;
    heat_s = heat_s - heat_m * 60;
    heat_m = heat_m - heat_h * 60;
    Blynk.virtualWrite(V5, heat_h, "h ", heat_m, "m");
  }
}

BLYNK_WRITE(V2)   // start food timer button
{
  startFood = param.asInt();
  if (startFood == 1)
  {
    startFoodTime = now();
    foodTimer();
  }
}

void foodTimer()
{
  foodTimerTimer = timer.setTimeout(20L * 1000L, foodTimer);// timing counts every 30 seconds
  if (startFood == 1)
  {
    food_s = (now() - startFoodTime);
    food_m = food_s / 60L;
    food_h = food_s / 3600L;
    food_s = food_s - food_m * 60L;
    food_m = food_m - food_h * 60L;
    Blynk.virtualWrite(V6, food_h, "h ", food_m, "m");
  }
}

BLYNK_WRITE(V9)  // heat warning slider
{
  heatTempChange = param.asInt();
  if (heatTempChange == -1)
  {
    heatWarningTemp = heatWarningTemp - heatWarnStep;
    Blynk.virtualWrite(V9, 0);
    Blynk.virtualWrite(V4, heatWarningTemp, "'C");
  }
  else if (heatTempChange == 1)
  {
    heatWarningTemp = heatWarningTemp + heatWarnStep;
    Blynk.virtualWrite(V9, 0);
    Blynk.virtualWrite(V4, heatWarningTemp, "'C");
  }
}

BLYNK_WRITE(V10)  // food warning slider
{
  foodTempChange = param.asInt();
  if (foodTempChange == -1)
  {
    foodWarningTemp = foodWarningTemp - foodWarningStep;
    Blynk.virtualWrite(V10, 0);
    Blynk.virtualWrite(V3, foodWarningTemp, "'C");
  }
  else if (foodTempChange == 1)
  {
    foodWarningTemp = foodWarningTemp + foodWarningStep;
    Blynk.virtualWrite(V10, 0);
    Blynk.virtualWrite(V3, foodWarningTemp, "'C");
  }
}

BLYNK_WRITE(V0) // mode selection slider
{
  setMode = param.asInt();
  {
    if (setMode == 1) // reset max temps
    {
      foodTemperatureMax = 0;
      heatTemperatureMax = 0;
      Blynk.virtualWrite(V7, 0);
      Blynk.virtualWrite(V8, 0);
    }
    else if (setMode == 2) // heat offset up
    {
      heatWarningOffset = heatWarningOffset + 1;
      Blynk.virtualWrite(V13, heatWarningOffset, "'C");
    }
    else if (setMode == 3) // heat offset dwn
    {
      heatWarningOffset = heatWarningOffset - 1;
      Blynk.virtualWrite(V13, heatWarningOffset, "'C");
    }
    else if (setMode == 4) // food offset up
    {
      foodWarningOffset = foodWarningOffset + 1;
      Blynk.virtualWrite(V14, foodWarningOffset, "'C");
    }
    else if (setMode == 5) // food offset dwn
    {
      foodWarningOffset = foodWarningOffset - 1;
      Blynk.virtualWrite(V14, foodWarningOffset, "'C");
    }
    else if (setMode == 6) // spare
    {
      ///TBA
    }
  }
}

void readMAX31855HeatProbe()
{
  heatTemperature = heatProbe.readThermocouple(CELSIUS);
  switch ((int) heatTemperature)
  {
    case FAULT_OPEN:
      Serial.println("heatprobe: FAULT_OPEN");
      break;
    case FAULT_SHORT_GND:
      Serial.println("heatprobe: FAULT_SHORT_GND");
      break;
    case FAULT_SHORT_VCC:
      Serial.println("heatprobe: FAULT_SHORT_VCC");
      break;
    case NO_MAX31855:
      Serial.println("heatprobe: NO_MAX31855");
      break;
    default:
      Serial.print("heatprobe: ");
      Serial.println(heatTemperature);
      break;
  }

  medianHeatTemperature = samplesHeatTemperature.getMedian();
  samplesHeatTemperature.add(heatTemperature);

  if ((medianHeatTemperature < 888) && (heatTemperatureMax >= medianHeatTemperature))
  {
    Blynk.virtualWrite(V11, medianHeatTemperature);
  }
  else if ((medianHeatTemperature < 888) && (heatTemperatureMax < medianHeatTemperature))
  {
    Blynk.virtualWrite(V11, medianHeatTemperature);
    heatTemperatureMax = medianHeatTemperature;
    Blynk.virtualWrite(V7, heatTemperatureMax, "'C");
  }
  else if (medianHeatTemperature > 888)
  {
    Blynk.virtualWrite(V11, 999);
  }
  readMAX31855FoodProbe();
}

void readMAX31855FoodProbe()
{
  foodTemperature = foodProbe.readThermocouple(CELSIUS);

  switch ((int) foodTemperature)
  {
    case FAULT_OPEN:
      Serial.println("foodprobe: FAULT_OPEN");
      break;
    case FAULT_SHORT_GND:
      Serial.println("foodprobe: FAULT_SHORT_GND");
      break;
    case FAULT_SHORT_VCC:
      Serial.println("foodprobe: FAULT_SHORT_VCC");
      break;
    case NO_MAX31855:
      Serial.println("foodprobe: NO_MAX31855");
      break;
    default:
      Serial.print("foodprobe: ");
      Serial.println(foodTemperature);
      break;
  }

  medianFoodTemperature = samplesFoodTemperature.getMedian();
  samplesFoodTemperature.add(foodTemperature);

  if ((medianFoodTemperature < 888) && (foodTemperatureMax >= medianFoodTemperature))
  {
    Blynk.virtualWrite(V12, medianFoodTemperature);
  }
  else if ((medianFoodTemperature < 888) && (foodTemperatureMax < medianFoodTemperature))
  {
    Blynk.virtualWrite(V12, medianFoodTemperature);
    foodTemperatureMax = medianFoodTemperature;
    Blynk.virtualWrite(V8, foodTemperatureMax, "'C");
  }
  else if (medianFoodTemperature > 888)
  {
    Blynk.virtualWrite(V12, 999);
  }
  //checkHeatTemp();
}

void checkHeatTemp()
{
  unsigned long currentMillis = millis();
  if ((medianHeatTemperature < heatWarningTemp) && ((medianHeatTemperature + heatWarningOffset) > heatWarningTemp))
  {
    if (((currentMillis - notifyPeriodHeat) > notifyTimeHeat) && (medianHeatTemperature < 888))
    {
      Blynk.notify(String("Heat temp approaching warning temp: ") + medianHeatTemperature + ("'C - go check it!!!"));
      notifyPeriodHeat = currentMillis;
    }
  }
  else if (medianHeatTemperature >= heatWarningTemp)
  {
    if (((currentMillis - notifyPeriodHeat) > notifyTimeHeat) && (medianHeatTemperature < 888))
    {
      Blynk.notify(String("Heat temp getting too hot: ") + medianHeatTemperature + ("'C - go check it!!!"));
      notifyPeriodHeat = currentMillis;
    }
    //runAlarmFunction();
  }
  Blynk.virtualWrite(V13, "-", heatWarningOffset, "'C");
  checkFoodTemp();
}

void checkFoodTemp()
{
  unsigned long currentMillis = millis();
  if ((medianFoodTemperature < foodWarningTemp) && ((medianFoodTemperature + foodWarningOffset) > foodWarningTemp))// temp creeping up
  {
    if (((currentMillis - notifyPeriodFood) > notifyTimeFood) && (medianFoodTemperature < 169))
    {
      Blynk.notify(String("Food temp approaching warning temp: ") + medianFoodTemperature + ("'C - go check it!!!"));
      notifyPeriodFood = currentMillis;
    }
  }
  else if (medianFoodTemperature >= foodWarningTemp)
  {
    if (((currentMillis - notifyPeriodFood) > notifyTimeFood) && (medianFoodTemperature < 169))
    {
      Blynk.notify(String("Food temp getting high: ") + medianFoodTemperature + ("'C - go check it!!!"));
      notifyPeriodFood = currentMillis;
    }
    //runAlarmFunction();
  }
  Blynk.virtualWrite(V14, "-", foodWarningOffset, "'C");
  //displayUpdate1();
}

void displayUpdate1()
{
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.println("ELAPSED HEAT TIME:");

  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(32, 16);
  display.print(heat_h);
  display.print("h ");
  display.print(heat_m);
  display.println("m");

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 32);
  display.println("ELAPSED COOK TIME:");

  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(32, 48);
  display.print(food_h);
  display.print("h ");
  display.print(food_m);
  display.println("m");
  display.display();

  displayTimer2 = timer.setTimeout(displayFreq, displayUpdate2);
}

void displayUpdate2()
{
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.println("HEAT WARNING TEMP:");

  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(32, 16);
  display.print(heatWarningTemp);
  display.print((char)247);
  display.println("C");

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 32);
  display.println("FOOD WARNING TEMP:");

  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(32, 48);
  display.print(foodWarningTemp);
  display.print((char)247);
  display.println("C");
  display.display();

  displayTimer3 = timer.setTimeout(displayFreq, displayUpdate3);
}

void displayUpdate3()
{

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.println("HEAT PROBE TEMP:");

  if (medianHeatTemperature > 1000)
  {
    medianHeatTemperature = 0;
  }
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(32, 16);
  display.print(medianHeatTemperature);
  display.print((char)247);
  display.println("C");

  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 32);
  display.println("FOOD PROBE TEMP:");

  if (medianFoodTemperature > 1000)
  {
    medianFoodTemperature = 0;
  }
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(32, 48);
  display.print(medianFoodTemperature);
  display.print((char)247);
  display.println("C");
  display.display();
  Serial.println(F("__________"));
}

void runAlarmFunction()
{ //tone(piezoBuzzer, 1000); // Send 1KHz sound signal...
  //delay(1000);        // ...for 1 sec
  //noTone(piezoBuzzer);     // Stop sound...
  //delay(1000);        // ...for 1sec
}

void setup()
{
  Serial.begin(115200);
  Serial.println(F(""));
  Serial.println(F("Cooking heat & food temp MONITOR"));
  Serial.print(F("File name: "));
  Serial.println(__FILE__);

  //Blynk.begin(authBlynk, ssid, password); // this is for roaming profile
  Blynk.begin(authBlynk, ssid, password, IPAddress(192, 168, 0, 7));

  ArduinoOTA.setHostname("Multi-MAX31855-Node08");

  ArduinoOTA.onStart([]() {
    Serial.println("Start");
  });
  ArduinoOTA.onEnd([]() {
    Serial.println("\nEnd");
  });
  //ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
  //  Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  //});
  ArduinoOTA.onError([](ota_error_t error) {
    Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
    else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
    else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
    else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
    else if (error == OTA_END_ERROR) Serial.println("End Failed");
  });
  ArduinoOTA.begin();
  Serial.println("Ready - OTA Success!!!");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  MDNS.begin(host);
  httpUpdater.setup(&httpServer);
  httpServer.begin();
  MDNS.addService("http", "tcp", 80);
  String ipaddress = WiFi.localIP().toString();
  String chipID = String(ESP.getChipId(), HEX);
  char charChipID[10];
  chipID.toCharArray(charChipID, sizeof(charChipID));
  char charipaddress[16];
  ipaddress.toCharArray(charipaddress, sizeof(charipaddress));
  Serial.printf("Now open http://%s.local/update in your browser or \n", host);
  Serial.printf("http://%s/update or http://%s.lan/update if you prefer.\n", charipaddress, charChipID);

  Serial.println(F("Where's Blynk??"));
  while (!Blynk.connect())
  {
    delay(50);
    Serial.print(F(". "));
  }

  Serial.println(F(""));
  Serial.println(F("Found some WiFi!"));
  Serial.println(F("------------"));

  Blynk.virtualWrite(V1, 0);
  Blynk.virtualWrite(V2, 0);
  Blynk.virtualWrite(V3, 55);
  Blynk.virtualWrite(V4, 200);
  Blynk.virtualWrite(V5, 0);
  Blynk.virtualWrite(V6, 0);
  Blynk.virtualWrite(V7, 0);
  Blynk.virtualWrite(V8, 0);
  Blynk.virtualWrite(V11, 0);
  Blynk.virtualWrite(V12, 0);
  Blynk.virtualWrite(V13, 0);
  Blynk.virtualWrite(V14, 0);

  bool isFirstConnect = true; // Keep this flag not to re-sync on every reconnection

  BLYNK_CONNECTED(); // This function will run every time Blynk initial connection is established
  {
    if (isFirstConnect)
    {
      Blynk.syncAll();
      isFirstConnect = false;
    }
  }
//  rtc.begin();

  Serial.println(F("We operate under <SimpleTimer.h> now..."));
  timer.setInterval(5000L, readMAX31855HeatProbe);

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3_
  display.display();
  display.clearDisplay();
}

void loop()
{
  Blynk.run(); // Initiates Blynk
  timer.run(); // Initiates SimpleTimer
  ArduinoOTA.handle();
  httpServer.handleClient();
}

Dave, thanks for posting. I got the same exact code error log.

c:/users/lance/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-3-20ed2b9/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: sketch\Wifi_TC.ino.cpp.o:(.text._Z21readMAX31855FoodProbev+0x30): undefined reference to `MAX31855::readThermocouple(unit_t)'

c:/users/lance/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-3-20ed2b9/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: sketch\Wifi_TC.ino.cpp.o:(.text._Z21readMAX31855FoodProbev+0x52): undefined reference to `MAX31855::readThermocouple(unit_t)'

c:/users/lance/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-3-20ed2b9/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: sketch\Wifi_TC.ino.cpp.o: in function `readMAX31855FoodProbe()':

C:\Users\Lance\Documents\Arduino\Wifi_TC/Wifi_TC.ino:314: undefined reference to `MAX31855::readThermocouple(unit_t)'

c:/users/lance/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-3-20ed2b9/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: sketch\Wifi_TC.ino.cpp.o: in function `loop':

C:\Users\Lance\Documents\Arduino\Wifi_TC/Wifi_TC.ino:514: undefined reference to `MAX31855::MAX31855(int, int, int)'

c:/users/lance/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-3-20ed2b9/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: sketch\Wifi_TC.ino.cpp.o: in function `setup':

C:\Users\Lance\Documents\Arduino\Wifi_TC/Wifi_TC.ino:521: undefined reference to `MAX31855::MAX31855(int, int, int)'

c:/users/lance/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-3-20ed2b9/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: sketch\Wifi_TC.ino.cpp.o: in function `_GLOBAL__sub_I_Blynk':

C:\Users\Lance\Documents\Arduino\Wifi_TC/Wifi_TC.ino:522: undefined reference to `MAX31855::MAX31855(int, int, int)'

collect2.exe: error: ld returned 1 exit status

exit status 1
Error compiling for board Generic ESP8266 Module.

Pete, thanks for this suggestion. Nothing stuck out other than some naming differences. I see a lot of “Using previously compiled file:” and “Using previously compiled file:”

I had to cut a lot down to post here but does any of this make sense to you?

Using previously compiled file: 
C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\ESP8266WiFiScan.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\ESP8266WiFiAP.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\ESP8266WiFiSTA-WPS.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\ESP8266WiFi.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\BearSSLHelpers.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\CertStoreBearSSL.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\ESP8266WiFiSTA.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\WiFiServer.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\ESP8266WiFiGeneric.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\ESP8266WiFiMulti.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\WiFiUdp.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\WiFiClient.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\WiFiClientSecureAxTLS.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\WiFiServerSecureBearSSL.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\WiFiClientSecureBearSSL.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\WiFiServerSecureAxTLS.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WiFi\ESP8266WiFi.a
Compiling library "ESP8266mDNS"
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266mDNS\LEAmDNS.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266mDNS\LEAmDNS_Structs.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266mDNS\ESP8266mDNS.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266mDNS\LEAmDNS_Transfer.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266mDNS\ESP8266mDNS_Legacy.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266mDNS\LEAmDNS_Control.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266mDNS\LEAmDNS_Helpers.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266mDNS\ESP8266mDNS.a
Compiling library "ArduinoOTA"
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ArduinoOTA\ArduinoOTA.cpp.o
Compiling library "ESP8266WebServer"
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WebServer\ESP8266WebServerSecureBearSSL.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WebServer\ESP8266WebServerSecureAxTLS.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WebServer\Parsing.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WebServer\ESP8266WebServer.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WebServer\detail\mimetable.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266WebServer\ESP8266WebServer.a
Compiling library "ESP8266HTTPUpdateServer"
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266HTTPUpdateServer\ESP8266HTTPUpdateServer.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\ESP8266HTTPUpdateServer\ESP8266HTTPUpdateServer.a
Compiling library "blynk-library-master"
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\blynk-library-master\utility\utility.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\blynk-library-master\utility\BlynkHandlers.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\blynk-library-master\utility\BlynkTimer.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\blynk-library-master\utility\BlynkDebug.cpp.o
Compiling library "SimpleTimer-master"
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\SimpleTimer-master\SimpleTimer.cpp.o
Compiling library "Wire"
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\Wire\Wire.cpp.o
Compiling library "MAX31855-master"
Compiling library "Adafruit-GFX-Library-master"
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\Adafruit-GFX-Library-master\glcdfont.c.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\Adafruit-GFX-Library-master\Adafruit_SPITFT.cpp.o
Compiling library "Adafruit_SSD1306-master"
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\Adafruit_SSD1306-master\Adafruit_SSD1306.cpp.o
Compiling library "SPI"
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\SPI\SPI.cpp.o
Compiling library "Time-master"
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\Time-master\DateStrings.cpp.o
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\Time-master\Time.cpp.o
Compiling library "RunningMedian-master"
Using previously compiled file: C:\Users\Lance\AppData\Local\Temp\arduino_build_494697\libraries\RunningMedian-master\RunningMedian.cpp.o
Compiling core...
cmd.exe /c rem cannot sign on windows
Using precompiled core: C:\Users\Lance\AppData\Local\Temp\arduino_cache_220080\core\core_80a6c545a5a74c24b8989c66b590e314.a
Linking everything together...

I think the problem is that you’ve probably cut-out the most interesting bit, which is the part after “Linking everything together…”. That tells you which libraries have been used and where duplicate libraries have been found. Obviously if it’s failing to compile then things will look different at that point.

I’d suggest you do what I did and post the full results on PasteBin and provide a link.

This is something that the Arduino IDE tries to do to save recompilation time. It’s not a problem, but it makes comparison with my results more difficult. You could try quitting the Arduino IDE completely then re-opening your project and recompiling, or saving your project with a different name.

Pete.

@JohnyJohnson As this was getting very long winded, I moved your issues/questions into your own post so not to further clutter up @Dave1829 project post.

Carry on as normal.

2 Likes

Not just a monitor but a thermostat with a relay as well. It works awesome :clap:t3:

1 Like

Is it a pseudo PID controller? I’d be interested in the code…

Pete, I didn’t know what the pastebin was. Very neat!

Please see the post here… https://pastebin.com/i9Vv7MSf

Does your C:\Users\Lance\Documents\Arduino\libraries\MAX31855-master\Adafruit_MAX31855.h file look identical to this?:

/*************************************************** 
  This is a library for the Adafruit Thermocouple Sensor w/MAX31855K

  Designed specifically to work with the Adafruit Thermocouple Sensor
  ----> https://www.adafruit.com/products/269

  These displays use SPI to communicate, 3 pins are required to  
  interface
  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution
 ****************************************************/

#ifndef ADAFRUIT_MAX31855_H
#define ADAFRUIT_MAX31855_H

#if (ARDUINO >= 100)
 #include "Arduino.h"
#else
 #include "WProgram.h"
#endif

class Adafruit_MAX31855 {
 public:
  Adafruit_MAX31855(int8_t _sclk, int8_t _cs, int8_t _miso);
  Adafruit_MAX31855(int8_t _cs);

  void begin(void);
  double readInternal(void);
  double readCelsius(void);
  double readFarenheit(void);
  uint8_t readError();

 private:
  boolean initialized;

  int8_t sclk, miso, cs;
  uint32_t spiread32(void);
};

#endif

Pete.