mirror of
				https://github.com/node-red/node-red-nodes.git
				synced 2025-03-01 10:37:43 +00:00 
			
		
		
		
	Move Arduino node from core to external
This commit is contained in:
		
							
								
								
									
										171
									
								
								hardware/Arduino/35-arduino.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								hardware/Arduino/35-arduino.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,171 @@ | ||||
| <!-- | ||||
|   Copyright 2013,2015 IBM Corp. | ||||
|  | ||||
|   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/x-red" data-template-name="arduino in"> | ||||
|     <div class="form-row"> | ||||
|         <label for="node-input-arduino"><i class="fa fa-tasks"></i> Arduino</label> | ||||
|         <input type="text" id="node-input-arduino"> | ||||
|     </div> | ||||
|     <div class="form-row"> | ||||
|         <label for="node-input-pin"><i class="fa fa-circle"></i> Pin</label> | ||||
|         <input type="text" id="node-input-pin" placeholder="2"> | ||||
|     </div> | ||||
|     <div class="form-row"> | ||||
|         <label for="node-input-state"><i class="fa fa-wrench"></i> Type</label> | ||||
|         <select type="text" id="node-input-state" style="width: 150px;"> | ||||
|             <option value="INPUT">Digital pin</option> | ||||
|             <option value="ANALOG">Analogue pin</option> | ||||
|         </select> | ||||
|     </div> | ||||
|     <div class="form-row"> | ||||
|         <label for="node-input-name"><i class="fa fa-tag"></i> Name</label> | ||||
|         <input type="text" id="node-input-name" placeholder="Name"> | ||||
|     </div> | ||||
|     <div class="form-tips"><b>Note:</b> You cannot use the same pin for both output and input.</div> | ||||
| </script> | ||||
|  | ||||
| <script type="text/x-red" data-help-name="arduino in"> | ||||
|     <p>Arduino input node. Connects to local Arduino and monitors the selected pin for changes. Uses <a href="http://firmata.org/" target="_new"><i>Firmata</i>.</a></p> | ||||
|     <p>The Arduino must be loaded with the Standard Firmata sketch available in the Arduino examples.</p> | ||||
|     <p>You can select either Digital or Analogue input. Outputs the value read as <b>msg.payload</b> and the pin number as <b>msg.topic</b>.</p> | ||||
|     <p>It only outputs on a change of value - fine for digital inputs, but you can get a lot of data from analogue pins which you must then handle.</p> | ||||
|     <p>You can set the sample rate in ms from 20 to 65535.</p> | ||||
| </script> | ||||
|  | ||||
| <script type="text/javascript"> | ||||
|     RED.nodes.registerType('arduino in',{ | ||||
|         category: 'Arduino', | ||||
|         color:"#3fadb5", | ||||
|         defaults: { | ||||
|             name: {value:""}, | ||||
|             pin: {value:"",required:true}, | ||||
|             state: {value:"INPUT",required:true}, | ||||
|             arduino: {type:"arduino-board"} | ||||
|         }, | ||||
|         inputs:0, | ||||
|         outputs:1, | ||||
|         icon: "arduino.png", | ||||
|         label: function() { | ||||
|             var a = ""; | ||||
|             if (this.state === "ANALOG") { a = "A"; } | ||||
|             return this.name||"Pin: "+a+this.pin; | ||||
|         }, | ||||
|         labelStyle: function() { | ||||
|             return this.name?"node_label_italic":""; | ||||
|         } | ||||
|     }); | ||||
| </script> | ||||
|  | ||||
| <script type="text/x-red" data-template-name="arduino out"> | ||||
|     <div class="form-row"> | ||||
|         <label for="node-input-arduino"><i class="fa fa-tasks"></i> Arduino</label> | ||||
|         <input type="text" id="node-input-arduino"> | ||||
|     </div> | ||||
|     <div class="form-row"> | ||||
|         <label for="node-input-pin"><i class="fa fa-circle"></i> Pin</label> | ||||
|         <input type="text" id="node-input-pin" placeholder="13"> | ||||
|     </div> | ||||
|     <div class="form-row"> | ||||
|         <label for="node-input-state"><i class="fa fa-wrench"></i> Type</label> | ||||
|         <select type="text" id="node-input-state" style="width: 200px;"> | ||||
|             <option value="OUTPUT">Digital (0/1)</option> | ||||
|             <option value="PWM">Analogue (0-255)</option> | ||||
|             <option value="SERVO">Servo (0-180)</option> | ||||
|         </select> | ||||
|     </div> | ||||
|     <div class="form-row"> | ||||
|         <label for="node-input-name"><i class="fa fa-tag"></i> Name</label> | ||||
|         <input type="text" id="node-input-name" placeholder="Name"> | ||||
|     </div> | ||||
|     <div class="form-tips"><b>Note:</b> You cannot use the same pin for both output and input.</div> | ||||
| </script> | ||||
|  | ||||
| <script type="text/x-red" data-help-name="arduino out"> | ||||
|     <p>Arduino output node. Connects to local Arduino and writes to the selected digital pin. Uses <a href="http://firmata.org/" target="_new"><i>Firmata</i>.</a></p> | ||||
|     <p>The Arduino must be loaded with the Standard Firmata sketch available in the Arduino examples.</p> | ||||
|     <p>You can select Digital, Analogue (PWM) or Servo type outputs. Expects a numeric value in <b>msg.payload</b>. The pin number is set in the properties panel.</p> | ||||
| </script> | ||||
|  | ||||
| <script type="text/javascript"> | ||||
|     RED.nodes.registerType('arduino out',{ | ||||
|         category: 'Arduino', | ||||
|         color:"#3fadb5", | ||||
|         defaults: { | ||||
|             name: {value:""}, | ||||
|             pin: {value:"",required:true}, | ||||
|             state: {value:"",required:true}, | ||||
|             arduino: {type:"arduino-board"} | ||||
|         }, | ||||
|         inputs:1, | ||||
|         outputs:0, | ||||
|         icon: "arduino.png", | ||||
|         align: "right", | ||||
|         label: function() { | ||||
|             return this.name||"Pin: "+this.pin; | ||||
|         }, | ||||
|         labelStyle: function() { | ||||
|             return this.name?"node_label_italic":""; | ||||
|         } | ||||
|     }); | ||||
| </script> | ||||
|  | ||||
|  | ||||
| <script type="text/x-red" data-template-name="arduino-board"> | ||||
|     <div class="form-row"> | ||||
|         <label for="node-config-input-device"><i class="fa fa-random"></i> Port</label> | ||||
|         <input type="text" id="node-config-input-device" style="width:60%;" placeholder="e.g. /dev/ttyUSB0  COM1"/> | ||||
|         <a id="node-config-lookup-serial" class="btn"><i id="node-config-lookup-serial-icon" class="fa fa-search"></i></a> | ||||
|     </div> | ||||
|     <div class="form-tips"><b>Tip:</b> Use search to list serial ports, or leave blank to connect to first device found.</div> | ||||
| </script> | ||||
|  | ||||
| <script type="text/javascript"> | ||||
|     RED.nodes.registerType('arduino-board',{ | ||||
|         category: 'config', | ||||
|         defaults: { | ||||
|             device: {value:""} | ||||
|         }, | ||||
|         label: function() { | ||||
|             return this.device||"arduino"; | ||||
|         }, | ||||
|         oneditprepare: function() { | ||||
|             try { | ||||
|                 $("#node-config-input-device").autocomplete( "destroy" ); | ||||
|             } catch(err) { } | ||||
|             $("#node-config-lookup-serial").click(function() { | ||||
|                 $("#node-config-lookup-serial-icon").removeClass('fa-search'); | ||||
|                 $("#node-config-lookup-serial-icon").addClass('spinner'); | ||||
|                 $("#node-config-lookup-serial").addClass('disabled'); | ||||
|  | ||||
|                 $.getJSON('arduinoports',function(data) { | ||||
|                     $("#node-config-lookup-serial-icon").addClass('fa-search'); | ||||
|                     $("#node-config-lookup-serial-icon").removeClass('spinner'); | ||||
|                     $("#node-config-lookup-serial").removeClass('disabled'); | ||||
|                     var ports = []; | ||||
|                     $.each(data, function(i, port){ | ||||
|                         ports.push(port); | ||||
|                     }); | ||||
|                     $("#node-config-input-device").autocomplete({ | ||||
|                         source:ports, | ||||
|                         minLength:0, | ||||
|                         close: function( event, ui ) { | ||||
|                             $("#node-config-input-device").autocomplete( "destroy" ); | ||||
|                         } | ||||
|                     }).autocomplete("search",""); | ||||
|                 }); | ||||
|             }); | ||||
|         } | ||||
|     }); | ||||
| </script> | ||||
							
								
								
									
										167
									
								
								hardware/Arduino/35-arduino.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								hardware/Arduino/35-arduino.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,167 @@ | ||||
| /** | ||||
|  * Copyright 2013,2015 IBM Corp. | ||||
|  * | ||||
|  * 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. | ||||
|  **/ | ||||
|  | ||||
| module.exports = function(RED) { | ||||
|     "use strict"; | ||||
|     var ArduinoFirmata = require('arduino-firmata'); | ||||
|  | ||||
|     // The Board Definition - this opens (and closes) the connection | ||||
|     function ArduinoNode(n) { | ||||
|         RED.nodes.createNode(this,n); | ||||
|         this.device = n.device || null; | ||||
|         this.repeat = n.repeat||25; | ||||
|         //node.log("opening connection "+this.device); | ||||
|         var node = this; | ||||
|         node.board = new ArduinoFirmata(); | ||||
|         ArduinoFirmata.list(function (err, ports) { | ||||
|             if (!node.device) { | ||||
|                 node.log("connecting to first board found."); | ||||
|                 node.board.connect(); | ||||
|             } | ||||
|             else { | ||||
|                 if (ports.indexOf(node.device) === -1) { | ||||
|                     node.warn(node.device + " not found. Trying to find board."); | ||||
|                     node.board.connect(); | ||||
|                 } | ||||
|                 else { | ||||
|                     node.log("connecting to "+node.device); | ||||
|                     node.board.connect(node.device); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             node.board.on('boardReady', function() { | ||||
|                 node.log("connected to "+node.board.serialport_name); | ||||
|                 if (RED.settings.verbose) { node.log("version "+node.board.boardVersion); } | ||||
|             }); | ||||
|         }); | ||||
|  | ||||
|         node.on('close', function(done) { | ||||
|             if (node.board) { | ||||
|                 try { | ||||
|                     node.board.close(function() { | ||||
|                         done(); | ||||
|                         if (RED.settings.verbose) { node.log("port closed"); } | ||||
|                     }); | ||||
|                 } catch(e) { done(); } | ||||
|             } else { done(); } | ||||
|         }); | ||||
|     } | ||||
|     RED.nodes.registerType("arduino-board",ArduinoNode); | ||||
|  | ||||
|  | ||||
|     // The Input Node | ||||
|     function DuinoNodeIn(n) { | ||||
|         RED.nodes.createNode(this,n); | ||||
|         this.buttonState = -1; | ||||
|         this.pin = n.pin; | ||||
|         this.state = n.state; | ||||
|         this.arduino = n.arduino; | ||||
|         this.serverConfig = RED.nodes.getNode(this.arduino); | ||||
|         if (typeof this.serverConfig === "object") { | ||||
|             this.board = this.serverConfig.board; | ||||
|             var node = this; | ||||
|             node.status({fill:"red",shape:"ring",text:"connecting"}); | ||||
|             node.board.on('connect', function() { | ||||
|                 node.status({fill:"green",shape:"dot",text:"connected"}); | ||||
|                 //console.log("i",node.state,node.pin); | ||||
|                 if (node.state == "ANALOG") { | ||||
|                     node.board.on('analogChange', function(e) { | ||||
|                         if (e.pin == node.pin) { | ||||
|                             var msg = {payload:e.value, topic:"A"+e.pin}; | ||||
|                             node.send(msg); | ||||
|                         } | ||||
|                     }); | ||||
|                 } | ||||
|                 if (node.state == "INPUT") { | ||||
|                     node.board.pinMode(node.pin, ArduinoFirmata.INPUT); | ||||
|                     node.board.on('digitalChange', function(e) { | ||||
|                         if (e.pin == node.pin) { | ||||
|                             var msg = {payload:e.value, topic:e.pin}; | ||||
|                             node.send(msg); | ||||
|                         } | ||||
|                     }); | ||||
|                 } | ||||
|                 if (node.state == "SYSEX") { | ||||
|                     node.board.on('sysex', function(e) { | ||||
|                         var msg = {payload:e, topic:"sysex"}; | ||||
|                         node.send(msg); | ||||
|                     }); | ||||
|                 } | ||||
|             }); | ||||
|         } | ||||
|         else { | ||||
|             this.warn("port not configured"); | ||||
|         } | ||||
|     } | ||||
|     RED.nodes.registerType("arduino in",DuinoNodeIn); | ||||
|  | ||||
|  | ||||
|     // The Output Node | ||||
|     function DuinoNodeOut(n) { | ||||
|         RED.nodes.createNode(this,n); | ||||
|         this.buttonState = -1; | ||||
|         this.pin = n.pin; | ||||
|         this.state = n.state; | ||||
|         this.arduino = n.arduino; | ||||
|         this.serverConfig = RED.nodes.getNode(this.arduino); | ||||
|         if (typeof this.serverConfig === "object") { | ||||
|             this.board = this.serverConfig.board; | ||||
|             var node = this; | ||||
|             node.status({fill:"red",shape:"ring",text:"connecting"}); | ||||
|  | ||||
|             node.board.on('connect', function() { | ||||
|                 node.status({fill:"green",shape:"dot",text:"connected"}); | ||||
|                 //console.log("o",node.state,node.pin); | ||||
|                 node.board.pinMode(node.pin, node.state); | ||||
|                 node.on("input", function(msg) { | ||||
|                     if (node.state === "OUTPUT") { | ||||
|                         if ((msg.payload === true)||(msg.payload.toString() == "1")||(msg.payload.toString().toLowerCase() == "on")) { | ||||
|                             node.board.digitalWrite(node.pin, true); | ||||
|                         } | ||||
|                         if ((msg.payload === false)||(msg.payload.toString() == "0")||(msg.payload.toString().toLowerCase() == "off")) { | ||||
|                             node.board.digitalWrite(node.pin, false); | ||||
|                         } | ||||
|                     } | ||||
|                     if (node.state === "PWM") { | ||||
|                         msg.payload = msg.payload * 1; | ||||
|                         if ((msg.payload >= 0) && (msg.payload <= 255)) { | ||||
|                             node.board.analogWrite(node.pin, msg.payload); | ||||
|                         } | ||||
|                     } | ||||
|                     if (node.state === "SERVO") { | ||||
|                         msg.payload = msg.payload * 1; | ||||
|                         if ((msg.payload >= 0) && (msg.payload <= 180)) { | ||||
|                             node.board.servoWrite(node.pin, msg.payload); | ||||
|                         } | ||||
|                     } | ||||
|                     if (node.state === "SYSEX") { | ||||
|                         node.board.sysex(msg.payload); | ||||
|                     } | ||||
|                 }); | ||||
|             }); | ||||
|         } | ||||
|         else { | ||||
|             this.warn("port not configured"); | ||||
|         } | ||||
|     } | ||||
|     RED.nodes.registerType("arduino out",DuinoNodeOut); | ||||
|  | ||||
|     RED.httpAdmin.get("/arduinoports", RED.auth.needsPermission("arduino.read"), function(req,res) { | ||||
|         ArduinoFirmata.list(function (err, ports) { | ||||
|             res.json(ports); | ||||
|         }); | ||||
|     }); | ||||
| } | ||||
							
								
								
									
										177
									
								
								hardware/Arduino/LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										177
									
								
								hardware/Arduino/LICENSE
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,177 @@ | ||||
|  | ||||
|                                  Apache License | ||||
|                            Version 2.0, January 2004 | ||||
|                         http://www.apache.org/licenses/ | ||||
|  | ||||
|    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | ||||
|  | ||||
|    1. Definitions. | ||||
|  | ||||
|       "License" shall mean the terms and conditions for use, reproduction, | ||||
|       and distribution as defined by Sections 1 through 9 of this document. | ||||
|  | ||||
|       "Licensor" shall mean the copyright owner or entity authorized by | ||||
|       the copyright owner that is granting the License. | ||||
|  | ||||
|       "Legal Entity" shall mean the union of the acting entity and all | ||||
|       other entities that control, are controlled by, or are under common | ||||
|       control with that entity. For the purposes of this definition, | ||||
|       "control" means (i) the power, direct or indirect, to cause the | ||||
|       direction or management of such entity, whether by contract or | ||||
|       otherwise, or (ii) ownership of fifty percent (50%) or more of the | ||||
|       outstanding shares, or (iii) beneficial ownership of such entity. | ||||
|  | ||||
|       "You" (or "Your") shall mean an individual or Legal Entity | ||||
|       exercising permissions granted by this License. | ||||
|  | ||||
|       "Source" form shall mean the preferred form for making modifications, | ||||
|       including but not limited to software source code, documentation | ||||
|       source, and configuration files. | ||||
|  | ||||
|       "Object" form shall mean any form resulting from mechanical | ||||
|       transformation or translation of a Source form, including but | ||||
|       not limited to compiled object code, generated documentation, | ||||
|       and conversions to other media types. | ||||
|  | ||||
|       "Work" shall mean the work of authorship, whether in Source or | ||||
|       Object form, made available under the License, as indicated by a | ||||
|       copyright notice that is included in or attached to the work | ||||
|       (an example is provided in the Appendix below). | ||||
|  | ||||
|       "Derivative Works" shall mean any work, whether in Source or Object | ||||
|       form, that is based on (or derived from) the Work and for which the | ||||
|       editorial revisions, annotations, elaborations, or other modifications | ||||
|       represent, as a whole, an original work of authorship. For the purposes | ||||
|       of this License, Derivative Works shall not include works that remain | ||||
|       separable from, or merely link (or bind by name) to the interfaces of, | ||||
|       the Work and Derivative Works thereof. | ||||
|  | ||||
|       "Contribution" shall mean any work of authorship, including | ||||
|       the original version of the Work and any modifications or additions | ||||
|       to that Work or Derivative Works thereof, that is intentionally | ||||
|       submitted to Licensor for inclusion in the Work by the copyright owner | ||||
|       or by an individual or Legal Entity authorized to submit on behalf of | ||||
|       the copyright owner. For the purposes of this definition, "submitted" | ||||
|       means any form of electronic, verbal, or written communication sent | ||||
|       to the Licensor or its representatives, including but not limited to | ||||
|       communication on electronic mailing lists, source code control systems, | ||||
|       and issue tracking systems that are managed by, or on behalf of, the | ||||
|       Licensor for the purpose of discussing and improving the Work, but | ||||
|       excluding communication that is conspicuously marked or otherwise | ||||
|       designated in writing by the copyright owner as "Not a Contribution." | ||||
|  | ||||
|       "Contributor" shall mean Licensor and any individual or Legal Entity | ||||
|       on behalf of whom a Contribution has been received by Licensor and | ||||
|       subsequently incorporated within the Work. | ||||
|  | ||||
|    2. Grant of Copyright License. Subject to the terms and conditions of | ||||
|       this License, each Contributor hereby grants to You a perpetual, | ||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||||
|       copyright license to reproduce, prepare Derivative Works of, | ||||
|       publicly display, publicly perform, sublicense, and distribute the | ||||
|       Work and such Derivative Works in Source or Object form. | ||||
|  | ||||
|    3. Grant of Patent License. Subject to the terms and conditions of | ||||
|       this License, each Contributor hereby grants to You a perpetual, | ||||
|       worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||||
|       (except as stated in this section) patent license to make, have made, | ||||
|       use, offer to sell, sell, import, and otherwise transfer the Work, | ||||
|       where such license applies only to those patent claims licensable | ||||
|       by such Contributor that are necessarily infringed by their | ||||
|       Contribution(s) alone or by combination of their Contribution(s) | ||||
|       with the Work to which such Contribution(s) was submitted. If You | ||||
|       institute patent litigation against any entity (including a | ||||
|       cross-claim or counterclaim in a lawsuit) alleging that the Work | ||||
|       or a Contribution incorporated within the Work constitutes direct | ||||
|       or contributory patent infringement, then any patent licenses | ||||
|       granted to You under this License for that Work shall terminate | ||||
|       as of the date such litigation is filed. | ||||
|  | ||||
|    4. Redistribution. You may reproduce and distribute copies of the | ||||
|       Work or Derivative Works thereof in any medium, with or without | ||||
|       modifications, and in Source or Object form, provided that You | ||||
|       meet the following conditions: | ||||
|  | ||||
|       (a) You must give any other recipients of the Work or | ||||
|           Derivative Works a copy of this License; and | ||||
|  | ||||
|       (b) You must cause any modified files to carry prominent notices | ||||
|           stating that You changed the files; and | ||||
|  | ||||
|       (c) You must retain, in the Source form of any Derivative Works | ||||
|           that You distribute, all copyright, patent, trademark, and | ||||
|           attribution notices from the Source form of the Work, | ||||
|           excluding those notices that do not pertain to any part of | ||||
|           the Derivative Works; and | ||||
|  | ||||
|       (d) If the Work includes a "NOTICE" text file as part of its | ||||
|           distribution, then any Derivative Works that You distribute must | ||||
|           include a readable copy of the attribution notices contained | ||||
|           within such NOTICE file, excluding those notices that do not | ||||
|           pertain to any part of the Derivative Works, in at least one | ||||
|           of the following places: within a NOTICE text file distributed | ||||
|           as part of the Derivative Works; within the Source form or | ||||
|           documentation, if provided along with the Derivative Works; or, | ||||
|           within a display generated by the Derivative Works, if and | ||||
|           wherever such third-party notices normally appear. The contents | ||||
|           of the NOTICE file are for informational purposes only and | ||||
|           do not modify the License. You may add Your own attribution | ||||
|           notices within Derivative Works that You distribute, alongside | ||||
|           or as an addendum to the NOTICE text from the Work, provided | ||||
|           that such additional attribution notices cannot be construed | ||||
|           as modifying the License. | ||||
|  | ||||
|       You may add Your own copyright statement to Your modifications and | ||||
|       may provide additional or different license terms and conditions | ||||
|       for use, reproduction, or distribution of Your modifications, or | ||||
|       for any such Derivative Works as a whole, provided Your use, | ||||
|       reproduction, and distribution of the Work otherwise complies with | ||||
|       the conditions stated in this License. | ||||
|  | ||||
|    5. Submission of Contributions. Unless You explicitly state otherwise, | ||||
|       any Contribution intentionally submitted for inclusion in the Work | ||||
|       by You to the Licensor shall be under the terms and conditions of | ||||
|       this License, without any additional terms or conditions. | ||||
|       Notwithstanding the above, nothing herein shall supersede or modify | ||||
|       the terms of any separate license agreement you may have executed | ||||
|       with Licensor regarding such Contributions. | ||||
|  | ||||
|    6. Trademarks. This License does not grant permission to use the trade | ||||
|       names, trademarks, service marks, or product names of the Licensor, | ||||
|       except as required for reasonable and customary use in describing the | ||||
|       origin of the Work and reproducing the content of the NOTICE file. | ||||
|  | ||||
|    7. Disclaimer of Warranty. Unless required by applicable law or | ||||
|       agreed to in writing, Licensor provides the Work (and each | ||||
|       Contributor provides its Contributions) on an "AS IS" BASIS, | ||||
|       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||||
|       implied, including, without limitation, any warranties or conditions | ||||
|       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | ||||
|       PARTICULAR PURPOSE. You are solely responsible for determining the | ||||
|       appropriateness of using or redistributing the Work and assume any | ||||
|       risks associated with Your exercise of permissions under this License. | ||||
|  | ||||
|    8. Limitation of Liability. In no event and under no legal theory, | ||||
|       whether in tort (including negligence), contract, or otherwise, | ||||
|       unless required by applicable law (such as deliberate and grossly | ||||
|       negligent acts) or agreed to in writing, shall any Contributor be | ||||
|       liable to You for damages, including any direct, indirect, special, | ||||
|       incidental, or consequential damages of any character arising as a | ||||
|       result of this License or out of the use or inability to use the | ||||
|       Work (including but not limited to damages for loss of goodwill, | ||||
|       work stoppage, computer failure or malfunction, or any and all | ||||
|       other commercial damages or losses), even if such Contributor | ||||
|       has been advised of the possibility of such damages. | ||||
|  | ||||
|    9. Accepting Warranty or Additional Liability. While redistributing | ||||
|       the Work or Derivative Works thereof, You may choose to offer, | ||||
|       and charge a fee for, acceptance of support, warranty, indemnity, | ||||
|       or other liability obligations and/or rights consistent with this | ||||
|       License. However, in accepting such obligations, You may act only | ||||
|       on Your own behalf and on Your sole responsibility, not on behalf | ||||
|       of any other Contributor, and only if You agree to indemnify, | ||||
|       defend, and hold each Contributor harmless for any liability | ||||
|       incurred by, or claims asserted against, such Contributor by reason | ||||
|       of your accepting any such warranty or additional liability. | ||||
|  | ||||
|    END OF TERMS AND CONDITIONS | ||||
							
								
								
									
										48
									
								
								hardware/Arduino/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								hardware/Arduino/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,48 @@ | ||||
| node-red-node-arduino | ||||
| ===================== | ||||
|  | ||||
| A <a href="http://nodered.org" target="_new">Node-RED</a> node to talk to an Arduino running firmata. | ||||
|  | ||||
| **Note** : This is the same node as is/was in the core of Node-RED. If you already | ||||
| have it installed you do NOT need this node. However it will be deprecated from | ||||
| the core in due course, at which point you will need to install it from here if | ||||
| still required. | ||||
|  | ||||
| Install | ||||
| ------- | ||||
|  | ||||
| Run the following command in the root directory of your Node-RED install, usually | ||||
| this is ~/.node-red . | ||||
|  | ||||
|         npm install node-red-node-arduino | ||||
|  | ||||
|  | ||||
| Usage | ||||
| ----- | ||||
|  | ||||
| The Firmata firmware must be loaded into the Arduino. | ||||
|  | ||||
| See the [main documentation](http://nodered.org/docs/hardware/arduino.html) for | ||||
| details and examples of how to use this node. | ||||
|  | ||||
| ###Input Node | ||||
|  | ||||
| Connects to local Arduino and monitors the selected pin for changes. | ||||
|  | ||||
| You can select either Digital or Analogue input. Outputs the value read as **msg.payload** and the pin number as **msg.topic**. | ||||
|  | ||||
| It only outputs on a change of value - fine for digital inputs, but you can get a lot of data from analogue pins which you must then handle. | ||||
|  | ||||
| You can set the sample rate in ms from 20 to 65535. | ||||
|  | ||||
| ###Output Node | ||||
|  | ||||
| Connects to local Arduino and writes to the selected pin. | ||||
|  | ||||
| You can select Digital, Analogue (PWM) or Servo type outputs. Expects a numeric value in **msg.payload**. The pin number is set in the properties panel. | ||||
|  | ||||
| ###Example | ||||
|  | ||||
| Simple flow to blink Pin 13 | ||||
|  | ||||
|         [{"id":"d7663aaf.47194","type":"arduino-board","device":""},{"id":"dae8234f.2517e","type":"inject","name":"0.5s tick","topic":"","payload":"","payloadType":"date","repeat":"0.5","crontab":"","once":false,"x":150,"y":100,"z":"359a4b52.ca65b4","wires":[["56a6f8f2.a95908"]]},{"id":"2db61802.d249e8","type":"arduino out","name":"","pin":"13","state":"OUTPUT","arduino":"d7663aaf.47194","x":570.5,"y":100,"z":"359a4b52.ca65b4","wires":[]},{"id":"56a6f8f2.a95908","type":"function","name":"Toggle output on input","func":"\n// If it does exist make it the inverse of what it was or else initialise it to false\n// (context variables persist between calls to the function)\ncontext.level = !context.level || false;\n\n// set the payload to the level and return\nmsg.payload = context.level;\nreturn msg;","outputs":1,"noerr":0,"x":358,"y":100,"z":"359a4b52.ca65b4","wires":[["2db61802.d249e8"]]}] | ||||
							
								
								
									
										24
									
								
								hardware/Arduino/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								hardware/Arduino/package.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| { | ||||
|     "name"          : "node-red-node-arduino", | ||||
|     "version"       : "0.0.1", | ||||
|     "description"   : "A Node-RED node to talk to an Arduino running firmata", | ||||
|     "dependencies"  : { | ||||
|         "arduino-firmata"   : "0.3.2" | ||||
|     }, | ||||
|     "repository" : { | ||||
|         "type":"git", | ||||
|         "url":"https://github.com/node-red/node-red-nodes/tree/master/hardware/Arduino" | ||||
|     }, | ||||
|     "license": "Apache-2.0", | ||||
|     "keywords": [ "node-red", "arduino", "firmata" ], | ||||
|     "node-red"      : { | ||||
|         "nodes"     : { | ||||
|             "arduino": "35-arduino.js" | ||||
|         } | ||||
|     }, | ||||
|     "author": { | ||||
|         "name": "Dave Conway-Jones", | ||||
|         "email": "ceejay@vnet.ibm.com", | ||||
|         "url": "http://nodered.org" | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user