confhw.htm 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <html><head><body>
  2. <h3>Hardware configuration</h3>
  3. <a href='/'>Home</a><br><br>
  4. <input type='button' value='reload' onclick='return transmit()'/><br>
  5. <form id='form1' onsubmit='return transmit(this)'>
  6. <br>
  7. Avoid duplicate GPIO assignments!<br>
  8. GPIO 0 and 2 have fixed 10k pullup and must remain high during boot (otherwise flash mode is entered).<br>
  9. GPIO 2 is also connected to builtin LED (active LOW) on most ESP boards, so don't care or strip it.<br>
  10. GPIO 15 has 10k pull-down, so could only be used as active-high in/output.<br>
  11. Some GPIOs go high for some time at boot, so using only active-low logic is advisable, particularly for switching outputs<br>
  12. Invert = active HIGH, default LOW<br>
  13. Impulses are 0 by default (on until off), otherwise will auto-turn-off after specified time in factors of 100ms.<br>
  14. <h4>Relais</h4>
  15. 1 - Enable: <input type='checkbox' name='enaRel1' id='enaRel1'/><br>
  16. 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>
  17. Impulse: <input type='number' name='puls1' id='puls1'/><br>
  18. invert: <input type='checkbox' name='invRel1' id='invRel1'/><br><br>
  19. 2 - Enable: <input type='checkbox' name='enaRel2' id='enaRel2'/><br>
  20. 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>
  21. Impulse: <input type='number' name='puls2' id='puls2'/><br>
  22. invert: <input type='checkbox' name='invRel2' id='invRel2'/><br><br>
  23. 3 - Enable: <input type='checkbox' name='enaRel3' id='enaRel3'/><br>
  24. 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>
  25. Impulse: <input type='number' name='puls3' id='puls3'/><br>
  26. invert: <input type='checkbox' name='invRel3' id='invRel3'/><br>
  27. <h4>Buttons</h4>
  28. Debounce time: <input type='number' name='debtime' id='debtime'/> in ms. default: 120<br>
  29. Hold time: <input type='number' name='hldtime' id='hldtime'/> in ms. default: 750<br><br>
  30. 1 - Enable: <input type='checkbox' name='enaBtn1' id='enaBtn1'/><br>
  31. 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>
  32. invert: <input type='checkbox' name='invBtn1' id='invBtn1'/><br><br>
  33. 2 - Enable: <input type='checkbox' name='enaBtn2' id='enaBtn2'/><br>
  34. 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>
  35. invert: <input type='checkbox' name='invBtn2' id='invBtn2'/><br><br>
  36. 3 - Enable: <input type='checkbox' name='enaBtn3' id='enaBtn3'/><br>
  37. 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>
  38. invert: <input type='checkbox' name='invBtn3' id='invBtn3'/><br>
  39. <h4>Status LEDs</h4>
  40. 1 - Enable: <input type='checkbox' name='enaLed1' id='enaLed1'/><br>
  41. 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>
  42. invert: <input type='checkbox' name='invLed1' id='invLed1'/><br><br>
  43. 2 - Enable: <input type='checkbox' name='enaLed2' id='enaLed2'/><br>
  44. 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>
  45. invert: <input type='checkbox' name='invLed2' id='invLed2'/><br><br>
  46. 3 - Enable: <input type='checkbox' name='enaLed3' id='enaLed3'/><br>
  47. 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>
  48. invert: <input type='checkbox' name='invLed3' id='invLed3'/><br><br>
  49. <br>
  50. <input type='submit' value='Save'/>
  51. </form>
  52. <form id='rebootForm' onsubmit='return res()'>
  53. <input type='submit' value='Restart'/>
  54. </form>
  55. <script>
  56. function g(i) { return document.getElementById(i) };
  57. var xhttp, reqTime, reqFin, rxhttp;
  58. function res() {
  59. rxhttp = new XMLHttpRequest();
  60. rxhttp.timeout = 1000;
  61. rxhttp.open('POST', 'restart');
  62. rxhttp.send('');
  63. rxhttp = null;
  64. return false;
  65. }
  66. function setCb(ele, dat) {
  67. if(dat == 1) {
  68. ele.checked = true;
  69. ele.style.visibility = 'visible';
  70. }
  71. else {
  72. ele.checked = false;
  73. ele.style.visibility = 'visible';
  74. }
  75. }
  76. function updCbVal(ele) {
  77. if (ele.checked) ele.value ='1';
  78. else {
  79. ele.value = '0';
  80. ele.checked = true;
  81. ele.style.visibility = 'hidden';
  82. }
  83. }
  84. function transmit(f) {
  85. if (!xhttp) {
  86. updCbVal(g('enaRel1'));
  87. updCbVal(g('enaRel2'));
  88. updCbVal(g('enaRel3'));
  89. updCbVal(g('enaBtn1'));
  90. updCbVal(g('enaBtn2'));
  91. updCbVal(g('enaBtn3'));
  92. updCbVal(g('invRel1'));
  93. updCbVal(g('invRel2'));
  94. updCbVal(g('invRel3'));
  95. updCbVal(g('invBtn1'));
  96. updCbVal(g('invBtn2'));
  97. updCbVal(g('invBtn3'));
  98. updCbVal(g('enaLed1'));
  99. updCbVal(g('enaLed2'));
  100. updCbVal(g('enaLed3'));
  101. updCbVal(g('invLed1'));
  102. updCbVal(g('invLed2'));
  103. updCbVal(g('invLed3'));
  104. xhttp = new XMLHttpRequest();
  105. xhttp.timeout = 2000;
  106. xhttp.open('POST', 'confdatahw');
  107. xhttp.send(f ? (new FormData(f)) : '');
  108. xhttp.onreadystatechange = function () {
  109. if (xhttp.readyState === XMLHttpRequest.DONE && xhttp.status === 200) {
  110. var data = JSON.parse(xhttp.responseText);
  111. g('debtime').value = data.debtime;
  112. g('hldtime').value = data.hldtime;
  113. g('ioRel1').value = data.ioRel1;
  114. g('ioRel2').value = data.ioRel2;
  115. g('ioRel3').value = data.ioRel3;
  116. g('puls1').value = data.puls1;
  117. g('puls2').value = data.puls2;
  118. g('puls3').value = data.puls3;
  119. g('ioBtn1').value = data.ioBtn1;
  120. g('ioBtn2').value = data.ioBtn2;
  121. g('ioBtn3').value = data.ioBtn3;
  122. g('ioLed1').value = data.ioLed1;
  123. g('ioLed2').value = data.ioLed2;
  124. g('ioLed3').value = data.ioLed3;
  125. setCb(g('enaRel1'), data.enaRel1);
  126. setCb(g('enaRel2'), data.enaRel2);
  127. setCb(g('enaRel3'), data.enaRel3);
  128. setCb(g('enaBtn1'), data.enaBtn1);
  129. setCb(g('enaBtn2'), data.enaBtn2);
  130. setCb(g('enaBtn3'), data.enaBtn3);
  131. setCb(g('invRel1'), data.invRel1);
  132. setCb(g('invRel2'), data.invRel2);
  133. setCb(g('invRel3'), data.invRel3);
  134. setCb(g('invBtn1'), data.invBtn1);
  135. setCb(g('invBtn2'), data.invBtn2);
  136. setCb(g('invBtn3'), data.invBtn3);
  137. setCb(g('enaLed1'), data.enaLed1);
  138. setCb(g('enaLed2'), data.enaLed2);
  139. setCb(g('enaLed3'), data.enaLed3);
  140. setCb(g('invLed1'), data.invLed1);
  141. setCb(g('invLed2'), data.invLed2);
  142. setCb(g('invLed3'), data.invLed3);
  143. xhttp = null;
  144. reqFin = false;
  145. }
  146. else {
  147. if(!reqFin && reqTime > 10) {
  148. xhttp = null;
  149. reqFin = true;
  150. }
  151. }
  152. }
  153. }
  154. return false;
  155. }
  156. transmit();
  157. setInterval(function () { ++reqTime; }, 1000);
  158. </script>
  159. </body></html>