GET запрос в Ethernet

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

Здравствуйте. Вот есть скетч Web сервера.

#include <SPI.h>
#include <Ethernet.h>

byte MAC[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress IP(10, 10, 1, 170);

EthernetServer server(7000);

void setup() {

  Serial.begin(9600);
  
  Ethernet.begin(MAC, IP);
  server.begin();
}


void loop() {
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("Hello");
          client.println("</html>");
          break;
      }
    }
    client.stop();
  }
}

Такой вопрос:

Как сделать так, чтобы сервер принимал GET запрос?

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

digitalWrite(пин, LOW);

Знаю что нужно условие, но не знаю как реализовать.

Так же мне нужно чтобы при повторном переходе на GET запрос, цифровой вход выключался.

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

VaDoSiQ пишет:

Как сделать так, чтобы сервер принимал GET запрос?

А сейчас он что принимает? Его и принимает, и возращает ответ (строки 25-32). Вот туда и встаьте инвертирования Вашего пина. При каждом запрос состояние пина будет меняться на противоположное.

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

Можно подробнее? Мне нужно создать ссылку, допустим она будет такого вида:

http://example.com/link=1

Я перехожу, мой вход включается, перехожу еще раз, он выключается.

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

А сейчас Вы на этот сервер как заходите? По какой ссылке?

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

Просто по адресу http://mysite.com

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

И получаете в браузере нормальный ответ? Слово "Hello"?

Если "да", так чего Вам ещё надо? Вставьте после строки 32 что-нибудь типа

digitalWrite(PIN, ! digitalRead(PIN));

И уровень на пине PIN будет переворачиваться при каждом запросе. Вам же это надо?

inspiritus
Offline
Зарегистрирован: 17.12.2012

#include <SPI.h> 
#include <Ethernet.h> 
#include <OneWire.h>
#include <DallasTemperature.h>

#define pin1 22
#define pin2 24
#define pin3 28
#define pin4 30
#define pin5 34
#define tonepin 41

int heater_flow = 380;
int coolant_flow = 230;
byte flow_step =10;
float kub_pr;
float kub_obr;
float hol_pr;
float def_obr;
float def_vak;
float potok;
float termo;
float product_vol;   // otbor L/day
int   product_ppm = 40;
float uptime; 
String button = "</button>&nbsp";

