Передать время на Arduino
Модератор: immortal
-
- Сообщения: 949
- Зарегистрирован: Пт дек 06, 2013 11:30 am
- Откуда: Москва
- Благодарил (а): 68 раз
- Поблагодарили: 94 раза
Передать время на Arduino
Как?
Кто-нибудь реализовал?
Пытаюсь, но пока не получается - мозг "замылился" похоже.
У меня все передается /command?(pinNo),(command)
В МЖД выделяю каждую часть времени (час, мин, сек, день ..). Могу передать одним числом в Ардуину, но у ардуины нет таких переменных, которые потянут такое большое число, чтобы распарсить его потом.
На Arduino использую библиотеку Time с settime().
Могу обновлять с сервера времени, могу поставить часы реального времени, но мне надо, чтобы МЖД периодически устанавливал часы на Ардуино.
КАК?
Кто-нибудь реализовал?
Пытаюсь, но пока не получается - мозг "замылился" похоже.
У меня все передается /command?(pinNo),(command)
В МЖД выделяю каждую часть времени (час, мин, сек, день ..). Могу передать одним числом в Ардуину, но у ардуины нет таких переменных, которые потянут такое большое число, чтобы распарсить его потом.
На Arduino использую библиотеку Time с settime().
Могу обновлять с сервера времени, могу поставить часы реального времени, но мне надо, чтобы МЖД периодически устанавливал часы на Ардуино.
КАК?
-
- Сообщения: 469
- Зарегистрирован: Вт мар 12, 2013 1:22 am
- Благодарил (а): 41 раз
- Поблагодарили: 81 раз
Re: Передать время на Arduino
а что мешает передавать время в unixtime?
Для дуины это будет переменная unsigned long
Для дуины это будет переменная unsigned long
-
- Сообщения: 949
- Зарегистрирован: Пт дек 06, 2013 11:30 am
- Откуда: Москва
- Благодарил (а): 68 раз
- Поблагодарили: 94 раза
Re: Передать время на Arduino
а можно сразу пример, как переводить в unixtime или как выделять на МЖД?
-
- Сообщения: 469
- Зарегистрирован: Вт мар 12, 2013 1:22 am
- Благодарил (а): 41 раз
- Поблагодарили: 81 раз
Re: Передать время на Arduino
На МЖД есть встроенная функция $timePC=time(); http://smartliving.ru/Main/ProgrammingFunctions
Передавайте в виде /command?time=($timePC)
Судя по описанию библиотеки setTime() прекрасно работает с time_t. http://www.pjrc.com/teensy/td_libs_Time.html
Поэтому на дуине, приняв данные, обновляете часы:
setTime($timePC);
Передавайте в виде /command?time=($timePC)
Судя по описанию библиотеки setTime() прекрасно работает с time_t. http://www.pjrc.com/teensy/td_libs_Time.html
Поэтому на дуине, приняв данные, обновляете часы:
setTime($timePC);
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Передать время на Arduino
Всё уже придумано до нас. (с)
Там на страничке
http://smartliving.ru/forum/viewtopic.p ... 3&start=70
длинный листинг, где на Arduino организованы виртуальные часы, корректируемые из М по сети.
То, что вам надо, единственное, иногда бывают ошибки — нужно допилить алгоритм.
Там на страничке
http://smartliving.ru/forum/viewtopic.p ... 3&start=70
длинный листинг, где на Arduino организованы виртуальные часы, корректируемые из М по сети.
То, что вам надо, единственное, иногда бывают ошибки — нужно допилить алгоритм.
-
- Сообщения: 949
- Зарегистрирован: Пт дек 06, 2013 11:30 am
- Откуда: Москва
- Благодарил (а): 68 раз
- Поблагодарили: 94 раза
Re: Передать время на Arduino
Спасибо большое, отлично работает. Зря я голову ломалdmw писал(а): Передавайте в виде /command?time=($timePC)
Единственное МЖД передает GMT значение, а как часовой пояс учесть? AdjustTime или проще как-то можно?
- sergejey
- Site Admin
- Сообщения: 4284
- Зарегистрирован: Пн сен 05, 2011 6:48 pm
- Откуда: Минск, Беларусь
- Благодарил (а): 75 раз
- Поблагодарили: 1559 раз
- Контактная информация:
Re: Передать время на Arduino
time(); должно отдавать время с учётом настроек часового пояса.
Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
-
- Сообщения: 949
- Зарегистрирован: Пт дек 06, 2013 11:30 am
- Откуда: Москва
- Благодарил (а): 68 раз
- Поблагодарили: 94 раза
Re: Передать время на Arduino
Код сценария МЖД
Вот прямо сейчас 17:35 выдало следующее значение - 1393335335
Arduino после установки времени по данному числу выдает 13:35
Разница 4 часа, я и подумал, что не учтен часовой пояс (я в Москве)
UPD: Забил в несколько онлайн конвертеров - кто-то выдает 13, кто-то 17 - что за ...?
UPD2: Ага, я на линуксе (малинка), похоже тут собака порылась.
UPD3: В общем пока в скетч добавил adjustTime(14400);
Код: Выделить всё
$arip = gg("Arduino.IP");
$timePC=time();
$cmdUrl = "http://". $arip. "/command?99,". $timePC;
say($cmdUrl);
getURL($cmdUrl,0);
Arduino после установки времени по данному числу выдает 13:35
Разница 4 часа, я и подумал, что не учтен часовой пояс (я в Москве)
UPD: Забил в несколько онлайн конвертеров - кто-то выдает 13, кто-то 17 - что за ...?
UPD2: Ага, я на линуксе (малинка), похоже тут собака порылась.
UPD3: В общем пока в скетч добавил adjustTime(14400);
-
- Сообщения: 949
- Зарегистрирован: Пт дек 06, 2013 11:30 am
- Откуда: Москва
- Благодарил (а): 68 раз
- Поблагодарили: 94 раза
Re: Передать время на Arduino
Блин, при тестах вообще время перестало приходить. Оказалось, что я использую для парсинга команды GET ommandReceived.toInt() и режется последняя цифра.
Как переделать код, чтобы MDparameter стал unsigned long?
Как переделать код, чтобы MDparameter стал unsigned long?
Код: Выделить всё
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (url.length() < maxLength) {
url+=(c);
}
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
Serial.print("HTTP request: ");
Serial.println(url);
if (url.indexOf("?")>=0) {
int PosB=url.indexOf("?")+1;
int PosE=url.indexOf("HTTP");
if (url.indexOf(",")>=0) {
// command has parameters
int PosP=url.indexOf(",");
commandReceived=url.substring(PosB,PosP);
parametersReceived=url.substring(PosP+1,PosE-1);
} else {
// command does not have parameters
commandReceived=url.substring(PosB,PosE-1);
parametersReceived="";
}
//Serial.print("Command: ");
//Serial.println(commandReceived);
//Serial.print("Parameter: ");
//Serial.println(parametersReceived);
MDcommand = commandReceived.toInt();
MDparameter = parametersReceived.toInt();
//Serial.print("MDCommand: ");
//Serial.println(MDcommand);
}
// send a standard http response header
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html><head><title>Arduino</title></head><body>");
client.println("</body><html>");
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}// end if (client.available())
} //END while (client.connected())
// give the web browser time to receive the data
delay(1);
// close the connection:
url = "";
client.stop();
Serial.println("client disconnected");