123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- <html><head><body>
- <h3>Hardware configuration</h3>
- <a href='/'>Home</a><br><br>
- <input type='button' value='reload' onclick='return transmit()'/><br>
- <form id='form1' onsubmit='return transmit(this)'>
- <br>
- Avoid duplicate GPIO assignments!<br>
- GPIO 0 and 2 have fixed 10k pullup and must remain high during boot (otherwise flash mode is entered).<br>
- GPIO 2 is also connected to builtin LED (active LOW) on most ESP boards, so don't care or strip it.<br>
- GPIO 15 has 10k pull-down, so could only be used as active-high in/output.<br>
- Some GPIOs go high for some time at boot, so using only active-low logic is advisable, particularly for switching outputs<br>
- Invert = active HIGH, default LOW<br>
- Impulses are 0 by default (on until off), otherwise will auto-turn-off after specified time in factors of 100ms.<br>
- <h4>Relais</h4>
- 1 - Enable: <input type='checkbox' name='enaRel1' id='enaRel1'/><br>
- GPIO: <select name='ioRel1' id='ioRel1'><option>0</option><option>2</option><option>4</option><option>5</option><option>12</option><option>13</option><option>14</option><option>15</option></select><br>
- Impulse: <input type='number' name='puls1' id='puls1'/><br>
- invert: <input type='checkbox' name='invRel1' id='invRel1'/><br><br>
- 2 - Enable: <input type='checkbox' name='enaRel2' id='enaRel2'/><br>
- GPIO: <select name='ioRel2' id='ioRel2'><option>0</option><option>2</option><option>4</option><option>5</option><option>12</option><option>13</option><option>14</option><option>15</option></select><br>
- Impulse: <input type='number' name='puls2' id='puls2'/><br>
- invert: <input type='checkbox' name='invRel2' id='invRel2'/><br><br>
- 3 - Enable: <input type='checkbox' name='enaRel3' id='enaRel3'/><br>
- GPIO: <select name='ioRel3' id='ioRel3'><option>0</option><option>2</option><option>4</option><option>5</option><option>12</option><option>13</option><option>14</option><option>15</option></select><br>
- Impulse: <input type='number' name='puls3' id='puls3'/><br>
- invert: <input type='checkbox' name='invRel3' id='invRel3'/><br>
- <h4>Buttons</h4>
- Debounce time: <input type='number' name='debtime' id='debtime'/> in ms. default: 120<br>
- Hold time: <input type='number' name='hldtime' id='hldtime'/> in ms. default: 750<br><br>
- 1 - Enable: <input type='checkbox' name='enaBtn1' id='enaBtn1'/><br>
- GPIO: <select name='ioBtn1' id='ioBtn1'><option>0</option><option>2</option><option>4</option><option>5</option><option>12</option><option>13</option><option>14</option><option>15</option></select><br>
- invert: <input type='checkbox' name='invBtn1' id='invBtn1'/><br><br>
- 2 - Enable: <input type='checkbox' name='enaBtn2' id='enaBtn2'/><br>
- GPIO: <select name='ioBtn2' id='ioBtn2'><option>0</option><option>2</option><option>4</option><option>5</option><option>12</option><option>13</option><option>14</option><option>15</option></select><br>
- invert: <input type='checkbox' name='invBtn2' id='invBtn2'/><br><br>
- 3 - Enable: <input type='checkbox' name='enaBtn3' id='enaBtn3'/><br>
- GPIO: <select name='ioBtn3' id='ioBtn3'><option>0</option><option>2</option><option>4</option><option>5</option><option>12</option><option>13</option><option>14</option><option>15</option></select><br>
- invert: <input type='checkbox' name='invBtn3' id='invBtn3'/><br>
- <h4>Status LEDs</h4>
- 1 - Enable: <input type='checkbox' name='enaLed1' id='enaLed1'/><br>
- GPIO: <select name='ioLed1' id='ioLed1'><option>0</option><option>2</option><option>4</option><option>5</option><option>12</option><option>13</option><option>14</option><option>15</option></select><br>
- invert: <input type='checkbox' name='invLed1' id='invLed1'/><br><br>
- 2 - Enable: <input type='checkbox' name='enaLed2' id='enaLed2'/><br>
- GPIO: <select name='ioLed2' id='ioLed2'><option>0</option><option>2</option><option>4</option><option>5</option><option>12</option><option>13</option><option>14</option><option>15</option></select><br>
- invert: <input type='checkbox' name='invLed2' id='invLed2'/><br><br>
- 3 - Enable: <input type='checkbox' name='enaLed3' id='enaLed3'/><br>
- GPIO: <select name='ioLed3' id='ioLed3'><option>0</option><option>2</option><option>4</option><option>5</option><option>12</option><option>13</option><option>14</option><option>15</option></select><br>
- invert: <input type='checkbox' name='invLed3' id='invLed3'/><br><br>
- <br>
- <input type='submit' value='Save'/>
- </form>
- <form id='rebootForm' onsubmit='return res()'>
- <input type='submit' value='Restart'/>
- </form>
- <script>
- function g(i) { return document.getElementById(i) };
- var xhttp, reqTime, reqFin, rxhttp;
-
- function res() {
- rxhttp = new XMLHttpRequest();
- rxhttp.timeout = 1000;
- rxhttp.open('POST', 'restart');
- rxhttp.send('');
- rxhttp = null;
- return false;
- }
-
- function setCb(ele, dat) {
- if(dat == 1) {
- ele.checked = true;
- ele.style.visibility = 'visible';
- }
- else {
- ele.checked = false;
- ele.style.visibility = 'visible';
- }
- }
-
- function updCbVal(ele) {
- if (ele.checked) ele.value ='1';
- else {
- ele.value = '0';
- ele.checked = true;
- ele.style.visibility = 'hidden';
- }
- }
-
- function transmit(f) {
- if (!xhttp) {
- updCbVal(g('enaRel1'));
- updCbVal(g('enaRel2'));
- updCbVal(g('enaRel3'));
- updCbVal(g('enaBtn1'));
- updCbVal(g('enaBtn2'));
- updCbVal(g('enaBtn3'));
- updCbVal(g('invRel1'));
- updCbVal(g('invRel2'));
- updCbVal(g('invRel3'));
- updCbVal(g('invBtn1'));
- updCbVal(g('invBtn2'));
- updCbVal(g('invBtn3'));
- updCbVal(g('enaLed1'));
- updCbVal(g('enaLed2'));
- updCbVal(g('enaLed3'));
- updCbVal(g('invLed1'));
- updCbVal(g('invLed2'));
- updCbVal(g('invLed3'));
- xhttp = new XMLHttpRequest();
- xhttp.timeout = 2000;
- xhttp.open('POST', 'confdatahw');
- xhttp.send(f ? (new FormData(f)) : '');
- xhttp.onreadystatechange = function () {
- if (xhttp.readyState === XMLHttpRequest.DONE && xhttp.status === 200) {
- var data = JSON.parse(xhttp.responseText);
- g('debtime').value = data.debtime;
- g('hldtime').value = data.hldtime;
- g('ioRel1').value = data.ioRel1;
- g('ioRel2').value = data.ioRel2;
- g('ioRel3').value = data.ioRel3;
- g('puls1').value = data.puls1;
- g('puls2').value = data.puls2;
- g('puls3').value = data.puls3;
- g('ioBtn1').value = data.ioBtn1;
- g('ioBtn2').value = data.ioBtn2;
- g('ioBtn3').value = data.ioBtn3;
- g('ioLed1').value = data.ioLed1;
- g('ioLed2').value = data.ioLed2;
- g('ioLed3').value = data.ioLed3;
- setCb(g('enaRel1'), data.enaRel1);
- setCb(g('enaRel2'), data.enaRel2);
- setCb(g('enaRel3'), data.enaRel3);
- setCb(g('enaBtn1'), data.enaBtn1);
- setCb(g('enaBtn2'), data.enaBtn2);
- setCb(g('enaBtn3'), data.enaBtn3);
- setCb(g('invRel1'), data.invRel1);
- setCb(g('invRel2'), data.invRel2);
- setCb(g('invRel3'), data.invRel3);
- setCb(g('invBtn1'), data.invBtn1);
- setCb(g('invBtn2'), data.invBtn2);
- setCb(g('invBtn3'), data.invBtn3);
- setCb(g('enaLed1'), data.enaLed1);
- setCb(g('enaLed2'), data.enaLed2);
- setCb(g('enaLed3'), data.enaLed3);
- setCb(g('invLed1'), data.invLed1);
- setCb(g('invLed2'), data.invLed2);
- setCb(g('invLed3'), data.invLed3);
- xhttp = null;
- reqFin = false;
- }
- else {
- if(!reqFin && reqTime > 10) {
- xhttp = null;
- reqFin = true;
- }
- }
- }
- }
- return false;
- }
- transmit();
- setInterval(function () { ++reqTime; }, 1000);
- </script>
- </body></html>
|