boolean action_flag = false;

 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address 
 byte ip[] = { 192, 168, 88, 237 }; // fixed IP addr in LAN 
 byte gateway[] = { 192, 168, 88, 254 }; // internet access via router 
 byte subnet[] = { 255, 255, 248, 0 }; //subnet mask 
 EthernetServer server(80); //server port 
 
 String readString; 
 ////////////////////// 
 void setup(){ 
randomSeed(analogRead(0));
//randNumber = random(10, 20);

 //start Ethernet 
 Ethernet.begin(mac, ip, gateway, subnet); 
 server.begin(); 
 } 
 
 void loop(){ 
   
termo = random(28, 29);
kub_pr  = termo * 3;
kub_obr = termo * (1.9 + 0.1*heater_flow/238);
potok   = heater_flow * (kub_pr - kub_obr) * 4.2 / 3600 * 1.5;
hol_pr  = termo / 4.2;
def_obr = potok/(coolant_flow * 4.2 / 3600 * 1.5) + hol_pr;
def_vak = termo/1.2;
product_vol = potok * (3.3E-7*product_ppm*product_ppm*product_ppm-4E-5*product_ppm*product_ppm+0.002*product_ppm+0.016)*24;

uptime=(0 + millis()/60000.0)/1440; //0
   
 // Create a client connection 
 EthernetClient client = server.available(); 
 if (client) { 
 while (client.connected()) { 
 if (client.available()) { 
 char c = client.read(); 
 
 //read char by char HTTP request 
 if (readString.length() < 100) { 
 
 //store characters to string 
 readString += c; 
 //Serial.print(c); 
 } 
 
 //if HTTP request has ended 
 if (c == '\n') { 
 
 /////////////// 
 client.println(F("HTTP/1.1 200 OK")); //send new page 
 client.println(F("Content-Type: text/html")); 
 client.println(F("<HTML>")); 
 client.println(); 
 client.println(F("<HEAD>")); 
 client.println(F("<TITLE>Rectification Automation</TITLE>")); 
 client.println(F("<meta content=text/html charset=utf-8 />")); 
 client.println(F("<meta http-equiv=Refresh content=10>")); 
 client.println(F("</HEAD>")); 
 client.println(F("<BODY bgcolor='white'>")); 
 client.println(F("<H1>Line_2, Column_17</H1>")); 
// client.println("<hr />"); 

//client.println(F("<a href=\"/\"></a>"));

client.println(F("<button style=background-color:white>Deflegmator</button>"));
client.print(F("<button style=background-color:white>input=")); client.print(hol_pr); client.print(button);
client.print(F("<button style=background-color:white>output=")); client.print(def_obr); client.print(button);
client.print(F("<button style=background-color:white>Coolant_flow=")); client.print(coolant_flow); client.print(button);
client.println(F("<a href=\"/coolant_inc\"><button>Coolant +</button></a>&nbsp;&nbsp;&nbsp;<a href=\"/coolant_dec\"><button>Coolant -</button></a><br><br>"));

client.println(F("<button style=background-color:white>Cub</button>"));
client.print(F("<button style=background-color:white>input=")); client.print(kub_pr); client.print(button);
client.print(F("<button style=background-color:white>output=")); client.print(kub_obr); client.print(button);
client.print(F("<button style=background-color:white>heater_flow=")); client.print(heater_flow); client.print(button);
client.println(F("<a href=\"/heater_inc\"><button>Heater +</button></a>&nbsp;&nbsp;&nbsp;<a href=\"/heater_dec\"><button>Heater -</button></a><br><br>"));

client.print(F("<button style=background-color:white>column_flow=")); client.print(potok); client.print(button);client.print("<br><br>");

client.println(F("<button style=background-color:white>Product_ppmD</button>"));
client.print(F("<button style=background-color:white>")); client.print(product_ppm); client.print(button);
client.println(F("<a href=\"/ppm_inc\"><button>Product +</button></a>&nbsp;&nbsp;&nbsp;<a href=\"/ppm_dec\"><button>Product -</button></a><br><br>"));

client.println(F("<button style=background-color:white>Product_Volume</button>"));
client.print(F("<button style=background-color:white>")); client.print(product_vol); client.print(button); client.print("<br><br>");

client.print(F("<button style=background-color:white>control=")); client.print(flow_step); client.print(button);
client.println(F("<a href=\"/flow_inc\"><button>Precise</button></a>&nbsp;&nbsp;&nbsp;<a href=\"/flow_dec\"><button>Draft</button></a><br><br>"));

client.print(F("<button style=background-color:white>uptime=")); client.print(uptime); client.print(button);client.print(F("<br><br>"));

client.println(F("<a href=\"/\"><button>ACCEPT__CHANGED__PARAMETERS</button></a><br><br>"));
//client.println(F("<a href=\"/\"></a><br><br>"));

 
client.println("</BODY>"); 
client.println("</HTML>"); 
 
 delay(1); 
 //stopping client 
 client.stop(); 
 
 ///////////////////// control arduino pin ЭТО ОТВЕТ НА ВАШ ВОПРОС
if(readString.indexOf("coolant_inc") >0) {coolant_flow +=  flow_step; action_flag = true;};
if(readString.indexOf("coolant_dec")  >0) {coolant_flow -=  flow_step; action_flag = true;};

if(readString.indexOf("heater_inc") >0) {heater_flow  +=  flow_step; action_flag = true;};
if(readString.indexOf("heater_dec")  >0) {heater_flow  -=  flow_step; action_flag = true;};

if(readString.indexOf("ppm_inc") >0) {product_ppm +=  flow_step; action_flag = true;};
if(readString.indexOf("ppm_dec")  >0) {product_ppm -=  flow_step; action_flag = true;};

if(readString.indexOf("flow_inc") >0) {flow_step = 1; action_flag = true;};
if(readString.indexOf("flow_dec")  >0) {flow_step = 10; action_flag = true;};

 readString=""; //clearing string for next read 
 
 } 
 } 
 } 
 } 
 } 

 

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

Попробовал Ваш метод, не сработало. В общем суть такова, мне нужно с одного сервера, дать на сервер ардуино запрос, после чего включается реле, если я даю запрос второй раз, реле выключается. Модуль реле на 8 каналов, мне на каждый канал отдельный запрос нужен. Думаю понятно объяснил?

inspiritus
Offline
Зарегистрирован: 17.12.2012

в моем коде как раз восемь каналов управляются, посмотрите я обновил

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

inspiritus пишет:

в моем коде как раз восемь каналов управляются, посмотрите я обновил

Управляются кнопками?

inspiritus
Offline
Зарегистрирован: 17.12.2012

там в html есть BUTTON, значит управляются

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

VaDoSiQ пишет:

Попробовал Ваш метод, не сработало. В общем суть такова, мне нужно с одного сервера, дать на сервер ардуино запрос, после чего включается реле, если я даю запрос второй раз, реле выключается. Модуль реле на 8 каналов, мне на каждый канал отдельный запрос нужен. Думаю понятно объяснил?

Не знаю, что у Вас там не сработало, кода не вижу. И не вижу ответа на вопрос показывается ли Hello.

Про 8 каналов и отдельные запросы на каждый канал Вы сразу могли написать? Я тратил время, писал Вам. а оказывается Вам нужно вовсе не то, что было в первом посте. Вам не кажется. что это как-то неправильно?

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

inspiritus пишет:

там в html есть BUTTON, значит управляются

Я понимаю, у меня вот есть рабочий код, управления с помощью ссылок (кнопок)

#include <Ethernet.h>
#include <SPI.h>
byte ethernet_mac [] = {0x78, 0xAC, 0xC0, 0x74, 0x40, 0x30};
IPAddress ethernet_ip(10, 10, 1, 170);
byte ethernet_dns [] = {10, 10, 1, 1};
byte ethernet_gateway [] = {10, 10, 1, 1};
byte ethernet_subnet [] = {255, 255, 255, 0};
EthernetServer _tspWebServer(7000);
EthernetClient _tspWebServer_client;
bool _trgt4 = 0;
bool _trgt4I = 0;
bool _trgrt8 = 0;
bool _trgrt8I = 0;
bool _trgrt5 = 0;
bool _trgrt5I = 0;
bool _trgrt2 = 0;
bool _trgrt2I = 0;
bool _WSP2_A1 = 0;
bool _WSP2_A2 = 0;
bool _WSP2_A3 = 0;
bool _WSP2_A4 = 0;
bool _WSP2_A5 = 0;
bool _WSP2_A6 = 0;
bool _WSP2_A7 = 0;
bool _WSP2_A8 = 0;
bool _trgt7 = 0;
bool _trgt7I = 0;
bool _trgt8 = 0;
bool _trgt8I = 0;
bool _trgt5 = 0;
bool _trgt5I = 0;
bool _trgt2 = 0;
bool _trgt2I = 0;
bool _trgrt3 = 0;
bool _trgrt3I = 0;
bool _trgt1 = 0;
bool _trgt1I = 0;
bool _trgrt6 = 0;
bool _trgrt6I = 0;
bool _trgt6 = 0;
bool _trgt6I = 0;
bool _trgt3 = 0;
bool _trgt3I = 0;
bool _trgrt7 = 0;
bool _trgrt7I = 0;
bool _trgrt4 = 0;
bool _trgrt4I = 0;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
void setup()
{
  Ethernet.begin(ethernet_mac, ethernet_ip, ethernet_dns, ethernet_gateway, ethernet_subnet);
delay(1000);
_tspWebServer.begin();
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);

}
void loop()
{_tspWebServer_client = _tspWebServer.available();
if (_tspWebServer_client) {
 boolean _WSCLineIsBlank = true;
String _WSCReqest="";
bool _WSCIsFirsLine=1;
bool _WSCIsParse=0;
int _WSCPageNumber=0;
while (_tspWebServer_client.connected()) 
{ while( _tspWebServer_client.available())  
{char _tempWebServerChar = _tspWebServer_client.read(); 
if(_WSCIsFirsLine) {_WSCReqest+= _tempWebServerChar;}
 if (_tempWebServerChar == '\n' && _WSCLineIsBlank) {_sendWebServerPage(_WSCPageNumber); break;}
if (_tempWebServerChar == '\n') {_WSCLineIsBlank = true; _WSCIsFirsLine=0; if (!_WSCIsParse){ _WSCPageNumber=_parseWebServerReqest(_WSCReqest); _WSCIsParse=1;} } else if (_tempWebServerChar != '\r') { _WSCLineIsBlank = false;}
}}}





//Плата:1
if (_WSP2_A1) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;}; 
 bool  _tmp1 = _trgrt1;
if (_tmp1)  { if (! _trgt1I) _trgt1 = ! _trgt1; } 
_trgt1I = _tmp1; 
if (_WSP2_A2) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;}; 
 bool  _tmp2 = _trgrt2;
if (_tmp2)  { if (! _trgt2I) _trgt2 = ! _trgt2; } 
_trgt2I = _tmp2; 
if (_WSP2_A3) { if (_trgrt3I) { _trgrt3 = 0;} else {_trgrt3 = 1; _trgrt3I = 1;} } else {_trgrt3 = 0; _trgrt3I = 0;}; 
 bool  _tmp3 = _trgrt3;
if (_tmp3)  { if (! _trgt3I) _trgt3 = ! _trgt3; } 
_trgt3I = _tmp3; 
if (_WSP2_A4) { if (_trgrt4I) { _trgrt4 = 0;} else {_trgrt4 = 1; _trgrt4I = 1;} } else {_trgrt4 = 0; _trgrt4I = 0;}; 
 bool  _tmp4 = _trgrt4;
if (_tmp4)  { if (! _trgt4I) _trgt4 = ! _trgt4; } 
_trgt4I = _tmp4; 
if (_WSP2_A5) { if (_trgrt5I) { _trgrt5 = 0;} else {_trgrt5 = 1; _trgrt5I = 1;} } else {_trgrt5 = 0; _trgrt5I = 0;}; 
 bool  _tmp5 = _trgrt5;
if (_tmp5)  { if (! _trgt5I) _trgt5 = ! _trgt5; } 
_trgt5I = _tmp5; 
if (_WSP2_A6) { if (_trgrt6I) { _trgrt6 = 0;} else {_trgrt6 = 1; _trgrt6I = 1;} } else {_trgrt6 = 0; _trgrt6I = 0;}; 
 bool  _tmp6 = _trgrt6;
if (_tmp6)  { if (! _trgt6I) _trgt6 = ! _trgt6; } 
_trgt6I = _tmp6; 
if (_WSP2_A7) { if (_trgrt7I) { _trgrt7 = 0;} else {_trgrt7 = 1; _trgrt7I = 1;} } else {_trgrt7 = 0; _trgrt7I = 0;}; 
 bool  _tmp7 = _trgrt7;
if (_tmp7)  { if (! _trgt7I) _trgt7 = ! _trgt7; } 
_trgt7I = _tmp7; 
if (_WSP2_A8) { if (_trgrt8I) { _trgrt8 = 0;} else {_trgrt8 = 1; _trgrt8I = 1;} } else {_trgrt8 = 0; _trgrt8I = 0;}; 
 bool  _tmp8 = _trgrt8;
if (_tmp8)  { if (! _trgt8I) _trgt8 = ! _trgt8; } 
_trgt8I = _tmp8; 
digitalWrite(0, !(_trgt1));
digitalWrite(1, !(_trgt2));
digitalWrite(2, !(_trgt3));
digitalWrite(3, !(_trgt4));
digitalWrite(5, !(_trgt5));
digitalWrite(6, !(_trgt6));
digitalWrite(7, !(_trgt7));
digitalWrite(8, !(_trgt8));




}
void _sendWebServerPage(int sendPageNumber)
{_tspWebServer_client.println("HTTP/1.1 200 OK");
_tspWebServer_client.println("Connection: close");  
_tspWebServer_client.println();
_tspWebServer_client.println("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"">");
_tspWebServer_client.println("<html><head>");
_tspWebServer_client.println("<META content=""text/html; charset=utf-8"" http-equiv=""Content-Type"">");
_tspWebServer_client.println("</head><body>");
if (sendPageNumber ==1) {_sendWebServerPage1();}
if (sendPageNumber ==2) {_sendWebServerPage2();}
_tspWebServer_client.println("</body></html>");
 delay(1); _tspWebServer_client.stop();}
int _parseWebServerReqest(String reqestAddres)
{
int index;
int result=0;
index=reqestAddres.indexOf("/");
  reqestAddres =_stringWithoutCharWithIndex(reqestAddres,0,(index));
index=reqestAddres.indexOf(" ");
reqestAddres =_stringWithoutCharWithIndex(reqestAddres,index,(reqestAddres.length()-index));
if (reqestAddres==""){result= 1;}
if (reqestAddres=="1"){_WSP2_A1=1; result= 2;} else {_WSP2_A1=0;} 
if (reqestAddres=="2"){_WSP2_A2=1; result= 2;} else {_WSP2_A2=0;} 
if (reqestAddres=="3"){_WSP2_A3=1; result= 2;} else {_WSP2_A3=0;} 
if (reqestAddres=="4"){_WSP2_A4=1; result= 2;} else {_WSP2_A4=0;} 
if (reqestAddres=="5"){_WSP2_A5=1; result= 2;} else {_WSP2_A5=0;} 
if (reqestAddres=="6"){_WSP2_A6=1; result= 2;} else {_WSP2_A6=0;} 
if (reqestAddres=="7"){_WSP2_A7=1; result= 2;} else {_WSP2_A7=0;} 
if (reqestAddres=="8"){_WSP2_A8=1; result= 2;} else {_WSP2_A8=0;} 
return result;
}
String _stringWithoutCharWithIndex(String value, int index,int count)
  {
    String result="";
    for (int i=0; i <= value.length(); i++){ 
      if((i<index) ||(i>(index+count))){
        result+=value.charAt(i);
      }
    } 
    return result; 
  }


void _sendWebServerPage1(void)
{
_tspWebServer_client.println("<!DOCTYPE html>");
_tspWebServer_client.println("<html lang=""ru"">");
_tspWebServer_client.println("    <head>");
_tspWebServer_client.println("	<meta charset=""utf-8"">");
_tspWebServer_client.println("	<title>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435</title>");
_tspWebServer_client.println("	<style>");
_tspWebServer_client.println("	table {");
_tspWebServer_client.println("		width: 100%;");
_tspWebServer_client.println("		background: black;");
_tspWebServer_client.println("		color: black;");
_tspWebServer_client.println("		border-spacing: 1px;");
_tspWebServer_client.println("	}");
_tspWebServer_client.println("	td, th {");
_tspWebServer_client.println("		background: white;");
_tspWebServer_client.println("		padding: 20px;");
_tspWebServer_client.println("		text-align: center;");
_tspWebServer_client.println("	}");
_tspWebServer_client.println("	h1 {");
_tspWebServer_client.println("		text-align: center;");
_tspWebServer_client.println("	}");
_tspWebServer_client.println("	</style>");
_tspWebServer_client.println("    </head>");
_tspWebServer_client.println("<body>");
_tspWebServer_client.println("	<h1>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u043b\u0435</h1>");
_tspWebServer_client.println("  <table>");
_tspWebServer_client.println("   <tr>");
_tspWebServer_client.println("	<td><a href=""http://pte.pp.ua:7000/1"">\u0420\u0435\u043b\u0435 #1</a></td>");
_tspWebServer_client.println("	<td><a href=""http://pte.pp.ua:7000/2"">\u0420\u0435\u043b\u0435 #2</a></td>");
_tspWebServer_client.println("	<td><a href=""http://pte.pp.ua:7000/3"">\u0420\u0435\u043b\u0435 #3</a></td>");
_tspWebServer_client.println("	<td><a href=""http://pte.pp.ua:7000/4"">\u0420\u0435\u043b\u0435 #4</a></td>");
_tspWebServer_client.println("	<td><a href=""http://pte.pp.ua:7000/5"">\u0420\u0435\u043b\u0435 #5</a></td>");
_tspWebServer_client.println("	<td><a href=""http://pte.pp.ua:7000/6"">\u0420\u0435\u043b\u0435 #6</a></td>");
_tspWebServer_client.println("	<td><a href=""http://pte.pp.ua:7000/7"">\u0420\u0435\u043b\u0435 #7</a></td>");
_tspWebServer_client.println("	<td><a href=""http://pte.pp.ua:7000/8"">\u0420\u0435\u043b\u0435 #8</a></td>");
_tspWebServer_client.println("   </tr>");
_tspWebServer_client.println("  </table>");
_tspWebServer_client.println("</body>");
_tspWebServer_client.println("</html>");

}void _sendWebServerPage2(void)
{
_tspWebServer_client.println("<meta http-equiv=""refresh"" content=""0,URL=http://pte.pp.ua7000"">");

}

Так же есть адреса, /1 /2 /3 /4 /5 /6 /7 /8 по которым я нажимаю. Всё работает, если через браузер.

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

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

ЕвгенийП пишет:

VaDoSiQ пишет:

Попробовал Ваш метод, не сработало. В общем суть такова, мне нужно с одного сервера, дать на сервер ардуино запрос, после чего включается реле, если я даю запрос второй раз, реле выключается. Модуль реле на 8 каналов, мне на каждый канал отдельный запрос нужен. Думаю понятно объяснил?

Не знаю, что у Вас там не сработало, кода не вижу. И не вижу ответа на вопрос показывается ли Hello.

Про 8 каналов и отдельные запросы на каждый канал Вы сразу могли написать? Я тратил время, писал Вам. а оказывается Вам нужно вовсе не то, что было в первом посте. Вам не кажется. что это как-то неправильно?

Я прошу прощения, если Вы что то не правильно поняли. Я просил пример для одного пина, мне нужно именно посмотреть, как всё работает, а дальше под остальный пины я бы сам всё написал. По поводу слова Hello - Да оно показывается.

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

Тогда то, что я Вам написал не может не работать. Если отправлется слово Hello - передёргивается пин и никак иначе. Нужели Вы умудрились эту строчку неправильно вставить? Код-то покажете?

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

ЕвгенийП пишет:

Тогда то, что я Вам написал не может не работать. Если отправлется слово Hello - передёргивается пин и никак иначе. Нужели Вы умудрились эту строчку неправильно вставить? Код-то покажете?

Вот код

#include <SPI.h>
#include <Ethernet.h>
int PIN = 0;
byte MAC[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress IP(10, 10, 1, 170);

EthernetServer server(7000);

void setup() {

  Serial.begin(9600);
  pinMode(PIN, OUTPUT);
  Ethernet.begin(MAC, IP);
  server.begin();
}


void loop() {
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("Hello");
          client.println("</html>");
          digitalWrite(PIN, ! digitalRead(PIN));
          break;
      }
    }
    client.stop();
  }
}

 

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

Мне нужно что то типа свича как в PHP

switch($action) {
case 0:
//Включить/Выключить реле
break;
case 1:
//Включить/Выключить реле
break;
case 2:
//Включить/Выключить реле
break;
case 3:
//Включить/Выключить реле
break;
case 4:
//Включить/Выключить реле
break;
case 5:
//Включить/Выключить реле
break;
case 6:
//Включить/Выключить реле
break;
case 7:
//Включить/Выключить реле
break;
}
И обращаться к серверу ардуино по адресу http://example.com/?action=0
После чего включается реле, далее перехожу еще раз по этому адресу, оно выключается.

 

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

VaDoSiQ пишет:

Вот код

#include <SPI.h>
#include <Ethernet.h>
int PIN = 0;

Ну, я же говорил, что Вы даже одну строчку вставить не смогли правильно.

Вы же пользуетесь сериалом и при этом цепляете своё реле на нулевой пин! Включайте же голову - этот пин ЗАНЯТ! 

Возьмите свободный пин и всё заработает!

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

ЕвгенийП пишет:

VaDoSiQ пишет:

Вот код

#include <SPI.h>
#include <Ethernet.h>
int PIN = 0;

Ну, я же говорил, что Вы даже одну строчку вставить не смогли правильно.

Вы же пользуетесь сериалом и при этом цепляете своё реле на нулевой пин! Включайте же голову - этот пин ЗАНЯТ! 

