Добрый день, уважаемое сообщество, прошу вашей помощи. Небольшая предыстория. Для контроля за температурой в загородном доме с газовым котлом решил собрать небольшой проект, разобравшись на сколько смог получилась такая схема Arduino uno+SIM800L+18b20+Blynk и такой скетч собранный из кусков:
#define BLYNK_PRINT Serial
#define TINY_GSM_MODEM_SIM800
#include <TinyGsmClient.h>
#include <BlynkSimpleTinyGSM.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 7
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
char auth[] = "11111111111111111111111111111";
char apn[] = "internet.beeline.ru";
char user[] = "beeline";
char pass[] = "beeline";
float temp = 0;
#include <SoftwareSerial.h>
SoftwareSerial SerialAT(8, 9); // RX, TX
TinyGsm modem(SerialAT);
BlynkTimer timer;
void sendSensor()
{
sensors.requestTemperatures();
delay(1000);
Blynk.virtualWrite(V1, sensors.getTempCByIndex(0));
}
void setup()
{
Serial.begin(9600);
delay(1000);
SerialAT.begin(9600);
delay(1000);
Serial.println("Initializing modem...");
modem.restart();
//modem.init();
delay(5000);
Blynk.begin(auth, modem, apn, user, pass);
timer.setInterval(5000L, sendSensor);
}
void loop()
{
Blynk.run();
timer.run();
}
Как бы не ужасно это выглядело со стороны профессионалов arduino и программистов эта сборка более менее работает.
Собственно к проблеме, возникла необходимость мониторить напряжение и потребление для чего к выше упомянутой схеме был добавлен модуль PZEM004T и опять же добавлены куски кода найденые на форумах (да я знаю что никто не любит халявщиков, я старался в течении месяца найти причину, но видимо программирование это вообще не мое)
и тут возникла проблема упомянутая в названии этого топика. В мониторе порта я вижу как происходит подключение в приложении появляется надпись online проходит 5-10 секунд вылазит disconnect, при этом никакие данные в приложении не обновляются. Вариантов этого скетча было с десяток различных, это последний открытый, у всех одна и та же проблема. Надеюсь на вашу помощь. Заранее огромная благодарность все кто сможет указать на ошибку или хотя бы ссылки где подглядеть варианты скетчей, просто сборок arduino+pzem+blynk крайне мало, все что было на поверхности опробовано.
#define BLYNK_PRINT Serial
#define TINY_GSM_MODEM_SIM800
#include <TinyGsmClient.h>
#include <BlynkSimpleTinyGSM.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SimpleTimer.h>
#include <PZEM004T.h>
#include <SoftwareSerial.h>
PZEM004T pzem(12,13);
IPAddress ips(192,168,1,1);
#define ONE_WIRE_BUS 7
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
char auth[] = "1111111111111111111111";
char apn[] = "internet.beeline.ru";
char user[] = "beeline";
char pass[] = "beeline";
float temp = 0;
SimpleTimer timer;
SoftwareSerial SerialAT(8, 9); // RX, TX
TinyGsm modem(SerialAT);
void pzm()
{
float v = pzem.voltage(ips);
if (v < 0.0) v = 0.0;
Blynk.virtualWrite(V2, v);
Serial.print(v);Serial.print("V; ");
float i = pzem.current(ips);
if(i >= 0.0){ Blynk.virtualWrite(V3, i);
Serial.print(i);Serial.print("A; "); }
float p = pzem.power(ips);
if(p >= 0.0){ Blynk.virtualWrite(V4, p);
Serial.print(p);Serial.print("W; ");}
float e = pzem.energy(ips);
if(e >= 0.0){ Blynk.virtualWrite(V5, e);
Serial.print(e);Serial.print("Wh; ");}
Serial.println();
pzem.setAddress(ips);
}
void sendSensor()
{
sensors.requestTemperatures();
delay(1000);
Blynk.virtualWrite(V1, sensors.getTempCByIndex(0));
}
void setup()
{
Serial.begin(9600);
delay(1000);
SerialAT.begin(9600);
delay(1000);
Serial.println("Initializing modem...");
//modem.restart();
modem.init();
delay(5000);
Blynk.begin(auth, modem, apn, user, pass);
timer.setInterval(5000L, pzm);
timer.setInterval(5000L, sendSensor);
}
void loop()
{
Blynk.run();
timer.run();
}