Coder Social home page Coder Social logo

saur0o0n / pidkiln Goto Github PK

View Code? Open in Web Editor NEW
102.0 17.0 38.0 14.86 MB

Kiln PID controller based on Espressif Systems ESP32 chip board with Arduino IDE.

License: GNU General Public License v2.0

C++ 74.62% CSS 1.97% HTML 14.18% JavaScript 3.37% C 5.86%

pidkiln's Introduction

pidkiln

PIDKiln is PID temperature controller, for any task involving high temperatures - like burning ceramic, glass fusing, soft metal melting, burning lost wax casting forms - and probably much more.

Key features:

  • Interface accessible both from LCD screen and WWW Webpage
  • Unlimited (limited only by storage) temperature programs number, program file size limited to 10KiB (but this is artificial limit - can be extended)
  • Internal ESP SPIFFS storage for programs, data, logs, configuration (perhaps later SD - but I'm not sure yet)
  • Local preferences on disk, editable with Web interface
  • Online monitoring, program management, editing, graphs and kiln control
  • Build in clock synchronised with NTP servers (if Internet connected)
  • Safety features build in (temperature run out protection, probe failure, SSR failure, kiln insulation failure)
  • Online PIDKiln firmware upgrade with web interface
  • Syslog type, over the network (UDP) logging to remote server
  • ...simply cool and cheap (comparing to commercially available products) all in one solution

Sample LCD screens

LCD menu sample

Sample Web interface window

Web interface

Required components:

  • ESP32-Wrover board (I've used TTGO with MicroSD)
  • MAX31855 breakout board
  • K-type thermocouple
  • DC->AC solid state relay

Kind of optional, but recommended:

  • 128x65 dot matrix LCD 12864B v2
  • Rotary encoder with button

Optional:

  • DC/AC secondary relay - like SLA-05VDC-SL-C (240V/30A) mechanical relay
  • Additional MAX31855 board with K-type thermocouple for housing temperature measuring
  • Coil power meter - 30A/1V. This is contact less power meter that generates small current when energy flows inside it's coil. Mine already had burden resistor - so on output it produces -1V to 1V, proportionally it's coil rated for 30A. We just need to measure it to know how much juice flows to the heater.
  • Perhaps a kiln :)

BOM and expenses

Total expenses for this set should be around 30-40$

  • ESP32-Wrover board: 11-14$ if exactly like mine, but other ESP32-Wrover you can bought for 6$+

  • MAX31855 board: ~2$

  • K-type thermocouple: 1$-10$ - depending on max temperature it can withstand

  • LCD 12864B: ~5$

  • Encoder: 1$

  • SSR: 4$ + 4$ for radiator

  • 2x10nF capacitors (at least 10nF - with higher capacitance you will have bigger hysteresis, but this actually may be favorable - for now I use 100nF on both MAX31855)

  • Mechanical relay EMR SLA-05VDC-SL-C (Songle): 3$

Why this configuration?

I've already used "kind of" controller made on Linux server and cron procedures, and it was ok.. for a while. Then I bought cheap Chinese controller PC410, just to find out, it is missing most of required stuff (that original PC410 should have), and I already was accustom to be able to see everything over Internet. So I've made few attempts with Arduino - it was fine, but since I need remote access - ESP will be much better choice. I've started to work on ESP8266, but being afraid that I will be lacking some GPIOs - I've moved to ESP32. And since price difference is negligible, this is the platform of choice for this project. It is also beneficial, because it has build in flash memory, that I can use for all required data - without need of connecting additional SD cards. Since I had ESP-Wrover (not ESP32-Wroom), I've also utilised it's PSRAM, but since PIDKiln 1.2 you can also use Wroom module (see Wiki).

MAX31855 comparing to more available MAX6675, is better choice since it allow us to work up to 1350C and it has 3,3V logic.

LC12864B is perhaps not the best choice, but I simply had this one already (I've used if before for my 3D printer). Perhaps later I'll change it. Problem with this LCD is that it has 5V logic. Sometimes it works on 3,3V (depending on version), in my case it does. But since it's one way communication (only MISO) hooking it up to 5V for both logic and back light works and does not crash my board. Clean solution would be to use logic voltage translator (there is plenty of them for 1$).

Relays - Main relay is SSR (Solid State Relay) type. It's because we need to switch it fast and often - SSR can do it, but it will get hot, so make sure you have good radiator. Also if you are going to use cheap Chinese knock offs, make sure it's rated twice the output current of your heater(s). All relays may fail, and they may fail in closed (conductive) state. Because of it, I've also implemented second stage EMR (Electromechanical Relay) relay in case of SSR failure. It's mechanical, so it won't get hot too much. This will allow to turn off the kiln, in case of SSR failure, with EMR (and other way around too). This additional relay (SLA-05VDC-SL-C) is optional.

Initially for kiln housing temperature readout I wanted to use thermistors, but since I've already had MAX31855 connected (and it costs 2$), using additional one requires only 1 new GPIO on ESP. Without hassle to provide reference voltage etc. Low temperature thermocouples are also darn cheap.

GPIO/PINs connection

LCD

Connected to one of three SPI on ESP32 - called VSPI (MOSI-23, MISO-19, CLK-18, CS-5)

ESP32 LCD
+3.3V BLA (this can be also +5V if you wish)
GND BLK
4 RST
GND PSB
+5V VCC (This should be - for ESP sake - 3,3V, but my LCD doesn't work with lower voltage. Try first with 3,3V)
GND GND
5 RS
18 E
23 R/W

Encoder

ESP32 Encoder
+3.3V 5V/VCC
GND GND
32 Key
34 S2
35 S1

MAX31855

Connected to one of three SPI on ESP32 - called HSPI (MOSI-13, MISO-12, CLK-14) CS-27/15 Add 10nF capacitor to thermocouple input pins - it's a must to have reliable readout.

EPS32 MAX31855 A
+3.3V VCC
GND GND
12 SO/DO (slave output/data output)
14 SCK (clock)
27 CS (chip select)
EPS32 MAX31855 B
+3.3V VCC
GND GND
12 SO/DO (slave output/data output)
14 SCK (clock)
15 CS (chip select)

Relays

ESP32 SSR
GND GND
19** IN
ESP32 EMR (SLA-05VDC-SL-C)
GND GND
21 IN
5-48V* VCC

(*) Do not connect 5V from ESP - use external source. This can be any 5V-48V power supply with around 1W power.

(**) For additional SSR relay (works simultaneously with first one) use PIN 22 - see documentation for explanation

Power meter

See the documentation for detailed instruction.

ESP 30A/1V
3,3V 3,3V
GND GND
33 most outside mini jack connector

Alarm

This ALARM_PIN goes HIGH when program ABORT is called (somethings wrong, or user triggered). You can connect this pin to buzzer or small relay to trigger some other action on failure.

ESP Relay/Buzzer
GND GND
26 +3,3V

Minimal configuration of PIDKiln

PIDkiln minimal wiring

Standard configuration of PIDKiln

PIDkiln wiring

Power consideration

Preferably you should power your PIDKiln device with regulated 5V. This way you can power ESP32 board through VIN (do not use VIN and USB at once!) pin and use 5V to directly power EMR relay (around 185mA) and LCD backlight (depends of brightness). You could power board with just USB, but 5V output from my board (ESP32-Wrover TTGO with microsd) is too weak to handle EMR and LCD and most of other boards even do not have 5V out. You could also use VIN as 5V Vout (this pin should be connected directly to USB 5V output) - but then you are limited by USB output and how much board traces can handle.

Installation

This is short version - for detailed one, please see Wiki documentation

  • Assembly hardware, as specified above.
  • Clone git into the Arduino user programs directory (on Linux "/home/username/Arduino/").
  • You have to already have installed ESP32 framework (PIDKiln <v1.2 requires ESP32 <2.0.x, PIDKiln v1.2+ requires ESP32 2.0.x) - if don't, do it now (https://github.com/espressif/arduino-esp32/blob/master/docs/arduino-ide/boards_manager.md).
  • Don't forget about ESP32FS plugin (drop it to "/home/username/Arduino/tools")
  • Install required additional libraries (not all can be installed from Arduino IDE Library Manager): ESPAsyncWebServer, AsyncTCP, PID Library, u8g2 and perhaps emon if you plan to use power meter. Since PIDKiln 1.1 you also need Syslog library.
  • Install also (this has changed in PIDKiln v1.1) my clone of MAX31855 - this implements second HW SPI for ESP32.
  • Update (there is no other way to do it) libraries/ESPAsyncWebServer/src/WebResponseImpl.h variable TEMPLATE_PLACEHOLDER to '~'.
  • For production use, disable serial debug in PIDKiln.ino - set it on false (''#define DEBUG false'')
  • Compile and upload.
  • Open data/etc/pidkiln.conf and edit your WiFi credentials (if you want to use) and, if you want, some additional parameters.
  • Upload sketch data (from data directory) to ESP32 SPIFFS with help of ESP32FS plugin (in Arduino IDE go to Menu->Tools->ESP32 Sketch Data Upload).

Documentation

  • Most of the documentation you can find on PIDKiln github page - so please use it
  • Some less formal updates information and step by step instructions will be on my webpage

Some future ideas

Almost all, what I had in mind is done.. so not much to write here :) Perhaps...

  • RTC clock for better timing and no Internet installations
  • MQTT reporting
  • HomeAssistant integration

pidkiln's People

Contributors

saur0o0n avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pidkiln's Issues

How to change time to local

Forgive me if this is simple but I cannot figure out how to set time time to my local time (Sydney Australia).
The only option I can see is offset from GMT however it has a maximum of 1 hour (3600 seconds) when I need 10/11 hours

How to I set the time to local?

ESP32-WROOM Compatibility

Hello, thanks for this amazing code. I was working on the exact same thing and came across your code just in time!

I have all the required components except that I only have ESP32-Wroom based dev board instead of Wrover.
I wanted to know what the PSRAM is used for in your code and how difficult it would be to adapt it to not use it.

Best,
T.

SPI error

Hi,

Do you have any idea why I get this error?

C:\PIDKiln\PIDKiln_addons.ino: In function 'void Setup_Addons()':

PIDKiln_addons:233:32: error: no matching function for call to 'MAX31855::begin(SPIClass*&)'

ThermocoupleA.begin(ESP32_SPI);
Clipboard02

Just wanted to say thanks!

Just wanted to say thanks for putting this project up. I got a old Duncan kiln up into the 21st century and saved a considerable amount of cash and got more features than buying a off the shelf kiln controller. If you see this let me know if there's anywhere I can buy you a beer/coffee.

MAX6675 instead of MAX31855

first of all thank you for this great project.
In my local area I only find MAX6675 boards. It is possible to easily replace code and use MAX6675 somehow?
Or order MAX31855 and wait 1 month ? :(

Unnecessary `/PIDKiln_vars.json` request

Summary

Web application executes additional request every 5 seconds.
This is caused by

setTimeout(executeQuery, 5000);

Actual behavior

  1. document.ready event
    $(document).ready(function() {
  2. executeQuery function
    function executeQuery() {
  3. $.ajax request

    PIDKiln/data/js/json.js

    Lines 46 to 49 in 87db341

    $.ajax({
    url : valuesUrl,
    dataType : 'json'
    })
  4. setTimeout
    setTimeout(executeQuery, 5000);
  5. another setTimeout
    setTimeout(executeQuery, 5000);
  6. Every 5 seconds executeQuery runs two times.

Expected behavior

Only one request should be fired every 5 seconds.

Programme does not start from webpage

I hope you will help me one more time.
I can now compile the sketch on Arduino IDE 1.8.9. No errors.
And i do get output on my serial port.
I have modified the /etc/pidkiln.conf file, and after startup i am connected to my network.
I can open up the webpage with your standard username and password.

However, after i load a programme from manage programs (no 3) , nothings is shown on the webpage.

This is the log output:

Program name: test_lowtemp.txt Program desc: Program to test low temperatures Started at: 2023-07-13 09:48:59 Possible end at: 2023-07-13 11:28:59 PID values. Kp:20.00 Ki:0.20 Kd:0.10 Start temperature: 27.3C CSV filename: 2023-07-13 11:28:59 -=-=-= Starting program =-=-=-=-

I am using an ESP WROOM32 with no PSRAM and have adapted the sketch

`// If you have Wrover with PSRAM
//#define MALLOC ps_malloc
//#define REALLOC ps_realloc

// if you have Wroom without it - this is what I have
#define MALLOC malloc
#define REALLOC realloc
`
Can you give me some clues what else i can do ?

I have attached a number of screenshots.....

Thanks in advance

Erik

Below is the startup output on the serial console.

`clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1344
load:0x40078000,len:13924
ho 0 tail 12 room 4
load:0x40080400,len:3600
entry 0x400805f0
[PREFS] Loading prefs from file[PREFS] -> For WiFi_SSID saved STRING item value:Kotona-1 type:4
[PREFS] -> For WiFi_Password saved STRING item value:Stt1951_mrs type:4
[PREFS] -> For WiFi_Retry_cnt saved UINT8 item value:9 type:1
[PREFS] -> For WiFi_Mode saved UINT8 item value:1 type:1
[PREFS] -> For HTTP_Local_JS saved UINT8 item value:1 type:1
[PREFS] -> For Auth_Username saved STRING item value:admin type:4
[PREFS] -> For Auth_Password saved STRING item value:hotashell type:4
[PREFS] -> For NTP_Server1 saved STRING item value:0.nl.pool.ntp.org type:4
[PREFS] -> For NTP_Server2 saved STRING item value:1.nl.pool.ntp.org type:4
[PREFS] -> For NTP_Server3 saved STRING item value:2.nl.pool.ntp.org type:4
[PREFS] -> For GMT_Offset_sec saved INT16 item value:3600 type:3
[PREFS] -> For Daylight_Offset_sec saved INT16 item value:3600 type:3
[PREFS] -> For Initial_Date saved STRING item value:2022-05-30 type:4
[PREFS] -> For Initial_Time saved STRING item value:11:00:00 type:4
[PREFS] -> For PID_Window saved UINT16 item value:5000 type:2
[PREFS] -> For PID_Kp saved VFLOAT item value:20.000000 type:5
[PREFS] -> For PID_Ki saved VFLOAT item value:0.200000 type:5
[PREFS] -> For PID_Kd saved VFLOAT item value:0.100000 type:5
[PREFS] -> For PID_Temp_Threshold saved INT16 item value:-1 type:3
[PREFS] -> For LOG_Window saved UINT16 item value:30 type:2
[PREFS] -> For LOG_Files_Limit saved UINT16 item value:40 type:2
[PREFS] -> For DBG_Serial saved UINT8 item value:1 type:1
[PREFS] -> For DBG_Syslog saved UINT8 item value:0 type:1
[PREFS] -> For DBG_Syslog_Srv saved STRING item value:192.168.1.2 type:4
[PREFS] -> For DBG_Syslog_Port saved UINT16 item value:514 type:2
[PREFS] -> For MIN_Temperature saved UINT8 item value:10 type:1
[PREFS] -> For MAX_Temperature saved UINT16 item value:250 type:2
[PREFS] -> For MAX_Housing_Temperature saved UINT16 item value:50 type:2
[PREFS] -> For Thermal_Runaway saved UINT16 item value:0 type:2
[PREFS] -> For Alarm_Timeout saved UINT16 item value:5 type:2
[PREFS] -> For MAX31855_Error_Grace_Count saved UINT8 item value:5 type:1
[PREFS] -=-=-= PREFS DISPLAY =-=-=-[PREFS] 1) 'WiFi_SSID' = 'XXXXXXXXXX' 4
[PREFS] 2) 'WiFi_Password' = 'XXXXXXXXX' 4
[PREFS] 3) 'WiFi_Mode' = '1' 1
[PREFS] 4) 'WiFi_Retry_cnt' = '9' 1
[PREFS] 8) 'HTTP_Local_JS' = '1' 1
[PREFS] 9) 'Auth_Username' = 'admin' 4
[PREFS] 10) 'Auth_Password' = 'hotashell' 4
[PREFS] 11) 'NTP_Server1' = '0.nl.pool.ntp.org' 4
[PREFS] 12) 'NTP_Server2' = '1.nl.pool.ntp.org' 4
[PREFS] 13) 'NTP_Server3' = '2.nl.pool.ntp.org' 4
[PREFS] 14) 'GMT_Offset_sec' = '3600' 3
[PREFS] 15) 'Daylight_Offset_sec' = '3600' 3
[PREFS] 16) 'Initial_Date' = '2022-05-30' 4
[PREFS] 17) 'Initial_Time' = '11:00:00' 4
[PREFS] 18) 'PID_Window' = '5000' 2
[PREFS] 22) 'PID_POE' = '0' 1
[PREFS] 23) 'PID_Temp_Threshold' = '-1' 3
[PREFS] 24) 'LOG_Window' = '30' 2
[PREFS] 25) 'LOG_Files_Limit' = '40' 2
[PREFS] 26) 'MIN_Temperature' = '10' 1
[PREFS] 27) 'MAX_Temperature' = '250' 2
[PREFS] 28) 'MAX_Housing_Temperature' = '50' 2
[PREFS] 29) 'Thermal_Runaway' = '0' 2
[PREFS] 30) 'Alarm_Timeout' = '5' 2
[PREFS] 31) 'MAX31855_Error_Grace_Count' = '5' 1
[PREFS] 32) 'DBG_Serial' = '1' 1
[PREFS] 33) 'DBG_Syslog' = '0' 1
[PREFS] 34) 'DBG_Syslog_Srv' = '192.168.1.2' 4
[PREFS] 35) 'DBG_Syslog_Port' = '514' 2
WiFi mode: 1, Retry count: 9, is wifi enabled: 4
[NET] Y:2022 [NET] M:05 [NET] D:30 [NET] H:11 [NET] m:00 [NET] s:00
[NET] Connecting to WiFi as Client...
[LOG] Syslog disabled
192.168.2.186
[PRG] Loading directory...
[PRG] counted 7 files
[PRG] Processing filename: program1.txt
[PRG] FName: program1.txt FSize:491 Sel:0
[PRG] Processing filename: program2.txt
[PRG] FName: program2.txt FSize:143 Sel:0
[PRG] Processing filename: vfail2.txt
[PRG] FName: vfail2.txt FSize:233 Sel:0
[PRG] Processing filename: vfail1.txt
[PRG] FName: vfail1.txt FSize:246 Sel:0
[PRG] Processing filename: test_lowtemp.txt
[PRG] FName: test_lowtemp.txt FSize:304 Sel:0
[PRG] Processing filename: test_up_down.txt
[PRG] FName: test_up_down.txt FSize:270 Sel:0
[PRG] Processing filename: index.html
[HTTP] Head of index - copying...

[ICO]

program1.txt491# Short, clear description of the program.loaddelete

[ICO]

program2.txt143# Second program short descriptionloaddelete

[ICO]

test_lowtemp.txt304# Program to test low temperaturesloaddelete

[ICO]

test_up_down.txt270# Program to test up and down temp. changeloaddelete

[ICO]

vfail1.txt246# Short description of fail1loaddelete

[ICO]

vfail2.txt233# Short description of fail2loaddelete

[HTTP] End of index - copying...
[LOG] Loading dir: Loading logs directory...
[LOG] Loading dir: counted 1 files
[LOG] Loading dir: Loading logs directory...
[LOG] Loading dir: counted 1 files
[HTTP] Head of logs - copying...
[HTTP] End of log index - copying...
[ADDONS] Temperature sensor A readout: Internal temp = 24.3 Last temp = 32.0 Average kiln temp = 21.2
[ADDONS] Temperature sensor A readout: Internal temp = 26.5 Last temp = 32.2 Average kiln temp = 22.3
[ADDONS] Temperature sensor A readout: Internal temp = 27.5 Last temp = 32.0 Average kiln temp = 23.3
[ADDONS] Temperature sensor A readout: Internal temp = 28.1 Last temp = 31.5 Average kiln temp = 24.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.3 Last temp = 31.5 Average kiln temp = 24.8
[ADDONS] Temperature sensor A readout: Internal temp = 28.4 Last temp = 32.0 Average kiln temp = 25.6
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 32.0 Average kiln temp = 26.2
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 27.2 Average kiln temp = 26.3
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 32.2 Average kiln temp = 26.9
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.2 Average kiln temp = 27.3
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.2 Average kiln temp = 27.8
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.2 Average kiln temp = 28.2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 26.2 Average kiln temp = 28.0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 29.2 Average kiln temp = 28.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 27.8 Average kiln temp = 28.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.0 Average kiln temp = 28.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 29.0 Average kiln temp = 28.2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 27.8 Average kiln temp = 28.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.0 Average kiln temp = 28.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.0 Average kiln temp = 28.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 27.5 Average kiln temp = 28.0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 29.0 Average kiln temp = 28.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.8 Average kiln temp = 28.5
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.2 Average kiln temp = 28.5
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.0 Average kiln temp = 28.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.2 Average kiln temp = 28.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.2 Average kiln temp = 28.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 26.0 Average kiln temp = 28.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 17.8 Average kiln temp = 27.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 21.8 Average kiln temp = 26.6
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 18.8 Average kiln temp = 25.8
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 17.5 Average kiln temp = 25.0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 19.8 Average kiln temp = 24.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 29.0 Average kiln temp = 24.9
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.0 Average kiln temp = 25.2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 30.5 Average kiln temp = 25.7
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.2 Average kiln temp = 26.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 21.0 Average kiln temp = 25.8
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.8 Average kiln temp = 26.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 30.5 Average kiln temp = 26.8
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.0 Average kiln temp = 27.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 29.0 Average kiln temp = 27.5
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 25.0 Average kiln temp = 27.3
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.0 Average kiln temp = 27.7
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 27.0 Average kiln temp = 27.7
[PRG] Got pointer to load:'test_lowtemp.txt'
[PRG] Load program name: '/programs/test_lowtemp.txt'
[PRG] Raw line: '# Program to test low temperatures'
[PRG] comment[PRG] Raw line: '# Full description on as many lines you wish -'
[PRG] comment[PRG] Raw line: '# just remember about default program limit - 10KiB'
[PRG] comment[PRG] Raw line: '# Program parameters target temperature in Celcius:minutes to achieve this temperature:dwelling time in minutes'
[PRG] comment[PRG] Raw line: '35:10:5'
[PRG] Sanitizing line: '35:10:5'
[PRG] Program_pos: 0, Temp: 35C Time to: 10s Dwell: 5s
[PRG] San line: '35:10:5'
[PRG] Raw line: '44:5:10'
[PRG] Sanitizing line: '44:5:10'
[PRG] Program_pos: 1, Temp: 44C Time to: 5s Dwell: 10s
[PRG] San line: '44:5:10'
[PRG] Raw line: '55:10:10'
[PRG] Sanitizing line: '55:10:10'
[PRG] Program_pos: 2, Temp: 55C Time to: 10s Dwell: 10s
[PRG] San line: '55:10:10'
[PRG] Raw line: '60:10:5'
[PRG] Sanitizing line: '60:10:5'
[PRG] Program_pos: 3, Temp: 60C Time to: 10s Dwell: 5s
[PRG] San line: '60:10:5'
[PRG] Raw line: '45:15:0'
[PRG] Sanitizing line: '45:15:0'
[PRG] Program_pos: 4, Temp: 45C Time to: 15s Dwell: 0s
[PRG] San line: '45:15:0'
[PRG] Raw line: '30:5:5'
[PRG] Sanitizing line: '30:5:5'
[PRG] Program_pos: 5, Temp: 30C Time to: 5s Dwell: 5s
[PRG] San line: '30:5:5'
[PRG] Raw line: '50:10:0'
[PRG] Sanitizing line: '50:10:0'
[PRG] Program_pos: 6, Temp: 50C Time to: 10s Dwell: 0s
[PRG] San line: '50:10:0'
[PRG] Found description: Program to test low temperatures
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.5 Average kiln temp = 27.8
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 8.0 Average kiln temp = 25.8
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 22.5 Average kiln temp = 25.5
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 22.2 Average kiln temp = 25.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 20.5 Average kiln temp = 24.7
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 27.0 Average kiln temp = 24.9
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 32.0 Average kiln temp = 25.6
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 32.0 Average kiln temp = 26.2
[HTTP] Index post parser: POST[prog_start]: Start program
[PRG] Starting new program![DBG] Calculating new step!
[PRG] Calculating new NORMAL step!
[PRG] Next step:1689234824 Start step:1689234224 Togo:10 Run_step:0/7 Set_temp:0.000
[DBG] First step.
[PRG] Curr temp: 26, Set_temp: 26, Incr: 0.01 Pid_out:0.00 Step: 0
[PRG] Trying to start log - window size:30
[PRG] Trying to create logs[LOG] Trying to create log file:/logs/230713_094344.csv
[LOG] Created new log file /logs/230713_094344.csv
[LOG] Loading dir: Loading logs directory...
[LOG] Loading dir: counted 3 files
[LOG] FName: 230713_094344.csv FSize:0 Sel:0
[LOG] FName: 230713_094344.log FSize:276 Sel:0
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 27.8 Average kiln temp = 26.4
[HTTP] Head of logs - copying...
[HTTP] End of log index - copying...
[LOG] Writing to log file:2023-07-13 09:43:45,26,20
[ADDONS] Temperature sensor A readout: Internal temp = 28.4 Last temp = 19.8 Average kiln temp = 25.7
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 21.2 Average kiln temp = 25.3
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 23.0 Average kiln temp = 25.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 20.0 Average kiln temp = 24.6
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 22.8 Average kiln temp = 24.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 28.5 Average kiln temp = 24.8
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 31.8 Average kiln temp = 25.5
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.2 Average kiln temp = 26.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.5 Average kiln temp = 26.3
[PRG] Curr temp: 26, Set_temp: 26, Incr: 0.01 Pid_out:8.53 Step: 0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.8 Average kiln temp = 26.5
[PRG] Pid_out RAW:3.66 Pid_out:3.66 Now-window:575 WindowSize:5000 Prg_state:2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 27.5 Average kiln temp = 26.6
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.0 Average kiln temp = 27.2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.2 Average kiln temp = 27.3
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 30.5 Average kiln temp = 27.6
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.5 Average kiln temp = 28.0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 17.5 Average kiln temp = 26.9
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.0 Average kiln temp = 27.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 30.2 Average kiln temp = 27.6
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.0 Average kiln temp = 28.1
[PRG] Curr temp: 28, Set_temp: 27, Incr: 0.01 Pid_out:6.66 Step: 0
[PRG] Pid_out RAW:6.66 Pid_out:6.66 Now-window:4579 WindowSize:5000 Prg_state:2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.2 Average kiln temp = 28.5
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.5 Average kiln temp = 28.8
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 30.5 Average kiln temp = 29.0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.0 Average kiln temp = 29.3
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 27.0 Average kiln temp = 29.0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.2 Average kiln temp = 29.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.8 Average kiln temp = 29.6
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.0 Average kiln temp = 29.8
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.2 Average kiln temp = 30.1
[PRG] Pid_out RAW:0.00 Pid_out:0.00 Now-window:3575 WindowSize:5000 Prg_state:2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.0 Average kiln temp = 30.3
[LOG] Writing to log file:2023-07-13 09:44:14,30,20
[PRG] Curr temp: 30, Set_temp: 27, Incr: 0.01 Pid_out:0.00 Step: 0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.2 Average kiln temp = 30.5
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 30.8 Average kiln temp = 30.5
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 32.2 Average kiln temp = 30.7
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.2 Average kiln temp = 30.8
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.2 Average kiln temp = 31.0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.8 Average kiln temp = 31.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.8 Average kiln temp = 30.8
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.5 Average kiln temp = 31.0
[PRG] Pid_out RAW:3.88 Pid_out:3.88 Now-window:2579 WindowSize:5000 Prg_state:2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.0 Average kiln temp = 31.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.2 Average kiln temp = 31.2
[PRG] Curr temp: 31, Set_temp: 27, Incr: 0.01 Pid_out:0.00 Step: 0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.5 Average kiln temp = 31.3
[ADDONS] Temperature sensor A readout: Internal temp = 28.5 Last temp = 29.8 Average kiln temp = 31.2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.5 Average kiln temp = 31.3
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.0 Average kiln temp = 31.0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 27.5 Average kiln temp = 30.6
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 28.5 Average kiln temp = 30.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 29.0 Average kiln temp = 30.3
[PRG] Pid_out RAW:15.81 Pid_out:15.81 Now-window:1573 WindowSize:5000 Prg_state:2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 29.0 Average kiln temp = 30.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.0 Average kiln temp = 30.2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 26.2 Average kiln temp = 29.8
[PRG] Curr temp: 30, Set_temp: 27, Incr: 0.01 Pid_out:17.73 Step: 0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 29.2 Average kiln temp = 29.8
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 26.5 Average kiln temp = 29.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.0 Average kiln temp = 29.7
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 29.2 Average kiln temp = 29.7
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 27.5 Average kiln temp = 29.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.2 Average kiln temp = 29.6
[PRG] Pid_out RAW:30.72 Pid_out:30.72 Now-window:572 WindowSize:5000 Prg_state:2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 29.8 Average kiln temp = 29.6
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.2 Average kiln temp = 29.9
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.8 Average kiln temp = 30.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.2 Average kiln temp = 30.2
[LOG] Writing to log file:2023-07-13 09:44:44,30,20
[PRG] Curr temp: 30, Set_temp: 27, Incr: 0.01 Pid_out:15.97 Step: 0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 13.0 Average kiln temp = 28.5
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 12.2 Average kiln temp = 26.9
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 30.8 Average kiln temp = 27.2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.8 Average kiln temp = 27.7
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.0 Average kiln temp = 28.1
[PRG] Pid_out RAW:62.87 Pid_out:62.87 Now-window:4578 WindowSize:5000 Prg_state:2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.8 Average kiln temp = 28.5
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 30.0 Average kiln temp = 28.6
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.0 Average kiln temp = 29.0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.8 Average kiln temp = 29.3
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.2 Average kiln temp = 29.5
[PRG] Curr temp: 29, Set_temp: 27, Incr: 0.01 Pid_out:30.41 Step: 0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.0 Average kiln temp = 29.7
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 30.8 Average kiln temp = 29.8
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.2 Average kiln temp = 30.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 30.8 Average kiln temp = 30.1
[PRG] Pid_out RAW:12.60 Pid_out:12.60 Now-window:3576 WindowSize:5000 Prg_state:2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 30.2 Average kiln temp = 30.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.8 Average kiln temp = 30.3
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.0 Average kiln temp = 30.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.0 Average kiln temp = 30.5
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.0 Average kiln temp = 30.6
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.2 Average kiln temp = 30.7
[PRG] Curr temp: 31, Set_temp: 27, Incr: 0.01 Pid_out:0.00 Step: 0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.2 Average kiln temp = 30.9
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.2 Average kiln temp = 30.9
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 30.5 Average kiln temp = 30.9
[PRG] Pid_out RAW:0.00 Pid_out:0.00 Now-window:2578 WindowSize:5000 Prg_state:2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.2 Average kiln temp = 30.9
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.5 Average kiln temp = 31.0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.5 Average kiln temp = 31.0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 30.8 Average kiln temp = 31.0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.5 Average kiln temp = 31.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.5 Average kiln temp = 31.1
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.8 Average kiln temp = 31.2
[LOG] Writing to log file:2023-07-13 09:45:14,31,20
[PRG] Curr temp: 31, Set_temp: 28, Incr: 0.01 Pid_out:0.00 Step: 0
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.5 Average kiln temp = 31.2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.0 Average kiln temp = 31.2
[PRG] Pid_out RAW:0.00 Pid_out:0.00 Now-window:1578 WindowSize:5000 Prg_state:2
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.5 Average kiln temp = 31.3
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.8 Average kiln temp = 31.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.8 Average kiln temp = 31.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 32.2 Average kiln temp = 31.5
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.2 Average kiln temp = 31.5
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.2 Average kiln temp = 31.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 30.8 Average kiln temp = 31.4
[ADDONS] Temperature sensor A readout: Internal temp = 28.6 Last temp = 31.5 Average kiln temp = 31.4`

Scherm­afbeelding 2023-07-13 om 09 54 49 Scherm­afbeelding 2023-07-13 om 09 54 41 Scherm­afbeelding 2023-07-13 om 09 54 19 Scherm­afbeelding 2023-07-13 om 09 45 10

here i go again having trouble compiling code i get this error message?

C:\Users\Dave\Documents\Arduino\libraries\PIDKiln\PIDKiln_http.ino: In function 'String Chart_parser(const String&)':
C:\Users\Dave\Documents\Arduino\libraries\PIDKiln\PIDKiln_http.ino:337:32: error: 'class fs::File' has no member named 'path'
if(CSVFile) return CSVFile.path();
^
C:\Users\Dave\Documents\Arduino\libraries\PIDKiln\PIDKiln_http.ino: In function 'void GET_Handle_Delete(AsyncWebServerRequest*)':
C:\Users\Dave\Documents\Arduino\libraries\PIDKiln\PIDKiln_http.ino:508:78: error: 'class fs::File' has no member named 'path'
DBG dbgLog(LOG_DEBUG,"[HTTP] Opened file is %s, program name is:%s\n",tmpf.path(),p->value().c_str());
^
C:\Users\Dave\Documents\Arduino\libraries\PIDKiln\PIDKiln_http.ino: In function 'String handleVars(const String&)':
C:\Users\Dave\Documents\Arduino\libraries\PIDKiln\PIDKiln_http.ino:649:32: error: 'class fs::File' has no member named 'path'
if(CSVFile) return CSVFile.path();
^
Multiple libraries were found for "WiFi.h"
Used: C:\Users\Dave\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\WiFi
Not used: C:\Program Files (x86)\Arduino\libraries\WiFi
exit status 1

Compilation error: 'class fs::File' has no member named 'path'

Big bug

Hello Adrian,
First off all: What a fantastic piece of software. Just what i was looking for.
I also had problems with a reboot loop even with a ESP32-WROVER come
to find out that the reason is a bug in the software.

In module PIDKiln_program Line 149. If the "/" character is not found,
fname will become 0 and the program will crash and reboot in line 152.
The same happens in module PIDKiln_log in line 158

char* fname;
char tmp[32];
uint8_t len2;

strcpy(tmp,file.name());
len2=strlen(tmp);
if(len2>31 || len2<2) return 2; // file name with dir too long or just /
fname=strchr(tmp+1,'/'); // seek for the NEXT directory separator...
fname++; // ..and skip it
if(!strcmp(fname,"index.html")) continue; // skip index file
strcpy(Programs_DIR[Programs_DIR_size].filename,fname);
Programs_DIR[Programs_DIR_size].filesize=file.size();
Programs_DIR[Programs_DIR_size].sel=0;

I could get it to work by modifying the code quick and dirty as i am not good in C++

if (strchr(tmp+1,'/')!= 0) {
fname=strchr(tmp+1,'/'); // seek for the NEXT directory separator...
fname++; // ..and skip it
}

if(!strcmp(tmp,"index.html")) continue; // skip index file
strcpy(Programs_DIR[Programs_DIR_size].filename,tmp);
Programs_DIR[Programs_DIR_size].filesize=file.size();
Programs_DIR[Programs_DIR_size].sel=0;

I would be nice if you could have a look at it and do it the right way.

Chart not showing

First of all thank your for this awesome work.

I updated today to the newest version first after having some issues with the temperature readings, now the chart on the Main Page is no longer showing. I think it's an issue with the log file location, at least that's what i was able to determine with my limited knowledge. I tried to grasp the interactions between the PIDKiln_vars.json, chart.js and the PIDKiln_logs.ino.

The Chrome developer tools show an Error 500 when the charts.js tries to read the .csv, as it is looking for it in the current folder and not in the logs folder.

GET http://192.168.51.138/211210_105721.csv 500 (Internal Server Error) request @ chartjs-datasource.min.js:7 beforeUpdate @ chartjs-datasource.min.js:7 notify @ Chart.2.9.3.bundle.min.js:7 update @ Chart.2.9.3.bundle.min.js:7 chart_update @ chart.js:163 setTimeout (async) chart_update @ chart.js:164 Uncaught TypeError: Cannot read properties of undefined (reading 'datasets') at chartjs-datasource.min.js:7:9686 at n.<anonymous> (chartjs-datasource.min.js:7:10087) at XMLHttpRequest.n.onreadystatechange (chartjs-datasource.min.js:7:775)

If you need any more information I'd be happy to help.

Not aborting at Maximum housing temperature

For testing purposes I set Maximum housing temperature to 30C in Safety features but PIDKiln is not aborting the program run when the temperature gets above the set value.
In logs I see when the temperature above 30 but the expected "Aborting program with error: #" is not following after:
... 1 - PIDKiln-ESP32 PIDKiln - - - ‹¯¨[ADDONS] Temperature sensor B readout: Internal temp = 30.2 Last temp = 33.8 Average case temp = 32.7

To notice, other settings in Safety features: Minimal temperature and Maximum temperature are triggering abortion of the program run when going below or above set values respectively.

Painfully slow web UI

I try to use this without any extra hardware and want to control it via http only.
But I cant get it to work, slow loading, graphics does not load att all or slooooow.
What am I doing wrong?

More thanks

Thank you for sharing your work as well!
I will be adapting it to manage a 3d printer filament drier using a PTC heater.
Cheers!
Kurt

after sketch upload, program starts and constantly restarting

board: esp32-wroom-32D

serial

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:10124
load:0x40080400,len:5856
entry 0x400806a8
E (218) psram: PSRAM ID read error: 0xffffffff
[PREFS] Loading prefs from file[PREFS] -> For WiFi_Retry_cnt saved UINT8 item value:9 type:1
[PREFS] -> For WiFi_Mode saved UINT8 item value:1 type:1
[PREFS] -> For HTTP_Local_JS saved UINT8 item value:1 type:1
[PREFS] -> For Auth_Username saved STRING item value:admin type:4
[PREFS] -> For Auth_Password saved STRING item value:hotashell type:4
[PREFS] -> For NTP_Server1 saved STRING item value:0.pl.pool.ntp.org type:4
[PREFS] -> For NTP_Server2 saved STRING item value:1.pl.pool.ntp.org type:4
[PREFS] -> For NTP_Server3 saved STRING item value:2.pl.pool.ntp.org type:4
[PREFS] -> For GMT_Offset_sec saved INT16 item value:3600 type:3
[PREFS] -> For Daylight_Offset_sec saved INT16 item value:3600 type:3
[PREFS] -> For Initial_Date saved STRING item value:2021-12-02 type:4
[PREFS] -> For Initial_Time saved STRING item value:11:00:00 type:4
[PREFS] -> For PID_Window saved UINT16 item value:5000 type:2
[PREFS] -> For PID_Kp saved VFLOAT item value:20.000000 type:5
[PREFS] -> For PID_Ki saved VFLOAT item value:0.200000 type:5
[PREFS] -> For PID_Kd saved VFLOAT item value:0.100000 type:5
[PREFS] -> For PID_Temp_Threshold saved INT16 item value:-1 type:3
[PREFS] -> For LOG_Window saved UINT16 item value:30 type:2
[PREFS] -> For LOG_Files_Limit saved UINT16 item value:40 type:2
[PREFS] -> For DBG_Serial saved UINT8 item value:1 type:1
[PREFS] -> For DBG_Syslog saved UINT8 item value:0 type:1
[PREFS] -> For DBG_Syslog_Srv saved STRING item value:192.168.1.2 type:4
[PREFS] -> For DBG_Syslog_Port saved UINT16 item value:514 type:2
[PREFS] -> For MIN_Temperature saved UINT8 item value:10 type:1
[PREFS] -> For MAX_Temperature saved UINT16 item value:1350 type:2
[PREFS] -> For MAX_Housing_Temperature saved UINT16 item value:130 type:2
[PREFS] -> For Thermal_Runaway saved UINT16 item value:0 type:2
[PREFS] -> For Alarm_Timeout saved UINT16 item value:5 type:2
[PREFS] -> For MAX31855_Error_Grace_Count saved UINT8 item value:5 type:1
[PREFS] -=-=-= PREFS DISPLAY =-=-=-[PREFS] 1) 'WiFi_SSID' = '' 4
[PREFS] 2) 'WiFi_Password' = '' 4
[PREFS] 3) 'WiFi_Mode' = '1' 1
[PREFS] 4) 'WiFi_Retry_cnt' = '9' 1
[PREFS] 8) 'HTTP_Local_JS' = '1' 1
[PREFS] 9) 'Auth_Username' = 'admin' 4
[PREFS] 10) 'Auth_Password' = 'hotashell' 4
[PREFS] 11) 'NTP_Server1' = '0.pl.pool.ntp.org' 4
[PREFS] 12) 'NTP_Server2' = '1.pl.pool.ntp.org' 4
[PREFS] 13) 'NTP_Server3' = '2.pl.pool.ntp.org' 4
[PREFS] 14) 'GMT_Offset_sec' = '3600' 3
[PREFS] 15) 'Daylight_Offset_sec' = '3600' 3
[PREFS] 16) 'Initial_Date' = '2021-12-02' 4
[PREFS] 17) 'Initial_Time' = '11:00:00' 4
[PREFS] 18) 'PID_Window' = '5000' 2
[PREFS] 22) 'PID_POE' = '0' 1
[PREFS] 23) 'PID_Temp_Threshold' = '-1' 3
[PREFS] 24) 'LOG_Window' = '30' 2
[PREFS] 25) 'LOG_Files_Limit' = '40' 2
[PREFS] 26) 'MIN_Temperature' = '10' 1
[PREFS] 27) 'MAX_Temperature' = '1350' 2
[PREFS] 28) 'MAX_Housing_Temperature' = '130' 2
[PREFS] 29) 'Thermal_Runaway' = '0' 2
[PREFS] 30) 'Alarm_Timeout' = '5' 2
[PREFS] 31) 'MAX31855_Error_Grace_Count' = '5' 1
[PREFS] 32) 'DBG_Serial' = '1' 1
[PREFS] 33) 'DBG_Syslog' = '0' 1
[PREFS] 34) 'DBG_Syslog_Srv' = '192.168.1.2' 4
[PREFS] 35) 'DBG_Syslog_Port' = '514' 2
WiFi mode: 1, Retry count: 9, is wifi enabled: 4
[NET] Y:2021 [NET] M:12 [NET] D:02 [NET] H:11 [NET] m:00 [NET] s:00
[NET] Creating WiFi Access Point (AP)192.168.10.1
[PRG] Loading directory...
[PRG] counted 6 files
[PRG] Processing filename: program1.txt
Guru Meditation Error: Core 1 panic'ed (StoreProhibited). Exception was unhandled.

