witty проблемы
- Войдите на сайт для отправки комментариев
Чт, 02/02/2017 - 00:37
Не могу запустить сервер по управлению 2 реле.
Скетч делал сам. Не судите строго.
#include <ESP8266WiFi.h> #include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT11 const char* ssid = "Huawei_HG530"; const char* password = "1233456789"; WiFiServer server(80); int numPins = 2; int pins[] = { 14, 15}; // Пины для реле int pinState[] = {0, 0}; // Состояние пинов DHT dht(DHTPIN, DHTTYPE); void setup() { for (int i = 0; i < numPins; i++) { pinMode(pins[i], OUTPUT); digitalWrite(pins[i], 1); } Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } server.begin(); Serial.print("IP adress: "); Serial.println(WiFi.localIP()); } void loop() { float h = dht.readHumidity(); float t = dht.readTemperature(); WiFiClient client = server.available(); if (!client) { while (client.connected()) { // Проверяем идет ли запрос к серверу int dataCount = client.available(); if (dataCount > 0) { // Считываем данные передаваемые серверу с клиента (броузера) for (int i = 0; i < dataCount; i++) { char ch = client.read(); // Если данные передаются, то они будут переданы POST запросом, который начинается с символа 'P' if (i == 0 && ch != 'P') break; if (ch == '\n' && i < dataCount - 1) { // Находим строку, в которой содержатся передаваемые данные char chNext = client.read(); // Формат строки r2=on&r3=on&r4=on (Пример если нужно включены 2,3,4 реле) if (chNext == 'r') { // Выключаем все реле pinState[0] = 0; pinState[1] = 0; pinState[2] = 0; pinState[3] = 0; // Считываем первый номер реле, который нужно включить char relayNum = client.read(); pinState[relayNum-'0'] = 1; Serial.write(relayNum); // Считываем вспомогательную информацию (=on&) relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); // Пока есть данные об остальных реле, считываем и заносим в массив pinState while (relayNum != -1) { relayNum = client.read(); relayNum = client.read(); pinState[relayNum-'0'] = 1; Serial.write(relayNum); relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); relayNum = client.read(); } } else { // Если не было передано данных, то выключаем все реле pinState[0] = 0; pinState[1] = 0; pinState[2] = 0; pinState[3] = 0; } } } } // В соответствие с переданными данными включаем реле for (int i = 0; i < 4; i++) { digitalWrite(pins[i], !pinState[i]); } // Выводим HTML страницу, на которой пользователь может включить или выключить нужные ему реле client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); client.println("<html>"); client.println("<head>"); client.println("<title>Zelectro. Relay + Ethernet shield.</title>"); client.println("</head>"); client.println("<body>"); client.println("<h3>Zelectro. Relay + Ethernet shield.</h3>"); client.println("<form method='post'>"); client.print("<div>Relay 1 <input type='checkbox' "); if (pinState[0] == 1) client.print("checked"); client.println(" name='r0'></div>"); client.print("<div>Relay 2 <input type='checkbox' "); if (pinState[1] == 1) client.print("checked"); client.println(" name='r1'></div>"); client.println("<input type='submit' value='Refresh'>"); client.println("</form>"); client.println("</body>"); client.println("</html>"); client.stop(); } } }
монитор порта выдает такую картину:помогите сделать чтобы он нормально работал
1.
Что значит "нормально работал"? Вы не поверите, но никто кроме Вас не знает, чего Вы хотите от этого кода и в чём разница между тем, что есть и чего Вы хотите. Объясняйте проблему толком.
2.
Текст с монитора копипастите сюда как текст - на картинке его плохо видно.
3. В тексте скетча не нахожу строк
Serial
.print(
"Read "
);
иSerial
.print(
"failRead "
);
.Нормально работал - это чтобы он создал страницу и с неё можно было включать и выключать реле.
3. В тексте скетча не нахожу строк
Serial
.print(
"Read "
);
иSerial
.print(
"failRead "
);
.Это вшито в библиотеку
Да, ну тогда надо его нормально писать.
Что Вы пишете в строке 47? Цикл, который должен отработать столько раз, сколько байтов пришло? А сколько раз Вы в этом цикле читаете по 1 байту? Строки 49, 56, 67, 72, 73, ... в общем 100500 раз. Вы сами-то это странным не находите? Вот в строка 84-87 Вы читаете 4 байта подряд. А Вы уверены, что они уже пришли и ждут Вас? Вы это как-то проверяете?
Я взял скетч по которому подключали w5100 и хочу переделать под witty
Вы поняли, что я написал? Вы понимаете, что написано в скетче? Или Вы его надеетесь не понимая, методом тыка переделать?
Я не могу понять только часть скетча которая связывает witty и страницу (40-100 строка)
Перечитайте ещё раз то, что я написал. Постарайтесь понять. Если не понимаете эту часть скетча, выбросьте её и напишите сами.
Ок отпишучь о результатах
Сделал по другому и на enc28j60, но в ближайшее врему будет и на witty.
вот что получилось: