RTC + AMS
Модератор: Alex
Re: RTC + AMS
Приветствую,
С позиции "чайника" можно вопрос задать.
Попробовал три варианта АМС: для Рободина (MEGA + ESP, ESP со Spiff и ESP с SD).
Что правда, всё это на IDE 1.8.13, на рекомендованную 1.6.5 перейти не смог - тупо не запускается.
Пробовал 1.8.5 и пр. эффект компиляции тот же.
Самый рабочий вариант получился на Рободине.
Подкорректировал библиотеки и скетч под 1.8.13, удалось запустить ESP ху с NTP и подключением к сети, в Меге (без езернет шилда) тоже время RTC, датчик температуры и SD.
Короче, сейчас в сериал выводится Время с NTP ESP , Время с RTC Меги, но они не совпадают. Температура с датчика. Ну и при старте системы показывает состояние СД карты.
По ВайФаю иногда пишет "Нет файлов", но в основном "нет соединения" хотя IPшник в сети наличествует.
Поставил пока перед собой задачу синхронизировать время NTP c ESP с RTCом Меги и вот не могу понять:КАК это сделать?
Где ей вставить команду подхватить время с Serial3 и самое смешное - КАКУЮ?
Пытался на NodeMCU RTCку запустить, иногда получается получить с неё время, но скетчи с установкой времени не работают.
С позиции "чайника" можно вопрос задать.
Попробовал три варианта АМС: для Рободина (MEGA + ESP, ESP со Spiff и ESP с SD).
Что правда, всё это на IDE 1.8.13, на рекомендованную 1.6.5 перейти не смог - тупо не запускается.
Пробовал 1.8.5 и пр. эффект компиляции тот же.
Самый рабочий вариант получился на Рободине.
Подкорректировал библиотеки и скетч под 1.8.13, удалось запустить ESP ху с NTP и подключением к сети, в Меге (без езернет шилда) тоже время RTC, датчик температуры и SD.
Короче, сейчас в сериал выводится Время с NTP ESP , Время с RTC Меги, но они не совпадают. Температура с датчика. Ну и при старте системы показывает состояние СД карты.
По ВайФаю иногда пишет "Нет файлов", но в основном "нет соединения" хотя IPшник в сети наличествует.
Поставил пока перед собой задачу синхронизировать время NTP c ESP с RTCом Меги и вот не могу понять:КАК это сделать?
Где ей вставить команду подхватить время с Serial3 и самое смешное - КАКУЮ?
Пытался на NodeMCU RTCку запустить, иногда получается получить с неё время, но скетчи с установкой времени не работают.
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: RTC + AMS
Время берётся с есп8266 и передается в Мегу. Плата от robotdyn. На самой плате у есп 4 мегабайта памяти. По остальным двум сериалам можно забирать данные с других серверов или гейтов. Код покажу вечером.
СпойлерПоказать
- Рейтинг: 1.16%
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: RTC + AMS
Приветствую Всех. За основу кода взята версия для платы RobotDyn , и правильнее было бы писать в соответствующей ветке.
Во первых , код нормально компилится в 1.8.5 без всяких правок. Очень подробно механизм взаимодействия двух серверов расписан Тут.
Я совсем не умею программировать , поэтому код будет как есть. Тем не менее время с 8266 забирает нормально. Рассматривайте это как пример к действию. Все манипуляции производим во вкладке robotdyn. Сначала объявляем переменную data1 . В ней будет находится время с 8266. Добавить на первой вкладке
Дальше заменить саму вкладку 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
Код: Выделить всё
/*
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
Если что то не понятно , спрашивайте. По мере возможности отвечу.
СпойлерПоказать
- Рейтинг: 1.16%
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Re: RTC + AMS
Приветствую,
serghei ещё раз спасибо, но это не совсем то, что я спрашивал. Я так понял, ты под свой TFT вытянул нужные данные и крутишь время с NTP на экране. Я же спрашивал какой командой синхронизировать время ESP-NTP c RTC.
Дело в том, что (serialReq) у меня уже выдает время с ESP-NTP в сериал, причем одной строкой. А вот как сказать RTCке, что сегодня 2020-10-18, а не 2000-01-17, ну и время соответственно.
И ещё один момент: ты ловишь время после "2020-", а 1 января 2021 будешь скетч переписывать? Надо, наверное выловить предыдущий символ, и по нему вытягивать всё остальное.
Попробовал "processing-3.5.4" - в другой ветке пишут, что с его помощью можно время подкорректировать, но У ВЫ опять косяки какие то, утомляют разборки с несоответствием библиотек, команд и прочего. Я то надеялся, что Ардуино это когда взял железяку, установил ПО, залил скетч и в космос, а тут получается как у Жванецкого - "чуть ли не историю сначала надо перечитывать".
Ну что ж, век живи, век учись. Надо было с детства этим заниматься.
Жду Ethernet шилд, нашел на просторах РУнета магазинчик с бросовой ценой на некоторые элементы, чем с китайцев ждать, так ещё и у наших дешевле!
serghei ещё раз спасибо, но это не совсем то, что я спрашивал. Я так понял, ты под свой TFT вытянул нужные данные и крутишь время с NTP на экране. Я же спрашивал какой командой синхронизировать время ESP-NTP c RTC.
Дело в том, что (serialReq) у меня уже выдает время с ESP-NTP в сериал, причем одной строкой. А вот как сказать RTCке, что сегодня 2020-10-18, а не 2000-01-17, ну и время соответственно.
И ещё один момент: ты ловишь время после "2020-", а 1 января 2021 будешь скетч переписывать? Надо, наверное выловить предыдущий символ, и по нему вытягивать всё остальное.
Попробовал "processing-3.5.4" - в другой ветке пишут, что с его помощью можно время подкорректировать, но У ВЫ опять косяки какие то, утомляют разборки с несоответствием библиотек, команд и прочего. Я то надеялся, что Ардуино это когда взял железяку, установил ПО, залил скетч и в космос, а тут получается как у Жванецкого - "чуть ли не историю сначала надо перечитывать".
Ну что ж, век живи, век учись. Надо было с детства этим заниматься.
Жду Ethernet шилд, нашел на просторах РУнета магазинчик с бросовой ценой на некоторые элементы, чем с китайцев ждать, так ещё и у наших дешевле!
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: RTC + AMS
Я же вот Тут рассказал как синхронизировать время автоматически ( картинка ). И процессинг нужен 1.5.1 Я понимаю , что всё это безбожно устарело , но тем не менее работает. На данный момент этих часов у меня нет , но можно найти мой пост , где я впервые получил синхронизацию времени.
Еще момент - у меня не работало пока не прописал в скетче dns .
Придется переписывать. И даже ещё раньше - я перехожу на зимнее время. Как это автоматизировать я не представляю. Можно конечно ловить первые 3 цифры.
PS/ Для меня АМС это развлечение. В том виде какой он сейчас - для серьёзной работы не годится. Начать с реконнекта в wifi сети.
Если Вы умеете проще передавать строки по сериалу - опубликуйте тут. Лучше в соответствующей ветке.
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
Re: RTC + AMS
Прошу прощения за "тыканье" - дурная привычка.
Думаю ветка не важна, вопрос касается rtc, но если не прав перенаправьте.
Я понимаю, что процесс синхронизации заточен не то на функцию, не то на переменную time_t, но попытка уравнять строку с есп и эту функцию приводит или к ошибке или к "0".
Да и, я так понял, реально рабочего варианта дистрибутива АМС для рободина нет.
Ещё, обращаюсь ко всем: в скетчах надо бы приписывать версии библиотек как по функциям, так и по платам.
Возможно что при определённом наборе IDE - плата - библиотеки, оно и заводится с пол тыка, а подбор всего этого вручную угнетает.
Думаю ветка не важна, вопрос касается rtc, но если не прав перенаправьте.
Я понимаю, что процесс синхронизации заточен не то на функцию, не то на переменную time_t, но попытка уравнять строку с есп и эту функцию приводит или к ошибке или к "0".
Да и, я так понял, реально рабочего варианта дистрибутива АМС для рободина нет.
Ещё, обращаюсь ко всем: в скетчах надо бы приписывать версии библиотек как по функциям, так и по платам.
Возможно что при определённом наборе IDE - плата - библиотеки, оно и заводится с пол тыка, а подбор всего этого вручную угнетает.
-
- Сообщения: 2575
- Зарегистрирован: Пт ноя 06, 2015 10:22 am
- Откуда: Кишинёв
- Благодарил (а): 303 раза
- Поблагодарили: 282 раза
Re: RTC + AMS
Единственная проблема с синхронизацией по сети у меня была с платой Дуи пока я не добавил dns в скетч. Сейчас с телефона показать не смогу. Что касается плат и ide. Всё это было написано пять лет назад. 017 версии компилятся в 1.8.5 . Дополнительные библиотеки идут в дистрибутиве. Единственное - надо заменить Time.h на TimeLib.h Залить сюда смогу завтра вечером.
Что касается есп8266 , то последние дрова были 2.4.1 r2. Хотя когда вставил этот веб в гейт майсенсора , то дрова были 2.6.5
Пример можно посмотреть тут. https://mysensors.ru/forum/viewtopic.php?f=5&t=485
Что касается есп8266 , то последние дрова были 2.4.1 r2. Хотя когда вставил этот веб в гейт майсенсора , то дрова были 2.6.5
Пример можно посмотреть тут. https://mysensors.ru/forum/viewtopic.php?f=5&t=485
- Рейтинг: 1.16%
AMS : ESP32 + NRF24 + 1Wire-I2C мост DS2482 + счетчик DS2423 + сеть MySensors + редактирование страниц в браузере + Upload по воздуху + SPIFFS
-
- Сообщения: 182
- Зарегистрирован: Чт ноя 24, 2016 10:47 am
- Благодарил (а): 5 раз
- Поблагодарили: 25 раз
Re: RTC + AMS
esp32 + DS3231 функция синхронизации времени NTP сервера с RTC часами.
Код: Выделить всё
/*
#include "NTPClient.h"
#include "WiFiUdp.h"
WiFiUDP udp;
NTPClient ntp(udp);
unsigned int ntpPort = 1337;
String poolServer = "pool.ntp.org";
int timeOffset = 3;
int time_correct = 1; // + 1 sec.
*/
uint8_t UintToBcd(uint8_t val){
return val + 6 * (val / 10);
}
void ntp_Synch(){
uint8_t _dt[7] = {0,0,0,0,0,0,0};
uint8_t _monthL(0);
uint8_t _mDays[12]={31,28,31,30,31,30,31,31,30,31,30,31};
unsigned long epochTime;
ntp.begin(ntpPort);
ntp.setPoolServerName(poolServer.c_str());
ntp.setTimeOffset(timeOffset * 3600);
while(!ntp.update()) {
ntp.forceUpdate();
}
epochTime = ntp.getEpochTime()-946684800UL + time_correct;
ntp.end();
_dt[0] = epochTime % 60;
epochTime /= 60;
_dt[1] = epochTime % 60;
epochTime /= 60;
_dt[2] = epochTime % 24;
epochTime /= 24;
_dt[3] = (epochTime + 6) % 7;
int days=0;
while(days + ((_dt[6] % 4) ? 365 : 366) <= epochTime) {
days += (_dt[6] % 4) ? 365 : 366;
_dt[6]++;
}
epochTime -= days;
for (_dt[5]; _dt[5]<12; _dt[5]++) {
if (_dt[5] == 1) {
if (_dt[6] % 4) _monthL = 28;
else _monthL = 29;
}
else _monthL = _mDays[_dt[5]];
if (epochTime >= _monthL) epochTime -= _monthL;
else break;
}
_dt[5]++;
_dt[4] = epochTime + 1;
Wire.beginTransmission(0x68);
Wire.write(0x00);
for(int i = 0; i < 7; i++){
Wire.write(UintToBcd(_dt[i]));
}
Wire.endTransmission();
}
- Рейтинг: 1.16%
Re: RTC + AMS
Ох уж мне эти специалисты! Это куда? Взять ЕСП32, Залить в него этот скетч, куда то подключить РТСку и синхронизировать? А потом подключить к Рободину? Ведь для Меги WiFiUDP.h ни о чем. А в ЕСПхе уже НТП работает, но РТСка то к Меге подключена
Моя идея такова: довести АМС для Рободина до ума с привязкой к более менее совресенным требованиям (IDE и библиотеки). Но уж коль у нас в наличии WiFi на борту - пока есть Интернет, 1.АМС берет время с RTC (при наличии) и раз в час или в сутки сверяет его с прилетевшим NTP c ESP и при необходимости корректирует. 2. Нет RTC Тупо забираем время с NTP c ESP и с ним работаем.
Далее всё таки хочется довести тему до конца и вэб интерфейс получать по воздуху (думаю для этого Рободин и создан).
Но мне ещё учиться и учиться.
Моя идея такова: довести АМС для Рободина до ума с привязкой к более менее совресенным требованиям (IDE и библиотеки). Но уж коль у нас в наличии WiFi на борту - пока есть Интернет, 1.АМС берет время с RTC (при наличии) и раз в час или в сутки сверяет его с прилетевшим NTP c ESP и при необходимости корректирует. 2. Нет RTC Тупо забираем время с NTP c ESP и с ним работаем.
Далее всё таки хочется довести тему до конца и вэб интерфейс получать по воздуху (думаю для этого Рободин и создан).
Но мне ещё учиться и учиться.
-
- Сообщения: 182
- Зарегистрирован: Чт ноя 24, 2016 10:47 am
- Благодарил (а): 5 раз
- Поблагодарили: 25 раз
Re: RTC + AMS
Это кого Вы тут "специалистами" обзываете?
Вам дали готовую функцию(не скетч), первую часть(до Wire.beginTransmission(0x68);) в код esp8266, переменную _dt через serial из esp8266 перегоняем в Мегу, в Меге запускаем оставшийся код(с Wire.beginTransmission(0x68);).
PS
Для Ваших идей надо достаточно хорошо разбираться в коде.
АМС в Меге + ЕСП как WiFi свисток - так себе идея.
АМС в ЕСП + Мега(с кучей аналоговых и цифровых входов и 5-ти вольтовой логикой) мне кажется более правильной.
Хотел помочь, получилось как обычно, больше не буду, обещаю.
- Рейтинг: 1.16%