Core 1 register dump:
PC : 0x4008b9fa PS : 0x00060830 A0 : 0x800daa91 A1 : 0x3ffb2620
A2 : 0x00000000 A3 : 0x3ffb2690 A4 : 0x000000ff A5 : 0x0000ff00
A6 : 0x00ff0000 A7 : 0xff000000 A8 : 0x676f7270 A9 : 0x00000069
A10 : 0x00000000 A11 : 0x3ffd55b8 A12 : 0x3f401dd2 A13 : 0x3ffb2610
A14 : 0x3ffb25e0 A15 : 0x00000008 SAR : 0x00000012 EXCCAUSE: 0x0000001d
EXCVADDR: 0x00000000 LBEG : 0x4008b9ed LEND : 0x4008ba05 LCOUNT : 0xffffffff

Backtrace:0x4008b9f7:0x3ffb26200x400daa8e:0x3ffb2630 0x400dac58:0x3ffb26d0 0x400db484:0x3ffb27b0 0x400ecea2:0x3ffb2820

ELF file SHA256: 0000000000000000

"File not found" when connected

I just went through the installation process on my esp32-wroom-32e. Everything compiled and uploaded without issue on the latest arduino ide. When I connect to the resulting "PIDKiln_AP" and enter the default ip 192.168.10.1 into a browser all I get is a blank page that says "file not found"

Am I just not connecting to it correctly? I didn't see anything on the wiki that mentions another way.

loop in error exception

build from source or update from ota ,all loop in the error ,any one can help me?

Rebooting...
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1412
load:0x40078000,len:13416
load:0x40080400,len:3672
entry 0x400805f8
[PREFS] Loading prefs from file[PREFS]  -> For WiFi_Retry_cnt saved UINT8 item value:9 type:1
[PREFS]  -> For WiFi_Mode saved UINT8 item value:1 type:1
[PREFS]  -> For HTTP_Local_JS saved UINT8 item value:1 type:1
[PREFS]  -> For Auth_Username saved STRING item value:admin type:4
[PREFS]  -> For Auth_Password saved STRING item value:hotashell type:4
[PREFS]  -> For NTP_Server1 saved STRING item value:0.pl.pool.ntp.org type:4
[PREFS]  -> For NTP_Server2 saved STRING item value:1.pl.pool.ntp.org type:4
[PREFS]  -> For NTP_Server3 saved STRING item value:2.pl.pool.ntp.org type:4
[PREFS]  -> For GMT_Offset_sec saved INT16 item value:3600 type:3
[PREFS]  -> For Daylight_Offset_sec saved INT16 item value:3600 type:3
[PREFS]  -> For Initial_Date saved STRING item value:2020-02-20 type:4
[PREFS]  -> For Initial_Time saved STRING item value:11:00:00 type:4
[PREFS]  -> For PID_Window saved UINT16 item value:5000 type:2
[PREFS]  -> For PID_Kp saved VFLOAT item value:20.000000 type:5
[PREFS]  -> For PID_Ki saved VFLOAT item value:0.200000 type:5
[PREFS]  -> For PID_Kd saved VFLOAT item value:0.100000 type:5
[PREFS]  -> For PID_Temp_Threshold saved INT16 item value:-1 type:3
[PREFS]  -> For LOG_Window saved UINT16 item value:30 type:2
[PREFS]  -> For LOG_Files_Limit saved UINT16 item value:40 type:2
[PREFS]  -> For DBG_Serial saved UINT8 item value:1 type:1
[PREFS]  -> For DBG_Syslog saved UINT8 item value:0 type:1
[PREFS]  -> For MIN_Temperature saved UINT8 item value:10 type:1
[PREFS]  -> For MAX_Temperature saved UINT16 item value:1350 type:2
[PREFS]  -> For MAX_Housing_Temperature saved UINT16 item value:130 type:2
[PREFS]  -> For Thermal_Runaway saved UINT16 item value:0 type:2
[PREFS]  -> For Alarm_Timeout saved UINT16 item value:5 type:2
[PREFS] -=-=-= PREFS DISPLAY =-=-=-[PREFS] 1) 'WiFi_SSID' = ''	4
[PREFS] 2) 'WiFi_Password' = ''	4
[PREFS] 3) 'WiFi_Mode' = '1'	1
[PREFS] 4) 'WiFi_Retry_cnt' = '9'	1
[PREFS] 8) 'HTTP_Local_JS' = '1'	1
[PREFS] 9) 'Auth_Username' = 'admin'	4
[PREFS] 10) 'Auth_Password' = 'hotashell'	4
[PREFS] 11) 'NTP_Server1' = '0.pl.pool.ntp.org'	4
[PREFS] 12) 'NTP_Server2' = '1.pl.pool.ntp.org'	4
[PREFS] 13) 'NTP_Server3' = '2.pl.pool.ntp.org'	4
[PREFS] 14) 'GMT_Offset_sec' = '3600'	3
[PREFS] 15) 'Daylight_Offset_sec' = '3600'	3
[PREFS] 16) 'Initial_Date' = '2020-02-20'	4
[PREFS] 17) 'Initial_Time' = '11:00:00'	4
[PREFS] 18) 'PID_Window' = '5000'	2
[PREFS] 22) 'PID_POE' = '0'	1
[PREFS] 23) 'PID_Temp_Threshold' = '-1'	3
[PREFS] 24) 'LOG_Window' = '30'	2
[PREFS] 25) 'LOG_Files_Limit' = '40'	2
[PREFS] 26) 'MIN_Temperature' = '10'	1
[PREFS] 27) 'MAX_Temperature' = '1350'	2
[PREFS] 28) 'MAX_Housing_Temperature' = '130'	2
[PREFS] 29) 'Thermal_Runaway' = '0'	2
[PREFS] 30) 'Alarm_Timeout' = '5'	2
[PREFS] 31) 'DBG_Serial' = '1'	1
[PREFS] 32) 'DBG_Syslog' = '0'	1
[PREFS] 33) 'DBG_Syslog_Srv' = ''	4
[PREFS] 34) 'DBG_Syslog_Port' = '0'	2
WiFi mode: 1, Retry count: 9, is wifi enabled: 4
[NET] Y:2020 [NET] M:02 [NET] D:20 [NET] H:11 [NET] m:00 [NET] s:00
[NET] Creating WiFi Access Point (AP)192.168.10.1
[PRG] Loading directory...
[PRG]	counted 6 files
Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x400013df  PS      : 0x00060830  A0      : 0x800da108  A1      : 0x3ffb1cb0  
A2      : 0x00000000  A3      : 0x3ffb1d56  A4      : 0x000000ff  A5      : 0x0000ff00  
A6      : 0x00ff0000  A7      : 0xff000000  A8      : 0x00000070  A9      : 0x00000069  
A10     : 0x00000000  A11     : 0x00000000  A12     : 0x3ffc2844  A13     : 0x2a357c1e  
A14     : 0x00000000  A15     : 0x00000008  SAR     : 0x00000008  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000000  LBEG    : 0x400014fd  LEND    : 0x4000150d  LCOUNT  : 0xfffffffa  

ELF file SHA256: 0000000000000000000000000000000000000000000000000000000000000000

Backtrace: 0x400013df:0x3ffb1cb0 0x400da105:0x3ffb1cc0 0x400da35c:0x3ffb1d90 0x400dac28:0x3ffb1f60 0x400ebbc6:0x3ffb1fb0 0x40090be1:0x3ffb1fd0

Rebooting...
ets Jun  8 2016 00:22:57

error decode:

PC: 0x4008a1e3
EXCVADDR: 0x00000001

Decoding stack results
0x400dbf29: Load_programs_dir() at /home/gdzhang/PIDKiln/PIDKiln_program.ino line 151
0x400dc202: Generate_INDEX() at /home/gdzhang/PIDKiln/PIDKiln_http.ino line 201
0x400dcfc8: setup() at /home/gdzhang/PIDKiln/PIDKiln.ino line 154
0x400f0aab: loopTask(void*) at /home/gdzhang/Arduino/hardware/espressif/esp32/cores/esp32/main.cpp line 35


Auto-tuning?

I have 2 of those cheap crappy PID controllers like this one https://www.auberins.com/index.php?main_page=product_info&products_id=4.

I've never bothered to try and tune my kilns manually, so I use their built in auto-tuning feature. It's not supposed to be very accurate, but it works find for my needs.

Have you considered maybe adding in the PID-auto-tuning library for Arduino? https://github.com/br3ttb/Arduino-PID-AutoTune-Library

I found one good example sketch of the auto-tuning library for a kiln here; https://www.megunolink.com/articles/malt-kiln/

Cannot compile: redefinition of 'class IPv6Address

Cannot compile

System: ESP-WROOM-32
Arduino on line IDE

Reinstalled new development with Arduino online coding.
Imported the sketch.
I get errors complaining "redefinition of 'class IPv6Address"

In file included from /home/builder/Arduino/libraries/ethersia_2_4_0/src/IPv6Packet.h:11,
from /home/builder/Arduino/libraries/ethersia_2_4_0/src/UDPSocket.h:10,
from /home/builder/Arduino/libraries/ethersia_2_4_0/src/Syslog.h:9,
from /tmp/437171178/PIDKiln/PIDKiln.h:2,
from /tmp/437171178/PIDKiln/PIDKiln.ino:35:
/home/builder/Arduino/libraries/ethersia_2_4_0/src/IPv6Address.h:27:7: error: redefinition of 'class IPv6Address'
class IPv6Address {

Door switch

Is it possible to add a door switch to the program? (when the door is open, the program pauses and turns off the SSR, when the door is closed, the program continues)

MAX31855 Linearization

According to datasheet, page 8, max31855 assumes a linear relationship between temperature and voltage, which is not accurate. For accurate results linearisztion needs to be performed. Otherwise there will be temperature error >10 degrees at real TC temperatures greater than 200 degrees.
Here is an example of arduino code for linearising max31855 data
https://github.com/heypete/MAX31855-Linearization

PID is not working as expected thus untunable

The implementation of the PID controller in the library used is completely strange, if not inadequate. I have never seen such a variation of the regulator, and I have not seen any method of tuning it.
https://github.com/br3ttb/Arduino-PID-Library/blob/9b4ca0e5b6d7bab9c6ac023e249d6af2446d99bb/PID_v1.cpp#L83
What the hell is this?
I read his blog, I am aware of the benefits described, including for PonM, but there are simply no methods of setting up such a regulator other than a stupid search for values. No conventional methods, such as the Ziegler-Nichols Method, just don't work here.
The author doesn't provide any tuning method on the blog or on the github.
I tried to synthesise PID values using Matlab PID tuner and they didn't worked, not even close.
First method from this video produced values somewhat close to matlab's ones, neither they worked.
It would be nice to add a disclaimer about this in the README or replace the library with another, that implements classic PID

Please consider porting to PlatformIO ( Can provide assistance)

Given there's a number of library dependencies that are required for this project to work, and it seems versioning is also relevant among those dependencies, I think it's a good idea to start working under a PlatformIO project where dependent libraries can have fully automated installation and management.

I'm happy to help with this if desired! I was about to create my own fork with extra features as well, but wanted to make sure I'm sticking to a platform you, as the original dev, are comfortable with.

overshoot and used power calculation

Hello and, firstly, congratulations and thanks for the work with this, it's really great!

I have a small issue with my controller only going to the next step after about a minute or so, which sometimes results in an overshoot (because for one minute beyond set time for next step it keeps the heating ramp going), such as in the picture (I changed the skin a bit...).

overshoot

As you can see, at around 17.04 hour mark it should have started a slower ramp, but instead it continued the rate of rise for another minute, going 20° over, then allowing to cool and continuing. Do you know why this might be? I haven't found it in the code... (even tho the actual temperature line appears above the set temperature line, the kiln never overshoots on ramps -- visually, it has to do with the tension of the chart lines, which I changed to 0 since; I'm sure because I was monitoring the temperatures live).

Thanks!

p.s. I have an ACS712 power meter, which is not really accurate and was more of a nuisance than a help so I removed it. But I still want to know, at least with some approximation, how much power I used, so I implemented a software power meter based on mains voltage and kiln power, as a backup to a power meter. Not perfectly accurate, but does the job better than a cheapo power meter.

If there is a power meter, then use it, else use software calculation:

  • added 2 more fields in the preferences where one can input their mains voltage and kiln power in watts
  • based on kiln power I calculate the coil resistance
  • based on coil resistance and mains voltage I can check how much amps it draws
  • based on amps, pid_out and sample time I can calculate energy consumption

p.p.s. You don't have q,Q,v and V in your allowed characters for accepted program filenames (PIDKiln.h:175)

Alternative LCD's

Since the bare 12864B LCD's are becoming very difficult to find these days (due to the proliferation of RAMPS-style versions) would it be possible for you to include some support for the RAMPS-pinned version?

Another possible display I was considering was the SSD1309 OLED displays, if those could be made to work

Cone Programs

@Saur0o0n I was wondering how your program ramps look in relation to a degrees per hour firing schedule?

Here's an example schedule from a Skutt electronic controller for a slow 04 bisque fire.

Segment 1: 80 degrees / hour to 250 degrees F
Segment 2: 250 degrees / hour to 1000 degrees F
Segment 3: 150 degrees / hour to 1300 degrees F
Segment 4: 180 degrees / hour to 1685 degrees F
Segment 5: 80 degrees / hour to 1928 degrees F

