Ви не увійшли.
Вечер добрый.
У меня такая проблема. Хочу по условию таймера с участием мега 2560 и 5100, по истечению времени, что всё это работало, ну в крайнем случае с запущенного сервера при открытом браузере. Есть инфо, дайте ссылки посмотреть как там выполнено
Неактивний
Без программы на компе запустить exe никак. С программой - не понятно зачем нужна Ардуина (таймер можно в программе задать).
Ссылку в браузере можно... без программы на компе, но с открытой вкладкой в браузере.
Предлагаю третий вариант: делай эмулятор usb клавиатуры на Arduino, запустить программу просто: нажимаем Windows+R mspaint.exe Enter
Неактивний
Ссылку в браузере можно... без программы на компе, но с открытой вкладкой в браузере.
Этот вариант для начала, подошёл бы, Я только осваиваю, второй не потяну пока.
Вот у меня есть переход по ссылке с вэб, как его доработать
<br>
<a href='http://www.speedtest.net/ru' style='display: inline-block; width: 135px; height:20px; margin-top:5px; margin-bottom:2px; border-radius:2px; -moz-border-radius:2px; background-color:rgb(171, 211, 220); \'>speedtest.net<a>
Он находится в Index на CD
Неактивний
Для начала надо сделать веб страницу на Вашей arduino с 5100, первое в гугле: http://webstm32.sytes.net/web_1.htm
Потом сделать хитрую веб страничку которая бы заставляла браузер проверять пора ли открывать ссылку, на js например, по таймеру. https://learn.javascript.ru/settimeout-setinterval
Создать на сервере еще одну страничку которая будет проверяться по этому таймеру и в зависимости данных на второй странице - открывать ссылку лучше запускать скрипт со второй страницы, а там он будет или пустым, или "открыть ссылку".
Неактивний
которая бы заставляла браузер проверять пора ли открывать ссылку, на js например, по таймеру
Вы наверно не так поняли мне не надо чтоб браузер что то проверял, у меня уже есть 2 таймера на миллис они отрабатывают , и должны отдавать команду на выполнение функции (), но у меня есть и клиент и Index файл, и я запутался немного, вот 2 отрывка кода которые работают пока без желаемого индекс можно открыть в браузере для наглядности.
EthernetClient client = server.available();
if (client) {
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;
req_index++;
}
if (c == '\n' && currentLineIsBlank) {
if (StrContains(HTTP_req, "GET /")) {
if (StrContains(HTTP_req, "/ ")
|| StrContains(HTTP_req, "/index.htm")) {
sendHtmlFile(client, "index.htm");
} else if (StrContains(HTTP_req, "/favicon.ico")) {
sendFile(client, "favicon.ico");
} else if (StrContains(HTTP_req, "/input_1.png")) {
sendFile(client, "input_1.png");
} else if (StrContains(HTTP_req, "/input_2.png")) {
sendFile(client, "input_2.png");
} else if (StrContains(HTTP_req, "/input_3.png")) {
sendFile(client, "input_3.png");
} else if (StrContains(HTTP_req, "/input_4.png")) {
sendFile(client, "input_4.png");
} else if (StrContains(HTTP_req, "/input_5.png")) {
sendFile(client, "input_5.png");
} else if (StrContains(HTTP_req, "/input_6.png")) {
sendFile(client, "input_6.png");
} else if (StrContains(HTTP_req, "/my.css")) {
sendFile(client, "my.css");
} else if (StrContains(HTTP_req, "ajax_input")) {
sendBaseAnswer(client);
int val_input_1 = analogRead(input_1); // Для перевода 1024 в % значение =
val_input_1 = map(val_input_1, 0, 1023, 0, 100);
int val_input_2 = analogRead(input_2);
val_input_2 = map(val_input_2, 0, 1023, 0, 100);
int chk;
chk = irrecv.decode(&results);
/*
///////////////////////
int digital_input_1 = digitalRead(???);
int digital_input_2 = digitalRead(???);
client.print (digital_input_1);
client.print(":");
client.print (digital_input_2);
client.print(":");
///////////////////////
*/
client.print (val_input_1);
client.print(":");
client.print (val_input_2);
client.print(":");
client.print (results.value, HEX);
///////////////////////
client.print(":");
client.print(time_hrs_1);
client.print("h . ");
printDigits(client, time_min_1);
client.print("m . ");
printDigits(client, time_sec_1);
client.print("s");
///////////////////////
client.print(":");
client.print(time_hrs_2);
client.print("h . ");
printDigits(client, time_min_2);
client.print("m . ");
printDigits(client, time_sec_2);
client.print("s");
///////////////////////
client.print(":");
client.print(time_hrs_3);
client.print("h . ");
printDigits(client, time_min_3);
client.print("m . ");
printDigits(client, time_sec_3);
client.print("s");
//////////////////////
client.print(":");
client.print((digitalRead(6)) ? "1" : "0");
client.print(":");
client.print((digitalRead(7)) ? "1" : "0");
client.print(":");
client.print((digitalRead(8)) ? "1" : "0");
client.print(":");
client.print((digitalRead(5)) ? "1" : "0");
//////////////////////
} else if (StrContains(HTTP_req, "setpin?")) {
if (StrContains(HTTP_req, "pin=1")) {
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(5, LOW);
digitalWrite(alarm_Out, LOW); /////
} else if (StrContains(HTTP_req, "pin=2")) {
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(alarm_Out, LOW); ////
} else if (StrContains(HTTP_req, "pin=3")) {
pin3 = !pin3;
digitalWrite(8, pin3);
} else if (StrContains(HTTP_req, "pin=4")) {
digitalWrite(5, HIGH);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(alarm_Out, LOW); /////
}
sendBaseAnswer(client);
}
}
req_index = 0;
StrClear(HTTP_req, REQ_BUF_SZ);
break;
}
if (c == '\n') {
currentLineIsBlank = true;
} else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1);
client.stop();
}
}
//************************************************
bool sendHtmlFile(EthernetClient client, char *fileName) {
webFile = SD.open(fileName);
sendBaseAnswer(client);
return sendFile(client, webFile);
}
bool sendFile(EthernetClient client, char *fileName) {
webFile = SD.open(fileName);
sendHttpOkAnswer(client);
client.println();
return sendFile(client, webFile);
}
bool sendFile(EthernetClient client, File &webFile) {
if (webFile) {
while (webFile.available())
client.write(webFile.read());
webFile.close();
return 1;
}
return 0;
}
//////////////////////////////////////////////////////////////////////
void sendBaseAnswer(EthernetClient client) {
sendHttpOkAnswer(client);
client.println(F("Content-Type: text/html"));
client.println(F("Connection: close"));
client.println();
}
void sendHttpOkAnswer(EthernetClient client) {
client.println(F("HTTP/1.1 200 OK"));
}
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;
}
и
<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=UTF-8'>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<title>web server 5100</title>
<link type="text/css" rel="StyleSheet" href="/my.css" />
<script>
function GetFlameState() {
nocache = "&nocache=" + Math.random() * 1000000;
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (this.readyState == 4) {
if (this.status == 200) {
if (this.responseText != null) {
var arrayOfStrings = this.responseText.split(":");
document.getElementById("sensor-1_txt").innerHTML = arrayOfStrings[0];
document.getElementById("sensor-2_txt").innerHTML = arrayOfStrings[1];
document.getElementById("sensor-3_txt").innerHTML = arrayOfStrings[2];
document.getElementById("sensor-4_txt").innerHTML = arrayOfStrings[3];
document.getElementById("sensor-5_txt").innerHTML = arrayOfStrings[4];
document.getElementById("sensor-6_txt").innerHTML = arrayOfStrings[5];
for(var i = 1 ; i < 8 ; i++)
if(arrayOfStrings[5+i] == "1")
document.getElementById("led_"+i).setAttribute("class","button_enabled");
else
document.getElementById("led_"+i).setAttribute("class","button_disabled");
}
}
}
}
request.open("GET", "ajax_input" + nocache, true);
request.send(null);
setTimeout('GetFlameState()', 1000);
}
function onClick(pin){
var request = new XMLHttpRequest();
request.open("GET", "\setpin?pin=" + pin , false);
request.send(null);
}
</script>
</head>
<body onload="GetFlameState()">
</table>
<center>
<div class="form">
<h2>Web Server router switch 5100</h2>
<hr noshade size="6px" color="gray">
<h3>Download activity & Code IR </h3>
<table align="center">
<td valign="center">1</td>
<td><img src='input_1.png' /></td>
<td valign="center">level </td>
<td><span id="sensor-1_txt">00</span>%</td>
<td>     </td>
<td><img src='input_3.png' /></td>
<td valign="center">code</td>
<td><span id="sensor-3_txt">---------</span></td>
<td>     </td>
<td valign="center">2</td>
<td><img src='input_2.png' /></td>
<td valign="center">level </td>
<td><span id="sensor-2_txt">00</span>%</td>
<td>     </td>
</table>
<center>
<hr noshade size="1px" color="gray">
<h3>Router Power 12v</h3>
<button type="button" id="led_3" class="button_disabled" onClick="onClick(3)">Light</button>
<button type="button" id="led_4" class="button_disabled" onClick="onClick(4)">  Router Power OFF (Standby)  </button>
<button type="button" id="led_5" class="button_disabled" onClick="onClick(5)">Re_Start </button>
<br>
<br>
<td>
<td valign="center">1</td>
<td><img src='input_5.png' /></td>
<td valign="center"> </td>
<td><span id="sensor-5_txt">0h : 00m : 00s</span></td>
<td>       </td>
<td><span id="sensor-4_txt">0h : 00m : 00s</span></td>
<td><img src='input_4.png' /></td>
<td valign="center"> </td>
<td valign="center">2</td>
<br>
<br>
<button type="button" id="led_1" class="button_disabled" onClick="onClick(1)">Router # 1</button>
<input type="checkbox" name="led_1" value="0" /><a>
<a>     Loading is complete     <a>
<input type="checkbox" name="led_2" value="0" /><a>
<button type="button" id="led_2" class="button_disabled" onClick="onClick(2)">Router # 2</button>
<br>
<hr noshade size="1px" color="gray">
<a href='http://megalink.free/login?dst=http://megalink.free&username=T-54%3AE6%3AFC%3ADD%3A30%3A35' style='display: inline-block; width: 195px; height:25px; margin-top:5px; margin-bottom:15px; border-radius:5px; -moz-border-radius:5px; background-color:rgb(171, 211, 220); \'>Вход без логина/пароля 1<a>
<a>     <a>
<a href='http://megalink.free/login?dst=http://megalink.free&username=T-F8%3AD1%3A11%3A25%3AAA%3AB8' style='display: inline-block; width: 195px; height:25px; margin-top:5px; margin-bottom:15px; border-radius:5px; -moz-border-radius:5px; background-color:rgb(171, 211, 220); \'>Вход без логина/пароля 2<a>
<br>
<a href='http://www.speedtest.net/ru' style='display: inline-block; width: 135px; height:20px; margin-top:5px; margin-bottom:2px; border-radius:2px; -moz-border-radius:2px; background-color:rgb(171, 211, 220); \'>speedtest.net<a>
<a href='rezerv' style='display: inline-block; width: 135px; height:20px; margin-top:5px; margin-bottom:5px; border-radius:2px; -moz-border-radius:2px; background-color:rgb(171, 211, 220); \'>rezerv<a>
<a href='https://www.youtube.com/' style='display: inline-block; width: 135px; height:20px; margin-top:5px; margin-bottom:5px; border-radius:2px; -moz-border-radius:2px; background-color:rgb(171, 211, 220); \'>youtube.com<a>
<br>
<hr noshade size="1px" color="gray">
<td valign="center">Общее время подключения </td>
<td><img src='input_6.png' /></td>
<td valign="center"> </td>
<td><span id="sensor-6_txt">  0h : 00m : 00s</span></td>
<hr noshade size="6px" color="gray">
</center>
</div>
</Body>
</html>
Остання редакція Nesamodelkin (2018-06-24 08:43:42)
Неактивний
HTTP сервер ни с того ни с сего не может отправить клиенту данные. Клиент должен их запросить.
Ну... в принципе можете не закрывая </body></html> и соединение отдавать медленно по пробелу (который в html ничего не значит), а по событию таймера отправить <script>setTimeout("location.href = 'index.php';",2000);</script></doby></html> ,где 2000 - задержка от перехода на страницу index.php в миллисекундах. Открыть новую вкладку нельзя, потому что сработает защита от всплывающих окон.
Ваш вопрос больше по веб фронтенду, тут мало кто таким занимается.
Неактивний
Как по условию открыть приложение ехе, или хотя бы ссылку в браузере?
1. Срабатывает "условие" на Arduino.
2. К Arduino подключён через усилитель или просто через ограничивающий резистор ИК-светодиод, который излучает сигнал с нужной командой.
3. На компьютере установлена плата ТВ-тюнера с функцией запуска настраиваемых приложений по команде с ИК-пульта, которая запускает батник или любой другой скрипт. Подойдёт любой девайс для управления компьютером по ИК.
4. Батник/скрипт творит любое чудо на компьютере.
Неактивний
Вариант №2:
На компьютере запущен HTTP сервер Apache, Arduino по условию дёргает через GET на нём определённый адрес типа http://192.168.0.2/a/, можно даже параметры передать. В папке "a" сидит index.*, который на самом деле не статичный файл, а выполняемый скрипт или простейший CGI-модуль, который сделает всё, что нужно. Я на Delphi давным-давно так делал, правда под Windows дело было.
Неактивний
Не ужели всё так сложно... Ну есть же время и погоду когда надо вызывать, на почту что то отправлять, ну хорошо там библиотеки задействованы, согласен.. Но мне всего то надо дёрнуть страницу, пусть хоть эту https://forum.arduino.ua/post.php?tid=1603, не получая и ни передавая ей ничего просто перезагрузить, не ужели без скриптов и промежуточных батников не обойтись
Неактивний
Не ужели всё так сложно...
И да, и нет. Скрипт для периодической перезагрузки страницы браузера или получения данных с сервера вещь не сложная. Hо реализовать это можно только при помощи JS, на стороне браузера. В простейшем виде это десяток строк. Погуглите в интернете и вы обязательно найдете примеры.
Остання редакція Вячеслав Азаров (2018-07-13 19:25:59)
Неактивний
А можно как то переделать библиотеку парсинга погоды, там и условия уже есть и таймер то же, только ссылки поменять на нужные мне, куда запрос отсылать. речь идёт пока не об УНО + 5100, а о 8266
Неактивний
А можно как то переделать библиотеку парсинга погоды, там и условия уже есть и таймер то же, только ссылки поменять на нужные мне, куда запрос отсылать. речь идёт пока не об УНО + 5100, а о 8266
Что, откуда и куда вы хотите передавать? Не совсем понятно. Объясните подробнее, тогда вам смогут помочь.
Неактивний
Да потому что все задом-наперед делаете. Маленький файл на ардуине пусть изменяется, а js его периодически запрашивает (ajax). А после опроса по условию location.reload(); Три строчки кода.
Иначе это не практическое задание, а академическое. Т.е. если нужно именно чтобы ардуина отправляла комманду, а на комп нельзя поставить демона, то бессмыслнное и беспощадное задание. Слушайте порт / ssh. Нет... нужен браузер... Какое задание такое и решение, похоже на "нужно ехать, но не на машине, не на мотоцикле, не на велосипеде, а на канализационном люке, к машине его привязывать нельзя, отверстие в нем делать нельзя, и вообще никакие внешние силы нельзя..."
Можно попробовать Opera Unite со встронным вебсервером, только я боюсь он там сильно кастрированный, или любой другой старый браузер, с узявимостью позволяющей запускать шелл код. Браузеры разрабатываются специально так чтобы ничего они не могли запустить. Кроме вручную скачанных файлов и ручного их запуска и с предупреждением и проверкой его антивирусом.
Неактивний