помогите с проектом начинающему ардуинщику.

Lelik
Offline
Зарегистрирован: 02.12.2016

Евгений, поэтому ты эту всютему освоил, а я наоборот, я проф электрик и хочу немного внедрения электроники. вот на себе сначала начал тренироваться, в работе сначала ограничивался фото реле и таймером времени, теперь помимо этого на вэб, точнее на локальную сеть, хочу попробовать завязать. С вэбом сложнее, нужет статический айпи адрес, а у всех заказчиков как правило динамический

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Lelik пишет:

блок питание выше упомянутый на 12v и 2А, хватит того что я запитаю ардуину, а питание на релейный модуль возьму от 5v ардуины?

Категорически нельзя.

В ардуине маломощный линейный стабилизатор. Он расчитан на питание только самой Ардуины и, макстимум, пары слаботочных датчиков (не более десятков мА). Модулеми реле Вы просто его сожжете.

Лучше использовать либо блок 5В 2А, либо с 12В 2А Ардуину запитывать на ее собственный 12-вольтовый вход, а блок реле - от отдельного понижающего преобразователя достаточной мощности.

Lelik
Offline
Зарегистрирован: 02.12.2016

andriano, спасибо за совет, заказал стабилизатор напряжения, с али (86070 на LM2596),если я с блок питания 12v подам на ардуину, и от этих 12 вольт сделаю ответвление на этот стабилизатор (называю может и не правильно), и подстроечным резистором сделаю питание 5 вольт на релейный блок, так прокатит? (чтоб два блока питания не ставить)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Lelik, для электрика у Вас какие-то странные вопросы.

Да, подключать к источнику питания две разных нагрузка в параллель вполне допустимо и нормально.

Но вот что Вы подразумеваете под "резистором сделаю питание 5 вольт на релейный блок", не совсем понял. Если Вы собираетесь посадить на резисторе "лишние" 7 вольт, то, боюсь, это Вам не удастся. Если же имеется в виду подстроечный резистор для установки выходного напряжения преобразователя, то - да.

 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

andriano пишет:

Lelik, для электрика у Вас какие-то странные вопросы.

он электромонтажник - многие электрики об этом не подозревают.

Lelik
Offline
Зарегистрирован: 02.12.2016

andriano пишет:

Lelik, для электрика у Вас какие-то странные вопросы.

Да, подключать к источнику питания две разных нагрузка в параллель вполне допустимо и нормально.

Но вот что Вы подразумеваете под "резистором сделаю питание 5 вольт на релейный блок", не совсем понял. Если Вы собираетесь посадить на резисторе "лишние" 7 вольт, то, боюсь, это Вам не удастся. Если же имеется в виду подстроечный резистор для установки выходного напряжения преобразователя, то - да.

 


Вы правильно все поняли.
А кто-нибудь пользует flprog?

Lelik
Offline
Зарегистрирован: 02.12.2016

приветтствую вас друзья. ну что я хочу вам сказать, наконец-то с горем пополам победил я свой проект, с CSS, который прислал Voodoo Doll, нихрена не разобрался толком, сделал только кнопки вертикально и все на этом... , сделал пока тупо на html. еще с чем не полуилось у меня разобраться, это с тем, что релейный модуль, (каналы) управляются ноликом, т.е. при запуске ардуины реле поумолчанию "втягиваются", подскажите как инвертировать выходы?

#include <SPI.h>
#include <Ethernet.h>
boolean newInfo = 0;
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };     
IPAddress ip(192,168,1,115);
EthernetServer server(80);
void setup()
{
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(1000);
}

void loop()
{
  EthernetClient client = server.available();
  if(client){
  boolean currentLineIsBlank = true;
  while (client.connected()) {
    if (client.available()) {
      char c = client.read();
                                                  
      if(newInfo && c == ' '){
        newInfo = 0;
      }
      
      if(c == '$'){
                            
        newInfo = 1;
      }
      
      if(newInfo == 1){
          Serial.println(c);
          if(c == 'a'){
          Serial.println("ON");
          digitalWrite(2, HIGH);
          }
          
          if(c == 'b'){
          Serial.println("OFF");
          digitalWrite(2, LOW);
          }
              
          if(c == 'c'){
          Serial.println("ON");
          digitalWrite(3, HIGH);
          }
          
          if(c == 'd'){
          Serial.println("OFF");
          digitalWrite(3, LOW);
          }

          if(c == 'e'){
          Serial.println("ON");
          digitalWrite(5, HIGH);
          }
          
          if(c == 'f'){
          Serial.println("OFF");
          digitalWrite(5, LOW);
          }
              
          if(c == 'g'){
          Serial.println("ON");
          digitalWrite(6, HIGH);
          }
          
          if(c == 'h'){
          Serial.println("OFF");
          digitalWrite(6, LOW);
          }
                        
          if(c == 'i'){
          Serial.println("ON");
          digitalWrite(7, HIGH);
          }
          
          if(c == 'j'){
          Serial.println("OFF");
          digitalWrite(7, LOW);
          }

          if(c == 'k'){
          Serial.println("ON");
          digitalWrite(8, HIGH);
          }
          
          if(c == 'l'){
          Serial.println("OFF");
          digitalWrite(8, LOW);
          }
              
          if(c == 'm'){
          Serial.println("ON");
          digitalWrite(9, HIGH);
          }
          
          if(c == 'n'){
          Serial.println("OFF");
          digitalWrite(9, LOW);
          }
      } 
      
      if (c == '\n') {
        currentLineIsBlank = true;
      } 
      else if (c != '\r') {
        currentLineIsBlank = false;
      }
    
      if (c == '\n' && currentLineIsBlank) {
        client.println("HTTP/1.1 200 OK");
        client.println("Content-Type: text/html");
        client.println("Connection: close");  
        client.println("Refresh: 60");
        client.println();
        client.println("<!DOCTYPE HTML>");
        client.println("<html>");
        client.print("<title>My Hause</title>");
        client.print("<H1>My Hause</H1>");
        client.print("<a href=\"/$a\"><button>On</button></a>");
        client.print("<a href=\"/$b\"><button>Off</button></a>");
        client.print("<a>liniya1</a>");
        client.println("<br />");
        client.print("<a href=\"/$c\"><button>On</button></a>");
        client.print("<a href=\"/$d\"><button>Off</button></a>");
        client.print("<a>liniya2</a>");
        client.println("<br />");
        client.print("<a href=\"/$e\"><button>On</button></a>");
        client.print("<a href=\"/$f\"><button>Off</button></a>");
        client.print("<a>liniya3</a>");
        client.println("<br />");
        client.print("<a href=\"/$g\"><button>On</button></a>");
        client.print("<a href=\"/$h\"><button>Off</button></a>");
        client.print("<a>liniya4</a>");
        client.println("<br />"); 
        client.print("<a href=\"/$i\"><button>On</button></a>");
        client.print("<a href=\"/$j\"><button>Off</button></a>");
        client.print("<a>liniya5</a>");
        client.println("<br />");
        client.print("<a href=\"/$k\"><button>On</button></a>");
        client.print("<a href=\"/$l\"><button>Off</button></a>");
        client.print("<a>liniya6</a>");
        client.println("<br />");
        client.print("<a href=\"/$m\"><button>On</button></a>");
        client.print("<a href=\"/$n\"><button>Off</button></a>");
        client.print("<a>liniya7</a>");               
        client.println("</html>");
        break;
      }
    
    }
    
  }
  delay(1);
  client.stop();
}
}

и еще вот какая фигня непонятная, 8ой канал релейного модуля, в какой только свободный пин не установлю (4,10,11,12,13) реле канала всегда "втянуто" и при нажатии на странице на кнопку, реле только переклацываети все, по факту остается включеным всегда и светодиод на этом реле светится в пол накала как бы по сравнению со всеми другими. 4 и 10 пин читал, они используются эзернет модулем для обмена, а другие-то что?

Lelik
Offline
Зарегистрирован: 02.12.2016

И ещё, как сделать кнопки "включить всё" и "отключить все", сами кнопки на странице создал без проблем, а как прочередовать пины не пойму

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

11-13 выводы это SPI, придётся оставить свободными. 8й канал можно сделать например на выводе А0, он же 14.

По инвертированию на "активный ноль":

1. Поменять местами HIGH и LOW по всей программе.

2. После объявления pinMode() добавить на все каналы digitalWrite(HIGH).

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Voodoo Doll пишет:

2. После объявления pinMode() добавить на все каналы digitalWrite(HIGH).

Лучше перед.

Lelik
Offline
Зарегистрирован: 02.12.2016

Спасибо ребят. Буду пробовать. Жаль времени много на это нет с основной работой и шабашками. Поэтому у меня это все немного вялотекуче проходит.
А ещё такой вопрос, возможно-ли сделать так, что если при пропадании электроэнергии, если какие-то реле были включены, то когда напряжение подадут обратно и эти реле тоже включились как было до отключения

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Можно. Берете делитель 1:4, например 10 кОм + 30 кОм, конец 30 ком к плюсу 12 В, конец 10 к общему минусу, соединенные концы 10 и 30 - в один из проводов An. A1, A2 там, неважно. Объявляете его входом, делаете analogRead(). Будет некоторое число, надо посидеть с калькулятором поумножать, найти такое число чтобы если домножить/доделить то что там сказала analogRead(), получилось 12, когда на конце 30 кОм (плюсе 12) действительно 12. Когда будет 0 - будет ноль, но ардуина вырубится. Ставим конденсатор, между Gnd и +5V. Побольше, мкф так 10000. Всё, теперь у нас есть секунд 5, которые ардуина будет работать на конденсаторе, пока тот не кончится. В loop() пишем условие, которое проверяет что есть 12, если нет то делает из состояний 8 реле байт (у меня он уже был в массиве bool state[], из него было бы проще - умножить на 1 2 4 8 16 и тд и сложить), и записать этот байт в EEPROM. при включении проверять EEPROM и назад включать если в байте есть единица, двойка, четвёрка, 8, 16, 32 и т д.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

По идее можно при каждом переключении любого реле сразу писать в EEPROM - ресурс у нее больше, чем у всех реле вместе взятых.

Lelik
Offline
Зарегистрирован: 02.12.2016

Здравствуйте уважаемые друзья. Подскажите что может быть,скейч использую пока тот что указал выше. Схема подключения такая: блок питания 220/12 вольт 5 ампер. 12 вольт на прямую идёт на питание ардуино на которой установлена w5100 (далее буду называть её сетевой картой), релейный модуль питаю от блока питания 12 вольт, но через dc/dc преобразователь, который понижает на 5 вольт, с ардуино на релейный модуль идёт только "управление" каналов реле согласно скейчу. При загрузке ардуино, реле поумолчанию "втягивается" из-за этого пока использую нормально замкнутые контакты реле, чтоб при подачи питания на ардуину цепь размыкалась. Схема вся эта таботает нормально через Web server до тех пор пока к выводам релейного блока ничего не подключено, а как только подключаю нагрузку которая питает контактор на 220 вольт, по сетевой карте вижу что в момент команды на включение/отключение ардуино как будто перегружается, если включаю/отключаю реле к выводом которых ничего не подключено, работает всё нормально. Ни каких подтягивающих резисторов в схеме пока не использую. Из-за чего подобное может быть?
PS. Пока хочу отладить схему так, а потом буду ковырять код чтоб управлять реле активным минусом и тому подобное. Мне так сейчас просто удобнее. Потом и на css перейду

Хотя логически подумав, думаю не ардуино перегружается, а сетевая карта наверное, потому что при перезагрузке ардуино, все реле сработали бы наверное

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Lelik пишет:
Из-за чего подобное может быть?

Из-за того что в момент коммутации возникает помеха и она утекает по проводам в ардуину. Вам придётся:

1. Отвязать сигналы оптопарой. Берете 8 оптопар, PC817, 4N27/4N35 или что там попадётся/по вкусу, и соединить так:

- анод фотодиода либо эмиттер фототранзистора, у микросхемы это нижний правый вывод, если смотреть сверху и ключ (круглешок или выемка, вытравлен, выгравирован, напечатан или вырезан на корпусе, обозначает вывод 1) находится слева вверху, ноги микросхемы смотрят вниз (от вас). так вот, его соединить с минусом питания релейной платы. Выходом у 4N35 является вывод 5.

- катоды/коллекторы (выход, последний или следующий после анода вывод) - со входами релейной платы

- плюсы питания светодиодов, то есть аноды - первый вывод у любой опторазвязывающей микросхемы - с соотв. выходами ардуины, через резистор 330-510 Ом.

