Простые WiFi часы

anderswels

New member
я бы не советовал так подключать, насколько я знаю максимальный ток GPIO 12mA, пищалка потребляет скорей всего больше ...
Здравствуйте. Есть ли у вас вариант часов без сегментных индикаторов,давления, но с выводом даты и дня недели в виде бегущей строки? Или можно так сделать на заказ?
 

DmKorneev

New member
Подскажите, скачал файл прошивки, распаковал. В папке много файлов. В программе Ардуино при открытии одного файла открываются все. Так и должно быть?.
При попытке компиляции, среда ругается на

Arduino: 1.6.12 (Windows 7), Плата:"Generic ESP8266 Module, 80 MHz, 40MHz, DIO, 115200, 512K (64K SPIFFS), ck, Disabled, None"

In file included from C:\time\Clock5_160924\clock5web\Clock5web.h:1:0:

Clock5web.h:46: error: 'IPAddress' was not declared in this scope

time_t getNtpTime( IPAddress &timeServerIP);

^

Clock5web.h:46: error: 'timeServerIP' was not declared in this scope

time_t getNtpTime( IPAddress &timeServerIP);

^

Clock5web.h:47: error: variable or field 'sendNTPpacket' declared void

void sendNTPpacket(IPAddress &address);

^

Clock5web.h:47: error: 'IPAddress' was not declared in this scope

Clock5web.h:47: error: 'address' was not declared in this scope

void sendNTPpacket(IPAddress &address);

^

ntp:35: error: 'time_t getNtpTime(IPAddress&)' redeclared as different kind of symbol

time_t getNtpTime( IPAddress &timeServerIP)

^

In file included from C:\time\Clock5_160924\clock5web\Clock5web.h:1:0:

Clock5web.h:46: error: previous declaration of 'time_t getNtpTime'

time_t getNtpTime( IPAddress &timeServerIP);

^

C:\time\Clock5_160924\clock5web\ntp.ino: In function 'bool get_ntp_time()':

ntp:19: error: 'getNtpTime' cannot be used as a function

unsigned long t_ntp = getNtpTime( arrTimeServerIP);

^

C:\time\Clock5_160924\clock5web\ntp.ino: In function 'time_t getNtpTime(IPAddress&)':

ntp:35: error: 'time_t getNtpTime(IPAddress&)' redeclared as different kind of symbol

time_t getNtpTime( IPAddress &timeServerIP)

^

In file included from C:\time\Clock5_160924\clock5web\Clock5web.h:1:0:

Clock5web.h:46: error: previous declaration of 'time_t getNtpTime'

time_t getNtpTime( IPAddress &timeServerIP);

^

exit status 1
'IPAddress' was not declared in this scope

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
 
Последнее редактирование:
В программе Ардуино при открытии одного файла открываются все. Так и должно быть?
да, так и должно быть.

При попытке компиляции, среда ругается на
Папка "clock5web" с файлами должна находится в каталоге который указан в настройках IDE: "Размещение папки скетчей".
 

DmKorneev

New member
Скомпилировалось все, ошибки возникали под Windows 10
Под linux и Windows 7 все в норме
 
Последнее редактирование:

Evgeniy163

New member
Здравствуйте. Обнаружил не совсем корректное отображение температуры вблизи нуля и минус, т.е если температура 0.2 то показывает "00.", последний символ пустой. Если т- (-2), то показывает "F0", последниу символ так же пустой. Часы, конечно комнатные, но может кто то захочет вынести датчик на улицу. Я не программист, но не много подправил код только для MATRIX. Вроде работает.
Код:
  int32_t t1 = celsius * 100;
  t1 /= 100;
  if( t1 < 0)
  {
  #ifdef MATRIX
  t1 *= -1;
  if (t1/10 == 0)
  {   
  tempC[0] = NULL; //dig7[16];
  tempC[1] = dig7[16]; //dig7[t1 / 10];
  tempC[2] = dig7[t1 % 10];
  }
  else
  {
  tempC[0] = dig7[16];
  tempC[1] = dig7[t1 / 10];
  tempC[2] = dig7[t1 % 10];
  }
  #else
  tempC[0] = 0x0a;
  tempC[1] = t1 / 10;
  tempC[2] = t1 % 10;
  #endif
  }
  else
  {
  #ifdef MATRIX
  if (t1/10 ==0)
  {tempC[0] = NULL;}
  else
  {tempC[0] = dig7[t1 / 10];}
  tempC[1] = dig7[t1 % 10] | 0x80;
  t1 = (celsius - t1) * 10;
  tempC[2] = dig7[t1];
  #else
  tempC[0] = t1 / 10;
  tempC[1] = (t1 % 10) | 0x80;
  t1 = (celsius - t1) * 10;
  tempC[2] = t1;
  #endif
  }
 
Последнее редактирование:

chief

New member
Здравствуйте. Вопрос к ТС: на сколько актуален скетч первого поста? При его компиляции Arduino IDE (1.6.12) выдает ошибку "...\Clock5web.ino:29:23: fatal error: Clock5web.h: No such file or directory", при этом скетч поста #37 компилируется и работает отлично.
 

Сергей_Ф

Moderator
Команда форума
@chief имя папки скетча измените. Нужна первая заглавная буква, как у скетча. Должно компилировать нормально после этого.
 

Zelezyka

New member
Здравствуйте. Отличный проект, работает. Спасибо.
Хочу добавить управление GPIO через браузер. Подскажите как это можно сделать.
 

Сергей_Ф

Moderator
Команда форума
@Zelezyka в общем случае - добавить кнопку в html и добавить обработчик кнопки в код. Посмотрите, как я реализовал будильник и как автор. Если уловите разницу - будет просто.
 

Zelezyka

New member
@Zelezyka в общем случае - добавить кнопку в html и добавить обработчик кнопки в код. Посмотрите, как я реализовал будильник и как автор. Если уловите разницу - будет просто.
это мне понятно, но как это сделать? можете помочь? у меня не получается.
 

Сергей_Ф

Moderator
Команда форума
@Zelezyka помочь могу, делать за Вас - не буду.
Что не получается? Что Вы пробовали и как? Где Ваш код?
 

Zelezyka

New member
Во вкладке WEB :
str += "<tr><td colspan='3' class='h'><button onclick='digitalWrite( 4, HIGH);'>GPIO4</button></td></tr>\n";
 

Сергей_Ф

Moderator
Команда форума
@Zelezyka
в web.ino надо добавить в строку function функцию JavaScript для обработки нажатия кнопки, она будет дергать URL /GPIO так:
Код:
\
function switch_GPIO(){\n\
request=new XMLHttpRequest();\n\
request.open('GET', '/GPIO', true);\n\
request.send();\n\
}\n\
\
добавить обработчик запроса URL:
Код:
//-------------------------------------------------------------- handleGPIO
void handleGPIO()
{
  serv_ms = millis(); // это для внутреннего использования в программе часов
  digitalWrite( relay_GPIO, !digitalRead (relay_GPIO)); // меняем состояния Пина на противоположенное
  DEBUG_MSG( "Set GPIO%d %d\n", relay_GPIO, digitalRead (relay_GPIO)); // отладочный вывод
  HTTP.send(200, "text/html", ""); //посылка ответа сервера
}
добавить например в конец void handleTime() перед
str += html_end();
Сам код кнопки в http:
Код:
  str += "<tr><td colspan='3' class='h'><button onclick='switch_GPIO();'>GPIO</button></td></tr>\n";
в основном Clock5web.ino добавить название и номер Пина, который дергать:
Код:
 #define relay_GPIO ВАШ_НОМЕР_ПИНА //13
в setup() определить режим Пина и присвоить обработчик URL для соответствующего адреса запроса:
Код:
  pinMode( relay_GPIO, OUTPUT);
  HTTP.on( "/GPIO", handleGPIO);
кажется всё. Тогда на странице Время внизу будет кнопка GPIO для вызова JavaScript, который отправляет запрос на сервер esp, который вызывает обработчик страницы, а уже он переключает пин relay_GPIO.
 
Последнее редактирование:

RedCat

New member
Приветствую благородных донов!
Огромная благодарность ТС за работу! Собрал, подключил, доработал напильником - все работает. При работе через веб в iPad-ике с Сафари слетают длины окошек полей ввода (вернее отображаются так, как задано в скетче), при этом в WinХР на огнелисе все работает правильно (непонятно, хотя можно свернуть на магию браузеров). Подправил, если кому нужно - забирайте. Вопрос - каким заклинанием можно заставить часы показывать температуру? Или я так понимаю что у ТС показания времени и температуры разнесены по разным дисплеям? Использую только один дисплей TYPE_DISPLAY == 1. Может толкнете в сторону того, как заставить листать режимы (время -- температура -- время ....).
В планах прикрутить москито с запросом температуры от уличного датчика опрашиваемого малинкой.
Всем добра!
 

Вложения

  • 24.9 KB Просмотры: 105
Или я так понимаю что у ТС показания времени и температуры разнесены по разным дисплеям
да, именно так. Я просто считаю, что в любой момент посмотрев на часы я должен там увидеть время.

Может толкнете в сторону того, как заставить листать режимы
ну проще всего в
Код:
void show_time( bool shift)
заполнять массив int dig[6] нужными числами. Эта процедура вызывается раз в 500мс, и на экран будут выводится цифры из этого массива ...
 
Сверху Снизу