Приветствую Всех. За основу кода взята версия для платы RobotDyn , и правильнее было бы писать в соответствующей ветке.
Во первых , код нормально компилится в 1.8.5 без всяких правок. Очень подробно механизм взаимодействия двух серверов расписан
Тут.
Я совсем не умею программировать , поэтому код будет как есть. Тем не менее время с 8266 забирает нормально. Рассматривайте это как пример к действию. Все манипуляции производим во вкладке robotdyn. Сначала объявляем переменную data1 . В ней будет находится время с 8266. Добавить на первой вкладке
Код: Выделить всё
#include <TimeLib.h>
#include <DS1307RTC.h>
char const SELF_NAME[] = "AMS Mega";
char const VERSION[] = "0.16";
String data1; // Время с ESP8266
Дальше заменить саму вкладку robotdyn
Код: Выделить всё
/*
Modul RobotDyn
part of Arduino Mega Server project
*/
#ifdef ROBOTDYN_FEATURE
bool sFlag = true;
bool sFlag1 = true;
// Serial request
#define MAX_SERIAL_REQ 32
#define MAX_SERIAL1_REQ 32
String serialReq = "";
String serial1Req = "";
String dataString = "";
void robotdynInit() {
Serial3.begin(115200);
Serial2.begin(9600);// Можем подключить второй сериал порт и читать данные с любой ардуины
modulRobotdyn = MODUL_ENABLE;
started("RobotDyn", true);
}
void printSerialStr() {
Serial.print("[");
Serial.print(serialReq);
Serial.println("]");
}
void printSerial1Str() { // второй сериал порт
Serial.print("/");
Serial.print(serial1Req);
Serial.println("/");
}
void parseSerialCmd() {
String command, parameter;
if (serialReq.indexOf(F("?")) >= 0) {
int pBegin = serialReq.indexOf(F("?")) + 1;
if (serialReq.indexOf(F("=")) >= 0) {
int pParam = serialReq.indexOf(F("="));
command = serialReq.substring(pBegin, pParam);
parameter = serialReq.substring(pParam + 1);
} else {
command = serialReq.substring(pBegin);
parameter = "";
}
} // if (request.indexOf(F("?")) >= 0)
} // parseSerialCmd()
void parseSerial1Cmd() {
String command1, parameter1;
if (serial1Req.indexOf(F("?")) >= 0) {
int pBegin1 = serial1Req.indexOf(F("?")) + 1;
if (serial1Req.indexOf(F("=")) >= 0) {
int pParam1 = serial1Req.indexOf(F("="));
command1 = serial1Req.substring(pBegin1, pParam1);
parameter1 = serial1Req.substring(pParam1 + 1);
} else {
command1 = serial1Req.substring(pBegin1);
parameter1 = "";
}
} // if (request.indexOf(F("?")) >= 0)
} // parseSerialCmd()
void parseSerialStr() {
if (serialReq[0] == '?') {
parseSerialCmd();
} else {
printSerialStr();
}
}
void parseSerial1Str() {
if (serial1Req[0] == '?') {
parseSerial1Cmd();
} else {
printSerial1Str();
}
}
// checkSerial()
void checkSerial() {
while (Serial3.available() >= 5) {
if (sFlag) {
serialReq = "";
sFlag = false;
}
char c = Serial3.read();
if (c == 10) {
sFlag = true;
parseSerialStr();
}
else if (c == 13) {
// skip
}
else {
if (serialReq.length() < MAX_SERIAL_REQ) {
serialReq += c;
}
if (serialReq.startsWith("2020-")) { // Когда прилетает строка с 8266 , которая начинается с 2020
data1 = (serialReq.substring(11,16)); // вырезаем цифры с 11 по 16
Serial.println(data1); //выводим в сериал. Потом куда угодно
}
} // if
} // while (Serial3.available() > 0)
} // checkSerial()
void checkSerial1() {
while (Serial2.available() > 0) {
if (sFlag1) {
serial1Req = "";
sFlag1 = false;
}
char c = Serial2.read();
if (c == 10) {
sFlag1 = true;
parseSerial1Str();
}
else if (c == 13) {
// skip
}
else {
if (serial1Req.length() < MAX_SERIAL1_REQ) {
serial1Req += c;
}
if (serial1Req.startsWith("T=")) {
// if (serialReq.startsWith("21")) {
data3 = (serial1Req.substring(3,8));
data2 = (serial1Req.substring(11,16));
data4 = (serial1Req.substring(17));
Serial.println(data3);
Serial.println(data2);
Serial.println(data4);
}
} // if
} // while (Serial3.available() > 0)
}
void robotdynWork() {
checkSerial();
checkSerial1();
#ifdef TFT
tft.setTextColor(White, Blue);
tft.setTextSize(6);
tft.setCursor(100, 92); // выводим время - час
tft.print(data1);
tft.setTextColor(White, Orange);
tft.setTextSize(2);
tft.setCursor(10, 10);
tft.print("volt");
tft.setTextColor(White, Blue);
tft.setTextSize(3);
tft.setCursor(74, 10);
tft.print(data2);
tft.setTextColor(White, Orange);
tft.setTextSize(2);
tft.setCursor(200, 10);
tft.print("boiler");
tft.setTextColor(White, Blue);
tft.setTextSize(3);
tft.setCursor(290, 10);
tft.print(data3);
tft.setTextColor(White, Orange);
tft.setTextSize(2);
tft.setCursor(10, 40);
tft.print("cont");
tft.setTextColor(White, Blue);
tft.setTextSize(3);
tft.setCursor(90, 40);
tft.print(data4);
#endif
}
#endif // ROBOTDYN_FEATURE
В результате в сериале Меги увидим
- 2
22
22:
22:1
22:17
22:17
22:17
22:17
PS/ Я сверху Меги посадил TFT экран , поэтому интернет шилд прицепить не получается.
Если что то не понятно , спрашивайте. По мере возможности отвечу.

- IMG_20201015_222518.jpg (1.62 МБ) 6739 просмотров
После замены вкладки желательно подчистить папку Темп . Иначе может подцепиться старая.