- минусы светодиодов с минусом ардуины. Минусы (катоды) светодиодов это вывод 2, у любой оптопары.

2. Параллельно светодиодам в оптопарах, то есть между концом резистора идущим к оптопаре, и минусом ардуины - плоскостные диоды задом наперёд, для подавления возможной мощной помехи обратной полярности. Задом это значит перекладиной к резистору (плюсу), хвостом к минусу. Подойдет стандартный диод 1N4007 он же M7. Перекладина (катод) обозначается полоской, напечатанной/вытравленной/выгравированной на корпусе.

3. Параллельно этим диодам керамические конденсаторы 0.022-0.1 мкФ для подавления наносекундной помехи.

Схема более не будет иметь общего минуса с релейной платой, поэтому

4. убрать из схемы DCDC преобразователь, не питать релейную плату от того же источника, от которого питается арда. Вам понадобится либо отдельный блок 220-5В, можно небольшой мощности (хватит 1А) т. к. релейная плата непрожорливая, либо если не будет то на 12, и далее через DCDC преобразователь.

Lelik
Offline
Зарегистрирован: 02.12.2016

Вуду, а оптопара dp817c на релейном модуле разве не развязывает гальванически ардуино с релейным модулем? От разных источников я тоже питал.

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

В таком случае помеха не электрическая а электромагнитная. Экранировать. Избавляться от длинных проводов. Вплоть до того что это будет одна металлическая коробка и в ней 8 отверстий с фотодатчиками, которые уже в свою очередь включают оптопары, а адруина в другой такой же коробке, только там 8 лазеров. И между коробками 10 метров. Не бывает чтобы при полной развязке творилась такая хрень. Не. Бы. Ва. Ет.

Да, есть ещё вариант, "она прям по проводам 220". Лечится ЭМ-фильтром, это такая металлическая деталька с 4 выводами, с одной стороны 220 и с другой тоже 220, но чистое. Внутри дроссели и конденсатор, на корпусе так и написано "EMI filter". Думаю, дешёвые китайские блоки питания без надлежащей защиты есть благодатная бактериальная среда для такой заразы как помехи, проходящие через сеть. Хотя хз. Вы же там не 50-кВт компрессор коммутируете, я думаю. Хз, хз. Я прям аж в ступоре.

Lelik
Offline
Зарегистрирован: 02.12.2016

Может какой-то модуль глючит?

Lelik
Offline
Зарегистрирован: 02.12.2016

Прикиньте что я выявил, даже если контактор не подключеный к ардуино включать и отключать внепосредвственной близости, у меня это см 20-25, то сетевуха перегружается и когда прикасаешься к проводам идущие от ардуино к релейному модулю, шилд тоже перегружается. Сама арда при этом работает нормально.
И ещё подскажите пожалуйста не могу понять куда воткнуть digitalWrite(HIGH), чтоб управлять релейным модулем активным gnd. Пример этой строки если можно сделайте, а по подобию что нужно сделаю сам.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Lelik пишет:

куда воткнуть digitalWrite(HIGH), чтоб управлять релейным модулем активным gnd.

Как там было ... "Господа офицеры, ..."

Lelik
Offline
Зарегистрирован: 02.12.2016

с кодом разобрался впринципе, нашел куда воткнуть этот digitalWrite(HIGH) :)

сейчас в CSS теперь хочу перевести это дело, за основу буду брать то, что скинул Woodoo. Ему за это отдельное спасибо

 

Voodoo Doll, подскажи пожалуйста, твой архив который ты скидывал ранее, там в main.js поменял ip в двух местах и скейче тоже в одном месте изменил ip, во всех этих трех местах один ip (192.168.1.99), скейч залил, открываю из папки control.html (в этой же папке лежат файлы jquery.js, main.js, style.css) открывается страница с кнопками, кнопки работают нормально, а цвета кнопок в зависимости от статуса, не меняются. что делаю не так?

кнопки я правда после этого всего расположил вертикально, расположил для удобства, добавив тег </br> после каждой кнопки в файле control.html на работоспособность никак не повлияло

Lelik
Offline
Зарегистрирован: 02.12.2016

