Собственно не понимаю почему происходит ошибка.
C 12ю датчиками работает стабильно, при инициализации 13го датчика (раскоментировании 55 строки), всегда на восьмом цикле (опросе датчиков) вылетает с дисплея показания temp_0 и происходит перезагрузка.
Примерно в 1 случае из 10 зависает экран и перестаёт реагировать на reset, но измерения продолжают поступать в консоль на serial, уже не приводя к перезагрузкам.
Если передёрнуть питание экрана, то reset срабатывает.
C 12ю датчиками работает стабильно, при инициализации 13го датчика (раскоментировании 55 строки), всегда на восьмом цикле (опросе датчиков) вылетает с дисплея показания temp_0 и происходит перезагрузка.
Примерно в 1 случае из 10 зависает экран и перестаёт реагировать на reset, но измерения продолжают поступать в консоль на serial, уже не приводя к перезагрузкам.
Если передёрнуть питание экрана, то reset срабатывает.
ESP-8266-12E:
/* Групповой тест датчиков Dallas */
// D1 (gpio5) - SCL
// D2 (gpio4) - SDA
// D3 (gpio0) - flash
#include <LiquidCrystal_I2C.h>
#include <SimpleTimer.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 0 // DS18B20 подключаем к GPIO0 (D3)
#define BLYNK_PRINT Serial
float temp_0,temp_1,temp_2,temp_3,temp_4,temp_5,temp_6,temp_7,temp_8,temp_9,temp_10,temp_11,temp_12,sum;
float avr;
byte grad[8] = {B01110,B01010,B01110,B00000,B00000,B00000,B00000,}; //символ °
SimpleTimer timer;
LiquidCrystal_I2C lcd(0x27,20,4); //начало работы, с указанием размерности экрана
OneWire oneWire(ONE_WIRE_BUS); // Настраиваем oneWire для связи
DallasTemperature DS18B20(&oneWire); // Передаем нашу ссылку oneWire в Dallas Temperature.
void setup() {
Serial.begin(115200); // запускаем последовательный порт
DS18B20.begin(); // Запускаем библиотеку (инициализация датчика)
timer.setInterval(1000L, getData);
timer.setInterval(10000L, avrData);
Serial.println(" ");
Serial.println("Тестирование датчиков температуры");
lcd.begin(20, 4); // Начало работы, с указанием размерности экрана
lcd.init();
lcd.backlight();
lcd.createChar(0, grad); // Инициализируем массив
lcd.setCursor(2,0);
lcd.print("Testing Dallas!");
delay(1000);
}
void loop() {
timer.run(); // Initiates SimpleTimer
}
void getData()
{
DS18B20.requestTemperatures(); // Cчитываем температуру с датчиков ~160ms на датчик
temp_0 = DS18B20.getTempCByIndex(0);
temp_1 = DS18B20.getTempCByIndex(1);
temp_2 = DS18B20.getTempCByIndex(2);
temp_3 = DS18B20.getTempCByIndex(3);
temp_4 = DS18B20.getTempCByIndex(4);
temp_5 = DS18B20.getTempCByIndex(5);
temp_6 = DS18B20.getTempCByIndex(6);
temp_7 = DS18B20.getTempCByIndex(7);
temp_8 = DS18B20.getTempCByIndex(8);
temp_9 = DS18B20.getTempCByIndex(9);
temp_10 = DS18B20.getTempCByIndex(10);
temp_11 = DS18B20.getTempCByIndex(11);
// temp_12 = DS18B20.getTempCByIndex(12);
Serial.print("t0: ");
Serial.print(temp_0);
Serial.print("°C t1: ");
Serial.print(temp_1);
Serial.print("°C t2: ");
Serial.print(temp_2);
Serial.print("°C t3: ");
Serial.print(temp_3);
Serial.print("°C t4: ");
Serial.print(temp_4);
Serial.print("°C t5: ");
Serial.print(temp_5);
Serial.print("°C t6: ");
Serial.print(temp_6);
Serial.print("°C t7: ");
Serial.print(temp_7);
Serial.print("°C t8: ");
Serial.print(temp_8);
Serial.print("°C t9: ");
Serial.print(temp_9);
Serial.print("°C t10: ");
Serial.print(temp_10);
Serial.print("°C t11: ");
Serial.print(temp_11);
Serial.print("°C t12: ");
Serial.print(temp_12);
Serial.println("°C");
lcd.setCursor(0,0);
lcd.print(" "); //20 пробелов, очистка строки
lcd.setCursor(0,0);
lcd.print(temp_0);
lcd.write(byte(0)); // выводим надстр. символ °
lcd.print(",");
lcd.print(temp_1);
lcd.write(byte(0));
lcd.print(",");
lcd.print(temp_2);
lcd.write(byte(0));
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(temp_3);
lcd.write(byte(0));
lcd.print(",");
lcd.print(temp_4);
lcd.write(byte(0));
lcd.print(",");
lcd.print(temp_5);
lcd.write(byte(0));
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print(temp_6);
lcd.write(byte(0));
lcd.print(",");
lcd.print(temp_7);
lcd.write(byte(0));
lcd.print(",");
lcd.print(temp_8);
lcd.write(byte(0));
lcd.setCursor(0,3);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(temp_9);
lcd.write(byte(0));
}
void avrData() // измерение среднего значения
{
sum = 0;
sum += temp_0;
sum += temp_1;
sum += temp_2;
sum += temp_3;
sum += temp_4;
sum += temp_5;
sum += temp_6;
sum += temp_7;
sum += temp_8;
sum += temp_9;
// sum += temp_10;
// sum += temp_11;
// sum += temp_12;
avr = sum / 10;
lcd.setCursor(9,3);
lcd.print(" ");
lcd.setCursor(9,3);
lcd.print("avr:");
lcd.print(avr);
lcd.write(byte(0));
}
Ошибка:
Тестирование датчиков температуры
t0: 23.25°C t1: 23.00°C t2: 23.06°C t3: 22.88°C t4: 22.56°C t5: 23.25°C t6: 22.50°C t7: 23.00°C t8: 22.81°C t9: 22.88°C t10: 23.00°C t11: 22.81°C t12: 22.63°C
t0: 23.25°C t1: 23.00°C t2: 23.00°C t3: 22.88°C t4: 22.56°C t5: 23.31°C t6: 22.50°C t7: 23.00°C t8: 22.88°C t9: 22.88°C t10: 23.00°C t11: 22.88°C t12: 22.63°C
t0: 23.25°C t1: 23.00°C t2: 23.00°C t3: 22.88°C t4: 22.56°C t5: 23.25°C t6: 22.50°C t7: 22.94°C t8: 22.81°C t9: 22.88°C t10: 23.00°C t11: 22.88°C t12: 22.56°C
t0: 23.25°C t1: 23.00°C t2: 23.06°C t3: 22.88°C t4: 22.56°C t5: 23.31°C t6: 22.50°C t7: 23.00°C t8: 22.81°C t9: 22.88°C t10: 23.00°C t11: 22.81°C t12: 22.56°C
t0: 23.25°C t1: 22.94°C t2: 23.00°C t3: 22.88°C t4: 22.56°C t5: 23.25°C t6: 22.50°C t7: 22.94°C t8: 22.88°C t9: 22.88°C t10: 23.00°C t11: 22.88°C t12: 22.56°C
t0: 23.25°C t1: 22.94°C t2: 23.00°C t3: 22.88°C t4: 22.56°C t5: 23.25°C t6: 22.50°C t7: 23.00°C t8: 22.88°C t9: 22.88°C t10: 23.00°C t11: 22.88°C t12: 22.63°C
t0: 23.25°C t1: 22.94°C t2: 23.06°C t3: 22.88°C t4: 22.56°C t5: 23.31°C t6: 22.50°C t7: 22.94°C t8: 22.81°C t9: 22.88°C t10: 23.00°C t11: 22.81°C t12: 22.56°C
t0: 23.25°C t1: 22.94°C t2: 23.06°C t3: 22.88°C t4: 22.56°C t5: 23.25°C t6: 22.50°C t7: 22.94°C t8: 22.88°C t9: 22.88°C t10: 23.00°C t11: 22.81°C t12: 22.56°C
--------------- CUT HERE FOR EXCEPTION DECODER ---------------
Soft WDT reset
[QUOTE]>>stack>>>[/QUOTE]
ctx: cont
sp: 3ffffcc0 end: 3fffffc0 offset: 01a0
3ffffe60: 3ffee754 00000001 3ffee754 402038e0
3ffffe70: 00000001 00000180 00000002 402039a4
3ffffe80: 00000001 00000004 3ffee754 40203a46
3ffffe90: 3ffee58b 00000027 3ffee754 3ffe8701
3ffffea0: 00000001 3ffee42c 3ffee589 3ffe8702
3ffffeb0: 00000021 3ffee42c 3ffee589 40203c10
3ffffec0: 00000009 3ffee42c 3ffee578 40201be0
3ffffed0: 40100429 00000001 3ffee578 40201c08
3ffffee0: 00000001 3ffee42c 00000001 402016ed
3ffffef0: 00000001 3ffee42c 00000021 40201771
3fffff00: 00000000 00000200 3ffee42c 402017a7
3fffff10: 3ffe870e 3ffee42c 00000007 402017cf
3fffff20: 00000001 00000940 3ffee42c 4020549e
3fffff30: 3ffe86fa 3ffe870f 3ffee42c 3ffee570
3fffff40: 4020546c 3ffee42c 3ffe86fa 40202949
3fffff50: 3ffe86fa 3ffe870f 3ffee42c 40202960
3fffff60: 007a1200 3ffee574 3ffee6ac 402014ec
3fffff70: 00000000 3ffee81c 000003e8 3ffee714
3fffff80: 3ffee43c 00000000 3ffee43c 40201d5a
3fffff90: 3fffdad0 00000000 3ffee6d4 402010e0
3fffffa0: feefeffe 00000000 3ffee6d4 4020301c
3fffffb0: feefeffe feefeffe 3ffe84f0 40100e75
<<<stack<<<
--------------- CUT HERE FOR EXCEPTION DECODER ---------------
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x4010f000, len 3584, room 16
tail 0
chksum 0xb0
csum 0xb0
v2843a5ac
~ld
Тестирование датчиков температуры
t0: 23.25°C t1: 23.00°C t2: 23.00°C t3: 22.94°C t4: 22.63°C t5: 23.25°C t6: 22.44°C t7: 22.94°C t8: 22.81°C t9: 22.88°C t10: 23.00°C t11: 22.88°C t12: 22.56°C
t0: 23.25°C t1: 23.00°C t2: 23.00°C t3: 22.88°C t4: 22.56°C t5: 23.25°C t6: 22.50°C t7: 22.94°C t8: 22.88°C t9: 22.88°C t10: 23.00°C t11: 22.88°C t12: 22.63°C
Изменено: