Не отображается панель управления Ардуино через Браузер

tolius2008
Offline
Зарегистрирован: 08.03.2021

Всем доброго времени суток!

На базе Ардуино уно собрал бутерброд из Шилд и четырёх реле. Управлять нагрузкой планировал через браузер используя IP 192.168.X.XX

Скачал несколько вариантов программ, один скетч замечательно работает:

#include <Ethernet.h>
#include <SPI.h>
byte ethernet_mac [] = {0x78, 0xAC, 0xC0, 0x43, 0x7B, 0xC1};
IPAddress ethernet_ip(192, 168, 0, 222);
byte ethernet_dns [] = {192, 168, 0, 1};
byte ethernet_gateway [] = {192, 168, 0, 1};
byte ethernet_subnet [] = {255, 255, 255, 0};
EthernetServer _tspWebServer(80);
EthernetClient _tspWebServer_client;
bool _trgt4 = 0;
bool _trgt4I = 0;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
bool _trgrt2 = 0;
bool _trgrt2I = 0;
bool _trgrt3 = 0;
bool _trgrt3I = 0;
bool _trgrt4 = 0;
bool _trgrt4I = 0;
bool _trgrt5 = 0;
bool _trgrt5I = 0;
bool _trgt1 = 0;
bool _trgt1I = 0;
bool _WSP2_A1 = 0;
bool _WSP2_A2 = 0;
bool _WSP2_A3 = 0;
bool _WSP2_A4 = 0;
bool _trgt2 = 0;
bool _trgt2I = 0;
bool _trgt3 = 0;
bool _trgt3I = 0;
void setup()
{
Ethernet.begin(ethernet_mac, ethernet_ip, ethernet_dns, ethernet_gateway, ethernet_subnet);
delay(1000);
_tspWebServer.begin();
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, 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;}
}}}
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 (_trgrt3I) { _trgrt3 = 0;} else {_trgrt3 = 1; _trgrt3I = 1;} } else {_trgrt3 = 0; _trgrt3I = 0;};
bool _tmp2 = _trgrt3;
if (_tmp2) { if (! _trgt2I) _trgt2 = ! _trgt2; }
_trgt2I = _tmp2;
if (0) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;};
if (_WSP2_A3) { if (_trgrt4I) { _trgrt4 = 0;} else {_trgrt4 = 1; _trgrt4I = 1;} } else {_trgrt4 = 0; _trgrt4I = 0;};
bool _tmp3 = _trgrt4;
if (_tmp3) { if (! _trgt3I) _trgt3 = ! _trgt3; }
_trgt3I = _tmp3;
if (_WSP2_A4) { if (_trgrt5I) { _trgrt5 = 0;} else {_trgrt5 = 1; _trgrt5I = 1;} } else {_trgrt5 = 0; _trgrt5I = 0;};
bool _tmp4 = _trgrt5;
if (_tmp4) { if (! _trgt4I) _trgt4 = ! _trgt4; }
_trgt4I = _tmp4;
digitalWrite(6, !(_trgt1));
digitalWrite(7, !(_trgt2));
digitalWrite(8, !(_trgt3));
digitalWrite(9, !(_trgt4));
}
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;}
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("");
_tspWebServer_client.println("<table width=""100%"" height=""100%"" cellspacing=""0"" cellpadding=""0"" border=""0"" bgcolor=""1E90FF"">");
_tspWebServer_client.println("<tr>");
_tspWebServer_client.println("<td>");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("<table width=""1200px"" align=""center"" border=""1"" cellspacing=""0"" cellpadding=""20"">");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("<tr>");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("<td width=""60%"" valign=""top"">");
_tspWebServer_client.println("<p><font color=""500000"" size=""5"" face=""Open Sans"">Управление нагрузкой</font></p>");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("<table width=""60%"" cellspacing=""0"" cellpadding=""20"">");
_tspWebServer_client.println("<tr>");
_tspWebServer_client.println("<td>");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("<p><a href=""http://192.168.0.222/1""><button>Реле 1</button></a></p>");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("</td>");
_tspWebServer_client.println("");
_tspWebServer_client.println("<td>");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("<p><a href=""""http://192.168.0.222/2""><button>Реле 2</button></a></p>");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("</td>");
_tspWebServer_client.println("");
_tspWebServer_client.println("<td>");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("<p><a href=""""http://192.168.0.222/3""><button>Реле 3</button></a></p>");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("</td>");
_tspWebServer_client.println("");
_tspWebServer_client.println("<td>");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("<p><a href=""""http://192.168.0.222/4""><button>Реле 4</button></a></p>");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("</td>");
_tspWebServer_client.println("");
_tspWebServer_client.println("</tr>");
_tspWebServer_client.println("</table>");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("</td>");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("");
_tspWebServer_client.println("</table>");
_tspWebServer_client.println("");
_tspWebServer_client.println("</td>");
_tspWebServer_client.println("</tr>");
_tspWebServer_client.println("</table>");
_tspWebServer_client.println("");
 
}void _sendWebServerPage2(void)
{
_tspWebServer_client.println("<meta http-equiv=""refresh"" content=""0;URL=http://192.168.0.222"">");
 
}

Другой скетч, загружается успешно, установлены все библиотеки. но, открывается в браузере белая страница

:

#include <dht11.h>
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#define DHT11_PIN 7
#define REQ_BUF_SZ 20

dht11 DHT;
File webFile;
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0; // index into HTTP_req buffer
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 0, 20);

EthernetServer server(80);

/*
void setup() {

SD.begin(4);
Ethernet.begin(mac, ip);
server.begin();
}

void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {

#include <dht11.h>
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#define DHT11_PIN 7
#define REQ_BUF_SZ 20

dht11 DHT;
File webFile;
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0; // index into HTTP_req buffer
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(192, 168, 0, 20);

EthernetServer server(80);
*/
void setup() {

SD.begin(4);
Ethernet.begin(mac, ip);
server.begin();
}
//***********************
void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {

// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (req_index < (REQ_BUF_SZ - 1)) {
HTTP_req[req_index] = c; // save HTTP request character
req_index++;
}
if (c == '\n' && currentLineIsBlank) {
if (StrContains(HTTP_req, "GET / ") || StrContains(HTTP_req, "GET /index.htm")) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println();
webFile = SD.open("index.htm");
} else if (StrContains(HTTP_req, "GET /temp.png")) {
webFile = SD.open("temp.png");
if (webFile) {
client.println("HTTP/1.1 200 OK");
client.println();
}
} else if (StrContains(HTTP_req, "GET /humid.png")) {
webFile = SD.open("humid.png");
if (webFile) {
client.println("HTTP/1.1 200 OK");
client.println();
}
} else if (StrContains(HTTP_req, "GET /flame.png")) {
webFile = SD.open("flame.png");
if (webFile) {
client.println("HTTP/1.1 200 OK");
client.println();
}
} else if (StrContains(HTTP_req, "ajax_flame")) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: keep-alive");
client.println();
int smoke_gas = 0; //пин на котором подключен MQ-2
int sensorReading = analogRead(smoke_gas);
int chk;
chk = DHT.read(DHT11_PIN);
client.println(sensorReading);
client.println(":");
client.println(DHT.temperature);
client.println(":");
client.println(DHT.humidity);

}
if (webFile) {
while (webFile.available()) {
client.write(webFile.read()); // send web page to client
}
webFile.close();
}
req_index = 0;
StrClear(HTTP_req, REQ_BUF_SZ);
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
} else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
}

//******************************************************************************
void StrClear(char *str, char length)
{
for (int i = 0; i < length; i++) {
str [i]= 0;
}
}

char StrContains(char *str, char *sfind)
{
char found = 0;
char index = 0;
char len;
len = strlen(str);
if (strlen(sfind) > len) {
return 0;
}
while (index < len) {
if (str [index]== sfind[found]) {
found++;
if (strlen(sfind) == found) {
return 1;
}
}
else {
found = 0;
}
index++;
}
return 0;
}
/*
}
if (webFile) {
while(webFile.available()) {
client.write(webFile.read()); // send web page to client
}
webFile.close();
}
req_index = 0;
StrClear(HTTP_req, REQ_BUF_SZ);
break;
}
if (c == '\n') {
// you're starting a new line
currentLineIsBlank = true;
}else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
}
}

void StrClear(char *str, char length)
{
for (int i = 0; i < length; i++) {
str = 0;
}
}

char StrContains(char *str, char *sfind)
{
char found = 0;
char index = 0;
char len;
len = strlen(str);
if (strlen(sfind) > len) {
return 0;
}
while (index < len) {
if (str [index]== sfind[found]) {
found++;
if (strlen(sfind) == found) {
return 1;
}
}
else {
found = 0;
}
index++;
}
return 0;
}
*/

Открывал код страницы, думал, шрифты прозрачные, там пусто вообще, нет никакой информации по указанному IP, но сама страница открывается... Пытался скартой ставить и без карты загружаться. Пытался загружать похожий скетч, для управления нагрузкой через браузер, так же захожу по IP, и опять белая страница. 

Пробовал заходить с другого ноутбука, и то-же самое, белая страница.

Подскажите пожалуйста, что я делаю не так, почему страницы в браузере, при переходе на определённый IP, открываются чисто белыми, почему скетч не работает во втором случае?

b707
Offline
Зарегистрирован: 26.05.2017

первый код написан явно не человеком, а интерпретатором типа FLProg. Такое не один живой программист разбирать не станет - просто посчитает ниже своего достоинства.

во втором случае страницы должны подгружаться с SD-карты - она у вас есть? Файлы, перечисленные в коде - на нее загружены?

 

tolius2008
Offline
Зарегистрирован: 08.03.2021

Да, действительно, первый скрипт писался с использованием приложения с подстановкой компонентов. 

Во втором скрипте, файлы загружены были на СД. Я пробовал с файлами, и пробовал вынимать СД карту, эффект одинаковый, страница в браузере открывалась чисто белой

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

https://tehnopage.ru/ethernet-arduino-pwm-control