помогите разобраться с кодом. Из-за непонятных глюков, связанные не то с железом, не то расположением звезд на небе, ардуину и w5100 решил отложить в сторонку, пока не "придут" другие такие же железки и решил все это дело сделать на WiFi модуле NodeMCU ESP-12e v3, за основу был взят скейч (и соответственно все остальные файлы для дальнейшей работы) от Voodoo Doll из 27 поста данной темы, скейч заработал нормально, страница отображается, при нажатии на кнопки релюхи клацают как нужно. У меня не полустлось присвоить айпишник данному модулю и он время от времени пеняется при перезагрузке модуля, подскажите как прописать IP-шник.

пример скейча ниже

#include <ESP8266WiFi.h>

const char* ssid = "TRENDnet638";
const char* password = "12341231";

WiFiServer server(80);
bool state[8]={0,0,0,0,0,0,0,0};

void setup(){
  Serial.begin(115200);

  pinMode(5,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(0,OUTPUT);
  pinMode(2,OUTPUT);
  pinMode(14,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(13,OUTPUT);
  pinMode(15,OUTPUT);
  WiFi.begin(ssid, password);
  server.begin();
  // 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.println(WiFi.localIP());
}

void loop() {
  String req;
  char c;
  WiFiClient client = server.available();
  if (client){
    boolean currentLineIsBlank=true;
    while (client.connected()){
      if (client.available()){
        char c = client.read();
        req+=c;
        if (c == '\n' && currentLineIsBlank) {
//          if (req.indexOf("?")>-1) Serial.println(req.substring(6,req.indexOf(" HTTP")));
//      DEBUG: Dump query
          if(req.indexOf("s1")>-1)       setrelay(1);
          if(req.indexOf("s2")>-1)       setrelay(2);
          if(req.indexOf("s3")>-1)       setrelay(3);
          if(req.indexOf("s4")>-1)       setrelay(4);
          if(req.indexOf("s5")>-1)       setrelay(5);
          if(req.indexOf("s6")>-1)       setrelay(6);
          if(req.indexOf("s7")>-1)       setrelay(7);
          if(req.indexOf("s8")>-1)       setrelay(8);

//          Serial.println(req);                       // DEBUG: Dump full HTTP data
          client.println("HTTP/1.1 200 OK");                     // header
          client.println("Content-Type: application/json");
          client.println("Access-Control-Allow-Origin: *");
          client.println("Connection: close");
          client.println();

          client.print("{");
          client.print("\"s1\":");                     // states
          client.print(state[0]);
          client.print(",\"s2\":");
          client.print(state[1]);
          client.print(",\"s3\":");
          client.print(state[2]);
          client.print(",\"s4\":");
          client.print(state[3]);
          client.print(",\"s5\":");
          client.print(state[4]);
          client.print(",\"s6\":");
          client.print(state[5]);
          client.print(",\"s7\":");
          client.print(state[6]);
          client.print(",\"s8\":");
          client.print(state[7]);
          client.println("}"); // end JSON

          req="";
          break;
        }
        if (c == '\n') currentLineIsBlank = true;
         else if (c != '\r') currentLineIsBlank = false;
      }
    }
    delay(1);
    client.stop();
  }
  writerelay();
}

void setrelay(byte n){
  state[n-1]=!state[n-1];
}

void writerelay(){
  digitalWrite(5,!state[0]);
  digitalWrite(4,!state[1]);
  digitalWrite(0,!state[2]);
  digitalWrite(2,!state[3]);
  digitalWrite(14,!state[4]);
  digitalWrite(12,!state[5]);
  digitalWrite(13,!state[6]);
  digitalWrite(15,!state[7]);
}

Voodoo, отзовись плз, помоги разобраться с кнопками страницы, чтоб они цвет меняли в зависимости от статуса, а то мой мозг уже кипит от кучи новой информации

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

У кнопок меняется класс (атрибут HTML class=), если в нём есть буква e - CSS зелёный, если d - красный. Покажите JS функцию, которая обрабатывает информацию, возможно несовпадает формат массива. В скетче он с s и цифрами в кавычках, то есть содержит имена. Эти имена должны проверяться в цикле, если их нет - то и в скетче надо убрать, оставив только состояние, в таком виде [0,0,1,0,1,0,0,0]

Lelik
Offline
Зарегистрирован: 02.12.2016

Попробую разобраться.

А с айпишником что можно сделать?

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Нужно сделать его статическим.

Или настроить DHCP так чтобы всегда выдавался один и тот же, и его прописать в HTML. В роутере есть таблица резервирования адресов, находится в свойствах Advanced network (network всмысле обычные сетевые настройки, не вайфай).

Lelik
Offline
Зарегистрирован: 02.12.2016

с айпишником оказалось все проще,  настройках модема я по маку присвоил постояный айпи, т.е. любой другой мак не займет данный айпишник.

Lelik
Offline
Зарегистрирован: 02.12.2016

приветствую Вас друзья, ну я успешно допилил свой проект с вашей помощью, работает все стабильно, кнопочки цвет меняют, релюхи клацают. В общем все здорово. Отдельная благодарность Voodoo Doll. Думаю дальше расширять проект, хочу попробовать встроить часы и датчик освещенности чтоб в определенное время определенные каналы включались и отключались

Lelik
Offline
Зарегистрирован: 02.12.2016

приветствую Вас друзья, помогите доработать скейч

https://yadi.sk/d/WP8HypuB3XkGYW

не могу понять в скейче ошибка и второе как в HTML коде сделать так, чтоб пока отклика о выполнени наманды не пришло, нажатие на кнопку не реагировалось. а тобывает так, что каманда на включение/отключение по какой-то причине задерживается и если в этот момент еще нажать на кнопку несколько раз, то потом как отвиснет эта вся система, сколько раз нажал на кнопку, только раз и клацает релюха.

Lelik
Offline
Зарегистрирован: 02.12.2016

тут есть живые ардуинщики?

со вторым я разобрался, со скейчем все никак...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Lelik пишет:

тут есть живые ардуинщики?

Немає :(

Lelik
Offline
Зарегистрирован: 02.12.2016

это плохо :( все наверное на море уехали

b707
Онлайн
Зарегистрирован: 26.05.2017

Lelik пишет:

не могу понять в скейче ошибка и второе как в HTML коде сделать так, чтоб пока отклика о выполнени наманды не пришло, нажатие на кнопку не реагировалось.

Так тут вопрос не ставят. Никто не полезет смотреть ваш скетч.

Попробуйте сделать все сами, а если будут проблемы - тогда приходите. Только учтите, что приходить надо с уже сделанным, а жалобы "я не умею" тут никого не трогают, помощи не будет.

Lelik
Offline
Зарегистрирован: 02.12.2016

вот, держи дружище, все что угодно только чтоб вам удобно и легко было. скейч написал, вот только он не компелируется, можешь разобраться где косяк? :)

 

#include <ESP8266WiFi.h> //Библиотека для работы с WIFI 
#include <ESP8266mDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h> // Библиотека для OTA-прошивки

const char* ssid = "TRENDnet"; //Имя точки доступа WIFI 
const char* password = "11112222"; //пароль точки доступа WIFI 
bool state[8]={0,0,0,0,0,0,0,0};

void setup() {

       // Удаляем предидущие конфигурации WIFI сети
       WiFi.disconnect(); // обрываем WIFI соединения
       WiFi.softAPdisconnect(); // отключаем отчку доступа(если она была
       WiFi.mode(WIFI_OFF); // отключаем WIFI
       delay(500);

       // присваиваем статичесий IP адрес
       WiFi.mode(WIFI_STA); // режим клиента
       WiFi.config(IPAddress(192,168,10,222),IPAddress(192,168,10,1),IPAddress(255,255,255,0),IPAddress(192,168,10,1));
       


  
//  Serial.begin(115200);

  WiFi.begin(ssid, password);
  while (WiFi.waitForConnectResult() != WL_CONNECTED) {
    delay(5000);
    ESP.restart();
  }
  ArduinoOTA.setHostname("ESP8266-00001"); // Задаем имя сетевого порта
  //ArduinoOTA.setPassword((const char *)"0000"); // Задаем пароль доступа для удаленной прошивки
  ArduinoOTA.begin(); // Инициализируем OTA
  
  pinMode(5,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(0,OUTPUT);
  pinMode(2,OUTPUT);
  pinMode(14,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(13,OUTPUT);
  pinMode(15,OUTPUT);
  }

void loop() {
  String req;
  char c;
//  EthernetClient client=server.available();
  if (client){
    boolean currentLineIsBlank=true;
    while (client.connected()){
      if (client.available()){
        char c = client.read();
        req+=c;
        if (c == '\n' && currentLineIsBlank) {
//          if (req.indexOf("?")>-1) Serial.println(req.substring(6,req.indexOf(" HTTP")));
//      DEBUG: Dump query
          if(req.indexOf("s1")>-1)       setrelay(1);
          if(req.indexOf("s2")>-1)       setrelay(2);
          if(req.indexOf("s3")>-1)       setrelay(3);
          if(req.indexOf("s4")>-1)       setrelay(4);
          if(req.indexOf("s5")>-1)       setrelay(5);
          if(req.indexOf("s6")>-1)       setrelay(6);
          if(req.indexOf("s7")>-1)       setrelay(7);
          if(req.indexOf("s8")>-1)       setrelay(8);

//          Serial.println(req);                       // DEBUG: Dump full HTTP data
          client.println("HTTP/1.1 200 OK");                     // header
          client.println("Content-Type: application/json");
          client.println("Access-Control-Allow-Origin: *");
          client.println("Connection: close");
          client.println();

          client.print("{");
          client.print("\"s1\":");                     // states
          client.print(state[0]);
          client.print(",\"s2\":");
          client.print(state[1]);
          client.print(",\"s3\":");
          client.print(state[2]);
          client.print(",\"s4\":");
          client.print(state[3]);
          client.print(",\"s5\":");
          client.print(state[4]);
          client.print(",\"s6\":");
          client.print(state[5]);
          client.print(",\"s7\":");
          client.print(state[6]);
          client.print(",\"s8\":");
          client.print(state[7]);
          client.println("}"); // end JSON

          req="";
          break;
        }
        if (c == '\n') currentLineIsBlank = true;
         else if (c != '\r') currentLineIsBlank = false;
      }
    }
    delay(1);
    client.stop();
  }
  writerelay();
}

void setrelay(byte n){
  state[n-1]=!state[n-1];
}

void writerelay(){
  digitalWrite(2,!state[0]);
  digitalWrite(3,!state[1]);
  digitalWrite(4,!state[2]);
  digitalWrite(5,!state[3]);
  digitalWrite(6,!state[4]);
  digitalWrite(7,!state[5]);
  digitalWrite(8,!state[6]);
  digitalWrite(9,!state[7]);

}

 

b707
Онлайн
Зарегистрирован: 26.05.2017

Lelik пишет:

вот, держи дружище, все что угодно только чтоб вам удобно и легко было. скейч написал, вот только он не компелируется, можешь разобраться где косяк? :)

ошибку компиляции выложи. Только не скриншотом - просто текст скопируй и сюда вставь как код

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Lelik пишет:

все наверное на море уехали

Так футбол же ж.

Lelik
Offline
Зарегистрирован: 02.12.2016

b707 пишет:

ошибку компиляции выложи. Только не скриншотом - просто текст скопируй и сюда вставь как код

Arduino: 1.6.12 (Windows 7), Плата:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, 4M (3M SPIFFS), v2 Lower Memory, Disabled, None, Only Sketch, 115200"

D:\!Arduino\!Проект в разработке\управление на 8 каналов через WiFi-\sketch\sketch.ino: In function 'void loop()':

sketch:50: error: 'client' was not declared in this scope

sketch:59: error: 'setrelay' was not declared in this scope

sketch:60: error: 'setrelay' was not declared in this scope

sketch:61: error: 'setrelay' was not declared in this scope

sketch:62: error: 'setrelay' was not declared in this scope

sketch:63: error: 'setrelay' was not declared in this scope

sketch:64: error: 'setrelay' was not declared in this scope

sketch:65: error: 'setrelay' was not declared in this scope

sketch:66: error: 'setrelay' was not declared in this scope

sketch:104: error: 'writerelay' was not declared in this scope

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

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

setrelay(), writerelay() вынести вверх, до setup(). Подумать, зачем закомментированна строка #49

Lelik
Offline
Зарегистрирован: 02.12.2016

sadman41 пишет:

setrelay(), writerelay() вынести вверх, до setup().

Если не сложно, можно поточнее, я не програмист, тыкал и так и сяк, не получается. С какой по какую строку перенести между какими именно? Заранее спасибо за понимание.

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Функции с указанными именами перенести целиком до setup() {...}

Фунция - это имя с круглыми скобками и всё, что в фигурных скобках за ними.