Проблема следующего характера есть плата с кристалом 2560. ESP работает как шилд. По таймерах отправляются данные в приложение два таймера 10сек и 30 сек. И включен дебаг блинка. так самое интересное отваливается типа устроиство на ровном месте всегда по разному. может проработать 30 мин может 5. В дебаге ничего. вот последнее что он пишет:
77440] <[06|00|1B|00|00]
[77544] >[00|00|1B|00|C8]
[81615] <[14|00|1C|00|0B]vw[00]7[00]28.600
[81895] <[14|00|1D|00|0B]vw[00]8[00]28.900
[82062] <[14|00|1E|00|0B]vw[00]9[00]28.400
[82226] <[14|00|1F|00|0C]vw[00]10[00]28.700
[82390] <[14|00] [00|0B]vw[00]15[00]0.000
[82553] <[14|00]![00|0C]vw[00]11[00]43.000
[82716] <[14|00]"[00|0C]vw[00]12[00]36.000
[82877] <[14|00]#[00|0C]vw[00]13[00]38.000
[83041] <[14|00]$[00|0C]vw[00]14[00]38.000
[83204] <[14|00]%[00|0B]vw[00]16[00]0.000
[87547] <[06|00]&[00|00]
[87652] >[00|00]&[00|C8]
Ничего понять не могу( контакты обвязка вся отличная ибо другие проекты работали на ура. да и плата заказная с китая т.е. все запаяно отлично. Крч наведите на мысль плиз. Вот весь скетч на всякий случай:
#define BLYNK_DEBUG
#define BLYNK_PRINT Serial3
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <SimpleModbusMaster.h>
#include <DS3231.h>
char auth[] = "74e5a58e5c744d0fa0407a647f022bc9";
char ssid[] = "ihome";
char pass[] = "2006vmk2";
#define EspSerial Serial2
#define ESP8266_BAUD 115200
ESP8266 wifi(&EspSerial);
DS3231 rtc(SDA, SCL);
Time t;
#define baud 9600
#define timeout 1000
#define polling 200
#define retry_count 10
#define TxEnablePin 4
#define TOTAL_NO_OF_REGISTERS 100
enum {
PACKET1,
PACKET2,
PACKET3,
PACKET4,
TOTAL_NO_OF_PACKETS};
Packet packets[TOTAL_NO_OF_PACKETS];
unsigned int regs[TOTAL_NO_OF_REGISTERS];
const uint64_t pipe = 0xF0F1F2F3F4LL;
RF24 radio(8, 9); // CE, CSN
//----------------------------------------------ПЕРЕМЕННЫЕ СИСТЕМЫ (НЕ ИЗМЕНЯТЬ!!!!!!!!!!)-------------------------------
int Protocol[5];
int OUTPORT_1=A0;
int OUTPORT_2=A1;
int OUTPORT_3=A2;
int OUTPORT_4=A3;
int OUTPORT_5=A4;
int OUTPORT_6=A5;
int OUTPORT_7=A6;
int OUTPORT_8=A7;
int OUTPORT_9=A8;
int INTPORT_1=41;
int INTPORT_2=40;
int INTPORT_3=37;
int INTPORT_4=36;
int INTPORT_5=35;
int INTPORT_6=34;
int INTPORT_7=33;
int INTPORT_8=32;
int INTPORT_9=31;
int AINTPORT_1=A9;
int AINTPORT_2=A10;
int AINTPORT_3=A11;
int AINTPORT_4=A12;
int AINTPORT_5=A13;
int RELAY_1=A14;
int RELAY_2=26;
int IND_ST_CP=45;
int IND_SH_CP=46;
int IND_DS=44;
byte IND1=B00000000;
byte IND2=B00000000;
byte IND3=B00000000;
int BUZ=2;
int LOAD=29;
//----------------------------------------------ПЕРЕМЕННЫЕ ПОЛЬЗОВАТЕЛЯ----------------------------------------------------
int PIR_1=0;
int PIR_2=0;
int PIR_3=0;
int PIR_4=0;
int PIR_5=0;
int PIR_6=0;
int PIR_7=0;
int OUT_1=0;
int OUT_2=0;
int OUT_3=0;
int OUT_4=0;
int OUT_5=0;
int OUT_6=0;
int OUT_7=0;
int OUT_8=0;
int OUT_9=0;
int IN_1=0;
int IN_2=0;
int IN_3=0;
int IN_4=0;
int IN_5=0;
int IN_6=0;
int IN_7=0;
int IN_8=0;
int IN_9=0;
int Rel_1=0;
int Rel_2=0;
float TEMP_1=0;
float TEMP_2=0;
float TEMP_3=0;
float TEMP_4=0;
float TEMP_5=0;
float TEMP_S=0;
float HUM_1=0;
float HUM_2=0;
float HUM_3=0;
float HUM_4=0;
float BAR_1=0;
int MODE_1=0;
int MODE_2=0;
int MODE_3=0;
int MODE_4=0;
float WATER_COLD=0;
float WATER_HOT=0;
float POWER=0;
int Flag1=0;
int Hour=0;
int Min=0;
float KWT=0;
float WaterH=0;
float WaterC=0;
int Alarm=0;
WidgetLED led1(V29);
WidgetLED led2(V30);
WidgetLED led3(V31);
WidgetLED led4(V32);
BlynkTimer timer;
BLYNK_WRITE(V0){OUT_1=param.asInt();} //Получение статуса света 1
BLYNK_WRITE(V1){OUT_2=param.asInt();} //Получение статуса света 2
BLYNK_WRITE(V2){OUT_3=param.asInt();} //Получение статуса света 3
BLYNK_WRITE(V3){OUT_4=param.asInt();} //Получение статуса света 4
BLYNK_WRITE(V4){OUT_5=param.asInt();} //Получение статуса света 5
BLYNK_WRITE(V5){OUT_6=param.asInt();} //Получение статуса света 6
BLYNK_WRITE(V18){Rel_1=param.asInt();} //Получение статуса Сирены
BLYNK_WRITE(V24){Rel_2=param.asInt();} //Получение статуса Сирены
void TimerTemp(){
Blynk.virtualWrite(V7, TEMP_1); //Вывод температуры 1
Blynk.virtualWrite(V8, TEMP_2); //Вывод температуры 2
Blynk.virtualWrite(V9, TEMP_3); //Вывод температуры 3
Blynk.virtualWrite(V10, TEMP_4); //Вывод температуры 4
Blynk.virtualWrite(V15, TEMP_5);} //Вывод температуры 5
void TimerHum(){
Blynk.virtualWrite(V11, HUM_1); //Вывод влажности 1
Blynk.virtualWrite(V12, HUM_2); //Вывод влажности 2
Blynk.virtualWrite(V13, HUM_3); //Вывод влажности 3
Blynk.virtualWrite(V14, HUM_4); //Вывод влажности 4
Blynk.virtualWrite(V16, BAR_1);} //Вывод давления 1
void blinkLedWidget(){
if (regs[2]==1) {led1.on();} else {led1.off();} //Статус батарейки 1
if (regs[5]==1) {led2.on();} else {led2.off();} //Статус батарейки 2
if (regs[8]==1) {led3.on();} else {led3.off();} //Статус батарейки 3
if (regs[11]==1) {led4.on();} else {led4.off();}} //Статус батарейки 4
void TimerWE(){
Blynk.virtualWrite(V26, KWT); //Вывод килловатт
Blynk.virtualWrite(V27, WaterH); //Вывод г.воды
Blynk.virtualWrite(V28, WaterC);} //Вывод х.воды
//void TempDS(){
//Blynk.virtualWrite(V17, TEMP_S); //Вывод температуры контроллера
//DSTEMP();}
//void TimeDS(){
//Blynk.virtualWrite(V35, Hour); //Вывод часа
//Blynk.virtualWrite(V36, Min); //Вывод минут
//DSTIME();}
//----------------------------------------------НАСТРОЙКА ПРИ ЗАПУСКЕ----------------------------------------------------
void setup() {
rtc.begin();
//rtc.setDOW(SUNDAY);
//rtc.setTime(16, 02, 0);
//rtc.setDate(24, 6, 2018);
Serial3.begin(9600);
EspSerial.begin(ESP8266_BAUD);
Blynk.begin(auth, wifi, ssid, pass);
pinMode(OUTPORT_1, OUTPUT);
pinMode(OUTPORT_2, OUTPUT);
pinMode(OUTPORT_3, OUTPUT);
pinMode(OUTPORT_4, OUTPUT);
pinMode(OUTPORT_5, OUTPUT);
pinMode(OUTPORT_6, OUTPUT);
pinMode(OUTPORT_7, OUTPUT);
pinMode(OUTPORT_8, OUTPUT);
pinMode(OUTPORT_9, OUTPUT);
pinMode(RELAY_2, OUTPUT);
pinMode(INTPORT_1, INPUT_PULLUP);
pinMode(INTPORT_2, INPUT_PULLUP);
pinMode(INTPORT_3, INPUT_PULLUP);
pinMode(INTPORT_4, INPUT_PULLUP);
pinMode(INTPORT_5, INPUT_PULLUP);
pinMode(INTPORT_6, INPUT_PULLUP);
pinMode(INTPORT_7, INPUT_PULLUP);
pinMode(INTPORT_8, INPUT_PULLUP);
pinMode(INTPORT_9, INPUT_PULLUP);
pinMode(IND_ST_CP, OUTPUT);
pinMode(IND_SH_CP, OUTPUT);
pinMode(IND_DS, OUTPUT);
modbus_construct(&packets[PACKET1], 3, READ_HOLDING_REGISTERS, 0, 12, 0);
modbus_construct(&packets[PACKET2], 2, READ_HOLDING_REGISTERS, 0, 7, 12);
modbus_construct(&packets[PACKET3], 4, READ_HOLDING_REGISTERS, 0, 3, 19);//PRESET_MULTIPLE_REGISTERS
modbus_configure(&Serial, baud, SERIAL_8N2, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS, regs);
timer.setInterval(15000L, TimerTemp);
timer.setInterval(30000L, TimerHum);
//timer.setInterval(5000L, TimeDS);
//timer.setInterval(10000L, TempDS);
radio.begin();
delay(200);
radio.setChannel(100); // канал (0-127)
radio.setDataRate(RF24_1MBPS);
radio.setPALevel(RF24_PA_HIGH);
radio.openReadingPipe(1,pipe);
radio.startListening();
}
//---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------
//----------------------------------------------ОСНОВНОЙ ЦИКЛ----------------------------------------------------
//---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------
void loop() {
Blynk.run();
timer.run();
digitalWrite(LOAD,HIGH);
modbus_update();
if (radio.available()){ radio.read(&Protocol, sizeof(Protocol));
if (Protocol[0]==556){TEMP_5=Protocol[1]; BAR_1=Protocol[2]; TEMP_5=TEMP_5/10; BAR_1=BAR_1/10;} //Данные с в.датчика температуры
if (Protocol[0]==333){KWT=Protocol[1];} //Данные с в.датчика эл.энергии
if (Protocol[0]==444){WaterH=Protocol[1]; WaterC=Protocol[2];}} //Данные с в.датчика воды
TEMP_1=regs[0];
TEMP_2=regs[3];
TEMP_3=regs[6];
TEMP_4=regs[9];
TEMP_1=TEMP_1/10;
TEMP_2=TEMP_2/10;
TEMP_3=TEMP_3/10;
TEMP_4=TEMP_4/10;
HUM_1=regs[1];
HUM_2=regs[4];
HUM_3=regs[7];
HUM_4=regs[10];
PIR_1=regs[12];
PIR_2=regs[13];
PIR_3=regs[14];
PIR_4=regs[15];
PIR_5=regs[16];
PIR_6=regs[17];
PIR_7=regs[18];
if (digitalRead(INTPORT_1)==0) {IN_1=1;} else {IN_1=0;}
if (digitalRead(INTPORT_2)==0) {IN_2=1;} else {IN_2=0;}
if (digitalRead(INTPORT_3)==0) {IN_3=1;} else {IN_3=0;}
if (digitalRead(INTPORT_4)==0) {IN_4=1;} else {IN_4=0;}
if (digitalRead(INTPORT_5)==0) {IN_5=1;} else {IN_5=0;}
if (digitalRead(INTPORT_6)==0) {IN_6=1;} else {IN_6=0;}
if (digitalRead(INTPORT_7)==0) {IN_7=1;} else {IN_7=0;}
if (digitalRead(INTPORT_8)==0) {IN_8=1;} else {IN_8=0;}
if (digitalRead(INTPORT_9)==0) {IN_9=1;} else {IN_9=0;}
//if (OUT_1==1) {analogWrite(OUTPORT_1,255);} else {analogWrite(OUTPORT_1,0);}
//if (OUT_2==1) {analogWrite(OUTPORT_2,255);} else {analogWrite(OUTPORT_2,0);}
//if (OUT_3==1) {analogWrite(OUTPORT_3,255);} else {analogWrite(OUTPORT_3,0);}
//if (OUT_4==1) {analogWrite(OUTPORT_4,255);} else {analogWrite(OUTPORT_4,0);}
//if (OUT_5==1) {analogWrite(OUTPORT_5,255);} else {analogWrite(OUTPORT_5,0);}
//if (OUT_6==1) {analogWrite(OUTPORT_6,255);} else {analogWrite(OUTPORT_6,0);}
//if (OUT_7==1) {analogWrite(OUTPORT_7,255);} else {analogWrite(OUTPORT_7,0);}
//if (OUT_8==1) {analogWrite(OUTPORT_8,255);} else {analogWrite(OUTPORT_8,0);}
//if (OUT_9==1) {analogWrite(OUTPORT_9,255);} else {analogWrite(OUTPORT_9,0);}
if (Rel_1==1) {analogWrite(RELAY_1,255);} else {analogWrite(RELAY_1,0);}
if (Rel_2==1) {digitalWrite(RELAY_2,HIGH);} else {digitalWrite(RELAY_2,LOW);}
//Вкл/откл света-------------------------------------------------------------------------------------------------------------------------------
if (OUT_1==1) {OnOffLivolo(OUTPORT_1);}
if (OUT_2==1) {OnOffLivolo(OUTPORT_2);}
if (OUT_3==1) {OnOffLivolo(OUTPORT_3);}
if (OUT_4==1) {OnOffLivolo(OUTPORT_4);}
if (OUT_5==1) {OnOffLivolo(OUTPORT_5);}
if (OUT_6==1) {OnOffLivolo(OUTPORT_6);}
if (OUT_7==1) {OnOffLivolo(OUTPORT_7);}
IND_UPDATE();
digitalWrite(LOAD,LOW);
}
//---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------
//Функция включение/отключения света------------------------------------------------------------------------------------------------------------
void OnOffLivolo (int Butt){
analogWrite(Butt,255);
delay(100);
analogWrite(Butt,0);}
//-----------------------------------------ВЫВОД ИНДИКАЦИИ-------------------------------------------------------
void IND_UPDATE(){
//Выходные порты
if (OUT_1==1){IND3 |= (1 << 3);} else {IND3 &= ~(1 << 3);}
if (OUT_2==1){IND3 |= (1 << 1);} else {IND3 &= ~(1 << 1);}
if (OUT_3==1){IND2 |= (1 << 7);} else {IND2 &= ~(1 << 7);}
if (OUT_4==1){IND2 |= (1 << 5);} else {IND2 &= ~(1 << 5);}
if (OUT_5==1){IND2 |= (1 << 3);} else {IND2 &= ~(1 << 3);}
if (OUT_6==1){IND2 |= (1 << 1);} else {IND2 &= ~(1 << 1);}
if (OUT_7==1){IND1 |= (1 << 7);} else {IND1 &= ~(1 << 7);}
if (OUT_8==1){IND1 |= (1 << 5);} else {IND1 &= ~(1 << 5);}
if (OUT_9==1){IND1 |= (1 << 3);} else {IND1 &= ~(1 << 3);}
//Входные порты
if (IN_1==1) {IND3 |= (1 << 2);} else {IND3 &= ~(1 << 2);}
if (IN_2==1) {IND3 |= (1 << 0);} else {IND3 &= ~(1 << 0);}
if (IN_3==1) {IND2 |= (1 << 6);} else {IND2 &= ~(1 << 6);}
if (IN_4==1) {IND2 |= (1 << 4);} else {IND2 &= ~(1 << 4);}
if (IN_5==1) {IND2 |= (1 << 2);} else {IND2 &= ~(1 << 2);}
if (IN_6==1) {IND2 |= (1 << 0);} else {IND2 &= ~(1 << 0);}
if (IN_7==1) {IND1 |= (1 << 6);} else {IND1 &= ~(1 << 6);}
if (IN_8==1) {IND1 |= (1 << 4);} else {IND1 &= ~(1 << 4);}
if (IN_9==1) {IND1 |= (1 << 2);} else {IND1 &= ~(1 << 2);}
//Статус реле
if (Rel_1==1){IND1 |= (1 << 1);} else {IND1 &= ~(1 << 1);}
if (Rel_2==1){IND1 |= (1 << 0);} else {IND1 &= ~(1 << 0);}
digitalWrite(IND_ST_CP, LOW);
shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND1);
shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND2);
shiftOut(IND_DS, IND_SH_CP, MSBFIRST, IND3);
digitalWrite(IND_ST_CP, HIGH); }
//-----------------------------------------ОПРОС DS3231-------------------------------------------------------
void DSTIME(){
t = rtc.getTime();
Hour=t.hour;
Min=t.min;}
void DSTEMP(){
TEMP_S=rtc.getTemp();}