Would the following be correctly translated?

# Candle then slow bisque at 04

# Candle for 10 hours
83:15:585

# Segment 1: 80 degrees / hour to 250 degrees F
# Segment 1: 27 degrees / hour to 121 degrees C
# 60 / ((121 - 83) / 27)
110:42:0 #Starting at 83
121:18:0

# Segment 2: 250 degrees / hour to 1000 degrees F
# Segment 2: 121 degrees / hour to 538 degrees C
# 60 / ((538 - 121) / 121)
242:17:0 #Starting at 121
363:17:0
484:17:0
538:9:0

# Segment 3: 150 degrees / hour to 1300 degrees F
# Segment 3: 66 degrees / hour to 705 degrees C
# 60 / ((705 - 538) / 66)
604:23:0 #Starting at 538
670:23:0
705:14:0

# Segment 4: 180 degrees / hour to 1685 degrees F
# Segment 4: 83 degrees / hour to 919 degrees C
# 60 / ((919 - 705) / 83)
788:23:0 #Starting at 705
871:23:0
919:14:0

# Segment 5: 80 degrees / hour to 1928 degrees F
# Segment 5: 27 degrees / hour to 1054 degrees C
# 60 / ((1054 - 919) / 27)
946:12:0 #Starting at 919
973:12:0
1000:12:0
1027:12:0
1054:12:15 # Soak for 15 min

Problems with temperatures above 1100 degC

My Kiln controller works very well up to 1100 degC. But even with the Grace counter sat to 100, the program still aborts above 1100.
By looking at the Syslog, this is because the counter increases more than it decreases, and eventually reaches 100.
The temperature measurements continue to be valid though, even if there are more fails than good readings.
I therefore suggest that the Grace Counter is replaced by a Grace Timer.
That is: The program only aborts if no valid readings are obtained in a Grace Period of x minutes.
Hope this makes sense and thanks for the good work.
Kind regards
Jens