Возьмите свободный пин и всё заработает!

И в правду всё заработало, как посадил на 8 пин. Спасибо. Но как для нескольких реле такое организовать? Больше всего интересует именно вызов, каждого реле на включение.

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Проверьте, что вам приходит.

    while (client.available())
      Serial.print(client.read());

 

Nosferatu
Offline
Зарегистрирован: 04.11.2012

В сообщении #6 вам показали как парсить. Но вам достаточно узнавать предпоследний байт в буфере.

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

Nosferatu пишет:

Проверьте, что вам приходит.

    while (client.available())
      Serial.print(client.read());

 

Вот что приходит.

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

Nosferatu пишет:

В сообщении #6 вам показали как парсить. Но вам достаточно узнавать предпоследний байт в буфере.

Я в ардуино не специалист, слишком большой код. Не понимаю что и где там парсится. Мне нужно создать каждолму реле типа ссылки на свиче, http://example.com/?Relay=1 перехожу - включается реле, перехожу еще раз, выключается. И так для каждого реле.

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

Вы же вроде писали

VaDoSiQ пишет:

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

Теперь, когда для одного пина всё работает, Вы пишете

VaDoSiQ пишет:

Я в ардуино не специалист ... Не понимаю ....

Может проще и быстрее пойти в "Ищу исполнителя", отдать там 5-6 баксов и получить решение? Не думали об этом?

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

ЕвгенийП пишет:

Может проще и быстрее пойти в "Ищу исполнителя", отдать там 5-6 баксов и получить решение? Не думали об этом?

Хочется самому научиться. Я не прошу готового решения. Хотя бы в какую сторону копать, каким методом вызывать.

Nosferatu
Offline
Зарегистрирован: 04.11.2012

VaDoSiQ пишет:

...

Вот что приходит.

Мало информативно, без GET запроса на который это возвращает.

Проверьте что возвращает на: http://example.com/?Relay=1 и   http://example.com/?Relay=2

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

Ну, хорошо, я скажу куда копать.

Вы можете напечатать строку запроса, который к Вам пришёл? Если нет - открывайте примеры библиотеки, там это есть. Смотрите как это делается.

Когда сможете напечатать (значит научитесь добираться до этой строки), останется только выдернуть из неё символ с номером пина. Т.е. для начала научитесь добираться до строки запроса.

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

Проблему решил. Всем кто помогал, огромное спасибо.

Если кому нибудь пригодится, код ниже.

#include <SPI.h> 
#include <Ethernet.h>
#define PIN2 2
#define PIN3 3

byte MAC[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

IPAddress IP(192, 168, 1, 170);

EthernetServer server(80);

String Relay;
 
 void setup() { 
  
  Serial.begin(9600);
  pinMode(PIN2, OUTPUT);
  digitalWrite(PIN2, HIGH);
  pinMode(PIN3, OUTPUT);
  digitalWrite(PIN3, HIGH);
  Ethernet.begin(MAC, IP);
  server.begin();
  
 } 
 
 void loop() {
  EthernetClient client = server.available(); 
  if (client) { 
    while (client.connected()) {
      if (client.available()) {
        char query = client.read(); 
        if (Relay.length() < 100) { 
          Relay += query; 
          Serial.print(query); 
          }
          if (query == '\n') {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html"); 
            client.println("<html>"); 
            client.println(); 
            client.println("<head>"); 
            client.println("<meta content=text/html charset=utf-8 />"); 
            client.println("</head>"); 
            client.println("<body>"); 
            client.println("</body>"); 
            client.println("</html>"); 
            
            delay(1);
            client.stop();
            if(Relay.indexOf("Relay_1") > 0) {
              digitalWrite(PIN2, ! digitalRead(PIN2));
              }
              if(Relay.indexOf("Relay_2") > 0) {
                digitalWrite(PIN3, ! digitalRead(PIN3));
                }
                Relay = "";
          }
      }
    }
  }
 }

 

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

С Победой!

VaDoSiQ
VaDoSiQ аватар
Offline
Зарегистрирован: 19.01.2017

ЕвгенийП пишет:

С Победой!

Спасибо!)