UNPKG

@redplc/node-red-rpi-ads1115

Version:

Node-RED node for ads1115 16bit adc using with redPlc nodes.

323 lines (316 loc) 13.9 kB
<!-- Copyright 2024 Derya Y. (iot.redplc@gmail.com). Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <script type="text/javascript"> RED.nodes.registerType('redplc-ads1115', { category: 'redPlc modules', color: 'Orange', paletteLabel: 'ads1115', defaults: { port: { value: 1, required: true, validate: function (v) { return RED.validators.number(v) && (v >= 0) && (v <= 9); } }, address: { value: 0, required: true, validate: function (v) { return RED.validators.number(v) && (v >= 0) && (v <= 999); } }, devadr: { value: "0", required: true }, tupdate: { value: 100, required: true, validate: function (v) { return RED.validators.number(v) && (v >= 5) && (v <= 5000); } }, mux0: { value: "4", required: true }, rate0: { value: "4", required: true }, gain0: { value: "2", required: true }, rawdata0: { value: false }, enabled0: { value: true }, mux1: { value: "5", required: true }, rate1: { value: "4", required: true }, gain1: { value: "2", required: true }, rawdata1: { value: false }, enabled1: { value: true }, mux2: { value: "6", required: true }, rate2: { value: "4", required: true }, gain2: { value: "2", required: true }, rawdata2: { value: false }, enabled2: { value: true }, mux3: { value: "7", required: true }, rate3: { value: "4", required: true }, gain3: { value: "2", required: true }, rawdata3: { value: false }, enabled3: { value: true }, }, inputs: 1, outputs: 1, inputLabels: "any", outputLabels: ["any"], icon: "voltmeter.png", label: function() { var devadr = parseInt(this.devadr); return this.name || "ads1115 #" + this.port + "@" + (devadr + 0x48).toString(16).toUpperCase(); }, }); </script> <script type="text/html" data-template-name="redplc-ads1115"> <div class="form-row"> <label style="width:100%; border-bottom: 2px solid rgb(0, 0, 0);"><b>redPlc ads1115 16bit Analog to Digital Converter</b></label> </div> <div class="form-row"> <label>Variable</label> <label style="width: auto;"><b>IA</b></label> <input id="node-input-address" title="Address" value=0 input type="number" min="0" max="999" required style="width: auto;"> </div> <div class="form-row"> <label for="node-input-port">I2C-Port</label> <input id="node-input-port" title="I2C Port" value=1 input type="number" min="0" max="9" required style="width: auto;"> </div> <div id="div-devadr" class="form-row"> <label for="node-input-devadr">I2C-Address</label> <select type="text" id="node-input-devadr" style="width: auto;"> <option value="0">48H</option> <option value="1">49H</option> <option value="2">4AH</option> <option value="3">4BH</option> </select> </div> <div class="form-row"> <label for="node-input-tupdate">Update-Cycle</label> <input id="node-input-tupdate" input type="number" min="5" max="5000" required style="width: auto;"> <label for="node-input-tupdate"> ms</label> </div> <!-- AI0 --> <div class="form-row"> <label style="width:100%; border-bottom: 1px solid #a9a9a9;"><b>Input-0</b></label> <label for="node-input-mux0">Input-Mux</label> <select type="text" id="node-input-mux0" style="width: auto;"> <option value="0">A0 - A1</option> <option value="1">A0 - A3</option> <option value="2">A1 - A3</option> <option value="3">A2 - A3</option> <option value="4">A0 - GND</option> <option value="5">A1 - GND</option> <option value="6">A2 - GND</option> <option value="7">A3 - GND</option> </select> </div> <div class="form-row"> <label for="node-input-gain0">Input-Range</label> <select type="text" id="node-input-gain0" style="width: auto;"> <option value="0">±6144mV</option> <option value="1">±4096mV</option> <option value="2">±2048mV</option> <option value="3">±1024mV</option> <option value="4">±512mV</option> <option value="5">±256mV</option> </select> </div> <div class="form-row"> <label for="node-input-rate0">Data-Rate</label> <select type="text" id="node-input-rate0" style="width: auto;"> <option value="0">8 SPS</option> <option value="1">16 SPS</option> <option value="2">32 SPS</option> <option value="3">64 SPS</option> <option value="4">128 SPS</option> <option value="5">250 SPS</option> <option value="6">475 SPS</option> <option value="7">860 SPS</option> </select> </div> <div class="form-row"> <label for="node-input-rawdata0">Raw-Data</label> <input type="checkbox" id="node-input-rawdata0" title="Send value as raw data" style="display: inline-block; width: auto; vertical-align: top;"> </div> <div class="form-row"> <label for="node-input-enabled0">Enabled</label> <input type="checkbox" id="node-input-enabled0" title="Enable Channel" style="display: inline-block; width: auto; vertical-align: top;"> </div> <!-- AI1 --> <div class="form-row"> <label style="width:100%; border-bottom: 1px solid #a9a9a9;"><b>Input-1</b></label> <label for="node-input-mux1">Input-Mux</label> <select type="text" id="node-input-mux1" style="width: auto;"> <option value="0">A0 - A1</option> <option value="1">A0 - A3</option> <option value="2">A1 - A3</option> <option value="3">A2 - A3</option> <option value="4">A0 - GND</option> <option value="5">A1 - GND</option> <option value="6">A2 - GND</option> <option value="7">A3 - GND</option> </select> </div> <div class="form-row"> <label for="node-input-gain1">Input-Range</label> <select type="text" id="node-input-gain1" style="width: auto;"> <option value="0">±6144mV</option> <option value="1">±4096mV</option> <option value="2">±2048mV</option> <option value="3">±1024mV</option> <option value="4">±512mV</option> <option value="5">±256mV</option> </select> </div> <div class="form-row"> <label for="node-input-rate1">Data-Rate</label> <select type="text" id="node-input-rate1" style="width: auto;"> <option value="0">8 SPS</option> <option value="1">16 SPS</option> <option value="2">32 SPS</option> <option value="3">64 SPS</option> <option value="4">128 SPS</option> <option value="5">250 SPS</option> <option value="6">475 SPS</option> <option value="7">860 SPS</option> </select> </div> <div class="form-row"> <label for="node-input-rawdata1">Raw-Data</label> <input type="checkbox" id="node-input-rawdata1" title="Send value as raw data" style="display: inline-block; width: auto; vertical-align: top;"> </div> <div class="form-row"> <label for="node-input-enabled1">Enabled</label> <input type="checkbox" id="node-input-enabled1" title="Enable Channel" style="display: inline-block; width: auto; vertical-align: top;"> </div> <!-- AI2 --> <div class="form-row"> <label style="width:100%; border-bottom: 1px solid #a9a9a9;"><b>Input-2</b></label> <label for="node-input-mux2">Input-Mux</label> <select type="text" id="node-input-mux2" style="width: auto;"> <option value="0">A0 - A1</option> <option value="1">A0 - A3</option> <option value="2">A1 - A3</option> <option value="3">A2 - A3</option> <option value="4">A0 - GND</option> <option value="5">A1 - GND</option> <option value="6">A2 - GND</option> <option value="7">A3 - GND</option> </select> </div> <div class="form-row"> <label for="node-input-gain2">Input-Range</label> <select type="text" id="node-input-gain2" style="width: auto;"> <option value="0">±6144mV</option> <option value="1">±4096mV</option> <option value="2">±2048mV</option> <option value="3">±1024mV</option> <option value="4">±512mV</option> <option value="5">±256mV</option> </select> </div> <div class="form-row"> <label for="node-input-rate2">Data-Rate</label> <select type="text" id="node-input-rate2" style="width: auto;"> <option value="0">8 SPS</option> <option value="1">16 SPS</option> <option value="2">32 SPS</option> <option value="3">64 SPS</option> <option value="4">128 SPS</option> <option value="5">250 SPS</option> <option value="6">475 SPS</option> <option value="7">860 SPS</option> </select> </div> <div class="form-row"> <label for="node-input-rawdata2">Raw-Data</label> <input type="checkbox" id="node-input-rawdata2" title="Send value as raw data" style="display: inline-block; width: auto; vertical-align: top;"> </div> <div class="form-row"> <label for="node-input-enabled2">Enabled</label> <input type="checkbox" id="node-input-enabled2" title="Enable Channel" style="display: inline-block; width: auto; vertical-align: top;"> </div> <!-- AI3 --> <div class="form-row"> <label style="width:100%; border-bottom: 1px solid #a9a9a9;"><b>Input-3</b></label> <label for="node-input-mux3">Input-Mux</label> <select type="text" id="node-input-mux3" style="width: auto;"> <option value="0">A0 - A1</option> <option value="1">A0 - A3</option> <option value="2">A1 - A3</option> <option value="3">A2 - A3</option> <option value="4">A0 - GND</option> <option value="5">A1 - GND</option> <option value="6">A2 - GND</option> <option value="7">A3 - GND</option> </select> </div> <div class="form-row"> <label for="node-input-gain3">Input-Range</label> <select type="text" id="node-input-gain3" style="width: auto;"> <option value="0">±6144mV</option> <option value="1">±4096mV</option> <option value="2">±2048mV</option> <option value="3">±1024mV</option> <option value="4">±512mV</option> <option value="5">±256mV</option> </select> </div> <div class="form-row"> <label for="node-input-rate3">Data-Rate</label> <select type="text" id="node-input-rate3" style="width: auto;"> <option value="0">8 SPS</option> <option value="1">16 SPS</option> <option value="2">32 SPS</option> <option value="3">64 SPS</option> <option value="4">128 SPS</option> <option value="5">250 SPS</option> <option value="6">475 SPS</option> <option value="7">860 SPS</option> </select> </div> <div class="form-row"> <label for="node-input-rawdata3">Raw-Data</label> <input type="checkbox" id="node-input-rawdata3" title="Send value as raw data" style="display: inline-block; width: auto; vertical-align: top;"> </div> <div class="form-row"> <label for="node-input-enabled3">Enabled</label> <input type="checkbox" id="node-input-enabled3" title="Enable Channel" style="display: inline-block; width: auto; vertical-align: top;"> </div> </script> <script type="text/html" data-help-name="redplc-ads1115"> <p>redPlc ads1115 16bit Analog to Digital Converter</p> <h3><b>Input:</b></h3> <dl class="message-properties"> <dt>payload <span class="property-type">boolean</span></dt> <dd><b>True</b> triggers update.<dd> </dl> <h3><b>Output:</b></h3> <dl class="message-properties"> <dt>payload <span class="property-type">boolen</span></dt> <dd>Same as input payload.<dd> </dl> <h3><b>Variable:</b></h3> <dl class="message-properties"> <dt><b>IA</b> Analog-Input<span class="property-type">number array</span></dt> <dd> Input A0: array index 0<dd> <dd> Input A1: array index 1<dd> <dd> Input A2: array index 2<dd> <dd> Input A3: array index 3<dd> </dl> <h3><b>Details:</b></h3> <p> Reads adc on input message True and cycle<br> and stores in number array variable.<br> Channel number is equal array index.<br> Disabled channels are undefined in array.<br> Enable channel with <b>Enable</b>.<br> To get adc raw data select <b>Raw Data</b>.<br> The output value is mV or adc raw data.<br> Input voltages to ground<br> gets only positive value.<br> This node works on Raspberry Pi<br> with 32bit or 64bit OS.<br> Enable I2C with raspi-config.<br> If you use i2c-0 port add<br> <b>dtparam=i2c_vc=on</b> to /boot/config.txt<br> i2c-0 port Pin27=SDA, Pin28=SCK<br> For other ports add this to<br> /boot/config.txt.<br> I2C address connect ADDR pin:<br> 48H: GND or open.<br> 49H: VCC<br> 4AH: SDA<br> 4BH: SCL<br> </p> </script>