Официальный сайт компании Arduino по адресу arduino.cc
Не загружается страница в браузер ранее рабочего проекта ESP8266+DS3231 +dfplayer+ HC-SR 501
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Здравствуйте. Захотелось мне повторить проект говорящих часов Рубена Лачинова
"WeMos D1 mini + DS3231 + HC-SR 501" https://yadi.sk/d/LSu3BGEA3AWo6n/index.htm http://ruben1.narod.ru/hobby/arduino/wemos_rtc_pir.html#
Что мне понравилось в этом проекте?
1)Использование ESP8266
2)Использование dfplayer, DS3231
3)Идеалогия построения управления. Браузером из ПК или смартфона открываем страницу, которая прошита в ESP8266, и на которой расположен требуемый функционал управления часами, т.е. не надо создавать специальное управляющее приложение для ПК или смартфона. То есть из самих часов получаем кросс-платформенную программу управления часами!
4)Не требуется никаких "облаков".
Но нарисовалась проблема, которую я так и не смог решить. При попытке компиляции проекта в моей конфигурации (Windows_7_max_32bit + Arduino IDE v1.8.13 + плата WeMos R1 D1+ dfplayer + DS3231) проект не компилировался. Проблема оказалась в несовместимости последней Arduino IDE v1.8.13 с версией библиотеки для dfplayer в проекте Лачинова. Заменил библиотеку, поменял используемые выводы WeMos, исправил способ чтения из PROGMEM и проект откомпилировался и залился в ESP8266. Но при попытке открыть страницу из браузера она редко открывается. Сейчас пишет, что страница недоступна. При сбросе может воспроизвести рычание и несколько файлов. В HTML-коде, видимо, используется что-то из семейства java, в котором я не разбираюсь. Кто разбирается, может поможете заставить работать.
/* Ruben Lachinov clock with bell * это часы с боем и датчиком движение PIR*/ #include <ESP8266WiFi.h> //#include <WiFiServer.h> //#include <ESP8266WebServer.h> //'class WiFiServer' has no member named 'handleClient' //#include <ESP8266mDNS.h> //вариант 2 #include <pgmspace.h> //PROGMEM #include "DFRobotDFPlayerMini.h" //библиотека для DFPlayer #include <SoftwareSerial.h>//библиотека для создания программного UART //#include <Wire.h> //I2C работает с часами и без неё #include <RTClib.h> //у автора https://github.com/adafruit/RTClib /* Какие GPIO задействованы в программе (схеме)? GPIO 6-11 не выведены на разъем 1,3 Rx, Tx для Serial Monitor и прошивки 2 ledPin использование стандартного (встроенного) светодиода 4 (SDA) и 5 (SCL)для управления DS3231 12,14 UltraSonic ультразвуковой измеритель расстояния 16 pirPin для подключения датчика ???? 13,15 для SoftwareSerial для управления с DFPlayer_Mini Для анализа: Подключаемся с ПК с браузером хром или лиса к этой точке. Браузером открываем режим разработчика через F12. Открываем вкладку "Сеть". 2. Заходим на страничку авторизации точки. Авторизуемся. Смотрим что браузер при этом отправляет на сервер - GET/POST запросы, cookie, URL. Записываем всё и запоминаем. 3. Очищаем кеш, повторяем. Смотрим не изменилось ли чего. аутентификация через html страницу называется Captive Portal html_return += F("some text stored in progmem"); //правильный способ чтения из PROGMEM связь по Wi-Fi поддерживается автоматически, после каждого выполнения loop или при вызове delay если loop выполняются более 50 микросекунд, надо вызывать delay для нормальной работы Wi-Fi. Для ESP8266WebServer есть только send_P () и sendContent_P () Пояснялка: ESP8266-12F GPIO16 = 16 вывод в среде Arduino IDE, часы DS3231? Ответ: GPIO5,4 в коде Arduino IDE). I2C по умолчанию использует 4 (SDA) и 5 (SCL). Serial работает на GPIO1(TX) и GPIO3(RX). Serial можно переназначить на GPIO15 (TX) и GPIO13 (RX) для этого после вызова функции Serial.begin необходимо вызвать Serial.swap(). Для отмены переназначения выводов необходимо снова вызвать Serial.swap(). В Serial1 доступен только TX (GPIO2). ESP8266 может работать в трех разных режимах: 1)Станция (STA), 2)Точка доступа (AP), 3)STA+AP */ //#include <DFPlayer_Mini_Mp3.h> //не компилируктся. Устарела для Ардуино 1.8.13 и ядра 2.7.4 ESP8266 const int RX=13; const int TX=15; SoftwareSerial mySoftwareSerial(RX, TX); // RX, TX (у автора другие. Сменил, т.к. нерабочие) DFRobotDFPlayerMini myDFPlayer;//создаем объект myDFPlayer //UltraSonic ультразвуковой измеритель расстояния ====== const int TRIG_PIN = 12; const int ECHO_PIN = 14;//у автора 13 RTC_DS3231 rtc; char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; //========================== //загоняем в память HTML-страницу (ответ) нашей программы при обращении к ней const static char header0[] PROGMEM = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN'>\n\r" "<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />\n\r" "<html><head><title>ESP8266 GPIO Control</title>\n\r" "<meta name=viewport content=\"width=device-width, initial-scale=1\">\n\r" "<style type=\"text/css\">\n\r" "#nav {border:2px solid #000047;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;}\n\r" "#nav, #nav ul {list-style:none;padding:0;width:166px;}\n\r" "#nav ul {position:relative;z-index:-1;}\n\r" "#nav li {position:relative;z-index:100;}\n\r" "#nav ul li {margin-top:-23px;-moz-transition: 0.4s linear 0.4s;-ms-transition: 0.4s linear 0.4s;-o-transition: 0.4s linear 0.4s;\n\r" "-webkit-transition: 0.4s linear 0.4s;transition: 0.4s linear 0.4s;}\n\r" "#nav li a {background-color:#d4d5d8;color:#000;display:block;font-size:12px;font-weight:bold;line-height:28px;outline:0;padding-left:15px;text-decoration:none;}\n\r" "#nav li a.sub {color:#fff; padding-left:-15px;text-align:center;background:#0000ff;}\n\r" "#nav li a:hover {background-color:#bcbdc1;}\n\r" "#nav ul li a {background-color:#00e;border-bottom:1px solid #ccc;color:#fff;font-size:16px;line-height:22px;}\n\r" "#nav ul li a:hover {background-color:#ddd;color:#444;}\n\r" "#nav a.sub:focus {background:#bcbdc1;outline:0;}\n\r" "#nav a:focus ~ ul li { margin-top:0; -moz-transition: 0.4s linear; -ms-transition: 0.4s linear; -o-transition: 0.4s linears;\n\r" " -webkit-transition: 0.4s linears; transition: 0.4s linear;}\n\r" "#nav a.sub:active {background:#bcbdc1;outline:0;}\n\r" "#nav a:active ~ ul li { margin-top:0;}\n\r" "#nav ul:hover {display:block;}\n\r"; const static char header1[] PROGMEM = "a {color:#FFF;font-weight:bold;text-decoration:none;}\n\r" ".cleared {float : none;clear : both;margin : 0;padding : 0;border : none;font-size : 1px;}\n\r" ".key {display: block;cursor: pointer;color: #444;font: bold 9pt arial;text-decoration: none;text-align: center;\n\r" "width: 44px;height: 41px;margin: 5px;background: #DDD1CC;\n\r" "-webkit-box-shadow: 0 0 8px rgba(0, 0, 0, .75);-moz-box-shadow: 0 0 8px rgba(0, 0, 0, .75);box-shadow: 1px 1px 8px rgba(0, 0, 0, .75);\n\r" "-moz-border-radius: 4px;border-radius: 4px;border-top: 1px solid #b5b5b5;\n\r" "-webkit-box-shadow: inset 0 0 25px #e8e8e8, 0 1px 0 #c3c3c3, 0 2px 0 #c9c9c9, 0 2px 3px #333;\n\r" "-moz-box-shadow: inset 0 0 25px #e8e8e8, 0 1px 0 #c3c3c3, 0 2px 0 #c9c9c9, 0 2px 3px #333;\n\r" "box-shadow: inset 0 0 25px #e8e8e8, 0 1px 0 #c3c3c3, 0 2px 0 #c9c9c9, 0 2px 3px #333;\n\r" "text-shadow: 0px 1px 0px #f5f5f5;}\n\r" ".key:active, .keydown {color: #00F;background: #D9D9FF;margin: 7px 5px 3px;\n\r" "-webkit-box-shadow: inset 0 0 25px #ddd, 0 0 3px #333;\n\r" "-moz-box-shadow: inset 0 0 25px #ddd, 0 0 3px #333;\n\r" "box-shadow: inset 0 0 25px #ddd, 0 0 3px #333;\n\r" "border-top: 1px solid #eee;}\n\r" ".key span {display: block;margin: 13px 0 0;text-transform: uppercase;}\n\r"; const static char header2[] PROGMEM = ".but {display: block;cursor: pointer;color: #333;font: bold 9pt arial;text-decoration: none;text-align: center;\n\r" "width: 44px;height: 41px;margin: 5px;background: #DDD1CC;\n\r" "-webkit-border-radius: 22px;-moz-border-radius: 22px;border-radius: 22px;\n\r" "-webkit-box-shadow: 0 0 8px rgba(0, 0, 0, .75);\n\r" "-moz-box-shadow: 0 0 8px rgba(0, 0, 0, .75);\n\r" "box-shadow: 1px 1px 8px rgba(0, 0, 0, .75);\n\r" "border-top: 1px solid #b5b5b5;\n\r" "-webkit-box-shadow: inset 0 0 25px #e8e8e8, 0 1px 0 #c3c3c3, 0 2px 0 #c9c9c9, 0 2px 3px #333;\n\r" "-moz-box-shadow: inset 0 0 25px #e8e8e8, 0 1px 0 #c3c3c3, 0 2px 0 #c9c9c9, 0 2px 3px #333;\n\r" "box-shadow: inset 0 0 25px #e8e8e8, 0 1px 0 #c3c3c3, 0 2px 0 #c9c9c9, 0 2px 3px #333;\n\r" "text-shadow: 0px 1px 0px #f5f5f5;}\n\r" ".but:active, .keydown {color: #00F;background: #D9D9FF;margin: 7px 5px 3px;\n\r" "-webkit-box-shadow: inset 0 0 25px #ddd, 0 0 3px #333;\n\r" "-moz-box-shadow: inset 0 0 25px #ddd, 0 0 3px #333;\n\r" "box-shadow: inset 0 0 25px #ddd, 0 0 3px #333;\n\r" "border-top: 1px solid #eee;}\n\r" ".but span {display: block;margin: 13px 0 0;text-transform: uppercase;}\n\r"; const static char header3[] PROGMEM = ".onoffswitch {position: relative;width: 24px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select: none;}\n\r" ".onoffswitch-checkbox {display: none;}\n\r" ".onoffswitch-label {display: block;overflow: hidden;cursor: pointer;border: 2px solid #8084B0;border-radius: 10px;}\n\r" ".onoffswitch-inner {display: block;width: 200%;margin-left: 0%;transition: margin 0.3s ease-in 0s;}\n\r" ".onoffswitch-inner:before, .onoffswitch-inner:after {display: block;float: left;width: 50%;height: 6px;padding: 0;line-height: 6px;font-size: 14px;color: white;font-family: Trebuchet, Arial, sans-serif;font-weight: bold;box-sizing: border-box;}\n\r" ".onoffswitch-inner:before {content: \"\";padding-left: 10px;background-color: #FF0000;color: #999999;}\n\r" ".onoffswitch-inner:after {content: \"\";padding-right: 10px;background-color: #0AFF0A;color: #FFFFFF;text-align: right;}\n\r" ".onoffswitch-switch {display: block;width: 10px;margin: -2px;background: #FFFFFF;position: absolute;top: 0;bottom: 0;right: 14px;border: 2px solid #8084B0;border-radius: 10px;transition: all 0.3s ease-in 0s;}\n\r" ".onoffswitch-switch2 {display: block;width: 10px;margin: -2px;background: #FFFFFF;position: absolute;top: 0;bottom: 0;right: 0px;border: 2px solid #8084B0;border-radius: 10px;transition: all 0.3s ease-in 0s;}\n\r" ".onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner {margin-left: -100%;}\n\r" ".onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch {right: 0px;}\n\r" ".onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch2 {right: 14px;}\n\r"; const static char header4[] PROGMEM = ".onoffswitch-inner2 {display: block;width: 200%;margin-left: -100%;transition: margin 0.3s ease-in 0s;}\n\r" ".onoffswitch-inner2:before, .onoffswitch-inner2:after {display: block;float: left;width: 50%;height: 6px;padding: 0;line-height: 6px;font-size: 14px;color: white;font-family: Trebuchet, Arial, sans-serif;font-weight: bold;box-sizing: border-box;}\n\r" ".onoffswitch-inner2:before {content: \"\";padding-right: 10px;background-color: #0AFF0A;color: #FFFFFF;text-align: right;}\n\r" ".onoffswitch-inner2:after {content: \"\";padding-left: 10px;background-color: #FF0000;color: #999999;}\n\r" ".onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner2 {margin-left: 0;}\n\r" ".out_val {-webkit-appearance: none;appearance: none;padding: 0;margin-left:40px;border: 2px solid #eee;border-radius: 2px;box-shadow: inset 0 1px #ccc, inset 0 1px #575555, inset 0 -1px #00c;background: #fef linear-gradient(#BCBCBC, #fff0f5);overflow: hidden;}\n\r" "div.ex_output{width:258px;text-align:center;background-color: #000080;}\n\r" "div.ex_output output{font-weight:bold;font-size:16px;color: #CCC;}\n\r" "div.ex_pult {width:162px;text-align:center;background-color: #000080;margin-left:6px;}\n\r" "div.ex_pult output {font-weight:bold;font-size:16px;color: #CCC;}\n\r" "div.output {width:80px;background-color: #EFE3CF;border: 2px solid #006;text-align:center;margin-bottom:4px;margin-right:2px;float:left;}\n\r" "div.output div {width:80px;background-color:#C1C5F7;}\n\r" "div.output output {font-weight:bold;font-size:16px;color:#009;}\n\r"; const static char header5[] PROGMEM = ".rangeP {-webkit-appearance: none;appearance: none;padding: 0;border: 2px solid #eee;border-radius: 2px;background: #fef linear-gradient(#BCBCBC, #fff0f5);overflow: hidden;}\n\r" ".rangeP::-moz-range-thumb {border-radius: 2px;box-shadow: -13px 0 #40310a, -26px 0 #40310a, -39px 0 #40310a, -52px 0 #40310a, -65px 0 #40310a, -78px 0 #40310a, -91px 0 #40310a, -104px 0 #40310a, -117px 0 #40310a, -130px 0 #40310a, -143px 0 #40310a, -156px 0 #40310a;}\n\r" ".rangeP::-moz-range-track {background: none;border: none;}\n\r" ".rangeP::-webkit-slider-thumb { -webkit-appearance: none; width:15px; height:8px; border: 1px solid #000081; border-radius: 2px; background-image:linear-gradient(#dedede, #8282ff); box-shadow: -13px 0 #1c59f4, -26px 0 #1c59f4, -39px 0 #1c55eb, -52px 0 #1c50db, -65px 0 #1b49c9, -78px 0 #1b43b7, -91px 0 #1b3a9e, -104px 0 #1b338d, -117px 0 #1b2d7a, -130px 0 #1b286e, -143px 0 #1b286d, -156px 0 #1b2566;}\n\r" ".column_view-off {display: none;text-align: center;color: #000;}\n\r" ".column_view-on {background-color: #cbBEFF;}.mode_view-off {display: none;}.mode_view-on {background-color: #D1D2F3;}\n\r" ".css-checkbox input[type=checkbox] {\n\r" "display: none;}\n\r" ".css-checkbox label {\n\r" "position: relative;display: block;width: 64px;height: 10px;padding: 15px;\n\r" "border-radius: 50px;line-height: 10px;color: #31b3ff;font-size:48px;\n\r" "color: #0F0;text-shadow: 1px 1px 0px rgba(255, 255, 255, .15);background: rgb(71, 71, 71);\n\r" "box-shadow:\n\r" " 0 1px 0 rgba(255, 255, 255, .2), inset 0 0 0 5px rgb(60, 60, 60), inset 0 6px 6px rgba(0, 0, 0, .5), inset 0 -6px 1px rgba(255, 255, 255, .2);\n\r" "cursor: pointer;}\n\r" ".css-checkbox label:before {\n\r" "content: \"•\";font-size:48px;position: absolute;right: 15px;color: #F00;}\n\r" ".css-checkbox label:after {\n\r" "content: \"\";position: absolute;left: 5px;top: 5px;display: block;\n\r" "width: 50px;height: 30px;border-radius: 50px;\n\r" "background: #ccc linear-gradient(#fcfff4 0%, #dfe5d7 40%, #b3bead 100%);\n\r" "transition: .5s;}\n\r" ".css-checkbox input[type=checkbox]:checked + label:after {\n\r" "left: 40px;}\n\r" "</style>\n\r"; const static char header6[] PROGMEM = "<script type= \"text/javascript\">\n\r" "var get_ver = 1;\n\r" "var timer2;\n\r" "var str_URL = \"\"; var x = \"\";\n\r" "function sel_but(id_cb) {\n\r" "str_URL = id_cb.id;\n\r" "if (str_URL == \"rtc_ini\") {\n\r" "get_time();\n\r" "} else {\n\r" "if (str_URL == \"ok\") {\n\r" "if (document.getElementById(\"span_but\").textContent == \"▶\") {\n\r" "document.getElementById(\"span_but\").textContent = \"||\";\n\r" "str_URL += \"=1\";\n\r" "} else {\n\r" "document.getElementById(\"span_but\").textContent = \"▶\";\n\r" "str_URL += \"=0\";\n\r" "}}}\n\r" "trans_par(id_cb);}\n\r" "function get_time(){\n\r" "clock();\n\r" "str_URL += \"=\" + Number(Year) + \",\" + (Number(Month)+1) + \",\" + Number(Den) + \",\" + Number(hours) + \",\" + Number(minutes) + \",\" + Number(seconds);}\n\r" "function clock(){\n\r" "now = new Date();\n\r" "hours = now.getHours();\n\r" "minutes = now.getMinutes();\n\r" "seconds = now.getSeconds();\n\r" "Year = now.getFullYear();\n\r" "// var Month = checklength(now.getMonth()+1);\n\r" "Month = now.getMonth();\n\r" "Den = now.getDate();}\n\r" "function trans_par(id_cb) {\n\r" "var go_link = \"?\";\n\r" "if (document.getElementById(\"ip\").title != \"#\") //есть WiFi IP\n\r" "{ switch (get_ver) {\n\r" "case 1: go_link = go_link + \"ip=\" + document.getElementById(\"ip\").title + ';'; break\n\r" "case 2: go_link = \"http://\" + document.getElementById(\"ip\").title + \"?ip=192.168.0.128\" + ';'; break\n\r" "default: alert(\"no get\"); break}}\n\r" "//var lag = document.getElementById(\"r_sec2\").value;\n\r" "if (document.getElementById(\"te2\")){\n\r" "if (document.getElementById(\"te2\").checked) {\n\r" "timer2 = window.setTimeout(function(){str_URL2 = \"?\" + document.getElementById(\"pult\").title + \":\" + \"zz=0\";trans_get();},4000);}}\n\r" "if (document.getElementById('pultname')) { //pultname только для IR\n\r" "str_URL2 = go_link + document.getElementById(\"pultname\").textContent + ':' + str_URL;\n\r" "} else {str_URL2 = go_link + document.getElementById(\"pult\").title + ':' + str_URL;}\n\r" "//alert(\"str_URL2 \"+str_URL2);\n\r" "trans_get();}\n\r"; const static char header7[] PROGMEM = "function trans_get() {\n\r" "var xmlhttp = getXmlHttp(); \n\r" "//alert(\"str_URL2= \" + str_URL2);\n\r" "xmlhttp.open(\"GET\", str_URL2, true);\n\r" "var http = new XMLHttpRequest(), href = this.href;\n\r" "http.open(\"GET\", str_URL2);\n\r" "http.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n\r" "xmlhttp.onreadystatechange = function()\n\r" "{ if (xmlhttp.readyState == 4) {\n\r" "if (xmlhttp.status == 200) {\n\r" "x = xmlhttp.responseText;\n\r" "getParam(x);}}}\n\r" "xmlhttp.send(null);}\n\r"; const static char header8[] PROGMEM = "function getXmlHttp() {\n\r" "try {return new ActiveXObject(\"Msxml2.XMLHTTP\");}\n\r" "catch (e) {try {\n\r" "return new ActiveXObject(\"Microsoft.XMLHTTP\");}\n\r" "catch (ee) {}} if (typeof XMLHttpRequest != \"undefined\")\n\r" "{return new XMLHttpRequest();}}\n\r" "function getParam(get) {\n\r" "var tmp = new Array(); var tmp2 = new Array(); var param = new Array();\n\r" "//alert(\"get= \"+get)\n\r" "if (get != \"\") {\n\r" "tmp = (get.substr(1)).split(\"&\");\n\r" "for (var i = 0; i < tmp.length; i++) {\n\r" "tmp2 = tmp[i].split(\"=\");\n\r" "param[tmp2[0]] = tmp2[1];}\n\r" "for (var key in param) {\n\r" "if (param[key] != \"\") {\n\r" "if (key.indexOf(\"cb\") >= 0) {\n\r" "if (param[key] > 0) {\n\r" "document.getElementById(key).checked = true;\n\r" "} else {\n\r" "document.getElementById(key).checked = false;}\n\r" "} else {\n\r" "document.getElementById(key).value = param[key];\n\r" "}}}}}\n\r"; const static char header9[] PROGMEM = "function toggleView(source, tableId, tag) {\n\r" "var elems = document.getElementById(tableId).getElementsByTagName(tag);\n\r" "for (i = 0; i < elems.length; ++i) {\n\r" "toggleClasses(elems[i], \"column_view-off\", \"column_view-on\");}\n\r" "return false;}\n\r" "function toggleView_mode(source, tableId, tag) {\n\r" "var elems = document.getElementById(tableId).getElementsByTagName(tag);\n\r" "for (i = 0; i < elems.length; ++i) {\n\r" "toggleClasses(elems[i], \"mode_view-off\", \"mode_view-on\");}\n\r" "return false;}\n\r" "function toggleClasses(elem, className1, className2) {\n\r" "var clazz = elem.className.toString();\n\r" "if (clazz.indexOf(className1) >= 0) {\n\r" "elem.className = clazz.replace(className1, className2);\n\r" "} else if (clazz.indexOf(className2) >= 0) {\n\r" "elem.className = clazz.replace(className2, className1);}}\n\r"; const static char header10[] PROGMEM = "function my_timer(id_cb){\n\r" "if (document.getElementById(\"tt1\").checked){my_timer0(id_cb);}}\n\r" "function my_timer0(id_cb){\n\r" "var interval_id = setInterval(function() {\n\r" "if (document.getElementById(\"tt1\").checked == false){\n\r" "clearInterval(interval_id); }\n\r" "var my_clock = document.getElementById(\"my_clock\");\n\r" "var time =my_clock.innerHTML;\n\r" "var arr = time.split(\":\");\n\r" "var m = arr[0];\n\r" "var s = arr[1];\n\r" "if (s == 0) {\n\r" "s = document.getElementById(\"r_sec\").value;\n\r" "str_URL = \"zz=0\";\n\r" "trans_par(id_cb);\n\r" "}else s--; \n\r" "if (s < 10) s = \"0\" + s;\n\r" "if (document.getElementById(\"tt1\").checked) {\n\r" "document.getElementById(\"my_clock\").innerHTML = m + \":\" + s;}\n\r" "}, 1000);}\n\r" "function startTimer() {\n\r" "if (document.getElementById(\"pultname\")){\n\r" "if (document.getElementById(\"pultname\").textContent == \"wait\")\n\r" "{var my_host = unescape(document.location.pathname);\n\r" "var r = my_host.substring( my_host.lastIndexOf('/') + 1, my_host.length );\n\r" "str_URL = \"pn=\" + my_host.substring( my_host.lastIndexOf('/') + 1, my_host.length );\n\r" "trans_par(document.getElementById(\"pultname\"));}}\n\r" "setTimeout(startTimer, 1000);}\n\r"; const static char header11[] PROGMEM = "function sd_index(id_cb) {\n\r" "if (id_cb.id[0] == \"c\") {\n\r" "var l = id_cb.id.length;\n\r" "var sd = \"s\";\n\r" "for (var i = 1; i < id_cb.id.length; i++)\n\r" "sd = sd + id_cb.id[i];\n\r" "} else {\n\r" "sd = \"s\" + id_cb.id;}\n\r" "var indout = document.getElementById(sd);\n\r" "if (indout != null){\n\r" "if (document.getElementById(\"ce1\").checked) {\n\r" "indout.selectedIndex = 1;\n\r" "indout.style.backgroundColor = \"#fff894\";}}}\n\r" "function sel_test(id_cb) {\n\r" "var colo = id_cb.options[id_cb.selectedIndex].index;\n\r" "switch (colo) {\n\r" "case 0: set_color(id_cb, \"#94fff8\"); break\n\r" "case 1: set_color(id_cb, \"#fff894\"); break\n\r" "case 2: set_color(id_cb, \"#f294ff\"); break\n\r" "default: set_color(id_cb, \"#FFFFFF\"); break}\n\r" "x = id_cb.id; str_URL = x + \"=\" + colo;\n\r" "trans_par(id_cb);}\n\r"; const static char header12[] PROGMEM = "function set_color(el, cl) {\n\r" "el.style.backgroundColor = cl;}\n\r" "function polsun_val(id_cb){\n\r" "var x = id_cb.id;\n\r" "var newstr = x.replace(new RegExp(\"cd\"),\"cb\");\n\r" "if(document.getElementById(newstr)){\n\r" "if (id_cb.value >0)\n\r" "{document.getElementById(newstr).checked=true;}else{document.getElementById(newstr).checked=false;}}\n\r" "str_URL = id_cb.id+\"=\" + id_cb.value;\n\r" "if (document.getElementById(\"pultname\").textContent == \"mp3\"){\n\r" "document.getElementById(\"result1\").value = id_cb.value; \n\r" "}else{document.getElementById(\"result1\").value = str_URL;}\n\r" "sd_index(id_cb);trans_par(id_cb);}\n\r" "function cb_check0(id_cb) {\n\r" "y = id_cb.name; //IP adress\n\r" "x = id_cb.id;\n\r" "if (x.indexOf(\"vv\") >=0 ){x=\"vv12\";}\n\r" "if (id_cb.checked) {\n\r" "str_URL = x + \"=1\";\n\r" "} else {str_URL = x + \"=0\";}\n\r" "if(y !=\"\"){\n\r" "var temp_ip = document.getElementById(\"ip\").title;\n\r" "document.getElementById(\"ip\").title = y;\n\r" "trans_par(id_cb);\n\r" "//восстановить значение\n\r" "document.getElementById(\"ip\").title = temp_ip;\n\r" "}else{\n\r" "trans_par(id_cb);}}\n\r" "function cb_check(id_cb) {\n\r" "x = id_cb.id;\n\r" "y = x.replace(\"cb\", \"cd\");\n\r" "var rng = document.getElementById(y);\n\r" "if (id_cb.checked) {\n\r" "str_URL = x + \"=1\";\n\r" "rng.value = rng.max; sd_index(id_cb);} else {\n\r" "str_URL = x + \"=0\";\n\r" "rng.value = rng.min;}\n\r" "trans_par(id_cb);}\n\r"; const static char header13[] PROGMEM = "function f_rec(id_cb){\n\r" "var yyy = document.getElementById(\"rec\").style.display;\n\r" "if (yyy == \"none\"){\n\r" "document.getElementById(\"rec\").style.display = \"block\";\n\r" "str_URL = \"rec=1\";}else{\n\r" "document.getElementById(\"rec\").style.display = \"none\";\n\r" "str_URL = \"rec=0\";}\n\r" "trans_par(id_cb);}\n\r" "var old_rid;\n\r" "function r_check(id_cb){\n\r" "if(id_cb.checked){ if (id_cb.id == old_rid){\n\r" "id_cb.checked=false;\n\r" "old_rid = \"\";\n\r" "document.getElementById(\"but_rec\").style.display =\"none\";\n\r" "document.getElementById(\"but_rec\").disabled;\n\r" "}else{\n\r" "document.getElementById(\"but_rec\").style.display =\"block\";\n\r" "document.getElementById(\"ex_input\").value = document.getElementById(\"ex_\"+id_cb.id).value; \n\r" "old_rid = id_cb.id;}}}\n\r" "function rec_edit(id_cb){\n\r" "var new_id;\n\r" "for (var i=1; i <5; i++){\n\r" "if (document.getElementById(\"r\"+String(i)).checked){\n\r" "new_id = \"ex_r\"+String(i);}}\n\r" "document.getElementById(new_id).value = document.getElementById(\"ex_input\").value;\n\r" "str_URL = new_id + \"=\" + document.getElementById(new_id).value;\n\r" "alert(\"rec URL \" + str_URL);\n\r" "trans_par(id_cb);\n\r" "}\n\r" "function rec_alarm(id_cb){\n\r" "str_URL = id_cb.id + '=' + document.getElementById(\"time_h\").value + ',' + document.getElementById(\"time_m\").value; \n\r" "trans_par(id_cb);}\n\r" "function t_open(id_cb){\n\r" "if (document.getElementById(\"pult2\").style.display == \"none\"){\n\r" "document.getElementById(\"pult2\").style.display=\"block\";\n\r" "}else{\n\r" "document.getElementById(\"pult2\").style.display =\"none\";\n\r" "}}\n\r" "</script>\n\r" "</head>\n\r" "<body onload=\"startTimer()\">\n\r"; const static char header14[] PROGMEM = "<ul id=\"nav\">\n\r" "<li><a href=\"#\" class=\"sub\" tabindex=\"1\">select pult</a>\n\r" "<ul>\n\r" "<li style=\"text-align:center\"><a href=\"/macro\">MACRO</a></li>\n\r" "<li><a href=\"jvc\">JVC</a></li>\n\r" "<li><a href=\"lg\">LG</a></li>\n\r" "<li><a href=\"panasonic\">PANASONIC</a></li>\n\r" "<li><a href=\"samsung\">SAMSUNG</a></li>\n\r" "<li><a href=\"/sony\">SONY</a></li>\n\r" "<li><a href=\"/grail\">G-Rail</a></li>\n\r" "<li><a href=\"/map\">map</a></li>\n\r" "<li><a href=\"/ESP8266\">ESP8266</a></li>\n\r" "<li><a href=\"/light1\">Light1</a></li>\n\r" "<li><a href=\"/light2\">Light2</a></li>\n\r" "<li><a href=\"/socket\">РОЗЕТКИ</a></li>\n\r" "<li style=\"text-align:center\"><a href=\"/daily\">DAILY</a></li>\n\r" "<li onclick=\"f_rec(this)\" style=\"text-align:center\"><a>SCAN</a> <span id= \"rec\" style=\"display: none; color:#F00; font-weight:bold\" align=\"float\">REC</span></li>\n\r" "</ul></li></ul><!--end-->\n\r"; const static char file_mp1[] PROGMEM = "<table id=\"pult\" title=\"mp3\" width=\"202\" border=\"1\" bgcolor=\"#000066\" bordercolor=\"#666666\" style=\"color:#888\">\n\r" "<tr><td colspan=\"3\"><div class= \"ex_output\" style=\"width:176px;\">\n\r" "<output id=\"ex_out\"><span>DevKit ESP8266 Control</span></output>\n\r" "</div></td></tr>\n\r" "<tr><td width=\"58\"> </td>\n\r" "<td width=\"58\"><div class=\"but\" id=\"but_rec\" style=\"background-color: #999; color: #006; height:22px; width:50px;\" onclick=\"t_open(this)\" > <span style=\"margin-top:3px\" >clock</span> </div></td>\n\r" "<td width=\"58\"> </td></tr></table>\n\r" "<table id=\"pult2\" title=\"mp3\" width=\"202px\" border=\"0\" bgcolor=\"#000066\" bordercolor=\"#666666\" style=\"color:#888; display: block\">\n\r" "<tr width=\"58\" id=\"t_line1\">\n\r" "<td colspan=\"3\" style=\"color:#CCC; font-weight:bolder;\">\n\r" "<div class=\"but\" id=\"rtc_ini\" style=\"background-color: #F00; color: #EEE; height:22px; width:135px; margin-left:30px\" onClick=\"sel_but(this)\"><span style=\"margin-top:3px;\" >set real time</span> </div></td></tr>\n\r" "<tr id=\"t_line2\">\n\r" "<td width=\"58px\"><input type=\"number\" min=\"0\" max=\"23\" step=\"1\" id=\"time_h\" style=\"width:30px; text-align:center\" value=\"0\"/><span style=\"font-size:11px; color:#CCC\"> час</span></td>\n\r" "<td width=\"58px\"><input type=\"number\" min=\"0\" max=\"59\" step=\"1\" id=\"time_m\" style=\"width:30px;text-align:center\" value=\"0\"/><span style=\"font-size:11px; color:#CCC\"> мин</span></td>\n\r" "<td width=\"58px\"><div class=\"but\" id=\"alarm\" style=\"background-color: #999; color: #006; height:20px; width:50px;\" onclick=\"rec_alarm(this)\" > <span style=\"margin-top:4px\" >alarm</span> </div></td></tr></table>\n\r"; const static char file_mp2[] PROGMEM = "<table id=\"pult2\" width=\"202\" border=\"1\" bgcolor=\"#000066\" bordercolor=\"#666666\" style=\"color:#888\"><tr>\n\r" "<td width=\"58\"><input type=\"radio\" name=\"mp3\" id=\"ff1\" value=\"ie\" onclick=\"cb_check(this)\"> 1</td>\n\r" "<td width=\"58\"><input type=\"radio\" name=\"mp3\" id=\"ff2\" value=\"ie\" onclick=\"cb_check(this)\"> 2</td>\n\r" "<td width=\"58\"><input type=\"radio\" name=\"mp3\" id=\"ff3\" value=\"ie\" onclick=\"cb_check(this)\"> 3</td></tr>\n\r" "<tr><td><input type=\"radio\" name=\"mp3\" id=\"ff4\" value=\"ie\" onclick=\"cb_check(this)\"> 4</td>\n\r" "<td><input type=\"radio\" name=\"mp3\" id=\"ff5\" value=\"ie\" onclick=\"cb_check(this)\"> 5</td>\n\r" "<td><input type=\"radio\" name=\"mp3\" id=\"ff6\" value=\"ie\" onclick=\"cb_check(this)\"> 6</td></tr>\n\r" "<tr><td><input type=\"radio\" name=\"mp3\" id=\"ff7\" value=\"ie\" onclick=\"cb_check(this)\"> 7</td>\n\r" "<td><input type=\"radio\" name=\"mp3\" id=\"ff8\" value=\"ie\" onclick=\"cb_check(this)\">\n\r" "8</td>\n\r" "<td><input type=\"radio\" name=\"mp3\" id=\"ff9\" value=\"ie\" onclick=\"cb_check(this)\">\n\r" "9</td></tr>\n\r" "<tr><td><input type=\"radio\" name=\"mp3\" id=\"ff10\" value=\"ie\" onclick=\"cb_check(this)\">\n\r" "10</td>\n\r" "<td><input type=\"radio\" name=\"mp3\" id=\"ff11\" value=\"ie\" onclick=\"cb_check(this)\">\n\r" "11</td>\n\r" "<td><input type=\"radio\" name=\"mp3\" id=\"ff12\" value=\"ie\" onclick=\"cb_check(this)\">\n\r" "12</td></tr>\n\r"; const static char file_mp3[] PROGMEM = "<tr><td><input type=\"radio\" name=\"mp3\" id=\"ff13\" value=\"ie\" onclick=\"cb_check(this)\">\n\r" "13</td>\n\r" "<td><input type=\"radio\" name=\"mp3\" id=\"ff14\" value=\"ie\" onclick=\"cb_check(this)\">\n\r" "14</td>\n\r" "<td><input type=\"radio\" name=\"mp3\" id=\"ff15\" value=\"ie\" onclick=\"cb_check(this)\">\n\r" "15</td></tr>\n\r" "<tr><td><input type=\"radio\" name=\"mp3\" id=\"ff16\" value=\"ie\" onclick=\"cb_check(this)\">\n\r" "16</td>\n\r" "<td><input type=\"radio\" name=\"mp3\" id=\"ff17\" value=\"ie\" onclick=\"cb_check(this)\">\n\r" "17</td>\n\r" "<td><input type=\"radio\" name=\"mp3\" id=\"ff18\" value=\"ie\" onclick=\"cb_check(this)\">\n\r" "18</td></tr>\n\r" "<tr><td><input type=\"radio\" name=\"mp3\" id=\"ff19\" value=\"ie\" onclick=\"cb_check(this)\">\n\r" "19</td>\n\r" "<td><input type=\"radio\" name=\"mp3\" id=\"ff20\" value=\"ie\" onclick=\"cb_check(this)\">\n\r" "20</td>\n\r" "<td><input type=\"radio\" name=\"mp3\" id=\"ff21\" value=\"ie\" onclick=\"cb_check(this)\">\n\r" "21</td></tr>\n\r" "<tr><td ><div class=\"key\" id=key_left onclick=\"sel_but(this)\"><span style=\"font-size:24px; margin:2px;\">«</span></div></td>\n\r" "<td><div class=\"but\" id=ok onclick=\"sel_but(this)\"><span id=span_but style=\"font-size:24px;margin:2px;\">▶</span></div></td>\n\r" "<td><div class=\"key\" id=key_right onclick=\"sel_but(this)\"><span style=\"font-size:24px;margin:2px;\">»</span></div></td>\n\r" "</tr><tr>\n\r" "<td colspan=\"3\" align=\"center\" >volume =<span >\n\r" "<output id=\"result1\">0</output>\n\r" "</span></td></tr>\n\r" "<tr><td colspan=\"3\" align=\"center\"><input type=\"range\" onchange=\"polsun_val(this)\" class=\"rangeP\" id=\"cd30\" value=\"30\" max=\"30\" min=\"0\" /></td></tr>\n\r" "<tr><td colspan=\"3\"><div class=\"cleared\"></div>\n\r" "<div class= \"ex_pult\" style=\"width:192px; margin-left:0px;\">\n\r" "<output id=\"pultname\"><span>mp3</span></output>\n\r" "</div></td></tr></table>\n\r" "<div id=\"ip\" title=\"#\"></div>\n\r" "</body></html>\n\r"; const char* const html_header[] PROGMEM = {header0, header1, header2, header3, header4, header5, header6, header7, header8, header9, header10, header11, header12, header13, header14 }; const char* const html_mp3[] PROGMEM = {file_mp1, file_mp2, file_mp3}; /*--вариант 2---*/ const char* ssid = "ESP8266"; //имя точки подключения (WiFi сети), которую создаёт этот ESP8266 (WiFi router) const char* password = "testwifi"; //ключ или пароль WiFi сети (WiFi router) //---------------- //вариант 1 const char WiFiAPPSK[] = "testwifi"; //свой пароль, сеть будет (что-то вроде ThingDev-A37) IP 192.168.4.1 //--------- //======================= int maxval = 30; //====================== int pin = 2;//???????? int sos = 0; int cikl_avto = 1000; //интервал ~1 сек int cikl_current = 0; //интервал ~1 сек String priem = ""; String mess = ""; byte out_ip[] = { 192, 168, 4, 1 }; int k_time = 0; int k_speed = 1; int tt_time = 0; int cikl_count = 0; //====================== int num_trek = 20;//номер мп3-записи //pir ================= int pirPin = 16;//у автора 15 //вывод, пин, контакт для подключения датчика ???? к Arduino int ledPin = 2; //использование стандартного (встроенного) светодиода int val_pir = 0; //переменная для хранения состояния датчика ??? int count_pir = 0; //===================== //int SDA_I2C_Pin=4;//RTC ds3231, D14(D4) Arduino, GPIO4 ESP8266-12E //int SCL_I2C_Pin=5;//RTC ds3231, D15(D3) Arduino, GPIO5 ESP8266-12E int time_year; int time_month; int time_day; int time_week; int time_hour; int time_minute; int time_second; int alarm_h; int alarm_m; boolean time_boy = false; String zapros; String ex_link = ""; String ex_ip = ""; String temp_ip = "192.168.4.1"; int ind1, ind2; WiFiServer server(80); //создаем объект WEB-server на 80 порту WiFiClient client; //создаем объект client класса WiFiClient DateTime t_now; void setup() { mySoftwareSerial.begin (9600); Serial.begin(74880); //сообщаю что к каким пинам должно быть подключено Serial.println(""); Serial.println(F("for DFPlayer_Mini, mySoftwareSerial RX,TX=")); Serial.println(RX); Serial.println(TX); Serial.println(""); Serial.println(F("for DS3231 I2C define SDA, SCL=")); Serial.println(SDA); Serial.println(SCL); Serial.println(); Serial.println(F("UltraSonic TRIG_PIN, ECHO_PIN=")); Serial.println(TRIG_PIN); Serial.println(ECHO_PIN); Serial.println(); Serial.println(F("pir=")); Serial.println(pirPin); Serial.println(F("ledPin=")); Serial.println(ledPin); //Wire.begin(4, 5); //I2C для часов (int sda, int scl) , по умолчанию 4 (SDA) и 5 (SCL). //rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //для mp3 модуля //mp3_set_serial (mySoftwareSerial); // initializing the rtc if(!rtc.begin()) { Serial.println("setup_rtc.begin().Test RTC_DS3231. Couldn't find RTC!"); Serial.flush();//Ожидает завершения передачи исходящих последовательных данных. abort(); /* Функция abort () вызывает аварийное завершение программы. Эта реализация отключает прерывания и переходит к функции _exit (). с аргументом, равным 1. В ограниченной среде AVR выполнение эффективно останавливается входом в бесконечный цикл. */ } else { Serial.println(F("setup_connection to RTC_DS3231")); } if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3. Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); Serial.println(F("2.Please insert the SD card!")); while(true); } else { Serial.println(F("connection to DFPlayer")); } myDFPlayer.volume(20); //Set volume value. From 0 to 30 myDFPlayer.play(1); //Play the first mp3 //----Read imformation---- // Serial.println(myDFPlayer.readState()); //read mp3 state // Serial.println(myDFPlayer.readVolume()); //read current volume // Serial.println(myDFPlayer.readEQ()); //read EQ setting // Serial.println(myDFPlayer.readFileCounts()); //read all file counts in SD card // Serial.println(myDFPlayer.readCurrentFileNumber()); //read current play file number // Serial.println(myDFPlayer.readFileCountsInFolder(3)); //read fill counts in folder SD:/03 pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); // rtc.adjust(DateTime(__DATE__, __TIME__)); //rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //установка часов при компиляции pinMode(pirPin, INPUT); //настоить контакт для датчика как вход pinMode(ledPin, OUTPUT); //определить контакт со светодиодом как выход IPAddress ip(192, 168, 4, 1); //Node static IP IPAddress gateway(192, 168, 4, 2); IPAddress subnet(255, 255, 255, 0); //- See more at: http://www.esp8266.com/viewtopic.php?f=6&t=3522#sthash.sWvIJ5y5.dpuf //вариант 1 //WiFiClient client; //ruben //--------- //вариант 2 //WiFiClient client = server.available(); //проверяем, не подключен ли к нашему серверу клиент-браузер //-------- //---------вариант 2-------------------------- //====мне НЕ надо подключаться к сети. Подключаются по мне!!!! Я точка доступа!!! // Если мне надо подключиться к существующей WiFi-сети (роутеру/точке доступа) // WiFi.begin(ssid, password); //WiFi.config(ip, gateway, subnet); ////Node static IP установить статический IP адрес //delay(100); // Serial.println(""); //запускаю точку доступа, к которой будут подключаться клиенты(не более 5шт) WiFi.softAP(ssid);//, password что бы входить без пароля WiFi.softAPConfig(ip, gateway, subnet); delay(100); Serial.print("setup_Start_Soft-AP IP address = "); // "IP-адрес программной точки доступа = " Serial.println(WiFi.softAPIP()); //WiFiClient client = server.available(); //запускаю постоянную проверку не подключен ли к нашему серверу клиент-браузер server.begin();//"Веб-сервер запущен Serial.println("setup_HTTP server started"); // Wait for connection // Serial.print("WL_CONNECTED="); // Serial.println(WL_CONNECTED);//WL_CONNECTED=3 //WL_CONNECTED - если соединение с сетью установлено //WL_IDLE_STATUS - если включено питание, но соединение с сетью не установлено //while (WiFi.status() != WL_CONNECTED) { //здесь программа будет зациклена, пока к ней неподключится клиент //А это неправильно!!!!! // while (WiFi.status() !=1) { // delay(500); // Serial.print("."); //Serial.print("now_WiFi.status()="); //Serial.println(WiFi.status()); // } // Serial.print("Connected to "); // Serial.println(ssid); // Serial.print("IP address: "); // Serial.println(WiFi.localIP()); /* String str_ip = String(WiFi.localIP()); //192.168.0.104 = 1744873664 Serial.println(str_ip); */ // IPAddress ip = WiFi.localIP(); //file3a = "str_URL2=\"http://" + String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]) + "/led?\" + str_URL;"; t_now = rtc.now(); //=== Serial.println("setup_YYYY/MM/DD(dayOfTheWeek) HH:MM:SS"); Serial.print(t_now.year(), DEC); Serial.print('/'); Serial.print(t_now.month(), DEC); Serial.print('/'); Serial.print(t_now.day(), DEC); Serial.print(" ("); Serial.print(daysOfTheWeek[t_now.dayOfTheWeek()]); Serial.print(") "); Serial.print(t_now.hour(), DEC); Serial.print(':'); Serial.print(t_now.minute(), DEC); Serial.print(':'); Serial.print(t_now.second(), DEC); Serial.println(); //==================================== num_trek = random(1, 90); myDFPlayer.play(num_trek); //mp3_play(num_trek); // mp3_play (); // mp3_random_play (); } void loop(){ //Serial.printf("Stations connected to soft-AP = %d\n", WiFi.softAPgetStationNum()); // "количество Станций, подключенные к точке доступа = " //bell - бой часов ======================== time_get(); Serial.println("loop_start+time_get()"); delay (100); //400 без задержки (time_minute = 0 всегда!!!) // //===alarm - будильник=== // if (alarm_h != 0 || alarm_m != 0) { // if (time_hour == alarm_h && time_minute == alarm_m) { // //mp3_ // myDFPlayer.stop(); // delay (400); // //mp3_ // myDFPlayer.play(246); // delay (20000); // } // } // if (time_minute == 0) { // if (time_boy == false) { // //mp3_ // myDFPlayer.stop(); // delay (400); // if (time_hour == 12) { // //mp3_ // myDFPlayer.play(212); // } else { // //mp3_ // myDFPlayer.play(202); // } // time_boy = true; // delay (20000); // } // } // if (time_minute == 30) { // if (time_boy == false) { // //mp3_ // myDFPlayer.stop(); // delay (400); // //mp3_ // myDFPlayer.play(231); // time_boy = true; // delay (20000); // } // } // if (time_minute != 00 && time_minute != 30) { //сброс флага боя часов // time_boy = false; // } ////проверяем сигнал на pirPin // if (digitalRead(pirPin) != val_pir) { // val_pir = digitalRead(pirPin); // if (val_pir == 1) { // count_pir += 1; // if (time_hour >= 10 && time_hour < 22) { // num_trek = random(1, 90); // //mp3_ // myDFPlayer.play(num_trek); // } // } // /*else { // digitalWrite(ledPin, HIGH); // }*/ // Serial.print ("loop_pir count= "); // Serial.print (count_pir); // Serial.print (" val_pir= "); // Serial.println (val_pir); // } // digitalWrite(ledPin, val_pir);//digitalRead(pirPin)); /* //====UltraSonic================= long duration, distanceCm, distanceIn; //mp3_next (); //delay(4000); digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); duration = pulseIn(ECHO_PIN, HIGH); //длительность импульса в микросекундах // convert the time into a distance distanceCm = duration / 29.1 / 2 ; //расстояние в см. distanceIn = duration / 74 / 2; //расстояние в дюймах if (distanceCm <= 0) { Serial.println("Out of range"); } else { if (distanceCm < 110 && distanceCm > 100) { num_trek = random(14, 15); play_treck (10, num_trek); // mp3_play_physical (num_trek); delay (6000); // delay (8000);// tone(beep, 3000, 500); //30*distanceCm); //tone(pin, frequency, duration) // tone(beep,4000-distanceCm*100,30*distanceCm); //tone(pin, frequency, duration) // delay(distanceCm * 100); } else { num_trek = random(1, 88); if (distanceCm <= 100 && distanceCm > 80) { play_treck (6, num_trek); delay (8000); } else { if (distanceCm <= 80 && distanceCm > 70) { //mp3_next ();// mp3_play (10); play_treck (6, num_trek); delay (7000); } else { if (distanceCm <= 70 && distanceCm > 60) { //mp3_prev (); play_treck (6, num_trek); delay (6000); } else { if (distanceCm <= 60 && distanceCm > 50) { play_treck (6, num_trek); delay (5000); } else { if (distanceCm <= 50 && distanceCm > 40) { play_treck (6, num_trek); delay (4000); } else { if (distanceCm <= 40 && distanceCm > 30) { play_treck (6, num_trek); delay (3000); } else { if (distanceCm <= 30) { mp3_next (); delay (2000); } } } } } } } Serial.print(distanceIn); Serial.print("in, "); Serial.print(distanceCm); Serial.print("cm"); Serial.println(); } delay(500); } */ //-============================= // WiFiClient client = server.available(); //так было ruben // Serial.print("loop_server.handleClient()="); // Serial.println(server.handleClient());//class WiFiServer' has no member named 'handleClient' Serial.print("loop_server.available()="); Serial.println(server.available()); //client = server.available(); if (! server.available()) { Serial.println("loop_no connect to ESP8266. return"); return;//в начало loop } // Read the first line of the request String req = client.readStringUntil('\r'); Serial.print("loop. From client: "); Serial.println(req); priem = req; mess = ""; int length_priem=priem.length(); if(length_priem > 2) { Serial.print("loop. string.length(priem)="); Serial.println(length_priem); analis(); } delay(10); Serial.println("loop finish"); } void time_get(void) { t_now = rtc.now(); time_year = t_now.year(); time_month = t_now.month(); time_day = t_now.day(); //time_week = t_now.week(); time_hour = t_now.hour(); time_minute = t_now.minute(); /* Serial.print("time_minute: "); Serial.println(time_minute); */ time_second = t_now.second(); } //String zapros; //String ex_link = ""; //String ex_ip = ""; //String temp_ip = "192.168.4.1"; //int ind1, ind2; //=========================== void analis() { boolean fl_mess = true; String vetka; Serial.println("analis().start"); ex_ip = ""; ex_link = ""; ind1 = priem.indexOf("?ip="); //это внешний запрос? if (ind1 >= 0) { //да &ip=192.168.0.128;map:cb12=1 ind1 = priem.indexOf("="); //это внешний запрос? ind2 = priem.indexOf(';'); ex_ip = priem.substring(ind1 + 1, ind2); //ip запроса // Serial.println(ex_ip); priem.remove(0, ind2 + 1); // } else { //удаляем все вплоть до "?" ind1 = priem.indexOf('?'); priem.remove(0, ind1 + 1); } ind2 = priem.indexOf(':'); //GET /?map:cb0=0 HTTP/1.1 или map:cb0=0 HTTP/1.1 ex_link = priem.substring(0, ind2); // map - страничка запроса priem.remove(0, ind2 + 1); //cb0=0 HTTP/1.1 if (priem.indexOf("key_right") >= 0) { //mp3_ myDFPlayer.next(); mess = "play next"; } else { if (priem.indexOf("key_left") >= 0) { //mp3_ myDFPlayer.previous(); mess = "play prev"; } else { //Serial.println("ex_link " + ex_link); //Serial.println("1- " + priem); ind2 = priem.indexOf('='); String zapros = priem.substring(0, ind2); //cb0 (=0) или cbA0 // Serial.println("2- " + zapros); //================================================== vetka = zapros.substring(0, 2); //cb // Serial.println(zapros); zapros.remove(0, 2); //2 или A0 pin = zapros.toInt(); //номер песни priem.remove(0, ind2 + 1); //оставить все после знака = 0 HTTP/1.1 ind1 = priem.indexOf(' '); //найти пробел zapros = priem.substring(0, ind1); //все до пробела 0 sos = zapros.toInt(); //преобразовали значение в цифру //int vol_sos = sos; if (vetka == "GE" or vetka == "ne") //первый запрос- обновить страницу, проверка { client.flush(); for (int i = 0; i < 15; i++) //грузим общий HEADER { //mess = html_header[i];//неправильно!!!! mess = FPSTR(html_header[i]); Serial.print("945_otvet na zapros="); Serial.println(mess); client.print(mess); delay( 10 ); } for (int i = 0; i < 3; i++) { //mess = html_mp3[i]; mess = FPSTR(html_mp3[i]); client.print(mess); delay( 10 ); } fl_mess = false; } else { //out_mess("Get result=&out2=34&out1=19&out3=test"); //проверка обратной связи @test@ if (vetka == "ok") //on/off { if (sos == 0) { //mp3_pause (); myDFPlayer.pause(); } else { //mp3_random_play (); myDFPlayer.randomAll(); //Random play all the mp3. //mp3_play (); myDFPlayer.play(); } mess = " mp3(play"; } else { if (vetka == "cd") { //potenciometr if (pin == 30) { //mp3_set_volume(sos); myDFPlayer.volume(sos); //Set volume value. From 0 to 30 mess = "volume"; } } else { if (vetka == "ff") { Serial.print("ff = "); Serial.println(pin); //mp3_ myDFPlayer.play(pin); mess = "play #"; Serial.println(mess); } else { fl_mess = false; if (vetka == "zz") { //сбор и передача параметров на центральный сервер 192.168.0.128 out_mess (obzor()); // sborka(); } else { if (vetka == "rt") { //утановка часов "rtc_ini=" ind1 = priem.indexOf('='); ind2 = priem.indexOf(" HT"); mess = priem.substring(ind1 + 1, ind2); //Serial.println("mess= " + mess); rtc_razbor(mess); //Serial.println("mess= " + mess); rtc.adjust(DateTime(time_year, time_month, time_day, time_hour, time_minute, time_second)); //уcтановка!!! //rtc.adjust(DateTime(2016, 11, 7, 16, 20, 0)); //уcтановка!!! } else { if (vetka == "al") { Serial.println("priems= " + priem); ind1 = priem.indexOf('='); ind2 = priem.indexOf(" HT"); mess = priem.substring(ind1 + 1, ind2); ind2 = mess.indexOf(','); alarm_h = mess.substring(0, ind2).toInt(); //??? mess.remove(0, ind2 + 1); alarm_m = mess.toInt(); out_mess("Get result=&ex_out=alarm: " + String(alarm_h) + ':' + String(alarm_m)); } else { if (vetka == "ce") { out_mess("Get result=&out2=34&out1=19&out3=test"); } else { if (vetka == "tt") { tt_time = sos; Serial.println("tt_time = " + tt_time); //ex_ip = "192.168.0.128"; //out_mess("?map:result=&out2=34&out1=19&out3=test"); } } } } } } } } } } } if (fl_mess) { form_mess(mess, pin, sos); } Serial.println("analis() finish. vetka - " + vetka + ", pin - " + pin + ", vol - " + sos); } void rtc_razbor(String str_time) { int count_t = 0; while (str_time.indexOf(',') >= 0) { ind1 = str_time.indexOf(','); count_t += 1; switch (count_t) { case 1: { time_year = str_time.substring(0, ind1).toInt(); break; } case 2: { time_month = str_time.substring(0, ind1).toInt(); break; } case 3: { time_day = str_time.substring(0, ind1).toInt(); break; } case 4: { time_hour = str_time.substring(0, ind1).toInt(); break; } case 5: { time_minute = str_time.substring(0, ind1).toInt(); break; } default: // if nothing else matches, do the default // default is optional break; } str_time.remove(0, ind1 + 1); } time_second = str_time.substring(0, ind1).toInt(); } void sborka() { ex_ip = temp_ip; //"192.168.0.128"; //должны получить при внешнем запросе out_mess (obzor()); //("result=&out2=34&out1=19&out3=test"); } String obzor() { //состояние элементов управления String result; result = "result=&16=" + String(analogRead(16)) + "&5=" + String(analogRead(5)) + "&4=" + String(analogRead(4)) + "&0=" + String(analogRead(0)) + "&12=" + String(analogRead(12)) + "&13=" + String(analogRead(13)); return result; } void form_mess(String m_str, int spin, int ssos) { if (ex_ip == "") { mess = "Get result=&ex_out=" + m_str; } else { mess = "result=" + m_str; } if (spin != 20) { mess += spin; } else { mess += "A0"; } if (ssos != -1) { mess += ", "; if (ssos == -2) { mess += "OUTPUT"; } else { if (ssos == -3) { mess += "INPUT"; } else mess += ssos; } mess += ");"; } out_mess(mess); } void out_mess(String m_str) { if (ex_ip != "") { convert_ip(); //ex_ip if (client.connect(out_ip, 80)) { Serial.print("connected - "); client.flush(); m_str = "/" + ex_link + "?" + m_str; client.println(m_str); client.println(); } } else { client.flush(); mess = "HTTP / 1.1 200 OK\r\n"; //ruben mess += "Content - Type: text / html\r\n\r\n"; //ruben client.print(mess); client.print(m_str); } Serial.println(m_str); } void convert_ip(void) { priem = ex_ip; //ip в чистом виде 192.168.0.121 temp_ip = ex_ip; //запомнили для передачи параметров по таймеру for (int i = 0; i < 3; i++) { ind2 = priem.indexOf('.'); //192.168.0. 121/? out_ip[i] = priem.substring(0, ind2).toInt(); priem.remove(0, ind2 + 1); //Serial.println(cod_note); //test } out_ip[3] = priem.toInt(); } //--========================================================-- void INTERRUPT_ok() { Serial.print("INTERRUPT ok - "); Serial.println(pin); } //void play_treck (int tt, int num_) { // delay(tt * 1000); // mp3_play_physical (num_); //} /* function library DFPlayer_Mini_Mp3.h mp3_play (); //start play mp3_play (5); //play "mp3/0005.mp3" mp3_next (); //play next mp3_prev (); //play previous mp3_set_volume (uint16_t volume); //0~30 mp3_set_EQ (); //0~5 mp3_pause (); mp3_stop (); void mp3_get_state (); //send get state command void mp3_get_volume (); void mp3_get_u_sum (); void mp3_get_tf_sum (); void mp3_get_flash_sum (); void mp3_get_tf_current (); void mp3_get_u_current (); void mp3_get_flash_current (); void mp3_single_loop (boolean state); //set single loop void mp3_DAC (boolean state); void mp3_random_play (); */ /* функции библиотеки DFRobotDFPlayerMini.h //----Set volume---- myDFPlayer.volume(10); //Set volume value (0~30). myDFPlayer.volumeUp(); //Volume Up myDFPlayer.volumeDown(); //Volume Down //----Set different EQ эквалайзер---- myDFPlayer.EQ(DFPLAYER_EQ_NORMAL); // myDFPlayer.EQ(DFPLAYER_EQ_POP); // myDFPlayer.EQ(DFPLAYER_EQ_ROCK); // myDFPlayer.EQ(DFPLAYER_EQ_JAZZ); // myDFPlayer.EQ(DFPLAYER_EQ_CLASSIC); // myDFPlayer.EQ(DFPLAYER_EQ_BASS); //----Set device we use SD as default---- // myDFPlayer.outputDevice(DFPLAYER_DEVICE_U_DISK); myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD); // myDFPlayer.outputDevice(DFPLAYER_DEVICE_AUX); // myDFPlayer.outputDevice(DFPLAYER_DEVICE_SLEEP); // myDFPlayer.outputDevice(DFPLAYER_DEVICE_FLASH); //----Mp3 control---- // myDFPlayer.sleep(); //sleep // myDFPlayer.reset(); //Reset the module // myDFPlayer.enableDAC(); //Enable On-chip DAC // myDFPlayer.disableDAC(); //Disable On-chip DAC // myDFPlayer.outputSetting(true, 15); //output setting, enable the output and set the gain to 15 //----Mp3 play---- myDFPlayer.next(); //Play next mp3 myDFPlayer.previous(); //Play previous mp3 myDFPlayer.play(1); //Play the first mp3 myDFPlayer.loop(1); //Loop the first mp3 myDFPlayer.pause(); //pause the mp3 myDFPlayer.start(); //start the mp3 from the pause myDFPlayer.playFolder(15, 4); //play specific mp3 in SD:/15/004.mp3; Folder Name(1~99); File Name(1~255) myDFPlayer.enableLoopAll(); //loop all mp3 files. myDFPlayer.disableLoopAll(); //stop loop all mp3 files. myDFPlayer.playMp3Folder(4); //play specific mp3 in SD:/MP3/0004.mp3; File Name(0~65535) myDFPlayer.advertise(3); //advertise specific mp3 in SD:/ADVERT/0003.mp3; File Name(0~65535) myDFPlayer.stopAdvertise(); //stop advertise myDFPlayer.playLargeFolder(2, 999); //play specific mp3 in SD:/02/004.mp3; Folder Name(1~10); File Name(1~1000) myDFPlayer.loopFolder(5); //loop all mp3 files in folder SD:/05. myDFPlayer.randomAll(); //Random play all the mp3. myDFPlayer.enableLoop(); //enable loop. myDFPlayer.disableLoop(); //disable loop. */
Вы правда думаете, что кто-то станет копать 1200 строчек нечитаемого кода. даже не имея от вас четких указаний. что же не работает?
Попробуйте для начала упростить код. Если вы считаете. что дело в веб-контенте - оставьте только сервер и этот контент. проверьте, как будет работать.
Не говоря уж о том, что примерно четверть кода в листинге закомментирована... Если этот код не нужен. зачем Вы его выложили?
Вы правда думаете, что кто-то станет копать 1200 строчек нечитаемого кода. даже не имея от вас четких указаний. что же не работает?
Попробуйте для начала упростить код. Если вы считаете. что дело в веб-контенте - оставьте только сервер и этот контент. проверьте, как будет работать.
Не говоря уж о том, что примерно четверть кода в листинге закомментирована... Если этот код не нужен. зачем Вы его выложили?
1)Спасибо, что откликнулись. Мне никто ничего не должен и поэтому если этот проект заглянувшему в эту ветку не интересен - воспитанный человек молча пройдёт мимо. Но! Я ведь привёл не только "проштудированный" мной код, и дал ссылки на оригинал. Не нравится мой код-посмотрите код автора. Он конечно более красивый, но даже не компилируется.
2)Я очень четко указал, что не работает - страница не грузится в браузер. Другие проблемы меня не интересуют. Я их сам разгребу.
3)Некорый Код автора закомментирован. Я его не правил. Мои комментарии в основном вверху и носят справочный характер. Я люблю делать для себя памятки.
4)Если кто-то решит посмотреть в чем "собака зарыта" я думаю не проблема скопипастить этот огромный код и увидеть суть проблемы.
Повторяю, что меня интересует ТОЛЬКО почему не полностью грузится страница в браузер. И если бы она никода не грузилась!!!! А так ведь у автора работала и даже у меня пару раз из ста с этим кодом загрузилась.
Вот это почему сделано?
//client = server.available();
Вообще, как мне кажется после беглого чтения - код крайне... как бы это выразится... оригинальный. Я бы на месте ESP-шки заглючил.
Повторяю, что меня интересует ТОЛЬКО почему не полностью грузится страница в браузер. И если бы она никода не грузилась!!!! А так ведь у автора работала и даже у меня пару раз из ста с этим кодом загрузилась.
какая именно страница? Если речь о том жутком ява коде. что занимает первую половину скетча - то я как не старался - так и не нашел, где же вы этот код в своем скетче используете
Вы из кода всю работу с HTML. насколько я вижу - выкинули... метод handle_client() закомментирован. Говорите у вас страница "иногда загружается" ? - покажите строчку в коде. где это происходит. По-моему. она не загружается вообще... и не должна с таким кодом.
Вы, видимо, кое-что понимаете в коде (или, точнее, думаете что понимаете) - поэтому полезли править работающий код, не разобравшись в том, как он работает. Был бы на вашем месте менее самоувереный новичок - он бы, обнаружив ошибку, пошел спрашивать на форум и выяснил, что нужно просто найти именно те библиотеки, которыми пользовался автор - с ними бы собралось без проблем. А вкерсия ардуино иде тут вовсе не при чем.
Вот это почему сделано?
//client = server.available();
Вообще, как мне кажется после беглого чтения - код крайне... как бы это выразится... оригинальный. Я бы на месте ESP-шки заглючил.
Спасибо, что уделили моей проблеме время. Прямо сейчас я не могу на этот вопрос ответить. С ESP8266 я столкнулся в первый раз, поэтому даже не знаю, я ли это сделал и если я - то сейчас не помню почему. Я на месяц этот проект отложил, так как было много других проблем.
Повторяю, что меня интересует ТОЛЬКО почему не полностью грузится страница в браузер. И если бы она никода не грузилась!!!! А так ведь у автора работала и даже у меня пару раз из ста с этим кодом загрузилась.
какая именно страница? Если речь о том жутком ява коде. что занимает первую половину скетча - то я как не старался - так и не нашел, где же вы этот код в своем скетче используете
А что их несколько? Я не могу Вам ответить на Ваш вопрос. По тому, что я видел у себя на ПК и по описанию автора грузится одна страница с элементами настройки часов. Так вот, в основном в браузере ничего не появлялось. Поэтому я попытался посмотреть, принял ли браузер хоть что-нибудь. На тот момент, когда я смотрел в браузере было несколько строк. Т.е. ESP8266 что-то успевал передать. Сейчас попробую поискать скриншоты на компьютере.
не надо, я уже нашел.
Вы из кода всю работу с HTML. насколько я вижу - выкинули... метод handle_client() закомментирован. Говорите у вас страница "иногда загружается" ? - покажите строчку в коде. где это происходит. По-моему. она не загружается вообще... и не должна с таким кодом.
Вы, видимо, кое-что понимаете в коде (или, точнее, думаете что понимаете) - поэтому полезли править работающий код, не разобравшись в том, как он работает. Был бы на вашем месте менее самоувереный новичок - он бы, обнаружив ошибку, пошел спрашивать на форум и выяснил, что нужно просто найти именно те библиотеки, которыми пользовался автор - с ними бы собралось без проблем. А вкерсия ардуино иде тут вовсе не при чем.
Уважаемый b707, Возможно Вы абсолютно правы, что я что-нибудь лишнее заремировал. Но код был точно неработающий на моей версии arduino IDE. Я заставил работать на своей конфигурации arduino IDE другой проект автора с аналогичной идеалогией http://ruben1.narod.ru/hobby/arduino/wemos_control.html Поэтому я не полный идиот, как Вам может сейчас показаться. Я заставил в говорящих часах работать ту часть кода, которая отвечает за dfPlayer и DS3231. C HTML и JAVA я совершенно незнаком. Поэтому когда уперся в эти "стены", после нескольких попыток, решил обратиться на форум.
Но нарисовалась проблема, которую я так и не смог решить. При попытке компиляции проекта в моей конфигурации (Windows_7_max_32bit + Arduino IDE v1.8.13 + плата WeMos R1 D1+ dfplayer + DS3231) проект не компилировался. Проблема оказалась в несовместимости последней Arduino IDE v1.8.13 с версией библиотеки для dfplayer в проекте Лачинова. Заменил библиотеку, поменял используемые выводы WeMos, исправил способ чтения из PROGMEM и проект откомпилировался и залился в ESP8266. Но при попытке открыть страницу из браузера она редко открывается. Сейчас пишет, что страница недоступна. При сбросе может воспроизвести рычание и несколько файлов. В HTML-коде, видимо, используется что-то из семейства java, в котором я не разбираюсь. Кто разбирается, может поможете заставить работать.
В принципе, подход, при котором правится старое, чтобы добиться совместимости с новым, верен. Но коль скоро Вы столкнулись с проблемами на этом пути, мне кажется, целесообразнее было бы подойти с другой стороны: добиться работоспособности проекта на более старой версии Arduino IDE. И только в случае, если проект оправдает ожидания, пытаться "осовременить" его.
В принципе, подход, при котором правится старое, чтобы добиться совместимости с новым, верен. Но коль скоро Вы столкнулись с проблемами на этом пути, мне кажется, целесообразнее было бы подойти с другой стороны: добиться работоспособности проекта на более старой версии Arduino IDE. И только в случае, если проект оправдает ожидания, пытаться "осовременить" его.
Абсолютно с Вами согласен!!! Но проблема в том, что авторы проектов не думают о завтрашнем дне и подсознательно надеются на адекватность разработчиков Arduino IDE. В том смысле, что разработчики будут поддерживать совместимомть версий. Поэтому не указывают какие версии, а правильнее от какой даты, библиотеки они использовали в своём проекте. Я сам наступил на эти грабли. В 2015г реализовал проект, а в 2018 не смог его "подпилить", так как не сохранил исходную конфигурацию библиотек. А потом так и не смог восстановить. С тех пор вместе с проектом храню копию Arduino IDE.
В данном оригинальном проекте автор не указывает конкретные версии библиотек. Кроме того, у меня другая плата с ESP8266. Думаю было бы бессмысленно обращаться на форум с моей проблемой, если бы проект не "взлетел". Вы бы первым предложили обновить Arduino IDE и библиотеки до последней версии. Как-то так....
а смысл хранить копию IDE если для ESP библиотеки хранятся как системные, обновился с версии 1.0. и всё )))
а смысл хранить копию IDE если для ESP библиотеки хранятся как системные, обновился с версии 1.0. и всё )))
А кто говорит про ESP библиотеки? Я говорю про ВСЕ библиотеки, используемые в проекте.
Вобщем, вывод: во всем виноват Чубайс. Он же Рубен.
проблема в том, что авторы проектов не думают о завтрашнем дне и подсознательно надеются на адекватность разработчиков Arduino IDE. В том смысле, что разработчики будут поддерживать совместимомть версий. Поэтому не указывают какие версии, а правильнее от какой даты, библиотеки они использовали в своём проекте. Я сам наступил на эти грабли. В 2015г реализовал проект, а в 2018 не смог его "подпилить", так как не сохранил исходную конфигурацию библиотек. А потом так и не смог восстановить. С тех пор вместе с проектом храню копию Arduino IDE.
ну ерунду же полную пишете!
Как это вижу я - был у человека проект, работающий. Прошло несколько лет, немного обновился ИДЕ, вышли новые версии некоторых библиотек (далеко не всех). Проект перестал собираться. - Обычное дело.
В таком случае, как правило, достаточно поменять пару-тройку строчек, чтобы все собралось. Большинство программистов консервативны. изменения в библиотеках, такие, чтобы она стала полностью несовместима с ранними версиями - довольно редкий случай. Вы же рубите с плеча, начали кромсать код, похоже, не особо его понимая.
Особенно характерно выглядит случай с "вашим собственным проектом", который вы не смогли собрать спустя некоторое время. Это уж ни в какие ворота... Такое может быть только в одном случае - когда на самом деле это никакой не "ваш проект", а всего лишь надерганный по кусочкам из чужих скетчей, кусочкам, в которых вы ни черта не понимаете.
Пока у меня складывается впечатление, что относительно своих знаний в области программирования вы либо очень заблуждаетесь, либо банально приукрашиваете. Вам не надо, извините, выпендриваться, пытаясь "исправить" код, который в этом, имхо, не нуждается... Нужно вернутся к оригиналу и попытаться разобраться, почему жже он не собирается.
Вобщем, вывод: во всем виноват Чубайс. Он же Рубен.
проверил тот проект, что ТС запустил, под версией 2.74 (ESP8266) компилируется, заливается но валится в стеке, под версией 2.00 (а это минимально доступная) не работает, но сериале попытки вывода страниц имеются, видимо проблемы всё таки в коде )))
это не меняет общего принципа : не понимаешь - не лезь
Особенно характерно выглядит случай с "вашим собственным проектом", который вы не смогли собрать спустя некоторое время. Это уж ни в какие ворота... Такое может быть только в одном случае - когда на самом деле это никакой не "ваш проект", а всего лишь надерганный по кусочкам из чужих скетчей, кусочкам, в которых вы ни черта не понимаете.
Пока у меня складывается впечатление, что относительно своих знаний в области программирования вы либо очень заблуждаетесь, либо банально приукрашиваете. Вам не надо, извините, выпендриваться, пытаясь "исправить" код, который в этом, имхо, не нуждается... Нужно вернутся к оригиналу и попытаться разобраться, почему жже он не собирается.
Кто Вам сказал, что я его повторно не собрал? Я его собрал и он даже некоторое время работает, но потом "падает". Поскольку повторный проект для меня был не критичный - я его забросил. Первая версия работает - и ладно. Поэтому не делайте поспешных умозаключений. Ардуино - это моё хобби. И тратить слишком много времени на него я не могу. Из этого следует вывод, что как программист Си - я уровнем около плинтуса. Но это вовсе не значит, что я не могу разобраться в коде для Ардуино. И я не выпендриваюсь. Я тупо хотел повторить рабочий проект, но обнаружилось столько нюансов....
Еще раз хочу подчеркнуть свою просьбу и проблему. HTML страница из ESP8266 частично передаётся в браузер (я это проверил), но не вся. Почему так происходит? Мне кажется, что это связано с изменением ядра ESP8266, а код Ардуино или Java этого не учитывает.
И еще... Это неправильный принцип "не понимаешь - не лезь". Правильный другой - если хуже уже не сделаешь, то хоть узнаешь как работает. Поэтому врачи проводят вскрытие трупов, когда не знают отчего человек умер. Технику безопасности тоже надо очень учитывать, разбирая гранату.
тот код, что приведен ТС-ом в первом посте неработоспособен вообще. Например потому, что "client" нигде не соединяется. То есть то, что хоть что-то работает - либо случайность, либо враньё.
Следует взять самый простой пример на веб вервер и "плясать" от него.
Вот пример WiFiManualWebServer прямо из IDE.
Обращаем внимание на то, что ПЕРЕД выводом в браузер клиента (client.print()) мы его подключаем, проверяя, нет ли подключений (строка 57). Аналогичного НЕТ у ТС.
И еще... Это неправильный принцип "не понимаешь - не лезь". Правильный другой - если хуже уже не сделаешь, то хоть узнаешь как работает. Поэтому врачи проводят вскрытие трупов, когда не знают отчего человек умер. Технику безопасности тоже надо очень учитывать, разбирая гранату.
В настоящий момент ты более похож на вивисектора, вскрывающего пока живого ;))) или зольдатен, разбирающего неразряженную гранату! Уж прости, неудержался! ;))))
в оригинале, который кстати под 1.8.9 прекрасно компилируется и заливается, эта строка есть (749), в правленом это 888 и чуток повыше, но они закомментированны, но не в этом суть, ядро использую 2.0 на ESP8266, та же бодяга с выводом страницы:
Вопрос в другом, были ли для ESP8266 ядра ниже версии 2.0?
сам и отвечу, были, проекты компилировались под ядро - esp8266 1.6.5-947-g39819f0
найти его, не удалось
ua6em, спасибо за конструктивизм!!!
Всех с наступающим Новым годом!!!! Счастья и здоровья даром!
ua6em, спасибо за конструктивизм!!!
Вот тебе еще: