Всем привет. Недавно на форуме Arduino.ru создал тему в помощь моему проекту, что-то типо умного дома))) Но т.к. он почемуто у меня перестал работать(сайт), то пишу здесь. Имеется рабочая схема(2 скетча): К Ардуино: Код (C++): HardwareSerial & ESPport = Serial3; const int COM_BAUD = 9600; String searching = ""; int readreley; int Trig_pin = 2; // управляющий пин подключен к 2 пину на ардуино. int Echo_pin = 3; // пин с данными от датчика подключен к 3 пин на ардуино. int distacne_cm;// переменная длины импульса. int sm;// переменная расстояния к предмету. #define RTIME1 0.5 #define RTIME2 1 #define RTIME3 2 #define RTIME4 1 #define RTIME5 1 int reley1 = 4; int reley2 = 5; int reley3 = 6; int reley4 = 7; int reley5 = 8; int reley6 = 9; bool y = false; unsigned long currentTime;//переменные для времени unsigned long loopTime; void setup() { pinMode(Trig_pin, OUTPUT);//2 лапка - выход pinMode(Echo_pin, INPUT);//3 лапка - вход Serial.begin(9600); // открываем сериал порт pinMode(reley1, OUTPUT); pinMode(reley2, OUTPUT); pinMode(reley3, OUTPUT); pinMode(reley4, OUTPUT); pinMode(reley5, OUTPUT); pinMode(reley6, OUTPUT); ESPport.begin(115200); Serial.begin(COM_BAUD); Serial.println("Setup done"); currentTime = millis(); // считываем время loopTime = currentTime; } void loop() { if ( ESPport.available() > 0) { char ch = ESPport.read(); if (ch == '\r' || ch == '\n') { //Реле 1 if (searching == "LED1-ON") { digitalWrite(reley1, 1); } if (searching == "LED1-OFF") { digitalWrite(reley1, 0); } //Реле 2 if (searching == "LED2-ON") { digitalWrite(reley2, 1); } if (searching == "LED2-OFF") { digitalWrite(reley2, 0); } //Реле 3 if (searching == "LED3-ON") { digitalWrite(reley3, 1); } if (searching == "LED3-OFF") { digitalWrite(reley3, 0); } //Реле 4 if (searching == "LED4-ON") { digitalWrite(reley4, 1); } if (searching == "LED4-OFF") { digitalWrite(reley4, 0); } //Реле 5 if (searching == "LED5-ON") { digitalWrite(reley5, 1); } if (searching == "LED5-OFF") { digitalWrite(reley5, 0); } //Стоп if (searching == "STOP") { y ^= false; } searching = ""; } else searching += ch; Serial.write( ESPport.read()); } digitalWrite(Trig_pin, HIGH); delayMicroseconds(10); digitalWrite(Trig_pin, LOW); distacne_cm = pulseIn(Echo_pin, HIGH); sm = distacne_cm / 29 / 2; if (sm >= 5) { if (y == true) { timereley(); } } Serial.println(sm); delay(100) } void timereley() { currentTime = millis(); // считываем время if (currentTime - loopTime >= RTIME1 * 60000) { digitalWrite(reley1, HIGH); ESPport.write('Q'); } if (currentTime - loopTime >= RTIME2 * 60000) { digitalWrite(reley2, HIGH); ESPport.write('E'); } if (currentTime - loopTime >= RTIME3 * 60000) { digitalWrite(reley3, HIGH); ESPport.write('T'); } if (currentTime - loopTime >= RTIME4 * 60000) { digitalWrite(reley4, HIGH); ESPport.write('U'); } if (currentTime - loopTime >= RTIME5 * 60000) { digitalWrite(reley5, HIGH); ESPport.write('O'); } } И для ESP8266(в качестве прошивки): Код (C++): #include <ESP8266WiFi.h> const char* ssid = "DIR-615RU";// ssid вашего роутера const char* password = "15091966";// пароль вашего роутера //int ledPin = 2; // GPIO2 WiFiServer server(80); boolean PinStatus[] = {1, 2, 3, 4, 5, 6}; boolean PinTiming[] = {1, 2, 3, 4, 5}; int incomingByte; void setup() { Serial.begin(115200); delay(10); //pinMode(ledPin, OUTPUT); //digitalWrite(ledPin, LOW); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); //Serial.println("Server started"); // Print the IP address Serial.print("Use this URL to connect: "); Serial.print("http://"); Serial.print(WiFi.localIP()); Serial.println("/"); for (int i = 0; i < 6; i++) PinStatus[i] = false; } void loop() { // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data //Serial.println("new client"); while (!client.available()) { delay(1); } // Read the first line of the request String request = client.readStringUntil('\r'); //Serial.println(request); client.flush(); // Match the request // Return the response client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); // do not forget this one client.println("<!DOCTYPE HTML>"); client.println("<html>"); //1 реле if (request.indexOf("/LED1=ON") != -1) { Serial.println("LED1-ON"); PinStatus[0] = true; } if (request.indexOf("/LED1=OFF") != -1) { Serial.println("LED1-OFF"); PinStatus[0] = false; } //2 реле if (request.indexOf("/LED2=ON") != -1) { Serial.println("LED2-ON"); PinStatus[1] = true; } if (request.indexOf("/LED2=OFF") != -1) { Serial.println("LED2-OFF"); PinStatus[1] = false; } //3 реле if (request.indexOf("/LED3=ON") != -1) { Serial.println("LED3-ON"); PinStatus[2] = true; } if (request.indexOf("/LED3=OFF") != -1) { Serial.println("LED3-OFF"); PinStatus[2] = false; } //4 реле if (request.indexOf("/LED4=ON") != -1) { Serial.println("LED4-ON"); PinStatus[3] = true; } if (request.indexOf("/LED4=OFF") != -1) { Serial.println("LED4-OFF"); PinStatus[3] = false; } //5 реле if (request.indexOf("/LED5=ON") != -1) { Serial.println("LED5-ON"); PinStatus[4] = true; } if (request.indexOf("/LED5=OFF") != -1) { Serial.println("LED5-OFF"); PinStatus[4] = false; } //6 реле if (request.indexOf("/STOP") != -1) { Serial.println("STOP"); PinStatus[5] = true; } if (request.indexOf("/STOP") != -1) { Serial.println("STOP"); PinStatus[5] = false; } // Set ledPin according to the request //digitalWrite(ledPin, value); // client.print("Led pin 1 is now: "); // if(PinStatus[1] == true) client.print("ON"); //if(PinStatus[1] == false) client.print("OFF"); //client.println(""); //client.print("Led pin 2 is now: "); //if(PinStatus[2] == true) client.print("ON"); //if(PinStatus[2] == false) client.print("OFF"); if (PinStatus[0] == false) { client.println("RELE 1: <a href=\"/LED1=ON\">OFF</a>"); } if (PinStatus[0] == true) { client.println("RELE 1: <a href=\"/LED1=ON\">OFF</a>"); } if (PinStatus[1] == false) { client.println("RELE 1: <a href=\"/LED1=ON\">OFF</a>"); } if (PinStatus[1] == true) { client.println("RELE 1: <a href=\"/LED1=ON\">OFF</a>"); } if (PinStatus[2] == false) { client.println("RELE 1: <a href=\"/LED1=ON\">OFF</a>"); } if (PinStatus[2] == true) { client.println("RELE 1: <a href=\"/LED1=ON\">OFF</a>"); } if (PinStatus[3] == false) { client.println("RELE 1: <a href=\"/LED1=ON\">OFF</a>"); } if (PinStatus[3] == true) { client.println("RELE 1: <a href=\"/LED1=ON\">OFF</a>"); } if (PinStatus[4] == false) { client.println("RELE 1: <a href=\"/LED1=ON\">OFF</a>"); } if (PinStatus[4] == true) { client.println("RELE 1: <a href=\"/LED1=ON\">OFF</a>"); } if (PinStatus[5] == false) client.println("RELE 6: <a href=\"/STOP\">STOP</a></br>"); if (PinStatus[5] == true) client.println("RELE 6: <a href=\"/STOP\">STOP</a></br>"); client.println("</html>"); delay(1); //Serial.println("Client disonnected"); //Serial.println(""); if (Serial.available() > 0) //если есть доступные данные { incomingByte = Serial.read(); if (incomingByte == 'Q')PinStatus[0] = true; if (incomingByte == 'W')PinStatus[0] = false; if (incomingByte == 'E')PinStatus[1] = true; if (incomingByte == 'R')PinStatus[1] = false; if (incomingByte == 'T')PinStatus[2] = true; if (incomingByte == 'Y')PinStatus[2] = false; if (incomingByte == 'U')PinStatus[3] = true; if (incomingByte == 'I')PinStatus[3] = false; if (incomingByte == 'O')PinStatus[4] = true; if (incomingByte == 'P')PinStatus[4] = false; if (incomingByte == 'A')PinStatus[5] = true; if (incomingByte == 'S')PinStatus[5] = false; } }
Это полностью рабочие скетчи. Но вот теперь вопрос: Как добавить в прошивку esp8266, Editbox, а желательно вот это чудо: HTML: <input type="number" id="Editbox1" style="position:absolute;left:125px;top:290px;width:47px;height:18px;line-height:18px;z-index:9;" name="Editbox1" value="" maxlength="3"> Хочу с помощью Editbox сделать управлением временем включения, которые сейчас определяются массивами Код (C++): RTIME1-RTIME5 Буду рад услышать любой совет. Спасибо.
Такая фишка не проканывает: Код (C++): client.println(<inputtype="number"id="Editbox1"style="position:absolute;left:125px;top:290px;width:47px;height:18px;line-height:18px;z-index:9;"name="Editbox1"value=""maxlength="3">") Ругается на " в скетче - видать путается))).
Кажется внешние и вложенные кавычки не могут быть одинаковыми попробуйте заменить на "...'....' .." или наоборот '..."..."...' И я бы не светил пароль WiFi тем более дату рождения...
Ну и да: Как мне лучше вывести показания с Editbox1 в переменную на ардуино RTIME1, соответственно? Заранее спасибо!
О экранировании – Код (C++): char str[]="input type="number" id="Editbox1" "; ^ Error char str[]="input type=\"number\" id=\"Editbox1\" "; в первом варианте лексический анализатор вторую двойную кавычку посчитает концом строки, а дальнейший текст будет интерпретировать как операторы языка. Во втором экранирующий символ backslash укажет анализатору, что следующий символ надо интерпретировать как двойную кавычку , а не конец лексемы.
Как оформить запрос на получение данных с Editbox1? Я просто в html не бум-бум! Потомучто если я получу по запросу данные с каждого из компонентов, то тогда смогу делать с этими данными, что захочу)).
За время мозгобоя я пришол к выводу, что в таком варианте либо вообще нельзя выводить строки, либо весьма затруднительно. Спасибо всем кто писал...