• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Простые 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 Просмотры: 130
Или я так понимаю что у ТС показания времени и температуры разнесены по разным дисплеям
да, именно так. Я просто считаю, что в любой момент посмотрев на часы я должен там увидеть время.

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