Problem with compiling

When trying to compile and upload the main files I get this error:
I installed all Required software. I'm very much a newbie so all help is appreciated.

Arduino: 1.8.13 (Windows 10), Board: "ESP32 Wrover Module, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), QIO, 80MHz, 921600, None"

C:\Users\filip\Downloads\PIDKiln-1.3\PIDKiln\PIDKiln_http.ino: In function 'String Chart_parser(const String&)':

PIDKiln_http:337:32: error: 'class fs::File' has no member named 'path'

 if(CSVFile) return CSVFile.path();

                            ^

C:\Users\filip\Downloads\PIDKiln-1.3\PIDKiln\PIDKiln_http.ino: In function 'void GET_Handle_Delete(AsyncWebServerRequest*)':

PIDKiln_http:508:78: error: 'class fs::File' has no member named 'path'

DBG dbgLog(LOG_DEBUG,"[HTTP] Opened file is %s, program name is:%s\n",tmpf.path(),p->value().c_str());

                                                                          ^

C:\Users\filip\Downloads\PIDKiln-1.3\PIDKiln\PIDKiln_http.ino: In function 'String handleVars(const String&)':

PIDKiln_http:649:32: error: 'class fs::File' has no member named 'path'

 if(CSVFile) return CSVFile.path();

                            ^

Multiple libraries were found for "PID_v1.h"

Used: C:\Users\filip\Documents\Arduino\libraries\Arduino-PID-Library-master

Not used: C:\Users\filip\Documents\Arduino\libraries\PID

Multiple libraries were found for "WiFi.h"

Used: C:\Users\filip\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\WiFi

Not used: C:\Program Files (x86)\Arduino\libraries\WiFi

exit status 1

'class fs::File' has no member named 'path'

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
`

NTP

If I set the GMT_OFFSET time to -25200 it does not produce the correct time. I believe this may be an int16 overflow.

Are there still issues with filesystem? Chart not showing

Hi,

I'm just searching for a kiln control and came along, looks very great, thanks a lot for that!
Unfortunately I can't get it running properly.
I tried with WROM and Wrover Board but with both I get a similar failure like #11
Config for the PSRAM was done properly, I can also upload own txt files as profiles, they show up in the list (via webfrontend as well as via Sketch uploader in Arduino IDE)

So main view is empty, when I click on a profile to load it it's like nothing happens.
grafik

Also the Debug output looks very weird:
grafik

Same for preferences:
grafik

Arduino IDE I'm using is 1.8.19
esp32 I tried a lot, 2.0.8 | 2.0.1 | 1.0.4 and so on...
grafik

Any suggestions what to try?

Guru Meditation Error: Core 1 panic'ed (StoreProhibited)

Hello, thanks for the great work, I love yout project for its light weigth and use of the great ESP32, coming from a PID based on PicoReflow, running on the hard to find Rpis I can really appreciate our cheap light Esps.

I ran into a problem though and can't wrap my head around it. As the title suggests, execution halts with this error at the moment on loading a program, either from the SPIFFS or from the web interface.

192.168.1.110
[PRG] Loading directory...
[PRG] counted 2 files
[PRG] Processing filename: index.html
[PRG] Processing filename: program1.txt
Guru Meditation Error: Core 1 panic'ed (StoreProhibited). Exception was unhandled.

Core 1 register dump:
PC : 0x4008a6f2 PS : 0x00060130 A0 : 0x800da3b5 A1 : 0x3ffb2620
A2 : 0x00000000 A3 : 0x3ffb2690 A4 : 0x000000ff A5 : 0x0000ff00
A6 : 0x00ff0000 A7 : 0xff000000 A8 : 0x676f7270 A9 : 0x00000069
A10 : 0x00000000 A11 : 0x3ffd6bbc A12 : 0x3f401dfd A13 : 0x3ffb2610
A14 : 0x3ffb25e0 A15 : 0x00000008 SAR : 0x0000001e EXCCAUSE: 0x0000001d
EXCVADDR: 0x00000000 LBEG : 0x4008a6e5 LEND : 0x4008a6f9 LCOUNT : 0xffffffff

Backtrace:0x4008a6ef:0x3ffb26200x400da3b2:0x3ffb2630 0x400da560:0x3ffb26d0 0x400dad84:0x3ffb27b0 0x400eb7e2:0x3ffb2820

I traced this back with the exception decoder:

PC: 0x4008a6f2
EXCVADDR: 0x00000000

PC: 0x4008a6f2
EXCVADDR: 0x00000000

Decoding stack results
0x400da3b2: Load_programs_dir() at D:\1.PROG\PIDKiln/PIDKiln_program.ino line 157
0x400da560: Generate_INDEX() at D:\1.PROG\PIDKiln/PIDKiln_http.ino line 204
0x400dad84: setup() at D:\1.PROG\PIDKiln/PIDKiln.ino line 166
0x400eb7e2: loopTask(void*) at C:\Users\alexl\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.4\cores\esp32\main.cpp line 42

The culprit seems to be

0x400da3b2: Load_programs_dir() at D:\1.PROG\PIDKiln/PIDKiln_program.ino line 157
which is this line:

strcpy(Programs_DIR[Programs_DIR_size].filename,tmp);

But that's where my knowledge ends.
Any ideas to make this work?

Compilation error with v1.3

When trying to upgrade my system to v1.3 I get the following error: undefined reference to `mbedtls_md5_starts'
I am using ESP32 framework 2.0.0 but also 2.0.4 gives the same error. I am using a Wrover Module.
Any suggestionens ?

LCD and SSR questions

Thanks for putting this nice project up on github!

Question: as I understand the maximum gate current on an IO pin on the ESP32 is 12mA. Is that enough to drive the SSR? In my case I have two heating elements in my kiln and will have to drive them from separate pins because I don't think the ESP can source enough current to drive both from one pin.

Changing PIN for MAX31855

Hi,

I can not use PIN14 anymore because it is broken on my test WROVER.
I checked but it seems the used pins are hardcoded in the MAX31855 library, correct?

Is there a possibility to change it or maybe better question: where can ich change it, couldn't find it.

P.S.: tried wit Adafruit and the MAX Example, using
// Example creating a thermocouple instance with software SPI on any three
// digital IO pins.
#define MAXDO 12
#define MAXCS 27
#define MAXCLK 13

worked so I would like to change it in PIDKiln

Thanks

Temperature readings are far out and unstable

Hi Adrian

I have contacted you about this by email and as you suggested I now open an issue here.

To show you what I meant with the readings being unstable I took a short video from the main view on the lcd. This unstableness does also show in the web view. The case temperature was stable this time but the inside and ambient temps were not. I'm not sure if the case temp was also unstable last time or not. The kiln was cold at the time so the values of all readings are far out.

Furthermore I attached two logs, one of a program of yours and one of a program of mine. Please tell me what further info I can provide.

Kind regards
Martin

221231_123252.log
221231_123745.log

IMG_4819_2.mov

Adding programs

Hi, I can't find a way to either edit or create a new program in either the LCD ui or the web UI.
Am I missing something or the only way to do this is to edit on a different system and upload?
Thanks!

Error log id values

Where can I find the values for the error log? I have a program that aborted twice around the same spot and I can't seem to figure out why. The kiln wasn't moved or touched in both cases.

Program name: 1.txt
Program desc: Slow bisque at 04
Started at: 2020-07-14 05:05:22
Possible end at: 2020-07-14 10:25:22
PID values. Kp:20.00 Ki:0.20 Kd:0.10
Start temperature: 41.8C
CSV filename: 2020-07-14 10:25:22
-=-=-= Starting program =-=-=-=-
Program ended at: 2020-07-14 08:09:20
End temperature: 690.7C
Used power: 1.8 W/h
Program aborted with error: 5
Program name: 1.txt
Program desc: Slow bisque at 04
Started at: 2020-07-15 03:52:53
Possible end at: 2020-07-15 09:12:53
PID values. Kp:20.00 Ki:0.20 Kd:0.10
Start temperature: 68.5C
CSV filename: 2020-07-15 09:12:53
-=-=-= Starting program =-=-=-=-
Program ended at: 2020-07-15 06:24:43
End temperature: 601.6C
Used power: 1.8 W/h
Program aborted with error: 5

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.