node-red-contrib-opi-gpio
Version:
Orange Pi GPIO. Digital input/output for most Pi computers
399 lines (379 loc) • 19.1 kB
HTML
<script type="text/x-red" data-template-name="opi_out">
<div class="form-row">
<label for="node-input-name"><i class="icon-tag"></i>Pin-Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
<div class="form-row">
<br>
<label for=""><i class="fa fa-tag"></i> Pi type</label>
<select type="text" id="node-input-select">
<option value="other">Other </option>
<option value="PC">OrangePi PC</option>
<option value="M1">BananaPi M1</option>
<option value="M2p">BananaPi M2 Plus</option>
<option value="OPZ">OrangePi Zero (Plus)</option>
<option value="Neo">NanoPi Neo</option>
<option value="OPZP2">Orange Pi Zero Plus 2</option>
</select>
<input type="hidden" id="node-input-type">
</div>
<div class="form-tips" id="node-tip">
Please define your GPIO number. This are the rules:
<table border="1" cellpadding="2">
<tr><td><strong>CPU Port</strong></td><td><strong>GPIO-number</strong></td></tr>
<tr><td>PA0..PA31</td><td>0..31</td></tr>
<tr><td>PB0..PB31</td><td>32..63</td></tr>
<tr><td>PC0..PC31</td><td>64..95</td></tr>
<tr><td>Pxy..</td><td>x*32+y</td></tr>
</table>
</div>
<div class="form-row">
<br>
<input type="hidden" id="node-input-pin"> <!-- This is the place where phys. pin number is stored -->
<label><i class="fa fa-tag"></i> Output pin</label>
<select type="text" id="node-input-pin1" style="width: 250px;" name="OPI_PC">
<option value='' disabled selected style='display:none;'>select pin</option>
<option value="12">Pin 3 - PA12</option>
<option value="11">Pin 5 - PA11</option>
<option value="6">Pin 7 - PA6</option>
<option value="13">Pin 8 - PA13</option>
<option value="14">Pin 10 - PA14</option>
<option value="1">Pin 11 - PA1</option>
<option value="14">Pin 12 - PD14</option>
<option value="0">Pin 13 - PA0</option>
<option value="3">Pin 15 - PA3</option>
<option value="68">Pin 16 - PC4</option>
<option value="71">Pin 18 - PC7</option>
<option value="64">Pin 19 - PC0</option>
<option value="65">Pin 21 - PC1</option>
<option value="2">Pin 22 - PA2</option>
<option value="66">Pin 23 - PC2</option>
<option value="67">Pin 24 - PC3</option>
<option value="21">Pin 26 - PA21</option>
<option value="19">Pin 27 - PA19</option>
<option value="18">Pin 28 - PA18</option>
<option value="7">Pin 29 - PA7</option>
<option value="8">Pin 31 - PA8</option>
<option value="200">Pin 32 - PG8</option>
<option value="9">Pin 33 - PA9</option>
<option value="10">Pin 35 - PA10</option>
<option value="201">Pin 36 - PG9</option>
<option value="20">Pin 37 - PA20</option>
<option value="198">Pin 38 - PG6</option>
<option value="199">Pin 40 - PG7</option>
</select>
<input type="text" id="node-input-pin2" style="width: 50px;" value="0" name="other">
<select type="text" id="node-input-pin3" style="width: 250px;" name="Banana M1">
<option value='' disabled selected style='display:none;'>select pin</option>
<option value="53">Pin 3 - PB21</option>
<option value="52">Pin 5 - PB20</option>
<option value="259">Pin 7 - PI3</option>
<option value="224">Pin 8 - PH0</option>
<option value="225">Pin 10 - PH1</option>
<option value="275">Pin 11 - PI19</option>
<option value="226">Pin 12 - PH2</option>
<option value="274">Pin 13 - PI18</option>
<option value="273">Pin 15 - PI17</option>
<option value="244">Pin 16 - PH20</option>
<option value="245">Pin 18 - PH21</option>
<option value="268">Pin 19 - PI12</option>
<option value="269">Pin 21 - PI13</option>
<option value="272">Pin 22 - PI16</option>
<option value="267">Pin 23 - PI11</option>
<option value="266">Pin 24 - PI10</option>
<option value="270">Pin 26 - PI14</option>
</select>
<select type="text" id="node-input-pin4" style="width: 250px;" name="Banana M2+">
<option value='' disabled selected style='display:none;'>select pin</option>
<option value="12">Pin 3 - PA12</option>
<option value="11">Pin 5 - PA11</option>
<option value="6">Pin 7 - PA6</option>
<option value="13">Pin 8 - PA13</option>
<option value="14">Pin 10 - PA14</option>
<option value="1">Pin 11 - PA1</option>
<option value="16">Pin 12 - PA16</option>
<option value="0">Pin 13 - PA0</option>
<option value="3">Pin 15 - PA3</option>
<option value="15">Pin 16 - PA15</option>
<option value="68">Pin 18 - PC4</option>
<option value="64">Pin 19 - PC0</option>
<option value="65">Pin 21 - PC1</option>
<option value="2">Pin 22 - PA2</option>
<option value="66">Pin 23 - PC2</option>
<option value="67">Pin 24 - PC3</option>
<option value="71">Pin 26 - PC7</option>
<option value="19">Pin 27 - PA19</option>
<option value="18">Pin 28 - PA18</option>
<option value="7">Pin 29 - PA7</option>
<option value="8">Pin 31 - PA8</option>
<option value="354">Pin 32 - PL2</option>
<option value="9">Pin 33 - PA9</option>
<option value="10">Pin 35 - PA10</option>
<option value="356">Pin 36 - PL4</option>
<option value="17">Pin 37 - PA17</option>
<option value="21">Pin 38 - PA21</option>
<option value="20">Pin 40 - PA20</option>
</select>
<select type="text" id="node-input-pin5" style="width: 250px;" name="OrangePi Zero (plus)">
<option value='' disabled selected style='display:none;'>select pin</option>
<option value="12">Pin 3 - PA12</option>
<option value="11">Pin 5 - PA11</option>
<option value="6">Pin 7 - PA6</option>
<option value="198">Pin 8 - PG6</option>
<option value="199">Pin 10 - PG7</option>
<option value="1">Pin 11 - PA1</option>
<option value="7">Pin 12 - PA7</option>
<option value="0">Pin 13 - PA0</option>
<option value="3">Pin 15 - PA3</option>
<option value="19">Pin 16 - PA19</option>
<option value="18">Pin 18 - PA18</option>
<option value="15">Pin 19 - PA15</option>
<option value="16">Pin 21 - PA16</option>
<option value="2">Pin 22 - PA2</option>
<option value="14">Pin 23 - PA14</option>
<option value="13">Pin 24 - PA13</option>
<option value="10">Pin 26 - PA10</option>
</select>
<select type="text" id="node-input-pin6" style="width: 250px;" name="NanoPi Neo/Air">
<option value='' disabled selected style='display:none;'>select pin</option>
<option value="12">Pin 3 - PA12</option>
<option value="11">Pin 5 - PA11</option>
<option value="203">Pin 7 - PG11</option>
<option value="198">Pin 8 - PG6</option>
<option value="199">Pin 10 - PG7</option>
<option value="0">Pin 11 - PA0</option>
<option value="6">Pin 12 - PA6</option>
<option value="2">Pin 13 - PA2</option>
<option value="3">Pin 15 - PA3</option>
<option value="200">Pin 16 - PG8</option>
<option value="201">Pin 18 - PG9</option>
<option value="64">Pin 19 - PC0</option>
<option value="65">Pin 21 - PC1</option>
<option value="1">Pin 22 - PA1</option>
<option value="66">Pin 23 - PC2</option>
<option value="67">Pin 24 - PC3</option>
<option value="363">2nd connector Pin 6 - PL11</option>
<option value="17">2nd connector Pin 7 - PA17</option>
<option value="4">3rd connector Pin 3 - PA4</option>
</select>
<select type="text" id="node-input-pin7" style="width: 250px;" name="OrangePi Zero Plus 2 (H5)">
<option value='' disabled selected style='display:none;'>select pin</option>
<option value="12">Pin 3 - PA12</option>
<option value="11">Pin 5 - PA11</option>
<option value="6">Pin 7 - PA6</option>
<option value="0">Pin 8 - PA0</option>
<option value="1">Pin 10 - PA1</option>
<option value="352">Pin 11 - PL0</option>
<option value="107">Pin 12 - PA7</option>
<option value="353">Pin 13 - PL1</option>
<option value="3">Pin 15 - PA3</option>
<option value="19">Pin 16 - PA19</option>
<option value="18">Pin 18 - PA18</option>
<option value="15">Pin 19 - PA15</option>
<option value="16">Pin 21 - PA16</option>
<option value="2">Pin 22 - PA2</option>
<option value="14">Pin 23 - PA14</option>
<option value="13">Pin 24 - PA13</option>
<option value="110">Pin 26 - PD14</option>
<option value="17">Status LED - PA17</option>
<option value="362">PWR LED - PL10</option>
</select>
</div>
<div class="form-row" id="node-set-enableLow">
<label> </label>
<input type="checkbox" id="node-input-enableLow" style="display: inline-block; width: auto; vertical-align: top;">
<label for="node-input-enableLow" style="width: 70%;">Enable Active Low ?</label>
</div>
<div class="form-row" id="node-set-tick">
<label> </label>
<input type="checkbox" id="node-input-set" style="display: inline-block; width: auto; vertical-align: top;">
<label for="node-input-set" style="width: 70%;">Initialise pin state ?</label>
</div>
<div class="form-row" id="node-set-state">
<label for="node-input-level"> </label>
<select id="node-input-level" style="width: 250px;">
<option value="0"> low (0)</option>
<option value="1"> high (1)</option>
</select>
</div>
</script>
<script type="text/x-red" data-help-name="opi_out">
<p>GPIO output node for OrangePi and others..</p>
<p>All GPIO-pins are available, regardless of their multiplex functions.</p>
<p>Therefore, user is responsible to not disturb alternate pin functions.</p>
<p><code>msg.payload</code> should be set to 1 or 0.</p>
</script>
<script type="text/javascript">
RED.nodes.registerType('opi_out',{
category: 'Orange Pi',
color: '#FFCC66',
defaults: {
name: {value:""},
set: { value:false },
level: { value:0},
select: {value:"PC"},
pin: {value:""},
enableLow: {value:""}
},
inputs:1,
outputs:0,
icon: "out.png",
paletteLabel:"output pin",
label: function() {
return this.name||"output pin";
},
oneditprepare: function() {
var pitype ;
var setstate = function () {
if ($('#node-input-set').is(":checked")) {
$("#node-set-state").show();
} else {
$("#node-set-state").hide();
}
};
$("#node-input-pin1").change(function() { // OP PC
if (pitype=='PC') {
var elt = document.getElementById("node-input-pin1");
var p=document.getElementById("node-input-pin");
p.value = elt.options[elt.selectedIndex].value;
var txt = elt.options[elt.selectedIndex].text;
elt = document.getElementById("node-input-name");
elt.value = txt;
}
});
$("#node-input-pin2").change(function() { // Other
if (pitype=="other") {
var n = Number(document.getElementById("node-input-pin2").value);
var elt = document.getElementById("node-input-name");
elt.value = "P"+String.fromCharCode(n/32+0x41)+n%32;
var p=document.getElementById("node-input-pin");
p.value=String(n);
}
});
$("#node-input-pin3").change(function() { // Banana M1
var elt = document.getElementById("node-input-pin3");
var p=document.getElementById("node-input-pin");
p.value = elt.options[elt.selectedIndex].value;
var txt = elt.options[elt.selectedIndex].text;
elt = document.getElementById("node-input-name");
elt.value = txt;
});
$("#node-input-pin4").change(function() { // Banana M2+
var elt = document.getElementById("node-input-pin4");
var p=document.getElementById("node-input-pin");
p.value = elt.options[elt.selectedIndex].value;
var txt = elt.options[elt.selectedIndex].text;
elt = document.getElementById("node-input-name");
elt.value = txt;
});
$("#node-input-pin5").change(function() { // Orange Pi Zero (plus)
var elt = document.getElementById("node-input-pin5");
var p=document.getElementById("node-input-pin");
p.value = elt.options[elt.selectedIndex].value;
var txt = elt.options[elt.selectedIndex].text;
elt = document.getElementById("node-input-name");
elt.value = txt;
});
$("#node-input-pin6").change(function() { // Nano Pi Neo
var elt = document.getElementById("node-input-pin6");
var p=document.getElementById("node-input-pin");
p.value = elt.options[elt.selectedIndex].value;
var txt = elt.options[elt.selectedIndex].text;
elt = document.getElementById("node-input-name");
elt.value = txt;
});
$("#node-input-pin7").change(function() { // Orange Pi Zero Plus 2 (H5)
var elt = document.getElementById("node-input-pin7");
var p=document.getElementById("node-input-pin");
p.value = elt.options[elt.selectedIndex].value;
var txt = elt.options[elt.selectedIndex].text;
elt = document.getElementById("node-input-name");
elt.value = txt;
});
var setPiType = function() {
pitype = (document.getElementById("node-input-select")).value;
switch (pitype) {
case 'other':
$('#node-input-pin1').hide();
$('#node-input-pin3').hide();
$('#node-input-pin4').hide();
$('#node-input-pin5').hide();
$('#node-input-pin6').hide();
$('#node-input-pin2').show();
$('#node-input-pin7').hide();
$('#node-tip').show();
var n = Number(document.getElementById("node-input-pin2").value);
var elt = document.getElementById("node-input-name");
elt.value = "P"+String.fromCharCode(n/32+0x41)+n%32;
var p=document.getElementById("node-input-pin");
p.value=String(n);
break;
case 'PC':
$('#node-input-pin1').show();
$('#node-input-pin2').hide();
$('#node-input-pin3').hide();
$('#node-input-pin4').hide();
$('#node-input-pin5').hide();
$('#node-input-pin6').hide();
$('#node-input-pin7').hide();
$('#node-tip').hide();
break;
case 'M1':
$('#node-input-pin1').hide();
$('#node-input-pin2').hide();
$('#node-input-pin3').show();
$('#node-input-pin4').hide();
$('#node-input-pin5').hide();
$('#node-input-pin6').hide();
$('#node-input-pin7').hide();
$('#node-tip').hide();
break;
case 'M2p':
$('#node-input-pin1').hide();
$('#node-input-pin2').hide();
$('#node-input-pin3').hide();
$('#node-input-pin4').show();
$('#node-input-pin5').hide();
$('#node-input-pin6').hide();
$('#node-input-pin7').hide();
$('#node-tip').hide();
break;
case 'OPZ':
$('#node-input-pin1').hide();
$('#node-input-pin2').hide();
$('#node-input-pin3').hide();
$('#node-input-pin4').hide();
$('#node-input-pin5').show();
$('#node-input-pin6').hide();
$('#node-input-pin7').hide();
$('#node-tip').hide();
break;
case 'Neo':
$('#node-input-pin1').hide();
$('#node-input-pin2').hide();
$('#node-input-pin3').hide();
$('#node-input-pin4').hide();
$('#node-input-pin5').hide();
$('#node-input-pin6').show();
$('#node-input-pin7').hide();
$('#node-tip').hide();
break;
case 'OPZP2':
$('#node-input-pin1').hide();
$('#node-input-pin2').hide();
$('#node-input-pin3').hide();
$('#node-input-pin4').hide();
$('#node-input-pin5').hide();
$('#node-input-pin6').hide();
$('#node-input-pin7').show();
$('#node-tip').hide();
break;
}
};
$("#node-input-set").change(function () { setstate(); });
setstate();
$('#node-input-select').change(function(){setPiType();});
setPiType();
}
});
</script>