<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.phidgets.com/docs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lmpacent</id>
	<title>Phidgets Support - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.phidgets.com/docs/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Lmpacent"/>
	<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/Special:Contributions/Lmpacent"/>
	<updated>2026-04-13T11:16:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=I2C_Adapter_API_Guide&amp;diff=35596</id>
		<title>I2C Adapter API Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=I2C_Adapter_API_Guide&amp;diff=35596"/>
		<updated>2026-04-09T19:50:44Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* I2CSendReceive() */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Get started with your I2C Adapter Phidget}}&lt;br /&gt;
[[Category:IntroGuide]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;nonumtoc&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-4&amp;quot;&amp;gt;&lt;br /&gt;
== Introduction ==&lt;br /&gt;
[[Image:ADP0001_0.jpg|thumb|&amp;lt;center&amp;gt;I2C Adapter Phidget (ADP0001_0)&amp;lt;/center&amp;gt;]]&lt;br /&gt;
This guide will provide information about the DataAdapter API to get you up and running with your new I2C Adapter Phidget.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before starting this guide, visit the Quick Start Guide on your I2C Adapter Phidget&#039;s product page for information about wiring.&lt;br /&gt;
&lt;br /&gt;
== Address Format ==&lt;br /&gt;
&lt;br /&gt;
The I2C Adapter Phidget interprets the device address as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:I2C_Addr.png|link=|550px]]&lt;br /&gt;
&lt;br /&gt;
The read/write bit is not included in the hexadecimal value for the address, as this bit is handled by the API calls. &lt;br /&gt;
You may find that datasheets for some I2C devices include the read/write bit, so a read-only device like a simple temperature sensor might specify the address as &#039;&#039;&#039;0xE3&#039;&#039;&#039; instead of &#039;&#039;&#039;0x71&#039;&#039;&#039; in this case. When using such a sensor, be sure to ignore the R/W bit and shift the remaining seven bits down to get the address you need to send to Phidgets API calls.&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
=== I2CSendReceive() ===&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* int &#039;&#039;&#039;address&#039;&#039;&#039;&lt;br /&gt;
* byte[ ] &#039;&#039;&#039;data&#039;&#039;&#039;&lt;br /&gt;
* int &#039;&#039;&#039;receiveLength&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the main function you&#039;ll use for simple read and write operations. &lt;br /&gt;
&lt;br /&gt;
* The first parameter is the I2C address of your device, usually specified in the datasheet or printed on the circuit board. &lt;br /&gt;
* The second parameter is the data array, which can contain up to 127 bytes. If the data array is empty, the I2C Adapter Phidget will skip sending the write address and bytes. &lt;br /&gt;
* The third parameter is the receive length, or the number of bytes you&#039;re expecting back from the device for this transaction. Maximum receive length is 127, and if it&#039;s zero the I2C Adapter Phidget will skip sending the read address and bytes. &lt;br /&gt;
&lt;br /&gt;
This diagram illustrates the data structure when using {{Code|I2CSendReceive}}:&lt;br /&gt;
&lt;br /&gt;
[[Image:I2C_SendRecv.png|link=|850px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;S&#039;&#039;&#039;&#039; represents a start condition, while &#039;&#039;&#039;&#039;P&#039;&#039;&#039;&#039; represents a stop condition. If your I2C device requires data in a different structure than this, you may need to use {{Code|I2CComplexTransaction()}}, as explained in the next section.&lt;br /&gt;
&lt;br /&gt;
=== I2CComplexTransaction() ===&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* int &#039;&#039;&#039;address&#039;&#039;&#039;&lt;br /&gt;
* string &#039;&#039;&#039;I2CPacketString&#039;&#039;&#039;&lt;br /&gt;
* byte[ ] &#039;&#039;&#039;data&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function gives you more control over the read/write structure for more complex interactions. This is useful for longer commands that make use of repeated start conditions.&lt;br /&gt;
&lt;br /&gt;
* The first parameter is the I2C address of your device, usually specified in the datasheet or printed on the circuit board. &lt;br /&gt;
* The second parameter is a string that dictates the read/write sequence to follow.&lt;br /&gt;
* The third parameter is the data array, whose length must match the number of writes in the string, up to 127 bytes.&lt;br /&gt;
&lt;br /&gt;
The string is made up of the following characters, case-sensitive with no spaces:&lt;br /&gt;
* &#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039; for a start condition&lt;br /&gt;
* &#039;&#039;&#039;&#039;R&#039;&#039;&#039;&#039; for a read byte&lt;br /&gt;
* &#039;&#039;&#039;&#039;T&#039;&#039;&#039;&#039; for a write byte&lt;br /&gt;
* &#039;&#039;&#039;&#039;p&#039;&#039;&#039;&#039; for a stop condition&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
[[Image:I2C_Complex.png|link=|850px]]&lt;br /&gt;
&lt;br /&gt;
Numerals can also be used after a &#039;T&#039; or &#039;R&#039; to make the string compact. In this example, the data array would need to have a length of 3, since a total of three bytes are written in the sequence.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=I2C_Adapter_API_Guide&amp;diff=35595</id>
		<title>I2C Adapter API Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=I2C_Adapter_API_Guide&amp;diff=35595"/>
		<updated>2026-04-09T19:44:04Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Get started with your I2C Adapter Phidget}}&lt;br /&gt;
[[Category:IntroGuide]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;nonumtoc&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-4&amp;quot;&amp;gt;&lt;br /&gt;
== Introduction ==&lt;br /&gt;
[[Image:ADP0001_0.jpg|thumb|&amp;lt;center&amp;gt;I2C Adapter Phidget (ADP0001_0)&amp;lt;/center&amp;gt;]]&lt;br /&gt;
This guide will provide information about the DataAdapter API to get you up and running with your new I2C Adapter Phidget.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before starting this guide, visit the Quick Start Guide on your I2C Adapter Phidget&#039;s product page for information about wiring.&lt;br /&gt;
&lt;br /&gt;
== Address Format ==&lt;br /&gt;
&lt;br /&gt;
The I2C Adapter Phidget interprets the device address as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:I2C_Addr.png|link=|550px]]&lt;br /&gt;
&lt;br /&gt;
The read/write bit is not included in the hexadecimal value for the address, as this bit is handled by the API calls. &lt;br /&gt;
You may find that datasheets for some I2C devices include the read/write bit, so a read-only device like a simple temperature sensor might specify the address as &#039;&#039;&#039;0xE3&#039;&#039;&#039; instead of &#039;&#039;&#039;0x71&#039;&#039;&#039; in this case. When using such a sensor, be sure to ignore the R/W bit and shift the remaining seven bits down to get the address you need to send to Phidgets API calls.&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
=== I2CSendReceive() ===&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* int &#039;&#039;&#039;address&#039;&#039;&#039;&lt;br /&gt;
* byte[ ] &#039;&#039;&#039;data&#039;&#039;&#039;&lt;br /&gt;
* int &#039;&#039;&#039;receiveLength&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the main function you&#039;ll use for simple read and write operations. &lt;br /&gt;
&lt;br /&gt;
* The first parameter is the I2C address of your device, usually specified in the datasheet or printed on the circuit board. &lt;br /&gt;
* The second parameter is the data array, which can contain up to 127 bytes. If the data array is empty, the I2C Adapter Phidget will skip sending the write address and bytes. &lt;br /&gt;
* The third parameter is the receive length, or the number of bytes you&#039;re expecting back from the device for this transaction. Maximum receive length is 127, and if it&#039;s zero the I2C Adapter Phidget will skip sending the read address and bytes. &lt;br /&gt;
&lt;br /&gt;
This diagram illustrates the data structure when using {{Code|I2CSendReceive}}:&lt;br /&gt;
&lt;br /&gt;
[[Image:I2C_SendRecv.png|link=|850px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;S&#039;&#039;&#039;&#039; represents a start condition, while &#039;&#039;&#039;&#039;P&#039;&#039;&#039;&#039; represents a stop condition. If your I2C device requires data in a different structure than this, you may need to use {{Code|I2CComplexTransaction()}}, as explained in the next section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== I2CComplexTransaction() ===&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* int &#039;&#039;&#039;address&#039;&#039;&#039;&lt;br /&gt;
* string &#039;&#039;&#039;I2CPacketString&#039;&#039;&#039;&lt;br /&gt;
* byte[ ] &#039;&#039;&#039;data&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function gives you more control over the read/write structure for more complex interactions. This is useful for longer commands that make use of repeated start conditions.&lt;br /&gt;
&lt;br /&gt;
* The first parameter is the I2C address of your device, usually specified in the datasheet or printed on the circuit board. &lt;br /&gt;
* The second parameter is a string that dictates the read/write sequence to follow.&lt;br /&gt;
* The third parameter is the data array, whose length must match the number of writes in the string, up to 127 bytes.&lt;br /&gt;
&lt;br /&gt;
The string is made up of the following characters, case-sensitive with no spaces:&lt;br /&gt;
* &#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039; for a start condition&lt;br /&gt;
* &#039;&#039;&#039;&#039;R&#039;&#039;&#039;&#039; for a read byte&lt;br /&gt;
* &#039;&#039;&#039;&#039;T&#039;&#039;&#039;&#039; for a write byte&lt;br /&gt;
* &#039;&#039;&#039;&#039;p&#039;&#039;&#039;&#039; for a stop condition&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
[[Image:I2C_Complex.png|link=|850px]]&lt;br /&gt;
&lt;br /&gt;
Numerals can also be used after a &#039;T&#039; or &#039;R&#039; to make the string compact. In this example, the data array would need to have a length of 3, since a total of three bytes are written in the sequence.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=I2C_Adapter_API_Guide&amp;diff=35594</id>
		<title>I2C Adapter API Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=I2C_Adapter_API_Guide&amp;diff=35594"/>
		<updated>2026-04-09T19:43:28Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Get started with your I2C Adapter Phidget}}&lt;br /&gt;
[[Category:IntroGuide]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;nonumtoc&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-4&amp;quot;&amp;gt;&lt;br /&gt;
== Introduction ==&lt;br /&gt;
[[Image:ADP0001_0.jpg|thumb|&amp;lt;center&amp;gt;I2C Adapter Phidget (ADP0001_0)&amp;lt;/center&amp;gt;]]&lt;br /&gt;
This guide will provide information about the DataAdapter API to get you up and running with your new I2C Adapter Phidget.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before starting this guide, visit the Quick Start Guide on your Adapter Phidget&#039;s product page for information about wiring.&lt;br /&gt;
&lt;br /&gt;
== Address Format ==&lt;br /&gt;
&lt;br /&gt;
The I2C Adapter Phidget interprets the device address as follows:&lt;br /&gt;
&lt;br /&gt;
[[Image:I2C_Addr.png|link=|550px]]&lt;br /&gt;
&lt;br /&gt;
The read/write bit is not included in the hexadecimal value for the address, as this bit is handled by the API calls. &lt;br /&gt;
You may find that datasheets for some I2C devices include the read/write bit, so a read-only device like a simple temperature sensor might specify the address as &#039;&#039;&#039;0xE3&#039;&#039;&#039; instead of &#039;&#039;&#039;0x71&#039;&#039;&#039; in this case. When using such a sensor, be sure to ignore the R/W bit and shift the remaining seven bits down to get the address you need to send to Phidgets API calls.&lt;br /&gt;
&lt;br /&gt;
== Methods ==&lt;br /&gt;
=== I2CSendReceive() ===&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* int &#039;&#039;&#039;address&#039;&#039;&#039;&lt;br /&gt;
* byte[ ] &#039;&#039;&#039;data&#039;&#039;&#039;&lt;br /&gt;
* int &#039;&#039;&#039;receiveLength&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This is the main function you&#039;ll use for simple read and write operations. &lt;br /&gt;
&lt;br /&gt;
* The first parameter is the I2C address of your device, usually specified in the datasheet or printed on the circuit board. &lt;br /&gt;
* The second parameter is the data array, which can contain up to 127 bytes. If the data array is empty, the I2C Adapter Phidget will skip sending the write address and bytes. &lt;br /&gt;
* The third parameter is the receive length, or the number of bytes you&#039;re expecting back from the device for this transaction. Maximum receive length is 127, and if it&#039;s zero the I2C Adapter Phidget will skip sending the read address and bytes. &lt;br /&gt;
&lt;br /&gt;
This diagram illustrates the data structure when using {{Code|I2CSendReceive}}:&lt;br /&gt;
&lt;br /&gt;
[[Image:I2C_SendRecv.png|link=|850px]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;S&#039;&#039;&#039;&#039; represents a start condition, while &#039;&#039;&#039;&#039;P&#039;&#039;&#039;&#039; represents a stop condition. If your I2C device requires data in a different structure than this, you may need to use {{Code|I2CComplexTransaction()}}, as explained in the next section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== I2CComplexTransaction() ===&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
* int &#039;&#039;&#039;address&#039;&#039;&#039;&lt;br /&gt;
* string &#039;&#039;&#039;I2CPacketString&#039;&#039;&#039;&lt;br /&gt;
* byte[ ] &#039;&#039;&#039;data&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function gives you more control over the read/write structure for more complex interactions. This is useful for longer commands that make use of repeated start conditions.&lt;br /&gt;
&lt;br /&gt;
* The first parameter is the I2C address of your device, usually specified in the datasheet or printed on the circuit board. &lt;br /&gt;
* The second parameter is a string that dictates the read/write sequence to follow.&lt;br /&gt;
* The third parameter is the data array, whose length must match the number of writes in the string, up to 127 bytes.&lt;br /&gt;
&lt;br /&gt;
The string is made up of the following characters, case-sensitive with no spaces:&lt;br /&gt;
* &#039;&#039;&#039;&#039;s&#039;&#039;&#039;&#039; for a start condition&lt;br /&gt;
* &#039;&#039;&#039;&#039;R&#039;&#039;&#039;&#039; for a read byte&lt;br /&gt;
* &#039;&#039;&#039;&#039;T&#039;&#039;&#039;&#039; for a write byte&lt;br /&gt;
* &#039;&#039;&#039;&#039;p&#039;&#039;&#039;&#039; for a stop condition&lt;br /&gt;
&lt;br /&gt;
Here&#039;s an example:&lt;br /&gt;
&lt;br /&gt;
[[Image:I2C_Complex.png|link=|850px]]&lt;br /&gt;
&lt;br /&gt;
Numerals can also be used after a &#039;T&#039; or &#039;R&#039; to make the string compact. In this example, the data array would need to have a length of 3, since a total of three bytes are written in the sequence.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:ADP0001_0.jpg&amp;diff=35593</id>
		<title>File:ADP0001 0.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:ADP0001_0.jpg&amp;diff=35593"/>
		<updated>2026-04-09T19:42:20Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Language_-_Java&amp;diff=35586</id>
		<title>Language - Java</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Language_-_Java&amp;diff=35586"/>
		<updated>2026-04-02T16:40:00Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Deploying Applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Learn how to use Phidget USB devices with Java.}}&lt;br /&gt;
[[Category:Language]]&lt;br /&gt;
&lt;br /&gt;
==Get Started==&lt;br /&gt;
With the Phidget22 library, it&#039;s easy to create Java applications that work with Phidget devices.&lt;br /&gt;
&lt;br /&gt;
==Java Libraries==&lt;br /&gt;
During development, we recommend downloading the appropriate installer or package for your [https://www.phidgets.com/docs/Operating_System_Support operating system]. This will place the required Phidget library files in standard locations where Java will look for them. When [[#Deploying Applications|deploying applications]], you can instead include these files manually as part of your application. &lt;br /&gt;
&lt;br /&gt;
====macOS Considerations====&lt;br /&gt;
Legacy Phidgets running a HID USB stack require a driver extension (macOS 10.15 and newer) or a kernel extension (macOS 10.14 and earlier). During development, we recommend downloading the appropriate [https://www.phidgets.com/docs/OS_-_macOS#Quick_Downloads package] which will install the extension. When deploying applications, review the README in the [https://cdn.phidgets.com/downloads/phidget22/libraries/macos/Phidget22_macosdevel.zip macOS Development Files] for information about bundling the extension with your application.&lt;br /&gt;
&lt;br /&gt;
=====Determining USB Stack=====&lt;br /&gt;
To determine which USB stack your device is running, navigate to the product page and then to the specification tab, and look for the &#039;&#039;USB Stack&#039;&#039; specification. If you are using a VINT device, navigate to the product page for the VINT Hub you are using.&lt;br /&gt;
&lt;br /&gt;
[[Image:Javascript_networkserver_webusb_spec.png|center|600px|link=https://cdn.phidgets.com/docs/images/8/80/Javascript_networkserver_webusb_spec.png]]&lt;br /&gt;
&lt;br /&gt;
====Linux Considerations====&lt;br /&gt;
Linux restricts access to USB devices to the root user. To run your Python application as a regular user, you&#039;ll need to [{{SERVER}}/docs/OS_-_Linux#Setting_Udev_Rules set up udev rules] on your system.&lt;br /&gt;
&lt;br /&gt;
==Development Environment Configuration==&lt;br /&gt;
&lt;br /&gt;
Before choosing a development environment, make sure you have the [http://www.oracle.com/technetwork/java/index.html Java Development Kit] installed. &lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| To start developing with Java in VSCode, open it up and install the &#039;&#039;&#039;Extension Pack for Java&#039;&#039;&#039;.||[[Image:Language_java_vscode_extension2.png|center|350px|link=https://cdn.phidgets.com/docs/images/b/b4/Language_java_vscode_extension2.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, press &#039;&#039;&#039;Ctrl+Shift+P&#039;&#039;&#039; to open the command palette, type &amp;quot;java&amp;quot; and select &#039;&#039;&#039;Java: Create Java Project&#039;&#039;&#039;.  || [[Image:Language_java_vscode_createproj.png|center|360px|link=https://cdn.phidgets.com/docs/images/7/78/Language_java_vscode_createproj.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Select &amp;quot;No Build Tools&amp;quot; and select a directory for the new project. You&#039;ll be asked for a project name, and  VSCode will create the directory structure. || [[Image:Language_java_vscode_emptyproj.png|center|350px|link=https://cdn.phidgets.com/docs/images/c/c1/Language_java_vscode_emptyproj.png]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;|You&#039;ll need to get a copy of &#039;&#039;&#039;phidget22.jar&#039;&#039;&#039; to put inside the &amp;quot;lib&amp;quot; folder. [https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip You can download phidget22.jar here]. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| You can now begin writing code in the newly created &amp;quot;App.java&amp;quot; file, or you can download a [[#Example_Code|sample program]] for your device and place it in the &amp;quot;src&amp;quot; folder.&lt;br /&gt;
|-&lt;br /&gt;
| Compile and run by pressing &#039;&#039;&#039;F5&#039;&#039;&#039; or by clicking the play button in the top right. || [[Image:Language_java_vscode_run.png|center|350px|link=https://cdn.phidgets.com/docs/images/e/ea/Language_java_vscode_run.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Once you&#039;re ready to compile your project into a .jar executable, click on the &#039;&#039;&#039;Java Projects&#039;&#039;&#039; section in the explorer. || [[Image:Language_java_vscode_jar.png|center|350px|link=https://cdn.phidgets.com/docs/images/6/65/Language_java_vscode_jar.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Click on the export icon, and then select your main class and click OK. || [[Image:Language_java_vscode_jar2.png|center|350px|link=https://cdn.phidgets.com/docs/images/7/74/Language_java_vscode_jar2.png]]&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| Now you can run your new .jar file with the following command:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar Example.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Javac===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
|The easiest way to allow Java to access the Phidgets Java library is to place a copy of &#039;&#039;&#039;phidget22.jar&#039;&#039;&#039; in the same folder as your .java program.  ||[[Image:Language_java_javac_folder.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/89/Language_java_javac_folder.png]]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip You can download phidget22.jar here].|| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|To run your program, enter the following command in the command prompt or terminal:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
javac -classpath .;phidget22.jar example.java&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Then, enter the following command to run the program:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -classpath .;phidget22.jar example &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| Once you&#039;re ready to compile your project into a .jar executable, create a &#039;&#039;&#039;manifest.mf&#039;&#039;&#039; file with the following contents:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Manifest-Version: 1.0&lt;br /&gt;
Main-Class: example&lt;br /&gt;
Class-Path: phidget22.jar&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Make sure there&#039;s an empty newline at the bottom of the three lines and a space after each colon.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| Next, create the .jar file with this command:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
jar cfm example.jar manifest.mf *.class&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Once the .jar is created, you can execute it with&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar example.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Netbeans===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
|The easiest way to allow Java to access the Phidgets Java library is to place a copy of &#039;&#039;&#039;phidget22.jar&#039;&#039;&#039; in the same folder as your .java program.  ||[[Image:Language_java_javac_folder.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/89/Language_java_javac_folder.png]]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip You can download phidget22.jar here].|| &lt;br /&gt;
|-&lt;br /&gt;
| To start, open NetBeans and create a new project. Select Java Application and follow the steps as directed by Netbeans.|| [[Image:Windows_netbeans1.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/c/c9/Windows_netbeans1.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, add a reference to phidget22.jar by right-clicking on the libraries folder. || [[Image:Windows_netbeans2.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/2/2b/Windows_netbeans2.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| Navigate to the folder where you downloaded phidget22.jar, and select it. || [[Image:Windows_netbeans3.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/7/76/Windows_netbeans3.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| The project now has access to Phidgets. By default, Netbeans should create an executable .jar file in the &#039;&#039;&#039;dist&#039;&#039;&#039; folder of the project directory when it&#039;s built. If it didn&#039;t, go to &#039;&#039;&#039;Build -&amp;gt; Packaging&#039;&#039;&#039; in the project properties and make sure &amp;quot;Build JAR after compiling&amp;quot; is checked.|| [[Image:Windows_netbeans4.png|center|350px|link=https://cdn.phidgets.com/docs/images/7/78/Windows_netbeans4.png]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| You can now run the .jar file from the command prompt with:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar phidgetTest.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Eclipse===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| To start, open Eclipse and create a new Java project. Name the project and uncheck the &#039;&#039;&#039;create module-info.java file&#039;&#039;&#039; box.|| [[Image:java_eclipse_newproj.png|center|350px|link=https://cdn.phidgets.com/docs/images/9/97/Java_eclipse_newproj.png]]&lt;br /&gt;
|-&lt;br /&gt;
| On the Libraries tab, click Add External JARs and add [https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip phidget22.jar].  to your project as an external jar. Be sure it&#039;s being added to the &#039;&#039;&#039;Classpath&#039;&#039;&#039; and not the module path. || [[Image:java_eclipse_library.png|center|350px|link=https://cdn.phidgets.com/docs/images/1/1b/Java_eclipse_library.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Create a new Class in your project. || [[Image:java_eclipse_newclass.png|center|350px|link=https://cdn.phidgets.com/docs/images/0/02/Java_eclipse_newclass.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Name the class, and be sure to check the &#039;&#039;&#039;public static void main&#039;&#039;&#039; box. Eclipse may require that you add a package name. || [[Image:java_eclipse_newclass2.png|center|350px|link=https://cdn.phidgets.com/docs/images/c/ca/Java_eclipse_newclass2.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Your project now has access to Phidgets! ||&lt;br /&gt;
|-&lt;br /&gt;
| Once you&#039;re ready to compile your project into a .jar executable, right click on the project in the package explorer and choose &#039;&#039;&#039;Export&#039;&#039;&#039;. Select &#039;&#039;&#039;Runnable JAR file&#039;&#039;&#039;. || [[Image:java_eclipse_export.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/8c/Java_eclipse_export.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Choose the main class and a destination for the .jar file and click finish. || [[Image:java_eclipse_export2.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/8d/Java_eclipse_export2.png]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| You can now run the .jar file from the command prompt with:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar phidgetTest.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PhidgetSBC Web Interface ===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+&#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;center&amp;gt;{{#ev:youtube|gZmWvWXICIA|rel=0}}&amp;lt;/center&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Example Code==&lt;br /&gt;
Navigate to our [https://www.phidgets.com/?view=code_samples&amp;amp;lang=Java Code Sample Generator] to view and download code samples that are tailored to your specific device.&lt;br /&gt;
&lt;br /&gt;
[[Image:Language_java_codesample.png|center|600px|link=https://cdn.phidgets.com/docs/images/a/af/Language_java_codesample.png]]&lt;br /&gt;
&lt;br /&gt;
===Phidget Programming Basics===&lt;br /&gt;
{{PhidgetProgrammingBasicsLink}}&lt;br /&gt;
&lt;br /&gt;
== Deploying Applications ==&lt;br /&gt;
The following files are required for your Java application:&lt;br /&gt;
* phidget22.jar &lt;br /&gt;
* phidget22.dll&lt;br /&gt;
* phidget22java.dll&lt;br /&gt;
&lt;br /&gt;
The files can be found in the [https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-windevel.zip Development Files]. The .jar file is in lib/java, and the dll files are in lib/c/x64. &lt;br /&gt;
&lt;br /&gt;
Java will look for these files in several locations, including the classpath and the working folder of the project.&lt;br /&gt;
&lt;br /&gt;
==API==&lt;br /&gt;
[{{SERVER}}/?view=api&amp;amp;lang=Python Phidget22 API]&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Language_-_Java&amp;diff=35585</id>
		<title>Language - Java</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Language_-_Java&amp;diff=35585"/>
		<updated>2026-04-02T16:38:13Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Java Libraries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Learn how to use Phidget USB devices with Java.}}&lt;br /&gt;
[[Category:Language]]&lt;br /&gt;
&lt;br /&gt;
==Get Started==&lt;br /&gt;
With the Phidget22 library, it&#039;s easy to create Java applications that work with Phidget devices.&lt;br /&gt;
&lt;br /&gt;
==Java Libraries==&lt;br /&gt;
During development, we recommend downloading the appropriate installer or package for your [https://www.phidgets.com/docs/Operating_System_Support operating system]. This will place the required Phidget library files in standard locations where Java will look for them. When [[#Deploying Applications|deploying applications]], you can instead include these files manually as part of your application. &lt;br /&gt;
&lt;br /&gt;
====macOS Considerations====&lt;br /&gt;
Legacy Phidgets running a HID USB stack require a driver extension (macOS 10.15 and newer) or a kernel extension (macOS 10.14 and earlier). During development, we recommend downloading the appropriate [https://www.phidgets.com/docs/OS_-_macOS#Quick_Downloads package] which will install the extension. When deploying applications, review the README in the [https://cdn.phidgets.com/downloads/phidget22/libraries/macos/Phidget22_macosdevel.zip macOS Development Files] for information about bundling the extension with your application.&lt;br /&gt;
&lt;br /&gt;
=====Determining USB Stack=====&lt;br /&gt;
To determine which USB stack your device is running, navigate to the product page and then to the specification tab, and look for the &#039;&#039;USB Stack&#039;&#039; specification. If you are using a VINT device, navigate to the product page for the VINT Hub you are using.&lt;br /&gt;
&lt;br /&gt;
[[Image:Javascript_networkserver_webusb_spec.png|center|600px|link=https://cdn.phidgets.com/docs/images/8/80/Javascript_networkserver_webusb_spec.png]]&lt;br /&gt;
&lt;br /&gt;
====Linux Considerations====&lt;br /&gt;
Linux restricts access to USB devices to the root user. To run your Python application as a regular user, you&#039;ll need to [{{SERVER}}/docs/OS_-_Linux#Setting_Udev_Rules set up udev rules] on your system.&lt;br /&gt;
&lt;br /&gt;
==Development Environment Configuration==&lt;br /&gt;
&lt;br /&gt;
Before choosing a development environment, make sure you have the [http://www.oracle.com/technetwork/java/index.html Java Development Kit] installed. &lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| To start developing with Java in VSCode, open it up and install the &#039;&#039;&#039;Extension Pack for Java&#039;&#039;&#039;.||[[Image:Language_java_vscode_extension2.png|center|350px|link=https://cdn.phidgets.com/docs/images/b/b4/Language_java_vscode_extension2.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, press &#039;&#039;&#039;Ctrl+Shift+P&#039;&#039;&#039; to open the command palette, type &amp;quot;java&amp;quot; and select &#039;&#039;&#039;Java: Create Java Project&#039;&#039;&#039;.  || [[Image:Language_java_vscode_createproj.png|center|360px|link=https://cdn.phidgets.com/docs/images/7/78/Language_java_vscode_createproj.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Select &amp;quot;No Build Tools&amp;quot; and select a directory for the new project. You&#039;ll be asked for a project name, and  VSCode will create the directory structure. || [[Image:Language_java_vscode_emptyproj.png|center|350px|link=https://cdn.phidgets.com/docs/images/c/c1/Language_java_vscode_emptyproj.png]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;|You&#039;ll need to get a copy of &#039;&#039;&#039;phidget22.jar&#039;&#039;&#039; to put inside the &amp;quot;lib&amp;quot; folder. [https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip You can download phidget22.jar here]. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| You can now begin writing code in the newly created &amp;quot;App.java&amp;quot; file, or you can download a [[#Example_Code|sample program]] for your device and place it in the &amp;quot;src&amp;quot; folder.&lt;br /&gt;
|-&lt;br /&gt;
| Compile and run by pressing &#039;&#039;&#039;F5&#039;&#039;&#039; or by clicking the play button in the top right. || [[Image:Language_java_vscode_run.png|center|350px|link=https://cdn.phidgets.com/docs/images/e/ea/Language_java_vscode_run.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Once you&#039;re ready to compile your project into a .jar executable, click on the &#039;&#039;&#039;Java Projects&#039;&#039;&#039; section in the explorer. || [[Image:Language_java_vscode_jar.png|center|350px|link=https://cdn.phidgets.com/docs/images/6/65/Language_java_vscode_jar.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Click on the export icon, and then select your main class and click OK. || [[Image:Language_java_vscode_jar2.png|center|350px|link=https://cdn.phidgets.com/docs/images/7/74/Language_java_vscode_jar2.png]]&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| Now you can run your new .jar file with the following command:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar Example.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Javac===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
|The easiest way to allow Java to access the Phidgets Java library is to place a copy of &#039;&#039;&#039;phidget22.jar&#039;&#039;&#039; in the same folder as your .java program.  ||[[Image:Language_java_javac_folder.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/89/Language_java_javac_folder.png]]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip You can download phidget22.jar here].|| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|To run your program, enter the following command in the command prompt or terminal:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
javac -classpath .;phidget22.jar example.java&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Then, enter the following command to run the program:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -classpath .;phidget22.jar example &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| Once you&#039;re ready to compile your project into a .jar executable, create a &#039;&#039;&#039;manifest.mf&#039;&#039;&#039; file with the following contents:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Manifest-Version: 1.0&lt;br /&gt;
Main-Class: example&lt;br /&gt;
Class-Path: phidget22.jar&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Make sure there&#039;s an empty newline at the bottom of the three lines and a space after each colon.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| Next, create the .jar file with this command:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
jar cfm example.jar manifest.mf *.class&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Once the .jar is created, you can execute it with&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar example.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Netbeans===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
|The easiest way to allow Java to access the Phidgets Java library is to place a copy of &#039;&#039;&#039;phidget22.jar&#039;&#039;&#039; in the same folder as your .java program.  ||[[Image:Language_java_javac_folder.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/89/Language_java_javac_folder.png]]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip You can download phidget22.jar here].|| &lt;br /&gt;
|-&lt;br /&gt;
| To start, open NetBeans and create a new project. Select Java Application and follow the steps as directed by Netbeans.|| [[Image:Windows_netbeans1.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/c/c9/Windows_netbeans1.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, add a reference to phidget22.jar by right-clicking on the libraries folder. || [[Image:Windows_netbeans2.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/2/2b/Windows_netbeans2.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| Navigate to the folder where you downloaded phidget22.jar, and select it. || [[Image:Windows_netbeans3.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/7/76/Windows_netbeans3.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| The project now has access to Phidgets. By default, Netbeans should create an executable .jar file in the &#039;&#039;&#039;dist&#039;&#039;&#039; folder of the project directory when it&#039;s built. If it didn&#039;t, go to &#039;&#039;&#039;Build -&amp;gt; Packaging&#039;&#039;&#039; in the project properties and make sure &amp;quot;Build JAR after compiling&amp;quot; is checked.|| [[Image:Windows_netbeans4.png|center|350px|link=https://cdn.phidgets.com/docs/images/7/78/Windows_netbeans4.png]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| You can now run the .jar file from the command prompt with:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar phidgetTest.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Eclipse===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| To start, open Eclipse and create a new Java project. Name the project and uncheck the &#039;&#039;&#039;create module-info.java file&#039;&#039;&#039; box.|| [[Image:java_eclipse_newproj.png|center|350px|link=https://cdn.phidgets.com/docs/images/9/97/Java_eclipse_newproj.png]]&lt;br /&gt;
|-&lt;br /&gt;
| On the Libraries tab, click Add External JARs and add [https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip phidget22.jar].  to your project as an external jar. Be sure it&#039;s being added to the &#039;&#039;&#039;Classpath&#039;&#039;&#039; and not the module path. || [[Image:java_eclipse_library.png|center|350px|link=https://cdn.phidgets.com/docs/images/1/1b/Java_eclipse_library.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Create a new Class in your project. || [[Image:java_eclipse_newclass.png|center|350px|link=https://cdn.phidgets.com/docs/images/0/02/Java_eclipse_newclass.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Name the class, and be sure to check the &#039;&#039;&#039;public static void main&#039;&#039;&#039; box. Eclipse may require that you add a package name. || [[Image:java_eclipse_newclass2.png|center|350px|link=https://cdn.phidgets.com/docs/images/c/ca/Java_eclipse_newclass2.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Your project now has access to Phidgets! ||&lt;br /&gt;
|-&lt;br /&gt;
| Once you&#039;re ready to compile your project into a .jar executable, right click on the project in the package explorer and choose &#039;&#039;&#039;Export&#039;&#039;&#039;. Select &#039;&#039;&#039;Runnable JAR file&#039;&#039;&#039;. || [[Image:java_eclipse_export.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/8c/Java_eclipse_export.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Choose the main class and a destination for the .jar file and click finish. || [[Image:java_eclipse_export2.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/8d/Java_eclipse_export2.png]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| You can now run the .jar file from the command prompt with:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar phidgetTest.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PhidgetSBC Web Interface ===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+&#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;center&amp;gt;{{#ev:youtube|gZmWvWXICIA|rel=0}}&amp;lt;/center&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Example Code==&lt;br /&gt;
Navigate to our [https://www.phidgets.com/?view=code_samples&amp;amp;lang=Java Code Sample Generator] to view and download code samples that are tailored to your specific device.&lt;br /&gt;
&lt;br /&gt;
[[Image:Language_java_codesample.png|center|600px|link=https://cdn.phidgets.com/docs/images/a/af/Language_java_codesample.png]]&lt;br /&gt;
&lt;br /&gt;
===Phidget Programming Basics===&lt;br /&gt;
{{PhidgetProgrammingBasicsLink}}&lt;br /&gt;
&lt;br /&gt;
== Deploying Applications ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re planning to deploy your application, it should be noted that you don&#039;t strictly need the Phidget Drivers installed. &lt;br /&gt;
&lt;br /&gt;
At a minimum, these three files are required:&lt;br /&gt;
* phidget22.jar &lt;br /&gt;
* phidget22.dll&lt;br /&gt;
* phidget22java.dll&lt;br /&gt;
&lt;br /&gt;
All three files can be found in the [https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-windevel.zip Development Files]. The .jar file is in lib/java, and the .dll files are in lib/c/x64. &lt;br /&gt;
&lt;br /&gt;
Java will look for these files in several locations, including the classpath and the working folder of the project.&lt;br /&gt;
&lt;br /&gt;
==API==&lt;br /&gt;
[{{SERVER}}/?view=api&amp;amp;lang=Python Phidget22 API]&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Language_-_Java&amp;diff=35584</id>
		<title>Language - Java</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Language_-_Java&amp;diff=35584"/>
		<updated>2026-04-02T16:37:19Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Java Libraries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Learn how to use Phidget USB devices with Java.}}&lt;br /&gt;
[[Category:Language]]&lt;br /&gt;
&lt;br /&gt;
==Get Started==&lt;br /&gt;
With the Phidget22 library, it&#039;s easy to create Java applications that work with Phidget devices.&lt;br /&gt;
&lt;br /&gt;
==Java Libraries==&lt;br /&gt;
During development, we recommend downloading the appropriate installer or package for your [https://www.phidgets.com/docs/Operating_System_Support operating system]. This will put required Phidget library files in standard locations where Java will look for them. When [[#Deploying Applications|deploying applications]], you can manually include these files yourself as part of your application. &lt;br /&gt;
&lt;br /&gt;
====macOS Considerations====&lt;br /&gt;
Legacy Phidgets running a HID USB stack require a driver extension (macOS 10.15 and newer) or a kernel extension (macOS 10.14 and earlier). During development, we recommend downloading the appropriate [https://www.phidgets.com/docs/OS_-_macOS#Quick_Downloads package] which will install the extension. When deploying applications, review the README in the [https://cdn.phidgets.com/downloads/phidget22/libraries/macos/Phidget22_macosdevel.zip macOS Development Files] for information about bundling the extension with your application.&lt;br /&gt;
&lt;br /&gt;
=====Determining USB Stack=====&lt;br /&gt;
To determine which USB stack your device is running, navigate to the product page and then to the specification tab, and look for the &#039;&#039;USB Stack&#039;&#039; specification. If you are using a VINT device, navigate to the product page for the VINT Hub you are using.&lt;br /&gt;
&lt;br /&gt;
[[Image:Javascript_networkserver_webusb_spec.png|center|600px|link=https://cdn.phidgets.com/docs/images/8/80/Javascript_networkserver_webusb_spec.png]]&lt;br /&gt;
&lt;br /&gt;
====Linux Considerations====&lt;br /&gt;
Linux restricts access to USB devices to the root user. To run your Python application as a regular user, you&#039;ll need to [{{SERVER}}/docs/OS_-_Linux#Setting_Udev_Rules set up udev rules] on your system.&lt;br /&gt;
&lt;br /&gt;
==Development Environment Configuration==&lt;br /&gt;
&lt;br /&gt;
Before choosing a development environment, make sure you have the [http://www.oracle.com/technetwork/java/index.html Java Development Kit] installed. &lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| To start developing with Java in VSCode, open it up and install the &#039;&#039;&#039;Extension Pack for Java&#039;&#039;&#039;.||[[Image:Language_java_vscode_extension2.png|center|350px|link=https://cdn.phidgets.com/docs/images/b/b4/Language_java_vscode_extension2.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, press &#039;&#039;&#039;Ctrl+Shift+P&#039;&#039;&#039; to open the command palette, type &amp;quot;java&amp;quot; and select &#039;&#039;&#039;Java: Create Java Project&#039;&#039;&#039;.  || [[Image:Language_java_vscode_createproj.png|center|360px|link=https://cdn.phidgets.com/docs/images/7/78/Language_java_vscode_createproj.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Select &amp;quot;No Build Tools&amp;quot; and select a directory for the new project. You&#039;ll be asked for a project name, and  VSCode will create the directory structure. || [[Image:Language_java_vscode_emptyproj.png|center|350px|link=https://cdn.phidgets.com/docs/images/c/c1/Language_java_vscode_emptyproj.png]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;|You&#039;ll need to get a copy of &#039;&#039;&#039;phidget22.jar&#039;&#039;&#039; to put inside the &amp;quot;lib&amp;quot; folder. [https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip You can download phidget22.jar here]. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| You can now begin writing code in the newly created &amp;quot;App.java&amp;quot; file, or you can download a [[#Example_Code|sample program]] for your device and place it in the &amp;quot;src&amp;quot; folder.&lt;br /&gt;
|-&lt;br /&gt;
| Compile and run by pressing &#039;&#039;&#039;F5&#039;&#039;&#039; or by clicking the play button in the top right. || [[Image:Language_java_vscode_run.png|center|350px|link=https://cdn.phidgets.com/docs/images/e/ea/Language_java_vscode_run.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Once you&#039;re ready to compile your project into a .jar executable, click on the &#039;&#039;&#039;Java Projects&#039;&#039;&#039; section in the explorer. || [[Image:Language_java_vscode_jar.png|center|350px|link=https://cdn.phidgets.com/docs/images/6/65/Language_java_vscode_jar.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Click on the export icon, and then select your main class and click OK. || [[Image:Language_java_vscode_jar2.png|center|350px|link=https://cdn.phidgets.com/docs/images/7/74/Language_java_vscode_jar2.png]]&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| Now you can run your new .jar file with the following command:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar Example.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Javac===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
|The easiest way to allow Java to access the Phidgets Java library is to place a copy of &#039;&#039;&#039;phidget22.jar&#039;&#039;&#039; in the same folder as your .java program.  ||[[Image:Language_java_javac_folder.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/89/Language_java_javac_folder.png]]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip You can download phidget22.jar here].|| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|To run your program, enter the following command in the command prompt or terminal:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
javac -classpath .;phidget22.jar example.java&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Then, enter the following command to run the program:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -classpath .;phidget22.jar example &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| Once you&#039;re ready to compile your project into a .jar executable, create a &#039;&#039;&#039;manifest.mf&#039;&#039;&#039; file with the following contents:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Manifest-Version: 1.0&lt;br /&gt;
Main-Class: example&lt;br /&gt;
Class-Path: phidget22.jar&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Make sure there&#039;s an empty newline at the bottom of the three lines and a space after each colon.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| Next, create the .jar file with this command:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
jar cfm example.jar manifest.mf *.class&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Once the .jar is created, you can execute it with&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar example.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Netbeans===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
|The easiest way to allow Java to access the Phidgets Java library is to place a copy of &#039;&#039;&#039;phidget22.jar&#039;&#039;&#039; in the same folder as your .java program.  ||[[Image:Language_java_javac_folder.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/89/Language_java_javac_folder.png]]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip You can download phidget22.jar here].|| &lt;br /&gt;
|-&lt;br /&gt;
| To start, open NetBeans and create a new project. Select Java Application and follow the steps as directed by Netbeans.|| [[Image:Windows_netbeans1.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/c/c9/Windows_netbeans1.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, add a reference to phidget22.jar by right-clicking on the libraries folder. || [[Image:Windows_netbeans2.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/2/2b/Windows_netbeans2.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| Navigate to the folder where you downloaded phidget22.jar, and select it. || [[Image:Windows_netbeans3.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/7/76/Windows_netbeans3.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| The project now has access to Phidgets. By default, Netbeans should create an executable .jar file in the &#039;&#039;&#039;dist&#039;&#039;&#039; folder of the project directory when it&#039;s built. If it didn&#039;t, go to &#039;&#039;&#039;Build -&amp;gt; Packaging&#039;&#039;&#039; in the project properties and make sure &amp;quot;Build JAR after compiling&amp;quot; is checked.|| [[Image:Windows_netbeans4.png|center|350px|link=https://cdn.phidgets.com/docs/images/7/78/Windows_netbeans4.png]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| You can now run the .jar file from the command prompt with:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar phidgetTest.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Eclipse===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| To start, open Eclipse and create a new Java project. Name the project and uncheck the &#039;&#039;&#039;create module-info.java file&#039;&#039;&#039; box.|| [[Image:java_eclipse_newproj.png|center|350px|link=https://cdn.phidgets.com/docs/images/9/97/Java_eclipse_newproj.png]]&lt;br /&gt;
|-&lt;br /&gt;
| On the Libraries tab, click Add External JARs and add [https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip phidget22.jar].  to your project as an external jar. Be sure it&#039;s being added to the &#039;&#039;&#039;Classpath&#039;&#039;&#039; and not the module path. || [[Image:java_eclipse_library.png|center|350px|link=https://cdn.phidgets.com/docs/images/1/1b/Java_eclipse_library.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Create a new Class in your project. || [[Image:java_eclipse_newclass.png|center|350px|link=https://cdn.phidgets.com/docs/images/0/02/Java_eclipse_newclass.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Name the class, and be sure to check the &#039;&#039;&#039;public static void main&#039;&#039;&#039; box. Eclipse may require that you add a package name. || [[Image:java_eclipse_newclass2.png|center|350px|link=https://cdn.phidgets.com/docs/images/c/ca/Java_eclipse_newclass2.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Your project now has access to Phidgets! ||&lt;br /&gt;
|-&lt;br /&gt;
| Once you&#039;re ready to compile your project into a .jar executable, right click on the project in the package explorer and choose &#039;&#039;&#039;Export&#039;&#039;&#039;. Select &#039;&#039;&#039;Runnable JAR file&#039;&#039;&#039;. || [[Image:java_eclipse_export.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/8c/Java_eclipse_export.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Choose the main class and a destination for the .jar file and click finish. || [[Image:java_eclipse_export2.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/8d/Java_eclipse_export2.png]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| You can now run the .jar file from the command prompt with:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar phidgetTest.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PhidgetSBC Web Interface ===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+&#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;center&amp;gt;{{#ev:youtube|gZmWvWXICIA|rel=0}}&amp;lt;/center&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Example Code==&lt;br /&gt;
Navigate to our [https://www.phidgets.com/?view=code_samples&amp;amp;lang=Java Code Sample Generator] to view and download code samples that are tailored to your specific device.&lt;br /&gt;
&lt;br /&gt;
[[Image:Language_java_codesample.png|center|600px|link=https://cdn.phidgets.com/docs/images/a/af/Language_java_codesample.png]]&lt;br /&gt;
&lt;br /&gt;
===Phidget Programming Basics===&lt;br /&gt;
{{PhidgetProgrammingBasicsLink}}&lt;br /&gt;
&lt;br /&gt;
== Deploying Applications ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re planning to deploy your application, it should be noted that you don&#039;t strictly need the Phidget Drivers installed. &lt;br /&gt;
&lt;br /&gt;
At a minimum, these three files are required:&lt;br /&gt;
* phidget22.jar &lt;br /&gt;
* phidget22.dll&lt;br /&gt;
* phidget22java.dll&lt;br /&gt;
&lt;br /&gt;
All three files can be found in the [https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-windevel.zip Development Files]. The .jar file is in lib/java, and the .dll files are in lib/c/x64. &lt;br /&gt;
&lt;br /&gt;
Java will look for these files in several locations, including the classpath and the working folder of the project.&lt;br /&gt;
&lt;br /&gt;
==API==&lt;br /&gt;
[{{SERVER}}/?view=api&amp;amp;lang=Python Phidget22 API]&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Language_-_Java&amp;diff=35583</id>
		<title>Language - Java</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Language_-_Java&amp;diff=35583"/>
		<updated>2026-04-02T16:11:15Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Learn how to use Phidget USB devices with Java.}}&lt;br /&gt;
[[Category:Language]]&lt;br /&gt;
&lt;br /&gt;
==Get Started==&lt;br /&gt;
With the Phidget22 library, it&#039;s easy to create Java applications that work with Phidget devices.&lt;br /&gt;
&lt;br /&gt;
==Java Libraries==&lt;br /&gt;
&lt;br /&gt;
We recommend installing the [https://www.phidgets.com/docs/Operating_System_Support Phidget drivers] for your operating system. Installing the drivers will put required .dll files in the proper place where Java will look for them. If you want to run your application on a computer without installing our drivers, see the [[#Deploying Applications|Deploying Applications]] section.&lt;br /&gt;
&lt;br /&gt;
====macOS Considerations====&lt;br /&gt;
Legacy Phidgets running a HID USB stack require a driver extension (macOS 10.15 and newer) or a kernel extension (macOS 10.14 and earlier). During development, we recommend downloading the appropriate [https://www.phidgets.com/docs/OS_-_macOS#Quick_Downloads package] which will install the extension. When deploying applications, review the README in the [https://cdn.phidgets.com/downloads/phidget22/libraries/macos/Phidget22_macosdevel.zip macOS Development Files] for information about bundling the extension with your application.&lt;br /&gt;
&lt;br /&gt;
=====Determining USB Stack=====&lt;br /&gt;
To determine which USB stack your device is running, navigate to the product page and then to the specification tab, and look for the &#039;&#039;USB Stack&#039;&#039; specification. If you are using a VINT device, navigate to the product page for the VINT Hub you are using.&lt;br /&gt;
&lt;br /&gt;
[[Image:Javascript_networkserver_webusb_spec.png|center|600px|link=https://cdn.phidgets.com/docs/images/8/80/Javascript_networkserver_webusb_spec.png]]&lt;br /&gt;
&lt;br /&gt;
====Linux Considerations====&lt;br /&gt;
Linux restricts access to USB devices to the root user. To run your Python application as a regular user, you&#039;ll need to [{{SERVER}}/docs/OS_-_Linux#Setting_Udev_Rules set up udev rules] on your system.&lt;br /&gt;
&lt;br /&gt;
==Development Environment Configuration==&lt;br /&gt;
&lt;br /&gt;
Before choosing a development environment, make sure you have the [http://www.oracle.com/technetwork/java/index.html Java Development Kit] installed. &lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| To start developing with Java in VSCode, open it up and install the &#039;&#039;&#039;Extension Pack for Java&#039;&#039;&#039;.||[[Image:Language_java_vscode_extension2.png|center|350px|link=https://cdn.phidgets.com/docs/images/b/b4/Language_java_vscode_extension2.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, press &#039;&#039;&#039;Ctrl+Shift+P&#039;&#039;&#039; to open the command palette, type &amp;quot;java&amp;quot; and select &#039;&#039;&#039;Java: Create Java Project&#039;&#039;&#039;.  || [[Image:Language_java_vscode_createproj.png|center|360px|link=https://cdn.phidgets.com/docs/images/7/78/Language_java_vscode_createproj.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Select &amp;quot;No Build Tools&amp;quot; and select a directory for the new project. You&#039;ll be asked for a project name, and  VSCode will create the directory structure. || [[Image:Language_java_vscode_emptyproj.png|center|350px|link=https://cdn.phidgets.com/docs/images/c/c1/Language_java_vscode_emptyproj.png]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;|You&#039;ll need to get a copy of &#039;&#039;&#039;phidget22.jar&#039;&#039;&#039; to put inside the &amp;quot;lib&amp;quot; folder. [https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip You can download phidget22.jar here]. &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| You can now begin writing code in the newly created &amp;quot;App.java&amp;quot; file, or you can download a [[#Example_Code|sample program]] for your device and place it in the &amp;quot;src&amp;quot; folder.&lt;br /&gt;
|-&lt;br /&gt;
| Compile and run by pressing &#039;&#039;&#039;F5&#039;&#039;&#039; or by clicking the play button in the top right. || [[Image:Language_java_vscode_run.png|center|350px|link=https://cdn.phidgets.com/docs/images/e/ea/Language_java_vscode_run.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Once you&#039;re ready to compile your project into a .jar executable, click on the &#039;&#039;&#039;Java Projects&#039;&#039;&#039; section in the explorer. || [[Image:Language_java_vscode_jar.png|center|350px|link=https://cdn.phidgets.com/docs/images/6/65/Language_java_vscode_jar.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Click on the export icon, and then select your main class and click OK. || [[Image:Language_java_vscode_jar2.png|center|350px|link=https://cdn.phidgets.com/docs/images/7/74/Language_java_vscode_jar2.png]]&lt;br /&gt;
|- &lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| Now you can run your new .jar file with the following command:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar Example.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Javac===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
|The easiest way to allow Java to access the Phidgets Java library is to place a copy of &#039;&#039;&#039;phidget22.jar&#039;&#039;&#039; in the same folder as your .java program.  ||[[Image:Language_java_javac_folder.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/89/Language_java_javac_folder.png]]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip You can download phidget22.jar here].|| &lt;br /&gt;
|-&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot;|To run your program, enter the following command in the command prompt or terminal:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
javac -classpath .;phidget22.jar example.java&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Then, enter the following command to run the program:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -classpath .;phidget22.jar example &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|| &lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| Once you&#039;re ready to compile your project into a .jar executable, create a &#039;&#039;&#039;manifest.mf&#039;&#039;&#039; file with the following contents:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
Manifest-Version: 1.0&lt;br /&gt;
Main-Class: example&lt;br /&gt;
Class-Path: phidget22.jar&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Make sure there&#039;s an empty newline at the bottom of the three lines and a space after each colon.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| Next, create the .jar file with this command:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
jar cfm example.jar manifest.mf *.class&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Once the .jar is created, you can execute it with&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar example.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Netbeans===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
|The easiest way to allow Java to access the Phidgets Java library is to place a copy of &#039;&#039;&#039;phidget22.jar&#039;&#039;&#039; in the same folder as your .java program.  ||[[Image:Language_java_javac_folder.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/89/Language_java_javac_folder.png]]&lt;br /&gt;
|-&lt;br /&gt;
|[https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip You can download phidget22.jar here].|| &lt;br /&gt;
|-&lt;br /&gt;
| To start, open NetBeans and create a new project. Select Java Application and follow the steps as directed by Netbeans.|| [[Image:Windows_netbeans1.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/c/c9/Windows_netbeans1.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, add a reference to phidget22.jar by right-clicking on the libraries folder. || [[Image:Windows_netbeans2.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/2/2b/Windows_netbeans2.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| Navigate to the folder where you downloaded phidget22.jar, and select it. || [[Image:Windows_netbeans3.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/7/76/Windows_netbeans3.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| The project now has access to Phidgets. By default, Netbeans should create an executable .jar file in the &#039;&#039;&#039;dist&#039;&#039;&#039; folder of the project directory when it&#039;s built. If it didn&#039;t, go to &#039;&#039;&#039;Build -&amp;gt; Packaging&#039;&#039;&#039; in the project properties and make sure &amp;quot;Build JAR after compiling&amp;quot; is checked.|| [[Image:Windows_netbeans4.png|center|350px|link=https://cdn.phidgets.com/docs/images/7/78/Windows_netbeans4.png]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| You can now run the .jar file from the command prompt with:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar phidgetTest.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Eclipse===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| To start, open Eclipse and create a new Java project. Name the project and uncheck the &#039;&#039;&#039;create module-info.java file&#039;&#039;&#039; box.|| [[Image:java_eclipse_newproj.png|center|350px|link=https://cdn.phidgets.com/docs/images/9/97/Java_eclipse_newproj.png]]&lt;br /&gt;
|-&lt;br /&gt;
| On the Libraries tab, click Add External JARs and add [https://www.phidgets.com/downloads/phidget22/libraries/any/Phidget22Java.zip phidget22.jar].  to your project as an external jar. Be sure it&#039;s being added to the &#039;&#039;&#039;Classpath&#039;&#039;&#039; and not the module path. || [[Image:java_eclipse_library.png|center|350px|link=https://cdn.phidgets.com/docs/images/1/1b/Java_eclipse_library.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Create a new Class in your project. || [[Image:java_eclipse_newclass.png|center|350px|link=https://cdn.phidgets.com/docs/images/0/02/Java_eclipse_newclass.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Name the class, and be sure to check the &#039;&#039;&#039;public static void main&#039;&#039;&#039; box. Eclipse may require that you add a package name. || [[Image:java_eclipse_newclass2.png|center|350px|link=https://cdn.phidgets.com/docs/images/c/ca/Java_eclipse_newclass2.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Your project now has access to Phidgets! ||&lt;br /&gt;
|-&lt;br /&gt;
| Once you&#039;re ready to compile your project into a .jar executable, right click on the project in the package explorer and choose &#039;&#039;&#039;Export&#039;&#039;&#039;. Select &#039;&#039;&#039;Runnable JAR file&#039;&#039;&#039;. || [[Image:java_eclipse_export.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/8c/Java_eclipse_export.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Choose the main class and a destination for the .jar file and click finish. || [[Image:java_eclipse_export2.png|center|350px|link=https://cdn.phidgets.com/docs/images/8/8d/Java_eclipse_export2.png]]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot;| You can now run the .jar file from the command prompt with:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
java -jar phidgetTest.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PhidgetSBC Web Interface ===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+&#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;center&amp;gt;{{#ev:youtube|gZmWvWXICIA|rel=0}}&amp;lt;/center&amp;gt; &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Example Code==&lt;br /&gt;
Navigate to our [https://www.phidgets.com/?view=code_samples&amp;amp;lang=Java Code Sample Generator] to view and download code samples that are tailored to your specific device.&lt;br /&gt;
&lt;br /&gt;
[[Image:Language_java_codesample.png|center|600px|link=https://cdn.phidgets.com/docs/images/a/af/Language_java_codesample.png]]&lt;br /&gt;
&lt;br /&gt;
===Phidget Programming Basics===&lt;br /&gt;
{{PhidgetProgrammingBasicsLink}}&lt;br /&gt;
&lt;br /&gt;
== Deploying Applications ==&lt;br /&gt;
&lt;br /&gt;
If you&#039;re planning to deploy your application, it should be noted that you don&#039;t strictly need the Phidget Drivers installed. &lt;br /&gt;
&lt;br /&gt;
At a minimum, these three files are required:&lt;br /&gt;
* phidget22.jar &lt;br /&gt;
* phidget22.dll&lt;br /&gt;
* phidget22java.dll&lt;br /&gt;
&lt;br /&gt;
All three files can be found in the [https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-windevel.zip Development Files]. The .jar file is in lib/java, and the .dll files are in lib/c/x64. &lt;br /&gt;
&lt;br /&gt;
Java will look for these files in several locations, including the classpath and the working folder of the project.&lt;br /&gt;
&lt;br /&gt;
==API==&lt;br /&gt;
[{{SERVER}}/?view=api&amp;amp;lang=Python Phidget22 API]&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=35475</id>
		<title>Terms and Conditions</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=35475"/>
		<updated>2026-03-13T01:39:25Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Holidays */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linked From Website]]&lt;br /&gt;
&lt;br /&gt;
==Product Warranty==&lt;br /&gt;
&lt;br /&gt;
All Phidgets products are warranted to be free of defects in material or workmanship under normal use and service for a period of one year from the date of shipment. This warranty does not include damage resulting from accident or misuse. The warranty is also void if the product is modified.  This warranty is in lieu of all other warranties expressed or implied including the implied warranties of merchantability of fitness for a particular purpose, whether arising by law, custom or conduct, and the rights and remedies provided under this warranty are exclusive and in lieu of any other rights or remedies. In no event shall Phidgets Incorporated be liable for consequential damages.&lt;br /&gt;
&lt;br /&gt;
If you believe that your product is defective while still under warranty, {{ContactUs|contact us}}. Once the support desk confirms that the product is defective, we will replace your defective product free of charge.&lt;br /&gt;
&lt;br /&gt;
==Shipping==&lt;br /&gt;
===Last Call at 12:00PM===&lt;br /&gt;
Orders received before 12:00 PM Mountain Time (GMT-07:00) Monday to Friday will be shipped the same day.&lt;br /&gt;
&lt;br /&gt;
Orders containing cut-to-length parts may not ship on the same day due to the additional processing time associated with these orders.&lt;br /&gt;
&lt;br /&gt;
===Shipping Costs===&lt;br /&gt;
Shipping costs are calculated at checkout and presented for your review before you confirm your order. If multiple shipping options are available for your destination, all options will be listed so you can choose the one that best suits your needs.&lt;br /&gt;
&lt;br /&gt;
If you have your own UPS or FedEx account, you can use it at checkout and be billed directly by the carrier. This gives you access to a wider range of shipping options.&lt;br /&gt;
&lt;br /&gt;
Note that a $5.00 handling charge is added to all orders that are under $50.00.&lt;br /&gt;
&lt;br /&gt;
===Shipping in Canada===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
* &#039;&#039;&#039;UPS Standard&#039;&#039;&#039;. 3 - 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
===Shipping to the United States===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
* &#039;&#039;&#039;UPS Standard&#039;&#039;&#039;. 3 - 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
Effective May 2, 2025, orders shipped to the United States will incur additional duties, tariffs, and brokerage fees, regardless of the order value. For more details, visit our guide about [[U.S._Tariffs | U.S. Tariffs]].&lt;br /&gt;
&lt;br /&gt;
===International Shipments===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Worldwide Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Worldwide Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
&lt;br /&gt;
====European Union====&lt;br /&gt;
Effective July 1, 2021, the European Union (EU) updated its Value Added Tax (VAT) regulations. All shipments to EU countries now require formal customs clearance and are subject to VAT based on the destination country.&lt;br /&gt;
&lt;br /&gt;
For goods with an intrinsic value up to €150, VAT must be collected at the time of purchase. This means for orders under $200 USD, we require prepayment of VAT and brokerage fees at checkout to ensure fast, hassle-free delivery.&lt;br /&gt;
&lt;br /&gt;
For orders over $200 USD, we provide the option to prepay all applicable import fees (including VAT and brokerage). If you choose this option, the quoted amount is guaranteed — there will be no additional charges upon delivery.&lt;br /&gt;
&lt;br /&gt;
We use UPS® Global Checkout to collect import fees and taxes based on your product&#039;s HS Code and Country of Origin. There is a fee associated with the UPS® Global Checkout service. At Phidgets Inc., we continually monitor and negotiate all fees to ensure our customers receive the best deal possible.&lt;br /&gt;
&lt;br /&gt;
Customs policies vary by country, so we recommend contacting your local customs office for more information.&lt;br /&gt;
&lt;br /&gt;
====Other Countries====&lt;br /&gt;
International shipments may be subject to import duties, taxes, and brokerage fees upon arrival in your country. These charges are determined by your local customs authorities and are the responsibility of the recipient.&lt;br /&gt;
&lt;br /&gt;
At checkout, we provide the option to prepay these fees. If you choose this option, the quoted amount is guaranteed — there will be no additional charges upon delivery.&lt;br /&gt;
&lt;br /&gt;
We use UPS® Global Checkout to collect import fees and taxes based on your product&#039;s HS Code and Country of Origin. There is a fee associated with the UPS® Global Checkout service. At Phidgets Inc., we continually monitor and negotiate all fees to ensure our customers receive the best deal possible.&lt;br /&gt;
&lt;br /&gt;
Customs policies vary by country, so we recommend contacting your local customs office for more information.&lt;br /&gt;
&lt;br /&gt;
===Tracking Your Order===&lt;br /&gt;
You can track your shipment using the tracking number sent to you by email when your order was shipped.&lt;br /&gt;
&lt;br /&gt;
===Refunds on Late Deliveries===&lt;br /&gt;
&lt;br /&gt;
Normally, UPS will offer a service guarantee refund when their deliveries arrive late. However, for companies that apply for shipping discounts, this refund does not apply. Phidgets Inc. has applied for such discounts in order to keep shipping costs down and regrettably cannot offer compensation for late shipments.&lt;br /&gt;
&lt;br /&gt;
===Damaged or Lost Shipment===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on our UPS account&#039;&#039;&#039; - Report all damaged or lost shipments to support@phidgets.com and include your order number. According to UPS, in order to be considered lost, a package must be undelivered 24 hours after the expected delivery date and time. Before contacting us, check your shipment status at ups.ca.&lt;br /&gt;
&lt;br /&gt;
Damaged or lost items will be replaced at no charge (including shipping costs).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on your UPS account&#039;&#039;&#039; - You must notify your local UPS office. If they confirm that they have lost your shipment, you must repurchase the lost or damaged products from Phidgets and file a claim with your local UPS in order to get reimbursed.&lt;br /&gt;
&lt;br /&gt;
===Refused/Missed Delivery===&lt;br /&gt;
If no one is available to accept the package upon delivery, UPS will attempt redelivery two more times, as per their standard procedure. If all delivery attempts fail, UPS will hold the package for 5 days before returning it to us. In such cases, we will issue a refund for your order minus the cost of shipping (both directions) and a flat $50 fee, up to the total value of the package. This policy applies both to deliveries that failed due to no one being present and to packages that were refused at the delivery address.&lt;br /&gt;
&lt;br /&gt;
===Incoterms===&lt;br /&gt;
&lt;br /&gt;
We use the following Incoterms depending on the shipping and payment arrangement:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FCA (Free Carrier):&#039;&#039;&#039; Used when shipping on the customer’s carrier account. Risk and responsibility transfer to the customer once the goods are handed over to the carrier at our facility.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DDP (Delivered Duty Paid):&#039;&#039;&#039; Used when the customer chooses to pre-pay import fees and taxes at checkout. We handle all import fees and deliver the goods to the destination address.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DAP (Delivered at Place):&#039;&#039;&#039; Used when the customer opts to pay import fees and taxes upon delivery. We deliver the goods, but the customer is responsible for paying any import fees directly to the carrier.&lt;br /&gt;
&lt;br /&gt;
==Product Returns==&lt;br /&gt;
===All Returns Must Be Authorized===&lt;br /&gt;
Before returning a package {{ContactUs|contact us}} and ask for a Return Merchandise Authorization or RMA number.  Once you have received it, put the RMA number on the outside of the packaging as well as the packing slip so that it is possible for us to track what the package is supposed to be.  Any merchandise returned without an RMA number clearly visible on the packaging will be charged an administrative fee of $25.00 or the value of the returned product, whichever is less &#039;&#039;if we are able to determine what it is&#039;&#039;.  In the event we are unable to determine what the package is, it will be refused and returned to the sender.&lt;br /&gt;
&lt;br /&gt;
===Unopened Product===&lt;br /&gt;
Phidgets accepts returns of unopened products within 30 days of the date of purchase. To initiate a return, please contact us by phone or email to obtain an RMA number. Products must be shipped back to Phidgets Inc. prepaid. A refund will be issued to your credit card once we receive and inspect the returned items.  The refund excludes the cost of shipping as well as any duties or brokerage charges incurred.  &lt;br /&gt;
&lt;br /&gt;
Returns received after 30 days are subject to a restocking fee of 25% of the package&#039;s value (minimum $5.00, maximum $500).&lt;br /&gt;
&lt;br /&gt;
We do &#039;&#039;&#039;not&#039;&#039;&#039; accept returns beyond 90 days from the date of purchase.&lt;br /&gt;
&lt;br /&gt;
===Cut to Length===&lt;br /&gt;
Unfortunately we cannot accept returns on any items which are cut to custom lengths.  This includes: cable, wire, roller chain, linear shaft, rotary shaft, and t-slot extrusions.  &lt;br /&gt;
&lt;br /&gt;
===We Shipped the Wrong/Incomplete Product===&lt;br /&gt;
{{ContactUs|Contact us}}. We will get the correct product sent to you immediately, and will pay all shipping charges.&lt;br /&gt;
&lt;br /&gt;
==Payment Terms==&lt;br /&gt;
We accept credit cards, PayPal, and Wire Transfers.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Payment Method|| Terms&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Credit Cards&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Visa, MasterCard, American Express (for order in CAD only)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|PayPal&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|PayPal is accepted.  There are no extra fees for using PayPal&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Wire Transfers&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Wire transfers are only accepted for orders over $200.00 USD (excluding shipping charges). There is a $25.00 USD charge for wire transfers under $500.00 USD. Any fees charged by the sending bank are your responsibility.&amp;lt;br /&amp;gt;Please make sure that the amount sent to us covers both our invoice and your bank fees.  Products are not shipped until the money is deposited in our bank account.  We recommend that you e-mail orders@phidgets.com with the amount of the transfer and the invoice you are paying.  &amp;lt;br /&amp;gt;Any order for which payment is not received within 15 days, will be canceled.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Security and Privacy==&lt;br /&gt;
Phidgets Inc. pledges a safe and worry-free shopping experience. IF you are using the current version of Internet Explorer, on the checkout page where you enter your credit card information, you will notice a a locked padlock icon on the top bar your browser window. If you are using Mozilla Firefox, you will notice a locked padlock icon in the bottom right corner of your browser window. If this icon does not appear, please contact us directly to complete your purchase. These icons tell you that the page you are on is secure. We use Secure Sockets Layer (SSL 128-bit) technology with a digital certificate by GeoTrust, Inc. for Internet security to protect your personal information. This encryption makes it impossible for anyone to read your information in transit. We do not store your credit information and it is deleted once it has been securely transmitted to Moneris for processing.&lt;br /&gt;
&lt;br /&gt;
We use your e-mail address to let you know your shipment&#039;s tracking number. Your phone number is required by the Courier Company. We do not sell, rent or give any of your personal information to any unrelated third parties with the exception of Moneris for authorizing credit card payments and the Courier company to let them know where to deliver the shipment and how to contact you if there is any problems.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns about our Security and Privacy policy, call us at 1.403.282.7335 or e-mail us at support@phidgets.com&lt;br /&gt;
&lt;br /&gt;
Phidgets Inc. uses various Google Analytics tools such as conversion tracking in order to improve the effectiveness of the website. These statistics are completely anonymous.&lt;br /&gt;
&lt;br /&gt;
==Holidays==&lt;br /&gt;
Phidgets, Inc. will be closed on the following days. During these times, the site will still be accessible and orders can be placed, but they will not ship until the next business day.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| Holiday&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| Description&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| 2026&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| 2027&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Alberta Family Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Third Monday in February&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 16&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 15&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Good Friday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Friday before Easter Sunday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 3&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Mar 26&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Victoria Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Monday before May 25&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 18&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 24&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Canada Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First day of July (or nearest business day)&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Civic Holiday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in August&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 3&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 2&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Labour Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in September&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 7&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 6&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Thanksgiving&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Second Monday in October&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 12&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 11&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Remembrance Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| November 11 (or nearest business day)&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Christmas and New Years&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Varies&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Language_-_C_Sharp&amp;diff=35443</id>
		<title>Language - C Sharp</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Language_-_C_Sharp&amp;diff=35443"/>
		<updated>2026-03-06T17:00:43Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* macOS Considerations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Learn how to use Phidget USB devices with C#.}}&lt;br /&gt;
[[Category:Language]]&lt;br /&gt;
&lt;br /&gt;
==Get Started==&lt;br /&gt;
With the Phidget22.NET library, it&#039;s easy to create C# applications that work with Phidget devices.&lt;br /&gt;
&lt;br /&gt;
==C# Libraries==&lt;br /&gt;
===Nuget Package===&lt;br /&gt;
The Phidget22.NET library is available as a [https://www.nuget.org/packages/Phidget22.NET/ nuget package]. This is the recommend way to install and manage the Phidget22.NET library.&lt;br /&gt;
&lt;br /&gt;
====macOS Considerations====&lt;br /&gt;
Legacy Phidgets running a HID USB stack require a driver extension (macOS 10.15 and newer) or a kernel extension (macOS 10.14 and earlier). During development, we recommend downloading the appropriate [https://www.phidgets.com/docs/OS_-_macOS#Quick_Downloads package] which will install the extension. When deploying applications, review the README in the [https://cdn.phidgets.com/downloads/phidget22/libraries/macos/Phidget22_macosdevel.zip macOS Development Files] for information about bundling the extension with your application.&lt;br /&gt;
&lt;br /&gt;
=====Determining USB Stack=====&lt;br /&gt;
To determine which USB stack your device is running, navigate to the product page and then to the specification tab, and look for the &#039;&#039;USB Stack&#039;&#039; specification. If you are using a VINT device, navigate to the product page for the VINT Hub you are using.&lt;br /&gt;
&lt;br /&gt;
[[Image:Javascript_networkserver_webusb_spec.png|center|600px|link=https://cdn.phidgets.com/docs/images/8/80/Javascript_networkserver_webusb_spec.png]]&lt;br /&gt;
&lt;br /&gt;
====Linux Considerations====&lt;br /&gt;
Linux restricts access to USB devices to the root user. To run your .NET application as a regular user, you&#039;ll need to [{{SERVER}}/docs/OS_-_Linux#Setting_udev_Rules set up udev rules] on your system.&lt;br /&gt;
&lt;br /&gt;
===Library Files===&lt;br /&gt;
If you would like to manually manage the Phidget22.NET library files, you can download them [https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-windevel.zip here].&lt;br /&gt;
&lt;br /&gt;
==Development Environment Configuration==&lt;br /&gt;
===Visual Studio===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| Create your Visual Studio project, and navigate to the &#039;&#039;&#039;Solution Explorer&#039;&#039;&#039;. From there, right-click on &#039;&#039;&#039;Dependencies&#039;&#039;&#039; and select &#039;&#039;&#039;Manage NuGet Packages...&#039;&#039;&#039;|| [[Image:Language_csharp_vs_managenuget.png|center|350px|link=https://cdn.phidgets.com/docs/images/c/cc/Language_csharp_vs_managenuget.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, click &#039;&#039;&#039;Browse&#039;&#039;&#039; and enter &#039;&#039;&#039;Phidget22.NET&#039;&#039;&#039; in the search bar. || [[Image:Language_csharp_vs_browsenuget.png|center|350px|link=https://cdn.phidgets.com/docs/images/6/61/Language_csharp_vs_browsenuget.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Click on the package and press the &#039;&#039;&#039;Install&#039;&#039;&#039; button. || [[Image:Language_csharp_vs_installnuget.png|center|350px|link=https://cdn.phidgets.com/docs/images/b/b8/Language_csharp_vs_installnuget.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Finally, add your C# code and run it using the button at the top of the screen. || [[Image:Language_csharp_vs_run.png|center|350px|link=https://cdn.phidgets.com/docs/images/5/5a/Language_csharp_vs_run.png]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| Install the [https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit C# Dev Kit extension for Visual Studio Code].|| [[Image:Language_csharp_vscode_installext.png|center|350px|link=https://cdn.phidgets.com/docs/images/b/b8/Language_csharp_vscode_installext.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, create a directory and open it in Visual Studio Code. You can do this by opening Visual Studio Code and selecting &#039;&#039;&#039;File &amp;gt; Open Folder...&#039;&#039;&#039; || [[Image:Language_csharp_vscode_newfolder.png|center|350px|link=https://cdn.phidgets.com/docs/images/4/43/Language_csharp_vscode_newfolder.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Open the Command Palette (Ctrl + Shift + P), type &#039;&#039;&#039;.NET: New Project&#039;&#039;&#039;, and press Enter. A list of supported project types will appear. || [[Image:Language_csharp_vscode_netnewproject.png|center|350px|link=https://cdn.phidgets.com/docs/images/f/f7/Language_csharp_vscode_netnewproject.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Select your preferred project type from the list. For this example, we will select &#039;&#039;&#039;Console App&#039;&#039;&#039;. || [[Image:Language_csharp_vscode_netconsoleapp.png|center|350px|link=https://cdn.phidgets.com/docs/images/b/bc/Language_csharp_vscode_netconsoleapp.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, we need to add the Phidget22.NET library using NuGet. Open the Command Palette again (Ctrl + Shift + P), and enter &#039;&#039;&#039;NuGet: Add NuGet package...&#039;&#039;&#039;. &lt;br /&gt;
 || [[Image:Language_csharp_vscode_addnugetpackage.png|center|350px|link=https://cdn.phidgets.com/docs/images/2/26/Language_csharp_vscode_addnugetpackage.png]]&lt;br /&gt;
|-&lt;br /&gt;
| When prompted, enter &#039;&#039;&#039;Phidget22.NET&#039;&#039;&#039; and install the latest package.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&#039;&#039;&#039;Note&#039;&#039;&#039;: Ensure you are downloading the latest version which can be seen [{{SERVER}}/?view=changelog here]. Visual Studio Code may incorrectly show an older version as the &#039;&#039;latest&#039;&#039; by default.|| [[Image:Language_csharp_vscode_phidget22net.png|center|350px|link=https://cdn.phidgets.com/docs/images/d/d5/Language_csharp_vscode_phidget22net.png]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Finally, add your C# code and run it using the button at the top of the screen. || [[Image:Language_csharp_vscode_runcodepng.png|center|350px|link=https://cdn.phidgets.com/docs/images/d/dc/Language_csharp_vscode_runcodepng.png]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===.NET Command-Line Interface (CLI)===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| Download and install the latest version of.NET from [https://dotnet.microsoft.com/en-us/download/dotnet Microsoft&#039;s .NET download page].|| [[Image:Language_csharp_cli_download.png|center|350px|link=https://cdn.phidgets.com/docs/images/9/90/Language_csharp_cli_download.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, open a command prompt or terminal in a new folder and enter the following command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
dotnet new console&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|| [[Image:Language_csharp_cli_newconsole.png|center|350px|link=https://cdn.phidgets.com/docs/images/3/3a/Language_csharp_cli_newconsole.png]]&lt;br /&gt;
|-&lt;br /&gt;
| This previous command will create a new console application at the folder location. || [[Image:Language_csharp_cli_newproject.png|center|350px|link=https://cdn.phidgets.com/docs/images/c/cb/Language_csharp_cli_newproject.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Navigate back to the command prompt or terminal, and add the Phidget22.NET package with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
dotnet add package Phidget22.NET&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 || [[Image:Language_csharp_cli_addpackage.png|center|350px|link=https://cdn.phidgets.com/docs/images/7/78/Language_csharp_cli_addpackage.png]]&lt;br /&gt;
|-&lt;br /&gt;
| You can now open the &#039;&#039;&#039;Program.cs&#039;&#039;&#039; file and add your code. Run the program by entering the following command into your command prompt or terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
dotnet run&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 || [[Image:Language_csharp_cli_runcode.png|center|350px|link=https://cdn.phidgets.com/docs/images/f/f3/Language_csharp_cli_runcode.png]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Example Code==&lt;br /&gt;
Navigate to our [https://www.phidgets.com/?view=code_samples&amp;amp;lang=CSharp Code Sample Generator] to view and download code samples that are tailored to your specific device.&lt;br /&gt;
&lt;br /&gt;
[[Image:Language_csharp_codesample.png|center|600px|link=https://cdn.phidgets.com/docs/images/0/03/Language_csharp_codesample.png]]&lt;br /&gt;
&lt;br /&gt;
===Phidget Programming Basics===&lt;br /&gt;
{{PhidgetProgrammingBasicsLink}}&lt;br /&gt;
&lt;br /&gt;
==API==&lt;br /&gt;
[{{SERVER}}/?view=api&amp;amp;lang=CSharp Phidget22 API]&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Language_-_Python&amp;diff=35442</id>
		<title>Language - Python</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Language_-_Python&amp;diff=35442"/>
		<updated>2026-03-06T17:00:06Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* macOS Considerations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Learn how to use Phidget USB devices with Python.}}&lt;br /&gt;
[[Category:Language]]&lt;br /&gt;
&lt;br /&gt;
==Get Started==&lt;br /&gt;
With the Phidget22 Python library, it&#039;s easy to create Python applications that work with Phidget devices.&lt;br /&gt;
&lt;br /&gt;
==Python Libraries==&lt;br /&gt;
===pip Package===&lt;br /&gt;
The Phidget22 Python library is available as a [https://pypi.org/project/phidget22/ pip package]. Most development environments provide built-in tools to manage packages. View the [[#Development Environment Configuration | Development Environment Configuration]] section below for examples. &lt;br /&gt;
&lt;br /&gt;
====macOS Considerations====&lt;br /&gt;
Legacy Phidgets running a HID USB stack require a driver extension (macOS 10.15 and newer) or a kernel extension (macOS 10.14 and earlier). During development, we recommend downloading the appropriate [https://www.phidgets.com/docs/OS_-_macOS#Quick_Downloads package] which will install the extension. When deploying applications, review the README in the [https://cdn.phidgets.com/downloads/phidget22/libraries/macos/Phidget22_macosdevel.zip macOS Development Files] for information about bundling the extension with your application.&lt;br /&gt;
&lt;br /&gt;
=====Determining USB Stack=====&lt;br /&gt;
To determine which USB stack your device is running, navigate to the product page and then to the specification tab, and look for the &#039;&#039;USB Stack&#039;&#039; specification. If you are using a VINT device, navigate to the product page for the VINT Hub you are using.&lt;br /&gt;
&lt;br /&gt;
[[Image:Javascript_networkserver_webusb_spec.png|center|600px|link=https://cdn.phidgets.com/docs/images/8/80/Javascript_networkserver_webusb_spec.png]]&lt;br /&gt;
&lt;br /&gt;
====Linux Considerations====&lt;br /&gt;
Linux restricts access to USB devices to the root user. To run your Python application as a regular user, you&#039;ll need to [{{SERVER}}/docs/OS_-_Linux#Setting_Udev_Rules set up udev rules] on your system.&lt;br /&gt;
&lt;br /&gt;
===Source Files===&lt;br /&gt;
The Phidget22 Python library source files are available [https://cdn.phidgets.com/downloads/phidget22/libraries/any/Phidget22Python.zip here].&lt;br /&gt;
&lt;br /&gt;
==Development Environment Configuration==&lt;br /&gt;
Most development environments provide built-in tools to manage Python interpreters, packages, and virtual environments. See the examples below for more information.&lt;br /&gt;
===Installing a Python Interpreter===&lt;br /&gt;
If you don&#039;t already have a Python interpreter installed, you can download and install one from [https://www.python.org/downloads/ python.org] or through package managers like [https://brew.sh/ Homebrew].&lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| Install the [https://marketplace.visualstudio.com/items?itemName=ms-python.python Python extension for Visual Studio Code].|| [[Image:Language_python_vscode_install.png|center|350px|link=https://cdn.phidgets.com/docs/images/f/f9/Language_python_vscode_install.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, create a directory and open it in Visual Studio Code. You can do this by opening Visual Studio Code and selecting &#039;&#039;&#039;File &amp;gt; Open Folder...&#039;&#039;&#039; || [[Image:Language_python_vscode_newfolder.png|center|350px|link=https://cdn.phidgets.com/docs/images/f/f8/Language_python_vscode_newfolder.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Open the Command Palette (Ctrl + Shift + P), type &#039;&#039;&#039;Python: Create Environment&#039;&#039;&#039;, and press Enter. Select &#039;&#039;&#039;Venv&#039;&#039;&#039; when prompted. || [[Image:Language_python_vscode_newvenv.png|center|350px|link=https://cdn.phidgets.com/docs/images/a/a6/Language_python_vscode_newvenv.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, select your preferred Python interpreter from the list. You may need to browse to find it. || [[Image:Language_python_vscode_selectinterpreter.png|center|350px|link=https://cdn.phidgets.com/docs/images/2/20/Language_python_vscode_selectinterpreter.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Open a new terminal. You can do this through the Command Palette again (Ctrl + Shift + P), by typing &#039;&#039;&#039;Terminal: Create New Terminal&#039;&#039;&#039;. Install the Phidget22 pip package: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
#Windows&lt;br /&gt;
py -m pip install phidget22 &lt;br /&gt;
&lt;br /&gt;
#macOS&lt;br /&gt;
python3 -m pip install phidget22 &lt;br /&gt;
&lt;br /&gt;
#Linux (Debian)&lt;br /&gt;
python3 -m pip install phidget22&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 || [[Image:Language_python_vscode_installpackage.png|center|350px|link=https://cdn.phidgets.com/docs/images/a/a8/Language_python_vscode_installpackage.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Finally, add your Python file and run it using the button in the top right corner.|| [[Image:Language_python_vscode_runcode.png|center|350px|link=https://cdn.phidgets.com/docs/images/9/96/Language_python_vscode_runcode.png]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===PyCharm===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| Create your PyCharm project and navigate to &#039;&#039;&#039;Settings&#039;&#039;&#039;: || [[Image:Windows_pycharm_settings.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/7/75/Windows_pycharm_settings.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, navigate to &#039;&#039;&#039;Project &amp;gt; Project Interpreter&#039;&#039;&#039; and click on the &#039;&#039;&#039;+&#039;&#039;&#039; symbol: || [[Image:Windows_pycharm_addpackage.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/6/6f/Windows_pycharm_addpackage.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| Search for &#039;&#039;&#039;phidget22&#039;&#039;&#039; and install the package: || [[Image:Windows_pycharm_installpackage.jpg|center|350px|link=https://cdn.phidgets.com/docs/images/a/ad/Windows_pycharm_installpackage.jpg]]&lt;br /&gt;
|-&lt;br /&gt;
| Finally, add your Python file and run it using the button at the top of the screen: || [[Image:Windows_pycharm_run.png|center|350px|link=https://cdn.phidgets.com/docs/images/0/0a/Windows_pycharm_run.png]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Example Code==&lt;br /&gt;
Navigate to our [https://www.phidgets.com/?view=code_samples&amp;amp;lang=Python Code Sample Generator] to view and download code samples that are tailored to your specific device.&lt;br /&gt;
&lt;br /&gt;
[[Image:Language_python_codesample.png|center|600px|link=https://cdn.phidgets.com/docs/images/2/2d/Language_python_codesample.png]]&lt;br /&gt;
&lt;br /&gt;
===Phidget Programming Basics===&lt;br /&gt;
{{PhidgetProgrammingBasicsLink}}&lt;br /&gt;
&lt;br /&gt;
==API==&lt;br /&gt;
[{{SERVER}}/?view=api&amp;amp;lang=Python Phidget22 API]&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Asynchronous_Methods&amp;diff=35433</id>
		<title>Asynchronous Methods</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Asynchronous_Methods&amp;diff=35433"/>
		<updated>2026-03-04T23:19:29Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Multiple Channels Example */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=This guide provides information about asynchronous methods with Phidget22.}}&lt;br /&gt;
[[Category:IntroGuide]]&lt;br /&gt;
__TOC__&lt;br /&gt;
==What Are Asynchronous Methods?==&lt;br /&gt;
Asynchronous methods allow you to send commands to a device &#039;&#039;without&#039;&#039; waiting for return codes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When calling a typical non-asynchronous method, your program must wait for the return code, blocking the rest of your program’s operation.&lt;br /&gt;
[[Image:Async_methods_typical_flow.png|center|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When using an asynchronous method, your program can immediately continue executing and handle the return code in an asynchronous handler.&lt;br /&gt;
[[Image:Async_methods_async_flow.png|center|link=]]&lt;br /&gt;
&lt;br /&gt;
==When Should I Use Asynchronous Methods?==&lt;br /&gt;
There are two situations where asynchronous methods may be beneficial:&lt;br /&gt;
# When sending commands to multiple channels on the same device&lt;br /&gt;
# When sending commands to multiple channels on different devices&lt;br /&gt;
&lt;br /&gt;
===Multiple Channels Example===&lt;br /&gt;
[[Image:1032_0B.jpg|thumb|link=https://cdn.phidgets.com/docs/images/6/6d/1032_0B.jpg|&amp;lt;center&amp;gt;PhidgetLED-64 Advanced(1032_0)&amp;lt;/center&amp;gt;]]&lt;br /&gt;
The [https://www.phidgets.com/?prodid=1024 PhidgetLED-64 Advanced] features 64 channels, one for each LED. To turn all the LEDs on or off simultaneously, 64 sequential commands are necessary (one for each channel). In this situation, using asynchronous methods can drastically improve the performance of your application.&lt;br /&gt;
&lt;br /&gt;
===Multiple Devices Example===&lt;br /&gt;
The [https://www.phidgets.com/?prodid=712 Isolated 12-bit Voltage Output Phidget] is a single-channel device. If two or more of these devices were used in an application, it may be beneficial to use asynchronous methods.&lt;br /&gt;
&lt;br /&gt;
==How Do I Use Asynchronous Methods?==&lt;br /&gt;
Asynchronous methods are comprised of two parts:&lt;br /&gt;
* Asynchronous API call&lt;br /&gt;
* Asynchronous handler&lt;br /&gt;
&lt;br /&gt;
When calling an asynchronous method, you must assign an asynchronous handler. The Phidget22 libraries will then initiate the command and immediately return. The asynchronous handler will be called once the relevant communications have been completed to provide the return code from the device.&lt;br /&gt;
&lt;br /&gt;
===Code Example===&lt;br /&gt;
The code below provides a simple demonstration of how asynchronous methods can be used (while avoiding [[#Overloading|overloading]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Python=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=python&amp;gt;&lt;br /&gt;
from Phidget22.Phidget import *&lt;br /&gt;
from Phidget22.Devices.DigitalOutput import *&lt;br /&gt;
from Phidget22.ErrorCode import *&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    digitalOutput0 = DigitalOutput()&lt;br /&gt;
&lt;br /&gt;
    digitalOutput0.openWaitForAttachment(5000)&lt;br /&gt;
&lt;br /&gt;
    #Assign new variables to track the number of calls made vs completed&lt;br /&gt;
    digitalOutput0.AsyncCalls = 0&lt;br /&gt;
    digitalOutput0.AsyncComplete = 0&lt;br /&gt;
    def AsyncResult(ch, res, details):&lt;br /&gt;
        ch.AsyncComplete += 1&lt;br /&gt;
        print(&amp;quot;Async Complete:&amp;quot; + str(ch.AsyncComplete))&lt;br /&gt;
        if res != ErrorCode.EPHIDGET_OK:&lt;br /&gt;
            print(&amp;quot;Async failure: %i : %s&amp;quot; % (res, details))&lt;br /&gt;
    &lt;br /&gt;
    while(1): #some loop condition&lt;br /&gt;
        #Here we check if the previous asynchronous call has completed before issuing a new one&lt;br /&gt;
        #If you had multiple asynchronous calls to make, you could (for example) give each its&lt;br /&gt;
        #own counter, or call a new batch of them once an entire set completes&lt;br /&gt;
        if(digitalOutput0.AsyncCalls == digitalOutput0.AsyncComplete):&lt;br /&gt;
            digitalOutput0.AsyncCalls += 1&lt;br /&gt;
            digitalOutput0.setDutyCycle_async(1, AsyncResult)&lt;br /&gt;
            # NOTE: Make sure to wait for async call to complete before closing the channel&lt;br /&gt;
        &lt;br /&gt;
        #Do other work here...&lt;br /&gt;
&lt;br /&gt;
    digitalOutput0.close()&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
Java=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=java&amp;gt;&lt;br /&gt;
import com.phidget22.*;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
&lt;br /&gt;
public class JavaApplication11 {&lt;br /&gt;
&lt;br /&gt;
    static int asyncCalls = 0;&lt;br /&gt;
    static int asyncComplete = 0;&lt;br /&gt;
    &lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        &lt;br /&gt;
        Phidget.resetLibrary();&lt;br /&gt;
        DigitalOutput digitalOutput0 = new DigitalOutput();&lt;br /&gt;
&lt;br /&gt;
        digitalOutput0.open(5000);&lt;br /&gt;
        &lt;br /&gt;
        while(asyncComplete &amp;lt; 1000) { //Some loop condition&lt;br /&gt;
            //Here we check if the previous asynchronous call has completed before issuing a new one&lt;br /&gt;
            //If you had multiple asynchronous calls to make, you could (for example) give each its&lt;br /&gt;
            //own counter, or call a new batch of them once an entire set completes&lt;br /&gt;
            if(asyncCalls == asyncComplete) {&lt;br /&gt;
                asyncCalls++;&lt;br /&gt;
                digitalOutput0.setDutyCycle(1, new AsyncListener() {&lt;br /&gt;
                    public void onAsyncCallback(AsyncResult ar) {&lt;br /&gt;
                        if (ar.getReturnCode() == ErrorCode.SUCCESS) {&lt;br /&gt;
                            asyncComplete++;&lt;br /&gt;
                            System.out.println(&amp;quot;Async Complete: &amp;quot; + asyncComplete);&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                            System.out.println(&amp;quot;Async Failure: &amp;quot; + ar);&lt;br /&gt;
                    }&lt;br /&gt;
                });&lt;br /&gt;
                // NOTE: Make sure to wait for async call to complete before closing the channel&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            //Do other work here...&lt;br /&gt;
            Thread.sleep(1);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        digitalOutput0.close();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C#=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=cSharp&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using Phidget22;&lt;br /&gt;
&lt;br /&gt;
namespace ConsoleApplication&lt;br /&gt;
{&lt;br /&gt;
    class Program&lt;br /&gt;
    {&lt;br /&gt;
        static void Main(string[] args)&lt;br /&gt;
        {&lt;br /&gt;
            DigitalOutput digitalOutput0 = new DigitalOutput();&lt;br /&gt;
&lt;br /&gt;
            digitalOutput0.Open(5000);&lt;br /&gt;
&lt;br /&gt;
            digitalOutput0.DutyCycle = 1;&lt;br /&gt;
&lt;br /&gt;
            int asyncCalls = 0;&lt;br /&gt;
            int asyncComplete = 0;&lt;br /&gt;
            double dutyCycle = 0.1;&lt;br /&gt;
            while (true) /* Some loop condition */&lt;br /&gt;
            {&lt;br /&gt;
                //Here we check if the previous asynchronous call has completed before issuing a new one&lt;br /&gt;
                //If you had multiple asynchronous calls to make, you could (for example) give each its&lt;br /&gt;
                //own counter, or call a new batch of them once an entire set completes&lt;br /&gt;
                if (asyncCalls == asyncComplete)&lt;br /&gt;
                {&lt;br /&gt;
                    asyncCalls++;&lt;br /&gt;
                    digitalOutput0.BeginSetDutyCycle(dutyCycle, delegate (IAsyncResult result)&lt;br /&gt;
                    {&lt;br /&gt;
                        try&lt;br /&gt;
                        {&lt;br /&gt;
                            asyncComplete++;&lt;br /&gt;
                            digitalOutput0.EndSetDutyCycle(result);&lt;br /&gt;
                            Console.WriteLine(&amp;quot;Async Complete: &amp;quot; + asyncComplete.ToString());&lt;br /&gt;
                        }&lt;br /&gt;
                        catch (PhidgetException ex)&lt;br /&gt;
                        {&lt;br /&gt;
                            Console.WriteLine(&amp;quot;Async Failure: &amp;quot; + ex.Message);&lt;br /&gt;
                        }&lt;br /&gt;
                    }, null);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                /*&lt;br /&gt;
                 *  Do other work were&lt;br /&gt;
                 */&lt;br /&gt;
            }&lt;br /&gt;
            digitalOutput0.Close();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-|&lt;br /&gt;
C=&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;phidget22.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void CCONV setDutyCycleDone(PhidgetHandle phid, void *ctx, PhidgetReturnCode res) {&lt;br /&gt;
    int *asyncComplete = (int*)ctx;&lt;br /&gt;
    (*asyncComplete)++;&lt;br /&gt;
    printf(&amp;quot;Async Complete : %d\n&amp;quot;, *asyncComplete);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {    &lt;br /&gt;
    PhidgetDigitalOutputHandle digitalOutput0;&lt;br /&gt;
    int asyncComplete;&lt;br /&gt;
    int asyncCalls;&lt;br /&gt;
&lt;br /&gt;
    PhidgetDigitalOutput_create(&amp;amp;digitalOutput0);&lt;br /&gt;
&lt;br /&gt;
    Phidget_openWaitForAttachment((PhidgetHandle)digitalOutput0, 5000);&lt;br /&gt;
&lt;br /&gt;
    PhidgetDigitalOutput_setDutyCycle(digitalOutput0, 1);&lt;br /&gt;
&lt;br /&gt;
    asyncComplete = 0;&lt;br /&gt;
    asyncCalls = 0;&lt;br /&gt;
    while (1) { //Some loop condition&lt;br /&gt;
&lt;br /&gt;
        //Here we check if the previous asynchronous call has completed before issuing a new one&lt;br /&gt;
        //If you had multiple asynchronous calls to make, you could (for example) give each its&lt;br /&gt;
        //own counter, or call a new batch of them once an entire set completes&lt;br /&gt;
        if (asyncCalls == asyncComplete) {&lt;br /&gt;
            asyncCalls++;&lt;br /&gt;
            PhidgetDigitalOutput_setDutyCycle_async(digitalOutput0, 1, setDutyCycleDone, &amp;amp;asyncComplete);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        //Do other work here...&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    Phidget_close((PhidgetHandle)digitalOutput0);&lt;br /&gt;
&lt;br /&gt;
    PhidgetDigitalOutput_delete(&amp;amp;digitalOutput0);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Other Considerations==&lt;br /&gt;
===Overloading===&lt;br /&gt;
If asynchronous methods are called faster than they can be dispatched, they will be added to a queue. In extreme cases, if the queue grows large enough, newer calls will be dropped and your async handler will complete with &#039;&#039;Phidget Error 0x10 NoSpace&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Single Device, Single Channel===&lt;br /&gt;
Asynchronous commands are not recommended when using a single device and a single channel. Multiple asynchronous calls to the same channel will be queued and issued one at a time as return codes are received for each, providing no benefit to your application.&lt;br /&gt;
&lt;br /&gt;
===Network Delays===&lt;br /&gt;
If you are accessing your device(s) over a network connection with high latency, you may benefit from using asynchronous methods.&lt;br /&gt;
&lt;br /&gt;
===Callback Handlers===&lt;br /&gt;
When programming using the [https://www.phidgets.com/docs/Language_-_C C language], a callback handler is required. If a callback handler is not provided, the method will not run asynchronously. In all other programming languages, a callback handler is recommended but optional.&lt;br /&gt;
&lt;br /&gt;
===VINT Communication Speed===&lt;br /&gt;
Asynchronous methods are particularly useful on VINT devices with lower [https://www.phidgets.com/docs/VINT_Communication_Speed_Guide communication speeds]. If you are working with USB devices or higher-speed VINT devices, the impact of asynchronous commands will be less significant.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:1032_0B.jpg&amp;diff=35432</id>
		<title>File:1032 0B.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:1032_0B.jpg&amp;diff=35432"/>
		<updated>2026-03-04T23:18:29Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=OS_-_macOS&amp;diff=35428</id>
		<title>OS - macOS</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=OS_-_macOS&amp;diff=35428"/>
		<updated>2026-03-04T17:50:26Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Phidget Control Panel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;metadesc&amp;gt;Communicate over USB with sensors, controllers, and relays with Phidgets! Program in macOS using a wide variety of programming languages.&amp;lt;/metadesc&amp;gt;&lt;br /&gt;
[[Category:OS]]&lt;br /&gt;
&lt;br /&gt;
==Quick Downloads==&lt;br /&gt;
Our libraries support macOS 10.11 and newer.&lt;br /&gt;
* [https://cdn.phidgets.com/downloads/phidget22/tools/macos/Phidget22ControlPanel.dmg Phidget22 Control Panel (macOS 10.15 and newer)]&lt;br /&gt;
* [https://cdn.phidgets.com/downloads/phidget22/libraries/macos/Phidget22.dmg Phidget22 Installer (macOS 10.14 and earlier)]&lt;br /&gt;
&lt;br /&gt;
===Other Resources===&lt;br /&gt;
* [https://cdn.phidgets.com/downloads/phidget22/libraries/macos/Phidget22_macosdevel.zip macOS Development Files]&lt;br /&gt;
* [{{SERVER}}/downloads/phidget22/libraries/macos/Phidget22/ Previous Releases]&lt;br /&gt;
&lt;br /&gt;
==Getting Started with macOS==&lt;br /&gt;
===Install===&lt;br /&gt;
To get started, download the appropriate [[#Quick Downloads|package]] for your machine from the list above. This will install the Phidget Control Panel and the Phidget Network Server. These are powerful tools that will help you develop your Phidget applications.&lt;br /&gt;
&lt;br /&gt;
===Phidget Control Panel===&lt;br /&gt;
After downloading, drag the application into your Applications folder:&lt;br /&gt;
[[Image:Macos_standalone_install.png|link=https://cdn.phidgets.com/docs/images/c/c8/Macos_applications_controlpanel.png|center|600px]]&lt;br /&gt;
&lt;br /&gt;
You can then find the application in the Applications folder by searching for &#039;&#039;Phidget Control Panel&#039;&#039;.&lt;br /&gt;
[[Image:Macos_applications_controlpanel.png|link=https://cdn.phidgets.com/docs/images/c/c8/Macos_applications_controlpanel.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
When you open the application for the first time, you will see the following notice:&lt;br /&gt;
[[Image:Macos_install_extension.png|link=https://cdn.phidgets.com/docs/images/9/9e/Macos_install_extension.png|300px|center]]&lt;br /&gt;
&lt;br /&gt;
Follow the link in the pop-up, or navigate to &#039;&#039;System Settings &amp;gt; General &amp;gt; Login Items &amp;amp; Extensions &amp;gt; Extensions&#039;&#039;, and give permissions:&lt;br /&gt;
[[Image:Macos_install_extension_permission.png|link=https://cdn.phidgets.com/docs/images/a/ac/Macos_install_extension_permission.png|600px|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;Note: The driver extension is only required for legacy USB Phidgets running a HID USB stack. Refer to your product’s specifications page for information about its USB stack.&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After running the application, you will see all the Phidgets that are plugged into your machine, as well as any Phidgets that are on your network.&lt;br /&gt;
[[Image:Os_macos_controlpanel.png|600px|link=https://cdn.phidgets.com/docs/images/a/a1/Os_macos_controlpanel.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click on the arrow beside a device to expand it so that you can see all available channels. Double-click on one of these channels to open up a window that lets you interact with it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Os_macos_controlpanel_example.png‎|link=https://cdn.phidgets.com/docs/images/3/37/Os_macos_controlpanel_example.png|center|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Phidget Control Panel can be used for testing devices, updating firmware, enabling a Phidget Network Server, and more. Visit the [[Phidget Control Panel|Phidget Control Panel page]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
When you are ready to develop your own applications, visit our [{{SERVER}}/docs/Programming_Resources programming resources page] and select your programming language to get started.&lt;br /&gt;
&lt;br /&gt;
==Software License==&lt;br /&gt;
By downloading the installer and/or development files, you agree to adhere to the terms of the [{{SERVER}}/documentation/Licenses/Phidgets_EULA.pdf Phidgets End User License Agreement]. The Phidget libraries and development files are covered by the The 3-Clause BSD License.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=OS_-_macOS&amp;diff=35425</id>
		<title>OS - macOS</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=OS_-_macOS&amp;diff=35425"/>
		<updated>2026-03-04T17:10:12Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;metadesc&amp;gt;Communicate over USB with sensors, controllers, and relays with Phidgets! Program in macOS using a wide variety of programming languages.&amp;lt;/metadesc&amp;gt;&lt;br /&gt;
[[Category:OS]]&lt;br /&gt;
&lt;br /&gt;
==Quick Downloads==&lt;br /&gt;
Our libraries support macOS 10.11 and newer.&lt;br /&gt;
* [https://cdn.phidgets.com/downloads/phidget22/tools/macos/Phidget22ControlPanel.dmg Phidget22 Control Panel (macOS 10.15 and newer)]&lt;br /&gt;
* [https://cdn.phidgets.com/downloads/phidget22/libraries/macos/Phidget22.dmg Phidget22 Installer (macOS 10.14 and earlier)]&lt;br /&gt;
&lt;br /&gt;
===Other Resources===&lt;br /&gt;
* [https://cdn.phidgets.com/downloads/phidget22/libraries/macos/Phidget22_macosdevel.zip macOS Development Files]&lt;br /&gt;
* [{{SERVER}}/downloads/phidget22/libraries/macos/Phidget22/ Previous Releases]&lt;br /&gt;
&lt;br /&gt;
==Getting Started with macOS==&lt;br /&gt;
===Install===&lt;br /&gt;
To get started, download the appropriate [[#Quick Downloads|package]] for your machine from the list above. This will install the Phidget Control Panel and the Phidget Network Server. These are powerful tools that will help you develop your Phidget applications.&lt;br /&gt;
&lt;br /&gt;
===Phidget Control Panel===&lt;br /&gt;
After downloading, drag the application into your Applications folder:&lt;br /&gt;
[[Image:Macos_standalone_install.png|link=https://cdn.phidgets.com/docs/images/c/c8/Macos_applications_controlpanel.png|center|600px]]&lt;br /&gt;
&lt;br /&gt;
You can then find the application in the Applications folder by searching for &#039;&#039;Phidget Control Panel&#039;&#039;.&lt;br /&gt;
[[Image:Macos_applications_controlpanel.png|link=https://cdn.phidgets.com/docs/images/c/c8/Macos_applications_controlpanel.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
When you open the application for the first time, you will see the following notice:&lt;br /&gt;
[[Image:Macos_install_extension.png|link=https://cdn.phidgets.com/docs/images/9/9e/Macos_install_extension.png|300px|center]]&lt;br /&gt;
&lt;br /&gt;
Follow the link in the pop-up, or navigate to &#039;&#039;System Settings &amp;gt; General &amp;gt; Login Items &amp;amp; Extensions &amp;gt; Extensions&#039;&#039;, and give permissions:&lt;br /&gt;
[[Image:Macos_install_extension_permission.png|link=https://cdn.phidgets.com/docs/images/a/ac/Macos_install_extension_permission.png|600px|center]]&lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;Note: The driver extension is only required for legacy USB Phidgets that use a HID USB stack. Refer to your product’s specifications page for information about its USB stack.&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After running the application, you will see all the Phidgets that are plugged into your machine, as well as any Phidgets that are on your network.&lt;br /&gt;
[[Image:Os_macos_controlpanel.png|600px|link=https://cdn.phidgets.com/docs/images/a/a1/Os_macos_controlpanel.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click on the arrow beside a device to expand it so that you can see all available channels. Double-click on one of these channels to open up a window that lets you interact with it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Os_macos_controlpanel_example.png‎|link=https://cdn.phidgets.com/docs/images/3/37/Os_macos_controlpanel_example.png|center|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Phidget Control Panel can be used for testing devices, updating firmware, enabling a Phidget Network Server, and more. Visit the [[Phidget Control Panel|Phidget Control Panel page]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
When you are ready to develop your own applications, visit our [{{SERVER}}/docs/Programming_Resources programming resources page] and select your programming language to get started.&lt;br /&gt;
&lt;br /&gt;
==Software License==&lt;br /&gt;
By downloading the installer and/or development files, you agree to adhere to the terms of the [{{SERVER}}/documentation/Licenses/Phidgets_EULA.pdf Phidgets End User License Agreement]. The Phidget libraries and development files are covered by the The 3-Clause BSD License.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:Os_macos_controlpanel.png&amp;diff=35424</id>
		<title>File:Os macos controlpanel.png</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:Os_macos_controlpanel.png&amp;diff=35424"/>
		<updated>2026-03-04T17:08:08Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:Os_macos_controlpanel_example.png&amp;diff=35423</id>
		<title>File:Os macos controlpanel example.png</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:Os_macos_controlpanel_example.png&amp;diff=35423"/>
		<updated>2026-03-04T17:07:35Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:Macos_install_extension_permission.png&amp;diff=35422</id>
		<title>File:Macos install extension permission.png</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:Macos_install_extension_permission.png&amp;diff=35422"/>
		<updated>2026-03-04T17:06:29Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:Macos_install_extension.png&amp;diff=35421</id>
		<title>File:Macos install extension.png</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:Macos_install_extension.png&amp;diff=35421"/>
		<updated>2026-03-04T17:05:49Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:Macos_applications_controlpanel.png&amp;diff=35420</id>
		<title>File:Macos applications controlpanel.png</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:Macos_applications_controlpanel.png&amp;diff=35420"/>
		<updated>2026-03-04T17:05:27Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:Macos_standalone_install.png&amp;diff=35419</id>
		<title>File:Macos standalone install.png</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:Macos_standalone_install.png&amp;diff=35419"/>
		<updated>2026-03-04T17:05:10Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=OS_-_Windows&amp;diff=35418</id>
		<title>OS - Windows</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=OS_-_Windows&amp;diff=35418"/>
		<updated>2026-03-03T16:28:33Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Install */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;metadesc&amp;gt;Communicate over USB with sensors, controllers and relays with Phidgets! Program in Windows using a wide variety of programming languages.&amp;lt;/metadesc&amp;gt;&lt;br /&gt;
[[Category:OS]]&lt;br /&gt;
&lt;br /&gt;
==Quick Downloads==&lt;br /&gt;
Our libraries support Windows 8 and newer.&lt;br /&gt;
&lt;br /&gt;
*[https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-x64.exe Installer Download (64-bit)]&lt;br /&gt;
*[https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-ARM64.exe Installer Download (ARM64)]&lt;br /&gt;
*[https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-x86.exe Installer Download (32-bit)]&lt;br /&gt;
&lt;br /&gt;
===Other Resources===&lt;br /&gt;
* [[OS - Windows Advanced Information|Windows Advanced Information]]&lt;br /&gt;
*[https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-windevel.zip Windows Development Files]&lt;br /&gt;
* [https://www.phidgets.com/downloads/phidget22/libraries/windows/ Previous Releases]&lt;br /&gt;
&lt;br /&gt;
==Getting Started with Windows==&lt;br /&gt;
===Install===&lt;br /&gt;
To get started, download the appropriate [[#Quick Downloads|installer]] for your machine from the list above. This will install the Phidget Control Panel and the Phidget Network Server. These are powerful tools that will help you develop your Phidget applications.&lt;br /&gt;
&lt;br /&gt;
===Phidget Control Panel===&lt;br /&gt;
After installing, you can find the application through your system tray, or by opening the start menu and searching for &#039;&#039;Phidget Control Panel&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Os_windows_systemtray.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After opening, you will see all the Phidgets that are plugged into your machine, as well as any Phidgets that are on your network. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Windows ControlPanel General.PNG|link=|alt=Windows Control Panel General|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click on the &#039;&#039;&#039;+&#039;&#039;&#039; beside a device to expand it so that you can see all available channels. Double-click on one of these channels to open up a window that lets you interact with it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Controlpanel_openapplication.png|500px|link=https://cdn.phidgets.com/docs/images/b/bd/Controlpanel_openapplication.png|alt=Windows Control Panel General|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Phidget Control Panel can be used for testing devices, updating firmware, enabling a Phidget Network Server, and more. Visit the [[Phidget Control Panel|Phidget Control Panel page]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
When you are ready to develop your own applications, visit our [{{SERVER}}/docs/Programming_Resources programming resources page] and select your programming language to get started.&lt;br /&gt;
&lt;br /&gt;
==Software License==&lt;br /&gt;
By downloading the installer and/or development files, you agree to adhere to the terms of the [{{SERVER}}/documentation/Licenses/Phidgets_EULA.pdf Phidgets End User License Agreement]. The Phidget libraries and development files are covered by the The 3-Clause BSD License.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=OS_-_Windows&amp;diff=35417</id>
		<title>OS - Windows</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=OS_-_Windows&amp;diff=35417"/>
		<updated>2026-03-02T22:27:56Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Install */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;metadesc&amp;gt;Communicate over USB with sensors, controllers and relays with Phidgets! Program in Windows using a wide variety of programming languages.&amp;lt;/metadesc&amp;gt;&lt;br /&gt;
[[Category:OS]]&lt;br /&gt;
&lt;br /&gt;
==Quick Downloads==&lt;br /&gt;
Our libraries support Windows 8 and newer.&lt;br /&gt;
&lt;br /&gt;
*[https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-x64.exe Installer Download (64-bit)]&lt;br /&gt;
*[https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-ARM64.exe Installer Download (ARM64)]&lt;br /&gt;
*[https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-x86.exe Installer Download (32-bit)]&lt;br /&gt;
&lt;br /&gt;
===Other Resources===&lt;br /&gt;
* [[OS - Windows Advanced Information|Windows Advanced Information]]&lt;br /&gt;
*[https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-windevel.zip Windows Development Files]&lt;br /&gt;
* [https://www.phidgets.com/downloads/phidget22/libraries/windows/ Previous Releases]&lt;br /&gt;
&lt;br /&gt;
==Getting Started with Windows==&lt;br /&gt;
===Install===&lt;br /&gt;
To get started, download the appropriate [[#Quick Downloads|installer]] for your machine from the list above. This will install the Phidget Control Panel and the Phidget Network Sever. These are powerful tools that will help you develop your Phidget applications.&lt;br /&gt;
&lt;br /&gt;
===Phidget Control Panel===&lt;br /&gt;
After installing, you can find the application through your system tray, or by opening the start menu and searching for &#039;&#039;Phidget Control Panel&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Os_windows_systemtray.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After opening, you will see all the Phidgets that are plugged into your machine, as well as any Phidgets that are on your network. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Windows ControlPanel General.PNG|link=|alt=Windows Control Panel General|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click on the &#039;&#039;&#039;+&#039;&#039;&#039; beside a device to expand it so that you can see all available channels. Double-click on one of these channels to open up a window that lets you interact with it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Controlpanel_openapplication.png|500px|link=https://cdn.phidgets.com/docs/images/b/bd/Controlpanel_openapplication.png|alt=Windows Control Panel General|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Phidget Control Panel can be used for testing devices, updating firmware, enabling a Phidget Network Server, and more. Visit the [[Phidget Control Panel|Phidget Control Panel page]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
When you are ready to develop your own applications, visit our [{{SERVER}}/docs/Programming_Resources programming resources page] and select your programming language to get started.&lt;br /&gt;
&lt;br /&gt;
==Software License==&lt;br /&gt;
By downloading the installer and/or development files, you agree to adhere to the terms of the [{{SERVER}}/documentation/Licenses/Phidgets_EULA.pdf Phidgets End User License Agreement]. The Phidget libraries and development files are covered by the The 3-Clause BSD License.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=OS_-_Windows&amp;diff=35416</id>
		<title>OS - Windows</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=OS_-_Windows&amp;diff=35416"/>
		<updated>2026-03-02T16:50:34Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;metadesc&amp;gt;Communicate over USB with sensors, controllers and relays with Phidgets! Program in Windows using a wide variety of programming languages.&amp;lt;/metadesc&amp;gt;&lt;br /&gt;
[[Category:OS]]&lt;br /&gt;
&lt;br /&gt;
==Quick Downloads==&lt;br /&gt;
Our libraries support Windows 8 and newer.&lt;br /&gt;
&lt;br /&gt;
*[https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-x64.exe Installer Download (64-bit)]&lt;br /&gt;
*[https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-ARM64.exe Installer Download (ARM64)]&lt;br /&gt;
*[https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-x86.exe Installer Download (32-bit)]&lt;br /&gt;
&lt;br /&gt;
===Other Resources===&lt;br /&gt;
* [[OS - Windows Advanced Information|Windows Advanced Information]]&lt;br /&gt;
*[https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-windevel.zip Windows Development Files]&lt;br /&gt;
* [https://www.phidgets.com/downloads/phidget22/libraries/windows/ Previous Releases]&lt;br /&gt;
&lt;br /&gt;
==Getting Started with Windows==&lt;br /&gt;
===Install===&lt;br /&gt;
To get started, download the appropriate [[#Quick Downloads|installer]] for your machine from the list above. This will install the Phidget Control Panel, a powerful tool that will help you develop your Phidget applications.&lt;br /&gt;
&lt;br /&gt;
===Phidget Control Panel===&lt;br /&gt;
After installing, you can find the application through your system tray, or by opening the start menu and searching for &#039;&#039;Phidget Control Panel&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Os_windows_systemtray.png|link=|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After opening, you will see all the Phidgets that are plugged into your machine, as well as any Phidgets that are on your network. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Windows ControlPanel General.PNG|link=|alt=Windows Control Panel General|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Click on the &#039;&#039;&#039;+&#039;&#039;&#039; beside a device to expand it so that you can see all available channels. Double-click on one of these channels to open up a window that lets you interact with it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Controlpanel_openapplication.png|500px|link=https://cdn.phidgets.com/docs/images/b/bd/Controlpanel_openapplication.png|alt=Windows Control Panel General|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Phidget Control Panel can be used for testing devices, updating firmware, enabling a Phidget Network Server, and more. Visit the [[Phidget Control Panel|Phidget Control Panel page]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Programming===&lt;br /&gt;
When you are ready to develop your own applications, visit our [{{SERVER}}/docs/Programming_Resources programming resources page] and select your programming language to get started.&lt;br /&gt;
&lt;br /&gt;
==Software License==&lt;br /&gt;
By downloading the installer and/or development files, you agree to adhere to the terms of the [{{SERVER}}/documentation/Licenses/Phidgets_EULA.pdf Phidgets End User License Agreement]. The Phidget libraries and development files are covered by the The 3-Clause BSD License.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:Os_windows_systemtray.png&amp;diff=35415</id>
		<title>File:Os windows systemtray.png</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:Os_windows_systemtray.png&amp;diff=35415"/>
		<updated>2026-03-02T16:49:11Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Solid_State_Relay_Guide&amp;diff=35345</id>
		<title>Solid State Relay Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Solid_State_Relay_Guide&amp;diff=35345"/>
		<updated>2025-11-25T22:05:17Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* I need Gradual Dimming */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Interested in learning about solid state relays? This guide explains the basics: what solid state relays are, how solid state relays work, how to choose a solid state relay and more.}}&lt;br /&gt;
{{#seo:|keywords=relay}}&lt;br /&gt;
[[Category:IntroGuide]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-2&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
[[Image:SSR.jpg|thumb|link=|A &amp;quot;hockey puck&amp;quot; SSR, so named because of its thick shape and black color. They are specifically designed to switch either AC loads or DC loads, but never both.]]&lt;br /&gt;
&lt;br /&gt;
Solid state relays (SSRs) turn on or off the power being supplied to other devices, in a similar fashion as a physical switch. However, instead of being switched by human interaction like a physical switch, SSRs are switched electronically.&lt;br /&gt;
With SSRs, you can control high-current devices such as lights or appliances with low-current signals, like a standard DC signal from a digital output. Many SSRs will switch on with a voltage of 3V or higher. This makes them perfect for use with the [[InterfaceKit Digital Outputs|Outputs on Phidget InterfaceKits]], or any other device with a digital output, such as the [{{SERVER}}/?prodid=714 OUT1100 - Digital Output Phidget]. Using the ports of a {{VINTHub}} in digital output mode may not work, since they may not provide enough power to activate the SSR. If your digital output is not powerful enough, you may want to connect an external MOSFET to switch a more suitable supply to control the SSR. &lt;br /&gt;
&lt;br /&gt;
SSRs perform the same job as [[Mechanical Relay Guide|Mechanical Relays]], but have the following advantages:&lt;br /&gt;
* SSRs produce less electromagnetic interference than mechanical relays during operation. This is mostly due to the absence of a phenomenon called [[Mechanical Relay Guide#Arcing, Interference, and Sticking|contact arcing]] only present in mechanical relays, where the physical contacts of the relay tend to spark internally while switching. The reduced interference can also be attributed to the fact that SSRs do not use electromagnets to switch.&lt;br /&gt;
* The switch contacts of a mechanical relay will eventually wear down from arcing.  An SSR will have a longer life because its internals are purely digital.  Properly used, they will last for millions of cycles.&lt;br /&gt;
* SSRs turn on and off faster than mechanical relays (≈1ms compared to ≈10ms).&lt;br /&gt;
* SSRs are less susceptible to physical vibrations than mechanical relays.&lt;br /&gt;
* Since the switch inside an SSR isn&#039;t a mechanical switch, it does not suffer from [[Mechanical_Relay_Guide#Contact_Bounce|contact bounce]] and operates silently.&lt;br /&gt;
&lt;br /&gt;
However, compared to Mechanical Relays, SSRs: &lt;br /&gt;
* Are more expensive.&lt;br /&gt;
* Will dissipate more energy in the form of heat (1-2% of the energy intended to power the load).&lt;br /&gt;
&lt;br /&gt;
==How SSRs Work==&lt;br /&gt;
[[Image:SSR_Internals.png|thumb|link=|A conceptual diagram of the insides of an SSR.&amp;lt;br /&amp;gt;]]&lt;br /&gt;
The control inputs are connected internally to an LED, which shines across an air gap to light sensors.  &lt;br /&gt;
The light sensor is connected to the transistors which open or close, supplying the relay&#039;s load with power. &lt;br /&gt;
When a transistor is &#039;&#039;&#039;closed&#039;&#039;&#039;, current can flow freely through the relay, causing the load and power supply to be connected. &lt;br /&gt;
When a transistor is &#039;&#039;&#039;open&#039;&#039;&#039;, almost all current is blocked, causing the load to become disconnected from the power supply. &lt;br /&gt;
The pairing of an LED with light sensors is called an optocoupler, and is a common technique to link two parts of a circuit without a direct electrical connection. &lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
===Basic Use===&lt;br /&gt;
Controlling an SSR is no more complicated than turning an LED on and off. Switch it on, switch it off, it&#039;s that easy.  &lt;br /&gt;
&lt;br /&gt;
The ability of an SSR to switch a load is very similar to a [[Mechanical Relay Guide|mechanical relay]] or simple switch. &lt;br /&gt;
By turning the digital output controlling the relay on and off, you control whether or not the load is connected to its power supply.&lt;br /&gt;
&lt;br /&gt;
The challenge is to pick an appropriate type of SSR for your application. There is no single SSR perfect for all applications. To choose an SSR for your particular application, please follow the [[#Choosing an SSR|Choosing an SSR]] section.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Safety===&lt;br /&gt;
[[File:relay_safety.jpg|thumb|500px|link=|Two circuit diagrams showing the improper and proper ways of switching mains electricity with a relay.&amp;lt;br /&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Since relays switch high currents and voltages, standard electricity safety precautions apply.  Make sure you never touch the terminals while the relay is powered. If your SSR came with a plastic cover, use it.  Even when the SSR is switched off, a very small amount of current will flow.&lt;br /&gt;
&lt;br /&gt;
When placing a relay in a circuit, it is always a good idea to put it between the power supply and the load, especially when using higher voltages. If the relay is instead placed between the load and ground, the circuit will still work the same, but when the relay is open, the load will still be directly connected to the power supply. This could cause safety concerns because someone might touch the terminals on the load, thinking it&#039;s safe because the device appears to be off. If the electricity finds a path to ground through their body, they will be electrocuted. If the relay is placed between the power supply and the ground, electrocution would only be a risk if the live terminal on the relay is touched. Again, the relay terminals should always be properly covered to avoid the risk of electrocution. &lt;br /&gt;
&lt;br /&gt;
When an SSR fails, it most often fails permanently closed. This is because when the transistor inside fails due to excessive current or heat, it will usually short out, allowing current to pass through unimpeded. &lt;br /&gt;
This means that as long as the power supply remains on, the load will be powered, possibly creating a fire or safety hazard.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Choosing an SSR==&lt;br /&gt;
===Identify your voltage===&lt;br /&gt;
First, determine whether you need to switch AC or DC voltage. The electrical grid, and thus your wall outlet, runs AC, whereas batteries and most small power supplies are DC.  &lt;br /&gt;
&lt;br /&gt;
Next, determine the maximum number of volts you will be switching.  If you are switching DC, particularly with batteries, assume your voltage is at least 25% more than what your battery is rated for.  Even larger fluctuations occur on AC, but AC SSRs are designed to handle these surges.  Typical AC voltage from a wall socket in North America is 110VAC, whereas in Europe it is usually 220VAC. If you are switching AC voltage from a wall socket, check which standard your country uses, and use that number as your voltage.&lt;br /&gt;
&lt;br /&gt;
===Identify your current===&lt;br /&gt;
The current drawn by your load when turned on affects how large of an SSR you need, and how hot it will be when it is in use.  If you know how much current, on average, your load draws, this is what we call &#039;&#039;Average Load Current&#039;&#039;.  If you don&#039;t know the average current, but you know the wattage (power rating) of your load, you can calculate Average Load Current by:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\text{Average Load Current} =\frac{\text{Watts}}{\text{Operating Voltage}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, you need to know the current drawn by your load when it is first turned on.  Many loads demand a huge inrush of current when the load is first turned on. This places a significant amount of stress on the electronics inside the SSR.  If you&#039;ve ever noticed the lights dimming in the house for a second when the furnace starts up, this is caused by the fan motor starting up. In the same way that it takes a lot of force to move a heavy object from rest, it initially takes a lot of current to power up a fan or incandescent bulb. It&#039;s very difficult to measure the &#039;&#039;&#039;Surge Current&#039;&#039;&#039; itself, so we use a multiplier based on your device type.  Surge Current is also referred to as &#039;&#039;&#039;inrush current&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; margin:auto; width: 50%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot;|&#039;&#039;&#039;Application &#039;&#039;&#039;&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot;|&#039;&#039;&#039;Multiplier &#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Incandescent Light Bulbs &lt;br /&gt;
| 6x&lt;br /&gt;
|-&lt;br /&gt;
| Motors &lt;br /&gt;
| 6x&lt;br /&gt;
|-&lt;br /&gt;
| LEDs &lt;br /&gt;
| 1x&lt;br /&gt;
|-&lt;br /&gt;
| Complex Electronics i.e., Motor Controllers, Phidgets &lt;br /&gt;
| 6x&lt;br /&gt;
|-&lt;br /&gt;
| Fluorescent Light Fixtures   (AC Only) &lt;br /&gt;
| 10x&lt;br /&gt;
|-&lt;br /&gt;
| Transformers &lt;br /&gt;
| 20x             &lt;br /&gt;
|-&lt;br /&gt;
| Heaters &lt;br /&gt;
| 1x&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Multiply your Average Load Current by the multiplier for your device type to calculate the Surge Current.&lt;br /&gt;
&lt;br /&gt;
===I need to switch AC===&lt;br /&gt;
Most AC applications will be switching 110 to 240 Volt power coming from the grid.  If that&#039;s you, go to the [[#Mains Voltage (110 to 240V AC)|Mains Voltage (110 to 240V AC)]] section.&lt;br /&gt;
&lt;br /&gt;
We also cover low voltage AC applications - 28 VAC (Volts AC) or less. For more information, visit the [[#AC/DC SSRs|AC/DC SSRs]] section.&lt;br /&gt;
&lt;br /&gt;
===I need to switch DC===&lt;br /&gt;
If you only need to switch a small amount of current - 9 Amps or less, consider our compact, cost effective [[#AC/DC SSRs|AC/DC SSRs]].&lt;br /&gt;
&lt;br /&gt;
If you need to switch more than 9 Amps, you need a serious [[#DC SSRs|DC SSR]].&lt;br /&gt;
&lt;br /&gt;
If you need to switch up to 4 small loads of 8 Amps or less, you can use the open collector (externally powered) digital outputs on a [{{SERVER}}/products.php?product_id=REL1100 REL1100 - 4x Isolated SSR Phidget], which can be wired to behave similarly to relays. If you need even more relays, have a look at the [{{SERVER}}/products.php?product_id=REL1101 REL1101 - 16x Isolated SSR Phidget].&lt;br /&gt;
&lt;br /&gt;
==I Need Gradual Dimming==&lt;br /&gt;
Instead of simply turning the load on/off, if you want to dim it gradually, you can use a proportional control SSR.  They are able to reduce the average power to the load gradually, in proportion to the strength of the input signal. For more information, you can visit the [[#Proportional Control SSR|Proportional Control SSR Section]].&lt;br /&gt;
&lt;br /&gt;
==Mains Voltage (110 to 240V AC)==&lt;br /&gt;
We sell AC SSRs for 120 VAC or 240 VAC operation. If you are unsure what voltages you could eventually need to switch, the 240 VAC relays can be used to switch 120 VAC with no problems.  Please note we are very conservative in how we rate SSRs - our 120 VAC relays are rated by the manufacturer for 240 VAC, and the 240 VAC for 480 VAC.  We strongly recommend against using them to the manufacturer rated voltage.  To understand why, read the [[#AC SSR Protection|AC SSR Protection]] section.&lt;br /&gt;
&lt;br /&gt;
===Load Type - Inductive vs. Resistive===&lt;br /&gt;
[[Image:zero cross.png|right|link=|thumb|400px|This graph shows the difference between zero-cross and random turn-on. The blue line represents the oscillating voltage of an AC load, and the shaded areas represent the sections when the relay is turned on and letting current pass through. As you can see, the random turn-on SSR immediately opens when activated, while the zero-cross turn-on SSR waits until the voltage crosses zero before opening.&amp;lt;br /&amp;gt;[[Media:zero cross.png|Full-size Image]]]]&lt;br /&gt;
&lt;br /&gt;
If your load is inductive, you need to choose a &#039;&#039;&#039;Random Turn On&#039;&#039;&#039; relay.  If your load is resistive, choose a &#039;&#039;&#039;Zero Crossing&#039;&#039;&#039; relay.&lt;br /&gt;
&lt;br /&gt;
Your Load will probably be inductive if it is built around a large coil of wire - motors and transformers are typical examples.  A load considered resistive may also have loops of wire - for instance, hair dryers, toasters, incandescent bulbs use twisted wire elements to generate the heat.  An inductive load will have thousands of loops of wire - it&#039;s a matter of scale.  There is no such thing as a perfectly resistive load - but a load has to be very inductive to cause the zero crossing SSRs to malfunction.&lt;br /&gt;
&lt;br /&gt;
SSRs are designed to either turn on immediately (&#039;&#039;&#039;Random Turn On&#039;&#039;&#039;), or wait until the next &#039;alternation&#039; of the voltage (&#039;&#039;&#039;Zero Crossing&#039;&#039;&#039;).  Zero Crossing SSRs create less electromagnetic &#039;noise&#039; when they turn on.  They are best used with resistive loads - Zero Crossing SSRs are not able to turn off some inductive loads.  It&#039;s very difficult to determine which inductive loads will create problems - well beyond the scope of this document.  If your load is inductive, we recommend buying the &#039;&#039;&#039;Random Turn On&#039;&#039;&#039; SSRs.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center; margin:auto; width: 50%&amp;quot;&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; | &#039;&#039;&#039;Application&#039;&#039;&#039;&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; | &#039;&#039;&#039;Load Type&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| Incandescent Light Bulbs   &lt;br /&gt;
| Resistive&lt;br /&gt;
|-&lt;br /&gt;
| Fluorescent Light Fixtures &lt;br /&gt;
| Inductive or Resistive &amp;lt;font size=4&amp;gt;&#039;&#039;&#039;*&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Motors                     &lt;br /&gt;
| Inductive&lt;br /&gt;
|-&lt;br /&gt;
| Transformers               &lt;br /&gt;
| Inductive&lt;br /&gt;
|-&lt;br /&gt;
| Heaters                    &lt;br /&gt;
| Resistive&lt;br /&gt;
|-&lt;br /&gt;
| Computer / Electronics     &lt;br /&gt;
| Resistive&lt;br /&gt;
|-&lt;br /&gt;
| AC/DC power supplies (brick heavy type)     &lt;br /&gt;
| Inductive&lt;br /&gt;
|-&lt;br /&gt;
|AC/DC Power supplies (lightweight switchers) &lt;br /&gt;
| Resistive&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font size=4&amp;gt;&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;&amp;lt;/font&amp;gt; &#039;&#039;For fluorescent light fixtures, older units (magnetic ballast) may be inductive, and newer units are often resistive (electronic ballast).&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Choosing your AC SSR===&lt;br /&gt;
Now that you have identified your Operating Voltage, Average and Surge Current, and your load type (inductive or resistive), you can create a short list of relays whose &lt;br /&gt;
* &#039;&#039;&#039;Maximum Load Voltage&#039;&#039;&#039; are greater than or equal to your operating voltage, &lt;br /&gt;
* &#039;&#039;&#039;Maximum Surge Current&#039;&#039;&#039; are greater than or equal to your surge current, and &lt;br /&gt;
* &#039;&#039;&#039;Load type&#039;&#039;&#039; matches what you chose for random turn on/zero crossing.&lt;br /&gt;
&lt;br /&gt;
Now compare the &#039;&#039;&#039;Maximum Load Current without Heatsink&#039;&#039;&#039; value for the SSRs on your list to your Average Load Current.  If your Average Load Current is greater, you may need a heatsink.  For selecting a heatsink, please consult [[#Picking a heatsink|Picking a Heatsink]]. Alternatively, look at other SSRs on your list - there may be an SSR that can handle your average load current with no heatsink&lt;br /&gt;
&lt;br /&gt;
At this point, you know the SSR you need.&lt;br /&gt;
&lt;br /&gt;
Instead of simply turning the load on/off, if you want to dim it gradually, you can use a proportional control SSR.  They are able to reduce the average power to the load gradually, in proportion to the strength of the input signal. For more information, you can visit the [[#Proportional Control SSR|Proportional Control SSR Section]].&lt;br /&gt;
&lt;br /&gt;
If you are interested in learning more about SSRs in general, check out our [[#Did you know?|&amp;quot;Did you know?&amp;quot;]] section.&lt;br /&gt;
&lt;br /&gt;
===AC SSR Protection===&lt;br /&gt;
[[Image:MOV.jpg|thumb|link=|An MOV, which comes packaged with our AC &amp;quot;Hockey Puck&amp;quot; relays. ]]&lt;br /&gt;
&lt;br /&gt;
Your AC SSR from Phidgets comes with a circular disc with two legs (pictured). This is a Metal Oxide Varistor (MOV) and should be installed across the load (larger) terminals of your SSR.  MOVs are the classic surge protector - an inexpensive component that absorbs high voltage spikes.  High voltage spikes are caused by inductive loads when they are turned off, and also happen very often on the electrical grid, as nearby devices are operated.  Even if your load is resistive, use an MOV to protect the SSR.&lt;br /&gt;
&lt;br /&gt;
Matching an MOV to an SSR is not easy - this is why we include an MOV with your SSR.  If an MOV is chosen for too low of a voltage spike, it will wear out quickly.  If it is chosen for too high of a voltage spike, it will not protect the SSR adequately.  To balance SSR protection against MOV lifetime, we have found it necessary to use SSRs built for 240 VAC in 120 VAC applications, and SSRs built for 480 VAC in 240 VAC applications.  If you must operate our AC SSRs on higher voltages than we recommend, do not use the included MOV.&lt;br /&gt;
&lt;br /&gt;
As MOVs wear out from use, they will become more sensitive to common voltage spikes, causing them to wear out quicker.  When they entirely fail, they will become a short circuit, potentially creating a fire hazard.  The MOV included with your SSR has a fuse built in which will disable the MOV when it becomes a hazard. To be on the safe side, avoid mounting your SSR near any flammable material.&lt;br /&gt;
&lt;br /&gt;
For reference, the part number of the MOV shipped with our AC SSRs is &#039;&#039;&#039;TMOV20RP200E&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Proportional Control SSR===&lt;br /&gt;
Proportional Control Relays (often simply called &amp;quot;Control Relays&amp;quot;) are SSRs you can use to control the amount of power to the load.  Rather than reduce the voltage, or somehow limit the current - which would be very expensive solutions, the Proportional SSR reduces power by turning the load on/off quickly, feeding full power in short pulses.  &lt;br /&gt;
&lt;br /&gt;
Proportional SSRs are controlled by a variable voltage - as the control voltage increases, more power is available to the load.  Our PhidgetAnalog product can be used to control Proportional SSRs, since an analog output can output various amounts of voltage, as opposed to a digital output, which only has two states- high and low.  We don&#039;t sell Proportional SSRs - but they can be purchased from [http://www.digikey.com Digikey], where they are called AC Linear Controlled SSRs.&lt;br /&gt;
&lt;br /&gt;
A quick and dirty solution for dimming with Phidgets is to use an {{LinksNeeded|RC Servo Motor|[[Servo Motor and Controller Guide|RC Servo Motor]]}} with a PhidgetAdvancedServo controller to rotate the knob on a light dimmer.  From software, the RC Servo Motor is rotated to the desired position, cranking the knob as it turns. While this may seem like a roundabout way of achieving proportional control, dimmers tend to be much less expensive because they are less specialized and are manufactured in greater quantity.&lt;br /&gt;
&lt;br /&gt;
===Example circuits with AC SSRs===&lt;br /&gt;
[[Image:AC SSR Load.png|right|thumb|link=|400px|Schematic of an AC SSR switching a generic load. A metal oxide varistor is added across the load to protect the SSR.&amp;lt;br /&amp;gt;[[Media:AC SSR Load.png|Full-size Image]]]]&lt;br /&gt;
&lt;br /&gt;
When wiring up an AC circuit, particularly for long term installation, you may find it helpful to buy a book on residential wiring from your local hardware store.  There are many wiring conventions (and often legal codes) which will help you plan your project, and the legal codes are often a great source of wisdom.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==DC SSRs (0 to 50V DC)==&lt;br /&gt;
We sell DC SSRs for that switch a maximum load of 50 volts. If you are unsure what voltages you could be switching in the future, higher voltage DC SSRs can be used to switch lower voltages.  Common engineering practice would be to purchase an SSR rated for 50-100% higher voltage than the voltage you plan to be switching.  For instance, if you are switching 24V, a 50V SSR is reasonable.&lt;br /&gt;
&lt;br /&gt;
===Choosing your DC SSR===&lt;br /&gt;
Now that you have identified your Operating Voltage, Average and Surge Current, you can create a short list of relays whose &lt;br /&gt;
* Maximum Load Voltage are greater than or equal to your operating voltage, &lt;br /&gt;
* Maximum Surge Current are greater than or equal to your surge current, and &lt;br /&gt;
* Maximum Average Current is greater than or equal to your Average current.&lt;br /&gt;
&lt;br /&gt;
Now compare the &#039;&#039;&#039;Max. Load Current without Heatsink&#039;&#039;&#039; value for the SSRs on your list to your Average Load Current.  If your Average Load Current is greater, you may need a heatsink.  For selecting a heatsink, please consult [[#Picking a Heatsink|Picking a Heatsink]]. Alternatively, look at other SSRs on your list - there may be an SSR that can handle your average load current without a heatsink. SSRs rated for a larger load than the load you&#039;re using will be more efficient (meaning less energy lost in the form of heat) than an SSR that&#039;s being operated at its maximum load. &lt;br /&gt;
&lt;br /&gt;
At this point, you know the SSR you need.&lt;br /&gt;
&lt;br /&gt;
If you are interested in learning more about SSRs in general, check out our [[#Did you know?|&amp;quot;Did you know?&amp;quot;]] section.&lt;br /&gt;
&lt;br /&gt;
===DC SSR Protection===&lt;br /&gt;
[[Image:Diode.jpg|thumb|400px|link=| A diode, included with our DC &amp;quot;hockey puck&amp;quot; SSRs. The cathode is marked with a line. The blue symbol shows circuit diagram equivalent of the diode.&amp;lt;br&amp;gt;[[Media:Diode.jpg|Full-Sized Image]]]]&lt;br /&gt;
[[Image:relaymotor.jpg|400px|thumb|link=| A DC SSR switching an electric motor. The 1018 Phidget InterfaceKit controls the SSR using its digital outputs. A diode is shown installed across the motor, and a fuse is hooked up between the power supply and the rest of the circuit.&amp;lt;br&amp;gt;[[Media:relaymotor.jpg|Full-Sized Image]]]]&lt;br /&gt;
&lt;br /&gt;
Your DC SSR from Phidgets comes with a diode. This diode should be installed across your load, with the Cathode installed towards the positive terminal of the power supply (as shown in the diagram).  &lt;br /&gt;
&lt;br /&gt;
If the diode is installed backwards, as soon as the SSR is turned on, the load will be shorted out, likely destroying the diode, or the SSR, or your power supply.&lt;br /&gt;
A fuse protecting your power supply is always a good idea. You can place the fuse in between the positive terminal of the power supply and the positive terminal of the load side of the SSR. &lt;br /&gt;
&lt;br /&gt;
The diode protects the SSR from powerful residual currents after the SSR is turned off.  While your load is being driven, inductance builds up magnetic fields around the wiring. &lt;br /&gt;
Every load is inductive to some degree, and when the SSR turns off, the magnetic fields will ram current against the now open SSR, easily damaging it.  The diode allows these currents to recirculate in the load until they have lost their energy. &lt;br /&gt;
&lt;br /&gt;
For reference, the part number of the diode that comes with our DC SSRs is &#039;&#039;&#039;10A02-T&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example circuits with DC SSRs===&lt;br /&gt;
[[Image:DC SSR Load.png|right|link=|thumb|400px|Schematic of an DC SSR switching a generic load, which is protected by a diode connected in parallel. The circuit is protected by a fuse in series after the power supply.&amp;lt;br /&amp;gt;[[Media:DC SSR Load.png|Full-size Image]]]]&lt;br /&gt;
&lt;br /&gt;
The electrical isolation built into a DC SSR allows them to be placed within a circuit just like a switch.  Since it is isolated, you don&#039;t have to worry about grounding or voltage offsets. &lt;br /&gt;
&lt;br /&gt;
With a DC SSR, always make sure the positive load terminal (labeled +) is facing towards the positive terminal of the power supply. If the load terminals are reversed, your load will immediately turn on. There is a diode inside of the SSR that allows current to flow freely through it when the SSR is connected incorrectly. This feature is included because this sort of wiring mistake would destroy the transistor in the DC SSR otherwise.&lt;br /&gt;
&lt;br /&gt;
The DC SSR can be installed on either side of the load, and it will work properly, but there is an advantage to installing the SSR between the power supply and the load.  If the load is connected to the power supply, it will always have a potentially dangerous voltage on it, even when it is not operating.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==AC/DC SSRs (0 to 40V DC / 0 to 28V AC)==&lt;br /&gt;
[[Image:AC_DC_SSR.png|thumb|link=|A small, versatile AC/DC SSR mounted on a Phidgets board for easy pin access.]]&lt;br /&gt;
&lt;br /&gt;
Our AC/DC SSRs are built on a small PCB, making them physically smaller than the large &amp;quot;hockey puck&amp;quot; SSRs, and less expensive.  They are limited to lower currents, and cannot be mounted on a heatsink.  &lt;br /&gt;
&lt;br /&gt;
We sell AC/DC SSRs that can switch up to 40 Volts DC or 28 Volts AC.  This is indicated on the SSR Product pages under the Maximum Load Voltage specification.  There is no lower limit on the voltages that the AC/DC SSRs can switch.  If your voltage is close - be conservative.  For instance, a 36 Volt system built from 3 Lead Acid batteries can reach 45 volts when charging.&lt;br /&gt;
&lt;br /&gt;
===Picking your AC/DC SSR===&lt;br /&gt;
Now that you have identified your Operating Voltage, Average and Surge Current, you can create a short list of relays whose &lt;br /&gt;
* Maximum Load Voltage are greater than or equal to your operating voltage, &lt;br /&gt;
* Maximum Surge Current are greater than or equal to your surge current, and &lt;br /&gt;
* Maximum Average Current is greater than or equal to your Average current.&lt;br /&gt;
&lt;br /&gt;
If you are interested in minimum cost, you will likely choose the cheapest option that meets these criteria.  If you are interested in high efficiency operation and less heat generation, consider buying an SSR with higher current rating.&lt;br /&gt;
&lt;br /&gt;
Your AC/DC SSR from Phidgets has built in protection from static electricity, and dangerous residual currents  after the SSR is turned off.  If the load you are switching is powered by a DC source, installing a diode across the load will offer even more protection.  Refer to the [[#DC SSR Protection|DC SSR Protection]] section for more information.&lt;br /&gt;
&lt;br /&gt;
To learn more about SSRs in general, visit the [[#Did you know?|&amp;quot;Did you know?&amp;quot;]] section.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example circuits with AC/DC SSRs===&lt;br /&gt;
[[Image:Versatile SSR DC Load.png|thumb|link=|A versatile AC/DC SSR switching a DC load. The load terminals are bidirectional, so it doesn&#039;t matter which way you hook them up. The optional diode can be added to help protect the SSR when switching DC loads.&amp;lt;br /&amp;gt;[[Media:Versatile SSR DC Load.png|Full-size Image]]]]&lt;br /&gt;
[[Image:Versatile SSR AC Load.png|thumb|link=|A versatile AC/DC SSR switching an AC load.&amp;lt;br /&amp;gt;[[Media:Versatile SSR AC Load.png|Full-size Image]]]]&lt;br /&gt;
&lt;br /&gt;
The electrical isolation built into a AC/DC SSR allows them to be placed within a circuit just like a switch.  Circuits without electrical isolation require a lot more care - proper grounding, careful consideration of voltage offsets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using heatsinks with Hockey Puck SSRs==&lt;br /&gt;
[[Image:3950_0 Accessories Web.jpg|thumb|link=|A &amp;quot;hockey puck&amp;quot; SSR with plastic cover (left), a thermal pad (right). All hockey puck SSRs sold at Phidgets come with both of these accessories plus a diode or varistor to protect the SSR.]]&lt;br /&gt;
[[Image:3955_0 Functional Web.jpg|thumb|link=|A &amp;quot;hockey puck&amp;quot; SSR mounted on a small heatsink by two screws. The thermal pad is pressed between the SSR and the heatsink.]]&lt;br /&gt;
&lt;br /&gt;
SSRs will only achieve their promise of reliability and long life if they are kept cool.  Cool is relative, of course, but a good rule of thumb is to keep the metal base of the SSR at less than 85°C (185°F).  A [[Thermocouple Guide|thermocouple]] can be used to precisely measure the temperature of the metal base.&lt;br /&gt;
&lt;br /&gt;
Excess heat usually comes from too much current and too little heatsinking.  A lot of heat can also be generated by frequently turning the relay on and off.  If your relay is operated for brief periods of time, you may not need as large of a heatsink - provided the relay is never accidentally left on for extended periods.  Unless space is a concern, it&#039;s better to err on the side of caution.&lt;br /&gt;
&lt;br /&gt;
Before buying a heatsink, consider if you actually need it.  If your application is running at room temperature, and your average current is less than the &#039;&#039;&#039;Max. Load Current without Heatsink&#039;&#039;&#039; specification of your SSR, then you don&#039;t need a heatsink.  Alternatively, if your project has a large metal chassis that the SSR can bolt to, this can be used as your heatsink.&lt;br /&gt;
&lt;br /&gt;
Each SSR suitable for use with heatsinks will include a specification of how much current it can switch with each heatsink we sell.  This specification assumes a reasonable airflow over the heatsink, and that the flowing air is at room temperature.  Our SSRs have a sheet of metal underneath, where the heat is concentrated - this is also where the heat is measured to tell if the SSR is too hot.  Phidgets includes a thermal pad with our Hockey Puck SSRs (see pictured). You place this pad under an SSR when mounting it on a heatsink, or on large metal surfaces that can dissipate heat.  The pad performs the same function as thermal grease - it helps conduct heat between the base of the SSR and the heatsink. If you prefer to use thermal grease, you can use it instead of the pad.  Our heatsinks include screws for mounting SSRs. Use a good size screwdriver when tightening the SSR down on the heatsink to ensure good conduction.&lt;br /&gt;
&lt;br /&gt;
You can see our selection of heatsinks in the [http://www.phidgets.com/products.php?category=9 relays] category of our store. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hooking up wires to the Hockey Puck SSR==&lt;br /&gt;
[[Image:relay_mov.jpg|thumb|link=|An AC SSR with the wires attached normally and an MOV installed across the load side.]]&lt;br /&gt;
[[Image:lugs.jpg|thumb|link=|TRM6 wiring lugs connected to a DC SSR.]]&lt;br /&gt;
&lt;br /&gt;
When wiring your load to the SSR, the wire is looped clockwise around the terminal, so when the screw is tightened down, it will draw the wire in tighter.  We recommend using wires up to 10 AWG in size - any larger, and the screws will not have enough thread left to tighten down, and they will strip.  Larger wires can be attached using a wiring lug.  The lug is clamped under the SSR screw, and the wire attaches to the lug.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
|style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039;Terminal Block Width (mm/port)&#039;&#039;&#039;&lt;br /&gt;
|style=&amp;quot;background:#f0f0f0;&amp;quot;|&#039;&#039;&#039;Recommended Wire Gauge (AWG)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|3.81&lt;br /&gt;
| 16 to 26&lt;br /&gt;
|-&lt;br /&gt;
| 5.0&lt;br /&gt;
| 12 to 24&lt;br /&gt;
|-&lt;br /&gt;
| 9.5&lt;br /&gt;
| 10 to 26&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Loose wire connections can generate a lot of heat - use a large enough screwdriver when clamping down the load wires to ensure that the screws are on tight enough.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Did you know?==&lt;br /&gt;
* Mains Voltage &#039;&#039;&#039;AC SSRs&#039;&#039;&#039; cannot switch DC. They will never turn the load off.  AC SSRs turn off twice per AC Cycle, when the current changes direction and is momentarily zero. For example, AC is 60 Hz in North America, so the AC SSR has 120 opportunities per second to turn off (the SSR will only &#039;&#039;&#039;stay&#039;&#039;&#039; off if the control signal is low).  If the SSR is operating from DC, the current will flow continuously, and the load will not turn off, even when the control input is off.&lt;br /&gt;
&lt;br /&gt;
* An &#039;&#039;&#039;AC SSR&#039;&#039;&#039; turns off automatically every time the load current reaches zero. It will turn back on almost immediately as long as the signal controlling the SSR is high. An AC SSR will actually have a low, non-zero current value that it regards as &#039;zero&#039;. This specification is usually called &amp;quot;Minimum Load Current&amp;quot; in the data sheet. If your load requires less than this minimum current, your SSR will never turn on, or will not reliably turn on. The simplest solution to this problem is to connect another load in parallel with the first, increasing the Current required by the load.&lt;br /&gt;
&lt;br /&gt;
* SSR Manufacturers have started adding a simple circuit inside &#039;&#039;&#039;AC SSRs&#039;&#039;&#039;, across the load terminals, called a snubber.  The snubber absorbs very fast electrical changes that could normally cause an &#039;&#039;&#039;AC SSR&#039;&#039;&#039; to turn on accidentally. When the AC SSR is turned on, there is little voltage difference between the terminals, so the snubber has very little effect.  When the AC SSR is turned off, the snubber is actively protecting the SSR - but at a cost, as it allows a small current through the SSR, which is wasted.  &lt;br /&gt;
&lt;br /&gt;
* An &#039;&#039;&#039;AC SSR&#039;&#039;&#039; uses bipolar transistors - an old technology that has been replaced by CMOS transistors in modern digital circuits.  Bipolar transistors are still superior for handling high voltages.  Bipolar transistors, and the more complex transistors built from them, will lose a constant voltage as current flows through them.  The collection of transistors in your SSR will lose about 1.7 volts - so on a 120 VAC system, you will lose about 1.5% to the SSR.  This energy converts to heat inside the SSR, and the heating from these transistors is the reason SSRs often need heatsinks.&lt;br /&gt;
&lt;br /&gt;
* SSRs, and semiconductors in general, usually fail as a short circuit. A short circuit is a circuit whose internals have been damaged such that current can flow through it freely.  This means your load will probably turn on permanently (until you disconnect the power source) - make sure this doesn&#039;t cause a safety hazard.  For instance, Sauna Heaters have a simple thermally-triggered mechanical shutdown to protect them if control electronics fails.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DC SSRs&#039;&#039;&#039; (at least the units we sell) use Metal Oxide Semiconductor Field Effect Transistors (MOSFETs). MOSFETs do not lose a constant voltage - instead, when they turn on, they act as a very slight restriction to the flow of current - a resistor.  At low currents, the slight restriction wastes very little power, giving high efficiency and often not requiring a heatsink.  This efficiency is lost as the current increases - a doubling of current quadruples the production of heat.  &lt;br /&gt;
&lt;br /&gt;
* Normally, a MOSFET can only block current in one direction - as soon as the voltage reverses, the current flows through a diode run in parallel to the MOSFET.  If a MOSFET were used to switch AC, the load would be turned on half the time.  A common solution is to use two MOSFETs back to back - which is what we do with our &#039;&#039;&#039;AC/DC SSRs&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Mechanical_Relay_Guide&amp;diff=35342</id>
		<title>Mechanical Relay Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Mechanical_Relay_Guide&amp;diff=35342"/>
		<updated>2025-11-13T22:28:27Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Basic Use */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Mechanical relays can switch a power or signal line by physically moving metal contacts with an electromagnet. Learn more here.}}&lt;br /&gt;
{{#seo:|keywords=relay}}&lt;br /&gt;
[[Category:IntroGuide]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Mechanical relays are devices that can turn on or turn off the power supplied to another device, like a switch. However, instead of having a person flip the switch, mechanical relays switch when provided with a small amount of power. This allows high-power circuits to be controlled by low-power devices.&lt;br /&gt;
&lt;br /&gt;
They perform the same function as [[Solid State Relay Guide|Solid State Relays]], except they are less expensive and have a shorter lifespan.&lt;br /&gt;
You can use them to control [[LED Guide|LEDs]], heaters, appliances, and generally any powered device as long as the power you&#039;re switching falls within the limits of the relay you&#039;re using.&lt;br /&gt;
[[File:1014_3.jpg|link=|center|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We sell boards with multiple relays on them (such as the [{{SERVER}}/?prodid=1228 PhidgetInterfaceKit 0/0/4], shown above), making it easy to control many separate circuits with your computer.&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
[[File:Mechanical_relay.jpg|thumb|link=|500px|&amp;lt;center&amp;gt;The switching arm and contacts of a mechanical relay.&amp;lt;/center&amp;gt;]]&lt;br /&gt;
Mechanical relays use an electromagnetic coil to open or close the circuit. When current runs through the input and energizes the coil, it creates a small magnetic field which either pulls the arm of the switch away from the other contact of the switch, or pushes it down to close the switch depending on the how the switch is made. A relay also serves as an isolator, because the control (input) and load (output) ends of the relay are not electrically connected. This allows you to protect the device you&#039;re using to control the relay from power surges in your application. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Basic Use===&lt;br /&gt;
Controlling a mechanical relay is as easy as turning on an LED or light bulb. By simply supplying enough power to energize the electromagnetic coil, you will be able to control a mechanical relay. &lt;br /&gt;
&lt;br /&gt;
A normal digital output will not be powerful enough without external components as described in the [[InterfaceKit Digital Outputs#Controlling a Relay with a N-Channel MOSFET| relay section of the Digital Output Guide]]. A Phidget with open collector digital outputs (such as the [{{SERVER}}/?prodid=720 REL1100] or [{{SERVER}}/?prodid=721 REL1101]), on the other hand, will be able to control a relay on its own. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Relays are often used in large quantities to turn multiple devices on and off in a particular order or timing. For example, a popular trend has been to hook up many strands of Christmas lights to multiple relays and a control system in order to make them flash in rhythm with specific music.&lt;br /&gt;
&lt;br /&gt;
Relays are designed to be controlled by a particular voltage applied to the coil.  If you buy a relay product from us, this is taken care of for you. You will be able to switch the relays via USB with the Digital Outputs on a [[InterfaceKit Digital Outputs|Phidget InterfaceKit]] or {{VINTHub}}. If you are integrating your own relay, you&#039;ll want to keep an eye on the specifications. &lt;br /&gt;
&lt;br /&gt;
The relay coil is also specified for a particular current.  For example, a 5V relay might require 70mA.  If you connect this relay to a very weak source of 5V, like a digital output, the output will not be able to provide 70mA, and there will not be enough current to switch the relay.&lt;br /&gt;
&lt;br /&gt;
The load side of the relay also requires a minimum current. This minimum load current (also called &amp;quot;wetting current&amp;quot;) is a requirement because the electricity needs to conduct through an oxide layer that forms on the contacts of the relay. If the minimum load current requirement of your relay is too high, you won&#039;t be able to use it to switch a signal (such as the data line on an analog sensor), you&#039;ll only be able to switch power to a circuit. If you&#039;re using a relay to switch a signal, [[#Contact Bounce|contact bounce]] might also be a problem.&lt;br /&gt;
&lt;br /&gt;
====Switching Speed and High-Frequency Switching====&lt;br /&gt;
Even though they use moving mechanical parts, mechanical relays switch very quickly. The amount of time it takes for current to begin flowing through the circuit from when the relay&#039;s input is activated is in the order of tens of milliseconds. For extremely time-sensitive applications that need to minimize switching delay, [[Solid State Relay Guide|Solid State Relays]] can switch as quickly as 1ms. &lt;br /&gt;
&lt;br /&gt;
You should be careful when using mechanical relays in applications that require very frequent switching. Typically, mechanical relays can only manage one contact every few seconds- any quicker and they may begin to overheat.&lt;br /&gt;
&lt;br /&gt;
===Safety===&lt;br /&gt;
[[File:relay_safety.jpg|thumb|450px|link=|Two circuit diagrams showing the improper and proper ways of switching mains electricity with a relay.&amp;lt;br /&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Since relays switch high currents and voltages, standard electricity safety precautions apply.  Make sure you never touch the terminals while the relay is powered.&lt;br /&gt;
&lt;br /&gt;
When placing a relay in a circuit, it is always a good idea to put it between the power supply and the load, especially when using higher voltages. If the relay is instead placed between the load and ground, the circuit will still work the same, but when the relay is open, the load will still be directly connected to the power supply. This could cause safety concerns because someone might touch the terminals on the load, thinking it&#039;s safe because the device appears to be off. If the electricity finds a path to ground through their body, they will be electrocuted. If the relay is placed between the power supply and the ground, electrocution would only be a risk if the live terminal on the relay is touched. Again, the relay terminals should always be properly covered to avoid the risk of electrocution. &lt;br /&gt;
&lt;br /&gt;
When an mechanical relay fails, it often fails permanently closed. This is because the contacts can actually weld to each other. See the section on [[#Arcing, Interference, and Sticking|Arcing, Interference, and Sticking]] for more information.&lt;br /&gt;
This means that as long as the power supply remains on, the load will be powered, possibly creating a fire or safety hazard.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Choosing a Relay==&lt;br /&gt;
Since mechanical relays are nothing more than a controllable switch, they support both AC and DC loads. &lt;br /&gt;
&lt;br /&gt;
The major deciding factor in choosing a mechanical relay is the amount of current it&#039;s capable of switching.&lt;br /&gt;
For example, the most current you can switch with the largest mechanical relay we sell is 5A DC or 10A AC. &lt;br /&gt;
If the load you&#039;re switching consumes more current than our mechanical relays can handle, take a look at our [[Solid State Relay Guide|Solid State Relays]].&lt;br /&gt;
&lt;br /&gt;
===Switch Type===&lt;br /&gt;
One of the major characteristics of a mechanical relay is the design of the switch inside. A switch can generally be defined by the number of &#039;&#039;&#039;poles&#039;&#039;&#039; and &#039;&#039;&#039;throws&#039;&#039;&#039; it has. The number of &amp;quot;poles&amp;quot; refers to the number of individual circuits the switch controls. The number of &amp;quot;throws&amp;quot; refers to the number of positions the switch arm can occupy. &lt;br /&gt;
&lt;br /&gt;
[[File:Switch_types.jpg|border|400px|link=|center]]&lt;br /&gt;
&lt;br /&gt;
====Single Pole, Single Throw (SPST)====&lt;br /&gt;
This is a simple switch with only one path for the current to follow. The relay is either designed to be &#039;&#039;&#039;normally open (NO)&#039;&#039;&#039; or &#039;&#039;&#039;normally closed (NC)&#039;&#039;&#039;. If it is normally open, the arm of the switch is held away from the contact with a spring when the relay is off and the electromagnet pulls the arm to make contact and close the switch when the relay is turned on. If it is normally closed, the arm of the switch is held to the contact when the relay is off, and the electromagnet pulls the arm away when the relay is turned on.&lt;br /&gt;
&lt;br /&gt;
While the decision to use a normally opened or normally closed relay may seem arbitrary at first, it is actually very important for certain applications. If you choose a normally closed relay, it means your load will remain powered as long as the relay coil is &#039;&#039;&#039;not&#039;&#039;&#039; powered. If some other part of your system fails, causing your relay to lose power, your load will remain powered even though it should not be. For loads that are potentially dangerous when left on (such as a heater, or a high-power load) it is best to use a normally open relay, so that in the event of a system failure, the load will remain off. On the other hand, circuits that are designed to be powered most of the time but temporarily interrupted will use less power if they use a normally closed relay. An example of this type of circuit is the radio in a car: When the engine is started, the radio circuit is momentarily switched off because the engine needs a large amount of battery power to start.&lt;br /&gt;
&lt;br /&gt;
====Single Pole, Double Throw (SPDT)====&lt;br /&gt;
[[File:relay2loads.png|thumb|link=|300px|&#039;&#039;&#039;Toggle Between Two Loads&#039;&#039;&#039;&amp;lt;br /&amp;gt;By connecting the power supply to the common terminal, and connecting a different load to the other two terminals, a relay with a SPDT switch can be used to toggle power between the two loads.&amp;lt;br /&amp;gt;[[Media:relay2loads.png|Full-size Image]]]]&lt;br /&gt;
&lt;br /&gt;
This switch has two paths for the current to follow. This type of relay is useful if you want to toggle power between two different loads, as pictured. You can also use a SPDT relay as a single pole, single throw switch, and it can function as &#039;&#039;&#039;normally open&#039;&#039;&#039; or &#039;&#039;&#039;normally closed&#039;&#039;&#039; depending on which pins (common and normally open, or common and normally closed) you connect the load to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Double Pole, Single Throw (DPST)====&lt;br /&gt;
This switch functions like two SPST switches, but both switches are controlled by one coil. This type of switch is useful for keeping two loads on separate circuits while still being able to have them turn on and off in unison. &lt;br /&gt;
&lt;br /&gt;
====Double Pole, Double Throw (DPDT)====&lt;br /&gt;
This switch functions the same as a SPDT switch, except there are two of them, but are both controlled by a single input on the relay. You can use this type of switch to simultaneously control two separate circuits.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
===Contact Bounce===&lt;br /&gt;
As with any mechanical switch, relays are susceptible to contact bounce. This means that when the switch closes, the arm can bounce on the contact, causing the load&#039;s power to flicker slightly. This usually only matters when the application is triggered by pulses in the power signal, or for applications where meaningful data is being switched instead of power. For example, a circuit designed to increment a counter every time power is applied to its input could incorrectly interpret a bouncing relay contact as multiple switch events. Or, a circuit that uses a relay to switch an audio signal between two different paths will experience some static noise when switching if there is significant contact bounce. It&#039;s worth mentioning that [[Solid State Relay Guide|Solid State Relays]] don&#039;t suffer from contact bounce, because they operate without using moving mechanical parts.&lt;br /&gt;
&lt;br /&gt;
===Arcing, Interference, and Sticking===&lt;br /&gt;
[[File:contact_arc.jpg|border|link=|center]]&lt;br /&gt;
When a mechanical relay opens or closes, for the moment that the arm of the switch is very close (but not connected) to the contact, the electric current can arc through the air between the contacts.&lt;br /&gt;
This arc can cause interference with nearby electrical instruments and sensors. For example, if an unshielded cable carrying an audio signal is travelling past some relays whose contacts are arcing when they switch, the audio would contain bursts of static noise. &lt;br /&gt;
&lt;br /&gt;
This arcing can also heat up the contacts of the switch enough that they can slowly degrade away until the relay no longer functions. They could also weld together, causing the relay to stay on permanently, which means your load will be powered constantly. If this imposes safety concerns, you should install a fail-safe of some kind. For example, some sauna heaters are turned on with a mechanical relay. In the event of a relay failure, the sauna heater will remain on and continue heating the room beyond the intended temperature. However, a simple mechanical temperature sensor is installed which cuts power to the heater if the room goes beyond a certain temperature. &lt;br /&gt;
&lt;br /&gt;
Some relays are encased in a clear plastic enclosure (sometimes called &amp;quot;ice cube&amp;quot; relays), so the switch contacts can be easily inspected. By inspecting the contacts periodically, you could tell when the relay is getting near the end of its life.&lt;br /&gt;
&lt;br /&gt;
===Prolonging Relay Lifespan===&lt;br /&gt;
In order to prolong the lifespan of your relay, avoid switching loads of higher voltage or current than the relay is built for, and avoid highly inductive loads, which worsen the effects of contact arcing. Your Load will probably be inductive if it is built around a large coil of wire - motors and transformers are typical examples. A load considered resistive may also have loops of wire - for instance, hair dryers, toasters, incandescent bulbs use twisted wire elements to generate the heat. An inductive load will have thousands of loops of wire - it&#039;s a matter of scale.&lt;br /&gt;
&lt;br /&gt;
Additionally,  you should avoid switching at or near the relay&#039;s maximum frequency if possible. You can think of a mechanical relay&#039;s lifespan in terms of number times switched rather than the amount of time it&#039;s used for. A relay that doesn&#039;t need to be switched very often can last a long time. If your application requires constant switching over long periods of time, it might be more cost-effective to use a [[Solid State Relay Guide|Solid State Relay]].&lt;br /&gt;
&lt;br /&gt;
====Arc Suppression ====&lt;br /&gt;
[[File:Mechanical_relay_diode.jpg|link=|thumb|300px|&#039;&#039;&#039;DC Load Protection&#039;&#039;&#039;&amp;lt;br/&amp;gt;A diagram of a mechanical relay switching a DC load. An optional diode and fuse are used to protect the relay and prevent hardware damaged caused by improper wiring.&amp;lt;br/&amp;gt;[[Media:Mechanical_relay_diode.jpg|Full-sized Image]]]]&lt;br /&gt;
[[File:Mechanical_relay_mov.jpg|link=|thumb|300px|&#039;&#039;&#039;AC Load Protection&#039;&#039;&#039;&amp;lt;br/&amp;gt;A diagram of a mechanical relay switching an AC load. An optional MOV or Transil diode is placed in parallel to protect the relay from voltage spikes.&amp;lt;br/&amp;gt;[[Media:Mechanical_relay_mov.jpg|Full-Sized Image]]]]&lt;br /&gt;
The main cause of failure for mechanical relays is electricity arcing across the contacts during switching. To lengthen the lifespan of your relay, you can add various circuit elements that mitigate arcing.&lt;br /&gt;
&lt;br /&gt;
For DC powered applications, one simple method of mitigating the effects of contact arcing is to place a feedback diode across the load, as pictured. This will allow some of the residual electricity in the circuit to recirculate through the load instead of contributing to the arc that forms when the switch makes the transition from closed to open. You can buy a suitable diode from any electronics distributor, like this [http://www.digikey.com/product-search/en/discrete-semiconductor-products/diodes-rectifiers-single/1376383?k=10a02 Diode] from Digikey.&lt;br /&gt;
&lt;br /&gt;
For AC powered applications, you can put a Metal Oxide Varistor (MOV) across the load terminals of the relay in order to protect it from voltage spikes. An MOV will not remove the entire arc, but it will be helpful in circuits up to several hundred volts. You can buy an MOV from any electronics distributor, like this [http://www.digikey.com/scripts/dksearch/dksus.dll?keywords=tmov20rp200e MOV] from Digikey.&lt;br /&gt;
&lt;br /&gt;
For low-voltage AC applications, a bi-directional transient voltage suppression diode (&amp;quot;transil diode&amp;quot;) that is rated for higher than the AC voltage of the circuit can be placed across the relay terminals in order to protect it from voltage spikes. You can buy one from any electronics distributor, like this [http://www.digikey.com/scripts/dksearch/dksus.dll?keywords=p6ke47carl Transil Diode] from Digikey.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Mechanical relays are inexpensive and simple devices that allow AC or DC circuits to be switched on and off using a small amount of power.&lt;br /&gt;
They come in a variety of switch formats, enabling the user to build some very clever control into a circuit. Phidgets Inc. sells boards with multiple relays that can be connected directly to USB, or indirectly through a {{VINTHub}} so they can be controlled by your program. &lt;br /&gt;
&lt;br /&gt;
Contact arcing and switch bounce can be an obstacle for some applications, but both are common problems and can be worked around fairly easily. &lt;br /&gt;
Mechanical relays don&#039;t last as long as solid state relays, but if you take care of them, they can be a good cost-effective alternative.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Mechanical_Relay_Guide&amp;diff=35341</id>
		<title>Mechanical Relay Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Mechanical_Relay_Guide&amp;diff=35341"/>
		<updated>2025-11-13T22:26:08Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* How it works */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Mechanical relays can switch a power or signal line by physically moving metal contacts with an electromagnet. Learn more here.}}&lt;br /&gt;
{{#seo:|keywords=relay}}&lt;br /&gt;
[[Category:IntroGuide]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Mechanical relays are devices that can turn on or turn off the power supplied to another device, like a switch. However, instead of having a person flip the switch, mechanical relays switch when provided with a small amount of power. This allows high-power circuits to be controlled by low-power devices.&lt;br /&gt;
&lt;br /&gt;
They perform the same function as [[Solid State Relay Guide|Solid State Relays]], except they are less expensive and have a shorter lifespan.&lt;br /&gt;
You can use them to control [[LED Guide|LEDs]], heaters, appliances, and generally any powered device as long as the power you&#039;re switching falls within the limits of the relay you&#039;re using.&lt;br /&gt;
[[File:1014_3.jpg|link=|center|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We sell boards with multiple relays on them (such as the [{{SERVER}}/?prodid=1228 PhidgetInterfaceKit 0/0/4], shown above), making it easy to control many separate circuits with your computer.&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
[[File:Mechanical_relay.jpg|thumb|link=|500px|&amp;lt;center&amp;gt;The switching arm and contacts of a mechanical relay.&amp;lt;/center&amp;gt;]]&lt;br /&gt;
Mechanical relays use an electromagnetic coil to open or close the circuit. When current runs through the input and energizes the coil, it creates a small magnetic field which either pulls the arm of the switch away from the other contact of the switch, or pushes it down to close the switch depending on the how the switch is made. A relay also serves as an isolator, because the control (input) and load (output) ends of the relay are not electrically connected. This allows you to protect the device you&#039;re using to control the relay from power surges in your application. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Basic Use===&lt;br /&gt;
Controlling a mechanical relay is as easy as turning on an LED or light bulb. By simply supplying enough power to energize the electromagnetic coil, you will be able to control a mechanical relay. A normal digital output will not be powerful enough without external components as described in the [[InterfaceKit Digital Outputs#Controlling a Relay with a N-Channel MOSFET| relay section of the Digital Output Guide]]. A Phidget with open collector digital outputs, (such as the [{{SERVER}}/?prodid=720 REL1100] or [{{SERVER}}/?prodid=721 REL1101]), on the other hand, will be able to control a relay on its own. &lt;br /&gt;
Relays are often used in large quantities to turn multiple devices on and off in a particular order or timing. For example, a popular trend has been to hook up many strands of Christmas lights to multiple relays and a control system in order to make them flash in rhythm with specific music.&lt;br /&gt;
&lt;br /&gt;
Relays are designed to be controlled by a particular voltage applied to the coil.  If you buy a relay product from us, this is taken care of for you. You will be able to switch the relays via USB with the Digital Outputs on a [[InterfaceKit Digital Outputs|Phidget InterfaceKit]] or {{VINTHub}}. If you are integrating your own relay, you&#039;ll want to keep an eye on the specifications. The relay coil is also specified for a particular current.  For example, a 5V relay might require 70mA.  If you connect this relay to a very weak source of 5V, like a digital output, the output will not be able to provide 70mA, and there will not be enough current to switch the relay.&lt;br /&gt;
&lt;br /&gt;
The load side of the relay also requires a minimum current. This minimum load current (also called &amp;quot;wetting current&amp;quot;) is a requirement because the electricity needs to conduct through an oxide layer that forms on the contacts of the relay. If the minimum load current requirement of your relay is too high, you won&#039;t be able to use it to switch a signal (such as the data line on an analog sensor), you&#039;ll only be able to switch power to a circuit. If you&#039;re using a relay to switch a signal, [[#Contact Bounce|contact bounce]] might also be a problem.&lt;br /&gt;
&lt;br /&gt;
====Switching Speed and High-Frequency Switching====&lt;br /&gt;
Even though they use moving mechanical parts, mechanical relays switch very quickly. The amount of time it takes for current to begin flowing through the circuit from when the relay&#039;s input is activated is in the order of tens of milliseconds. For extremely time-sensitive applications that need to minimize switching delay, [[Solid State Relay Guide|Solid State Relays]] can switch as quickly as 1ms. &lt;br /&gt;
&lt;br /&gt;
You should be careful when using mechanical relays in applications that require very frequent switching. Typically, mechanical relays can only manage one contact every few seconds- any quicker and they may begin to overheat.&lt;br /&gt;
&lt;br /&gt;
===Safety===&lt;br /&gt;
[[File:relay_safety.jpg|thumb|450px|link=|Two circuit diagrams showing the improper and proper ways of switching mains electricity with a relay.&amp;lt;br /&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Since relays switch high currents and voltages, standard electricity safety precautions apply.  Make sure you never touch the terminals while the relay is powered.&lt;br /&gt;
&lt;br /&gt;
When placing a relay in a circuit, it is always a good idea to put it between the power supply and the load, especially when using higher voltages. If the relay is instead placed between the load and ground, the circuit will still work the same, but when the relay is open, the load will still be directly connected to the power supply. This could cause safety concerns because someone might touch the terminals on the load, thinking it&#039;s safe because the device appears to be off. If the electricity finds a path to ground through their body, they will be electrocuted. If the relay is placed between the power supply and the ground, electrocution would only be a risk if the live terminal on the relay is touched. Again, the relay terminals should always be properly covered to avoid the risk of electrocution. &lt;br /&gt;
&lt;br /&gt;
When an mechanical relay fails, it often fails permanently closed. This is because the contacts can actually weld to each other. See the section on [[#Arcing, Interference, and Sticking|Arcing, Interference, and Sticking]] for more information.&lt;br /&gt;
This means that as long as the power supply remains on, the load will be powered, possibly creating a fire or safety hazard.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Choosing a Relay==&lt;br /&gt;
Since mechanical relays are nothing more than a controllable switch, they support both AC and DC loads. &lt;br /&gt;
&lt;br /&gt;
The major deciding factor in choosing a mechanical relay is the amount of current it&#039;s capable of switching.&lt;br /&gt;
For example, the most current you can switch with the largest mechanical relay we sell is 5A DC or 10A AC. &lt;br /&gt;
If the load you&#039;re switching consumes more current than our mechanical relays can handle, take a look at our [[Solid State Relay Guide|Solid State Relays]].&lt;br /&gt;
&lt;br /&gt;
===Switch Type===&lt;br /&gt;
One of the major characteristics of a mechanical relay is the design of the switch inside. A switch can generally be defined by the number of &#039;&#039;&#039;poles&#039;&#039;&#039; and &#039;&#039;&#039;throws&#039;&#039;&#039; it has. The number of &amp;quot;poles&amp;quot; refers to the number of individual circuits the switch controls. The number of &amp;quot;throws&amp;quot; refers to the number of positions the switch arm can occupy. &lt;br /&gt;
&lt;br /&gt;
[[File:Switch_types.jpg|border|400px|link=|center]]&lt;br /&gt;
&lt;br /&gt;
====Single Pole, Single Throw (SPST)====&lt;br /&gt;
This is a simple switch with only one path for the current to follow. The relay is either designed to be &#039;&#039;&#039;normally open (NO)&#039;&#039;&#039; or &#039;&#039;&#039;normally closed (NC)&#039;&#039;&#039;. If it is normally open, the arm of the switch is held away from the contact with a spring when the relay is off and the electromagnet pulls the arm to make contact and close the switch when the relay is turned on. If it is normally closed, the arm of the switch is held to the contact when the relay is off, and the electromagnet pulls the arm away when the relay is turned on.&lt;br /&gt;
&lt;br /&gt;
While the decision to use a normally opened or normally closed relay may seem arbitrary at first, it is actually very important for certain applications. If you choose a normally closed relay, it means your load will remain powered as long as the relay coil is &#039;&#039;&#039;not&#039;&#039;&#039; powered. If some other part of your system fails, causing your relay to lose power, your load will remain powered even though it should not be. For loads that are potentially dangerous when left on (such as a heater, or a high-power load) it is best to use a normally open relay, so that in the event of a system failure, the load will remain off. On the other hand, circuits that are designed to be powered most of the time but temporarily interrupted will use less power if they use a normally closed relay. An example of this type of circuit is the radio in a car: When the engine is started, the radio circuit is momentarily switched off because the engine needs a large amount of battery power to start.&lt;br /&gt;
&lt;br /&gt;
====Single Pole, Double Throw (SPDT)====&lt;br /&gt;
[[File:relay2loads.png|thumb|link=|300px|&#039;&#039;&#039;Toggle Between Two Loads&#039;&#039;&#039;&amp;lt;br /&amp;gt;By connecting the power supply to the common terminal, and connecting a different load to the other two terminals, a relay with a SPDT switch can be used to toggle power between the two loads.&amp;lt;br /&amp;gt;[[Media:relay2loads.png|Full-size Image]]]]&lt;br /&gt;
&lt;br /&gt;
This switch has two paths for the current to follow. This type of relay is useful if you want to toggle power between two different loads, as pictured. You can also use a SPDT relay as a single pole, single throw switch, and it can function as &#039;&#039;&#039;normally open&#039;&#039;&#039; or &#039;&#039;&#039;normally closed&#039;&#039;&#039; depending on which pins (common and normally open, or common and normally closed) you connect the load to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Double Pole, Single Throw (DPST)====&lt;br /&gt;
This switch functions like two SPST switches, but both switches are controlled by one coil. This type of switch is useful for keeping two loads on separate circuits while still being able to have them turn on and off in unison. &lt;br /&gt;
&lt;br /&gt;
====Double Pole, Double Throw (DPDT)====&lt;br /&gt;
This switch functions the same as a SPDT switch, except there are two of them, but are both controlled by a single input on the relay. You can use this type of switch to simultaneously control two separate circuits.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
===Contact Bounce===&lt;br /&gt;
As with any mechanical switch, relays are susceptible to contact bounce. This means that when the switch closes, the arm can bounce on the contact, causing the load&#039;s power to flicker slightly. This usually only matters when the application is triggered by pulses in the power signal, or for applications where meaningful data is being switched instead of power. For example, a circuit designed to increment a counter every time power is applied to its input could incorrectly interpret a bouncing relay contact as multiple switch events. Or, a circuit that uses a relay to switch an audio signal between two different paths will experience some static noise when switching if there is significant contact bounce. It&#039;s worth mentioning that [[Solid State Relay Guide|Solid State Relays]] don&#039;t suffer from contact bounce, because they operate without using moving mechanical parts.&lt;br /&gt;
&lt;br /&gt;
===Arcing, Interference, and Sticking===&lt;br /&gt;
[[File:contact_arc.jpg|border|link=|center]]&lt;br /&gt;
When a mechanical relay opens or closes, for the moment that the arm of the switch is very close (but not connected) to the contact, the electric current can arc through the air between the contacts.&lt;br /&gt;
This arc can cause interference with nearby electrical instruments and sensors. For example, if an unshielded cable carrying an audio signal is travelling past some relays whose contacts are arcing when they switch, the audio would contain bursts of static noise. &lt;br /&gt;
&lt;br /&gt;
This arcing can also heat up the contacts of the switch enough that they can slowly degrade away until the relay no longer functions. They could also weld together, causing the relay to stay on permanently, which means your load will be powered constantly. If this imposes safety concerns, you should install a fail-safe of some kind. For example, some sauna heaters are turned on with a mechanical relay. In the event of a relay failure, the sauna heater will remain on and continue heating the room beyond the intended temperature. However, a simple mechanical temperature sensor is installed which cuts power to the heater if the room goes beyond a certain temperature. &lt;br /&gt;
&lt;br /&gt;
Some relays are encased in a clear plastic enclosure (sometimes called &amp;quot;ice cube&amp;quot; relays), so the switch contacts can be easily inspected. By inspecting the contacts periodically, you could tell when the relay is getting near the end of its life.&lt;br /&gt;
&lt;br /&gt;
===Prolonging Relay Lifespan===&lt;br /&gt;
In order to prolong the lifespan of your relay, avoid switching loads of higher voltage or current than the relay is built for, and avoid highly inductive loads, which worsen the effects of contact arcing. Your Load will probably be inductive if it is built around a large coil of wire - motors and transformers are typical examples. A load considered resistive may also have loops of wire - for instance, hair dryers, toasters, incandescent bulbs use twisted wire elements to generate the heat. An inductive load will have thousands of loops of wire - it&#039;s a matter of scale.&lt;br /&gt;
&lt;br /&gt;
Additionally,  you should avoid switching at or near the relay&#039;s maximum frequency if possible. You can think of a mechanical relay&#039;s lifespan in terms of number times switched rather than the amount of time it&#039;s used for. A relay that doesn&#039;t need to be switched very often can last a long time. If your application requires constant switching over long periods of time, it might be more cost-effective to use a [[Solid State Relay Guide|Solid State Relay]].&lt;br /&gt;
&lt;br /&gt;
====Arc Suppression ====&lt;br /&gt;
[[File:Mechanical_relay_diode.jpg|link=|thumb|300px|&#039;&#039;&#039;DC Load Protection&#039;&#039;&#039;&amp;lt;br/&amp;gt;A diagram of a mechanical relay switching a DC load. An optional diode and fuse are used to protect the relay and prevent hardware damaged caused by improper wiring.&amp;lt;br/&amp;gt;[[Media:Mechanical_relay_diode.jpg|Full-sized Image]]]]&lt;br /&gt;
[[File:Mechanical_relay_mov.jpg|link=|thumb|300px|&#039;&#039;&#039;AC Load Protection&#039;&#039;&#039;&amp;lt;br/&amp;gt;A diagram of a mechanical relay switching an AC load. An optional MOV or Transil diode is placed in parallel to protect the relay from voltage spikes.&amp;lt;br/&amp;gt;[[Media:Mechanical_relay_mov.jpg|Full-Sized Image]]]]&lt;br /&gt;
The main cause of failure for mechanical relays is electricity arcing across the contacts during switching. To lengthen the lifespan of your relay, you can add various circuit elements that mitigate arcing.&lt;br /&gt;
&lt;br /&gt;
For DC powered applications, one simple method of mitigating the effects of contact arcing is to place a feedback diode across the load, as pictured. This will allow some of the residual electricity in the circuit to recirculate through the load instead of contributing to the arc that forms when the switch makes the transition from closed to open. You can buy a suitable diode from any electronics distributor, like this [http://www.digikey.com/product-search/en/discrete-semiconductor-products/diodes-rectifiers-single/1376383?k=10a02 Diode] from Digikey.&lt;br /&gt;
&lt;br /&gt;
For AC powered applications, you can put a Metal Oxide Varistor (MOV) across the load terminals of the relay in order to protect it from voltage spikes. An MOV will not remove the entire arc, but it will be helpful in circuits up to several hundred volts. You can buy an MOV from any electronics distributor, like this [http://www.digikey.com/scripts/dksearch/dksus.dll?keywords=tmov20rp200e MOV] from Digikey.&lt;br /&gt;
&lt;br /&gt;
For low-voltage AC applications, a bi-directional transient voltage suppression diode (&amp;quot;transil diode&amp;quot;) that is rated for higher than the AC voltage of the circuit can be placed across the relay terminals in order to protect it from voltage spikes. You can buy one from any electronics distributor, like this [http://www.digikey.com/scripts/dksearch/dksus.dll?keywords=p6ke47carl Transil Diode] from Digikey.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Mechanical relays are inexpensive and simple devices that allow AC or DC circuits to be switched on and off using a small amount of power.&lt;br /&gt;
They come in a variety of switch formats, enabling the user to build some very clever control into a circuit. Phidgets Inc. sells boards with multiple relays that can be connected directly to USB, or indirectly through a {{VINTHub}} so they can be controlled by your program. &lt;br /&gt;
&lt;br /&gt;
Contact arcing and switch bounce can be an obstacle for some applications, but both are common problems and can be worked around fairly easily. &lt;br /&gt;
Mechanical relays don&#039;t last as long as solid state relays, but if you take care of them, they can be a good cost-effective alternative.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Mechanical_Relay_Guide&amp;diff=35340</id>
		<title>Mechanical Relay Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Mechanical_Relay_Guide&amp;diff=35340"/>
		<updated>2025-11-13T22:24:10Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Mechanical relays can switch a power or signal line by physically moving metal contacts with an electromagnet. Learn more here.}}&lt;br /&gt;
{{#seo:|keywords=relay}}&lt;br /&gt;
[[Category:IntroGuide]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-3&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
Mechanical relays are devices that can turn on or turn off the power supplied to another device, like a switch. However, instead of having a person flip the switch, mechanical relays switch when provided with a small amount of power. This allows high-power circuits to be controlled by low-power devices.&lt;br /&gt;
&lt;br /&gt;
They perform the same function as [[Solid State Relay Guide|Solid State Relays]], except they are less expensive and have a shorter lifespan.&lt;br /&gt;
You can use them to control [[LED Guide|LEDs]], heaters, appliances, and generally any powered device as long as the power you&#039;re switching falls within the limits of the relay you&#039;re using.&lt;br /&gt;
[[File:1014_3.jpg|link=|center|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We sell boards with multiple relays on them (such as the [{{SERVER}}/?prodid=1228 PhidgetInterfaceKit 0/0/4], shown above), making it easy to control many separate circuits with your computer.&lt;br /&gt;
&lt;br /&gt;
==How it works==&lt;br /&gt;
[[File:Mechanical_relay.jpg|thumb|link=|500px|&#039;&#039;&#039;Mechanical Relay&#039;&#039;&#039;&amp;lt;br /&amp;gt;The switching arm and contacts of a mechanical relay.]]&lt;br /&gt;
Mechanical relays use an electromagnetic coil to open or close the circuit. When current runs through the input and energizes the coil, it creates a small magnetic field which either pulls the arm of the switch away from the other contact of the switch, or pushes it down to close the switch depending on the how the switch is made. A relay also serves as an isolator, because the control (input) and load (output) ends of the relay are not electrically connected. This allows you to protect the device you&#039;re using to control the relay from power surges in your application. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Basic Use===&lt;br /&gt;
Controlling a mechanical relay is as easy as turning on an LED or light bulb. By simply supplying enough power to energize the electromagnetic coil, you will be able to control a mechanical relay. A normal digital output will not be powerful enough without external components as described in the [[InterfaceKit Digital Outputs#Controlling a Relay with a N-Channel MOSFET| relay section of the Digital Output Guide]]. A Phidget with open collector digital outputs, (such as the [{{SERVER}}/?prodid=720 REL1100] or [{{SERVER}}/?prodid=721 REL1101]), on the other hand, will be able to control a relay on its own. &lt;br /&gt;
Relays are often used in large quantities to turn multiple devices on and off in a particular order or timing. For example, a popular trend has been to hook up many strands of Christmas lights to multiple relays and a control system in order to make them flash in rhythm with specific music.&lt;br /&gt;
&lt;br /&gt;
Relays are designed to be controlled by a particular voltage applied to the coil.  If you buy a relay product from us, this is taken care of for you. You will be able to switch the relays via USB with the Digital Outputs on a [[InterfaceKit Digital Outputs|Phidget InterfaceKit]] or {{VINTHub}}. If you are integrating your own relay, you&#039;ll want to keep an eye on the specifications. The relay coil is also specified for a particular current.  For example, a 5V relay might require 70mA.  If you connect this relay to a very weak source of 5V, like a digital output, the output will not be able to provide 70mA, and there will not be enough current to switch the relay.&lt;br /&gt;
&lt;br /&gt;
The load side of the relay also requires a minimum current. This minimum load current (also called &amp;quot;wetting current&amp;quot;) is a requirement because the electricity needs to conduct through an oxide layer that forms on the contacts of the relay. If the minimum load current requirement of your relay is too high, you won&#039;t be able to use it to switch a signal (such as the data line on an analog sensor), you&#039;ll only be able to switch power to a circuit. If you&#039;re using a relay to switch a signal, [[#Contact Bounce|contact bounce]] might also be a problem.&lt;br /&gt;
&lt;br /&gt;
====Switching Speed and High-Frequency Switching====&lt;br /&gt;
Even though they use moving mechanical parts, mechanical relays switch very quickly. The amount of time it takes for current to begin flowing through the circuit from when the relay&#039;s input is activated is in the order of tens of milliseconds. For extremely time-sensitive applications that need to minimize switching delay, [[Solid State Relay Guide|Solid State Relays]] can switch as quickly as 1ms. &lt;br /&gt;
&lt;br /&gt;
You should be careful when using mechanical relays in applications that require very frequent switching. Typically, mechanical relays can only manage one contact every few seconds- any quicker and they may begin to overheat.&lt;br /&gt;
&lt;br /&gt;
===Safety===&lt;br /&gt;
[[File:relay_safety.jpg|thumb|450px|link=|Two circuit diagrams showing the improper and proper ways of switching mains electricity with a relay.&amp;lt;br /&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Since relays switch high currents and voltages, standard electricity safety precautions apply.  Make sure you never touch the terminals while the relay is powered.&lt;br /&gt;
&lt;br /&gt;
When placing a relay in a circuit, it is always a good idea to put it between the power supply and the load, especially when using higher voltages. If the relay is instead placed between the load and ground, the circuit will still work the same, but when the relay is open, the load will still be directly connected to the power supply. This could cause safety concerns because someone might touch the terminals on the load, thinking it&#039;s safe because the device appears to be off. If the electricity finds a path to ground through their body, they will be electrocuted. If the relay is placed between the power supply and the ground, electrocution would only be a risk if the live terminal on the relay is touched. Again, the relay terminals should always be properly covered to avoid the risk of electrocution. &lt;br /&gt;
&lt;br /&gt;
When an mechanical relay fails, it often fails permanently closed. This is because the contacts can actually weld to each other. See the section on [[#Arcing, Interference, and Sticking|Arcing, Interference, and Sticking]] for more information.&lt;br /&gt;
This means that as long as the power supply remains on, the load will be powered, possibly creating a fire or safety hazard.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Choosing a Relay==&lt;br /&gt;
Since mechanical relays are nothing more than a controllable switch, they support both AC and DC loads. &lt;br /&gt;
&lt;br /&gt;
The major deciding factor in choosing a mechanical relay is the amount of current it&#039;s capable of switching.&lt;br /&gt;
For example, the most current you can switch with the largest mechanical relay we sell is 5A DC or 10A AC. &lt;br /&gt;
If the load you&#039;re switching consumes more current than our mechanical relays can handle, take a look at our [[Solid State Relay Guide|Solid State Relays]].&lt;br /&gt;
&lt;br /&gt;
===Switch Type===&lt;br /&gt;
One of the major characteristics of a mechanical relay is the design of the switch inside. A switch can generally be defined by the number of &#039;&#039;&#039;poles&#039;&#039;&#039; and &#039;&#039;&#039;throws&#039;&#039;&#039; it has. The number of &amp;quot;poles&amp;quot; refers to the number of individual circuits the switch controls. The number of &amp;quot;throws&amp;quot; refers to the number of positions the switch arm can occupy. &lt;br /&gt;
&lt;br /&gt;
[[File:Switch_types.jpg|border|400px|link=|center]]&lt;br /&gt;
&lt;br /&gt;
====Single Pole, Single Throw (SPST)====&lt;br /&gt;
This is a simple switch with only one path for the current to follow. The relay is either designed to be &#039;&#039;&#039;normally open (NO)&#039;&#039;&#039; or &#039;&#039;&#039;normally closed (NC)&#039;&#039;&#039;. If it is normally open, the arm of the switch is held away from the contact with a spring when the relay is off and the electromagnet pulls the arm to make contact and close the switch when the relay is turned on. If it is normally closed, the arm of the switch is held to the contact when the relay is off, and the electromagnet pulls the arm away when the relay is turned on.&lt;br /&gt;
&lt;br /&gt;
While the decision to use a normally opened or normally closed relay may seem arbitrary at first, it is actually very important for certain applications. If you choose a normally closed relay, it means your load will remain powered as long as the relay coil is &#039;&#039;&#039;not&#039;&#039;&#039; powered. If some other part of your system fails, causing your relay to lose power, your load will remain powered even though it should not be. For loads that are potentially dangerous when left on (such as a heater, or a high-power load) it is best to use a normally open relay, so that in the event of a system failure, the load will remain off. On the other hand, circuits that are designed to be powered most of the time but temporarily interrupted will use less power if they use a normally closed relay. An example of this type of circuit is the radio in a car: When the engine is started, the radio circuit is momentarily switched off because the engine needs a large amount of battery power to start.&lt;br /&gt;
&lt;br /&gt;
====Single Pole, Double Throw (SPDT)====&lt;br /&gt;
[[File:relay2loads.png|thumb|link=|300px|&#039;&#039;&#039;Toggle Between Two Loads&#039;&#039;&#039;&amp;lt;br /&amp;gt;By connecting the power supply to the common terminal, and connecting a different load to the other two terminals, a relay with a SPDT switch can be used to toggle power between the two loads.&amp;lt;br /&amp;gt;[[Media:relay2loads.png|Full-size Image]]]]&lt;br /&gt;
&lt;br /&gt;
This switch has two paths for the current to follow. This type of relay is useful if you want to toggle power between two different loads, as pictured. You can also use a SPDT relay as a single pole, single throw switch, and it can function as &#039;&#039;&#039;normally open&#039;&#039;&#039; or &#039;&#039;&#039;normally closed&#039;&#039;&#039; depending on which pins (common and normally open, or common and normally closed) you connect the load to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Double Pole, Single Throw (DPST)====&lt;br /&gt;
This switch functions like two SPST switches, but both switches are controlled by one coil. This type of switch is useful for keeping two loads on separate circuits while still being able to have them turn on and off in unison. &lt;br /&gt;
&lt;br /&gt;
====Double Pole, Double Throw (DPDT)====&lt;br /&gt;
This switch functions the same as a SPDT switch, except there are two of them, but are both controlled by a single input on the relay. You can use this type of switch to simultaneously control two separate circuits.&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
===Contact Bounce===&lt;br /&gt;
As with any mechanical switch, relays are susceptible to contact bounce. This means that when the switch closes, the arm can bounce on the contact, causing the load&#039;s power to flicker slightly. This usually only matters when the application is triggered by pulses in the power signal, or for applications where meaningful data is being switched instead of power. For example, a circuit designed to increment a counter every time power is applied to its input could incorrectly interpret a bouncing relay contact as multiple switch events. Or, a circuit that uses a relay to switch an audio signal between two different paths will experience some static noise when switching if there is significant contact bounce. It&#039;s worth mentioning that [[Solid State Relay Guide|Solid State Relays]] don&#039;t suffer from contact bounce, because they operate without using moving mechanical parts.&lt;br /&gt;
&lt;br /&gt;
===Arcing, Interference, and Sticking===&lt;br /&gt;
[[File:contact_arc.jpg|border|link=|center]]&lt;br /&gt;
When a mechanical relay opens or closes, for the moment that the arm of the switch is very close (but not connected) to the contact, the electric current can arc through the air between the contacts.&lt;br /&gt;
This arc can cause interference with nearby electrical instruments and sensors. For example, if an unshielded cable carrying an audio signal is travelling past some relays whose contacts are arcing when they switch, the audio would contain bursts of static noise. &lt;br /&gt;
&lt;br /&gt;
This arcing can also heat up the contacts of the switch enough that they can slowly degrade away until the relay no longer functions. They could also weld together, causing the relay to stay on permanently, which means your load will be powered constantly. If this imposes safety concerns, you should install a fail-safe of some kind. For example, some sauna heaters are turned on with a mechanical relay. In the event of a relay failure, the sauna heater will remain on and continue heating the room beyond the intended temperature. However, a simple mechanical temperature sensor is installed which cuts power to the heater if the room goes beyond a certain temperature. &lt;br /&gt;
&lt;br /&gt;
Some relays are encased in a clear plastic enclosure (sometimes called &amp;quot;ice cube&amp;quot; relays), so the switch contacts can be easily inspected. By inspecting the contacts periodically, you could tell when the relay is getting near the end of its life.&lt;br /&gt;
&lt;br /&gt;
===Prolonging Relay Lifespan===&lt;br /&gt;
In order to prolong the lifespan of your relay, avoid switching loads of higher voltage or current than the relay is built for, and avoid highly inductive loads, which worsen the effects of contact arcing. Your Load will probably be inductive if it is built around a large coil of wire - motors and transformers are typical examples. A load considered resistive may also have loops of wire - for instance, hair dryers, toasters, incandescent bulbs use twisted wire elements to generate the heat. An inductive load will have thousands of loops of wire - it&#039;s a matter of scale.&lt;br /&gt;
&lt;br /&gt;
Additionally,  you should avoid switching at or near the relay&#039;s maximum frequency if possible. You can think of a mechanical relay&#039;s lifespan in terms of number times switched rather than the amount of time it&#039;s used for. A relay that doesn&#039;t need to be switched very often can last a long time. If your application requires constant switching over long periods of time, it might be more cost-effective to use a [[Solid State Relay Guide|Solid State Relay]].&lt;br /&gt;
&lt;br /&gt;
====Arc Suppression ====&lt;br /&gt;
[[File:Mechanical_relay_diode.jpg|link=|thumb|300px|&#039;&#039;&#039;DC Load Protection&#039;&#039;&#039;&amp;lt;br/&amp;gt;A diagram of a mechanical relay switching a DC load. An optional diode and fuse are used to protect the relay and prevent hardware damaged caused by improper wiring.&amp;lt;br/&amp;gt;[[Media:Mechanical_relay_diode.jpg|Full-sized Image]]]]&lt;br /&gt;
[[File:Mechanical_relay_mov.jpg|link=|thumb|300px|&#039;&#039;&#039;AC Load Protection&#039;&#039;&#039;&amp;lt;br/&amp;gt;A diagram of a mechanical relay switching an AC load. An optional MOV or Transil diode is placed in parallel to protect the relay from voltage spikes.&amp;lt;br/&amp;gt;[[Media:Mechanical_relay_mov.jpg|Full-Sized Image]]]]&lt;br /&gt;
The main cause of failure for mechanical relays is electricity arcing across the contacts during switching. To lengthen the lifespan of your relay, you can add various circuit elements that mitigate arcing.&lt;br /&gt;
&lt;br /&gt;
For DC powered applications, one simple method of mitigating the effects of contact arcing is to place a feedback diode across the load, as pictured. This will allow some of the residual electricity in the circuit to recirculate through the load instead of contributing to the arc that forms when the switch makes the transition from closed to open. You can buy a suitable diode from any electronics distributor, like this [http://www.digikey.com/product-search/en/discrete-semiconductor-products/diodes-rectifiers-single/1376383?k=10a02 Diode] from Digikey.&lt;br /&gt;
&lt;br /&gt;
For AC powered applications, you can put a Metal Oxide Varistor (MOV) across the load terminals of the relay in order to protect it from voltage spikes. An MOV will not remove the entire arc, but it will be helpful in circuits up to several hundred volts. You can buy an MOV from any electronics distributor, like this [http://www.digikey.com/scripts/dksearch/dksus.dll?keywords=tmov20rp200e MOV] from Digikey.&lt;br /&gt;
&lt;br /&gt;
For low-voltage AC applications, a bi-directional transient voltage suppression diode (&amp;quot;transil diode&amp;quot;) that is rated for higher than the AC voltage of the circuit can be placed across the relay terminals in order to protect it from voltage spikes. You can buy one from any electronics distributor, like this [http://www.digikey.com/scripts/dksearch/dksus.dll?keywords=p6ke47carl Transil Diode] from Digikey.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Mechanical relays are inexpensive and simple devices that allow AC or DC circuits to be switched on and off using a small amount of power.&lt;br /&gt;
They come in a variety of switch formats, enabling the user to build some very clever control into a circuit. Phidgets Inc. sells boards with multiple relays that can be connected directly to USB, or indirectly through a {{VINTHub}} so they can be controlled by your program. &lt;br /&gt;
&lt;br /&gt;
Contact arcing and switch bounce can be an obstacle for some applications, but both are common problems and can be worked around fairly easily. &lt;br /&gt;
Mechanical relays don&#039;t last as long as solid state relays, but if you take care of them, they can be a good cost-effective alternative.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:1014_3.jpg&amp;diff=35339</id>
		<title>File:1014 3.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:1014_3.jpg&amp;diff=35339"/>
		<updated>2025-11-13T22:22:49Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Phidget_Network_Server&amp;diff=35313</id>
		<title>Phidget Network Server</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Phidget_Network_Server&amp;diff=35313"/>
		<updated>2025-08-01T19:48:28Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Phidget Network Server Hosts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Programming]]{{Recommended_Flow_Links|{{Flow Page Number|{{PAGENAME}} }} }}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
==What Is the Phidget Network Server?==&lt;br /&gt;
The Phidget Network Server is a tool that makes it easy to access Phidgets that are connected to &#039;&#039;&#039;other computers&#039;&#039;&#039; on your network. &lt;br /&gt;
&lt;br /&gt;
It also enables in-browser JavaScript applications with Phidgets, and provides a dictionary manager which can be used to share information between applications.&lt;br /&gt;
&lt;br /&gt;
===Without the Phidget Network Server===&lt;br /&gt;
Your application runs on the same computer that your Phidgets are connected to.&lt;br /&gt;
[[Image:Networkserver_ex1v2.png|500px|center|link=]]&lt;br /&gt;
&lt;br /&gt;
===With the Phidget Network Server===&lt;br /&gt;
Your Phidgets are connected to a computer running the Phidget Network Server. The Phidget Network Server hosts a Phidget Server, which makes your Phidgets available to other computers on your network. &lt;br /&gt;
* Your application(s) can run on any computer that has access to the network the host is on.&lt;br /&gt;
* Multiple applications can access the Phidgets simultaneously, with some exceptions (e.g. motor controllers).&lt;br /&gt;
&lt;br /&gt;
[[Image:Networkserver_ex2v3.png|600px|center|link=]]&lt;br /&gt;
&lt;br /&gt;
==Phidget Network Server Hosts==&lt;br /&gt;
As mentioned above, a computer is required to host the Phidget Network Server. Any Windows, macOS, or Linux machine can act as a host. The Wireless VINT Hub or the PhidgetSBC4 are also excellent, compact choices.&lt;br /&gt;
[[Image:HUB5000_0.jpg|200px|thumb|link=]]&lt;br /&gt;
===Wireless VINT Hub===&lt;br /&gt;
The Wireless VINT Hub (HUB5000) has the Phidget Network Server built-in. Simply connect your Phidgets, power the device, and the Network Server starts automatically.&lt;br /&gt;
&lt;br /&gt;
This device supports both Ethernet and WiFi connections and provides a simple web interface to configure your Phidget Network Server. Check out the [{{SERVER}}/?prodid=1143 product page] for more information.&lt;br /&gt;
&lt;br /&gt;
[[Image:SBC3003_0.jpg|link=|thumb|300px]]&lt;br /&gt;
&lt;br /&gt;
===PhidgetSBC4===&lt;br /&gt;
The PhidgetSBC4 (SBC3003) has the Phidget Network Server built-in. Simply connect your Phidgets, power the device, and the Network Server starts automatically.&lt;br /&gt;
&lt;br /&gt;
This device supports both Ethernet and WiFi connections and provides a simple web interface to configure your Phidget Network Server. Additionally, you can connect USB Phidgets directly to this device and run application code on board. Check out the [{{SERVER}}/?prodid=969 product page] for more information.&lt;br /&gt;
&lt;br /&gt;
==Phidget Network Server Clients==&lt;br /&gt;
Client applications can run on any [[Operating_System_Support|supported operating system]] and can be written in any [[Programming_Resources|supported programming language]]. The client machine does &#039;&#039;&#039;not&#039;&#039;&#039; need to run a Phidget Network Server.&lt;br /&gt;
&lt;br /&gt;
==Learn More==&lt;br /&gt;
View our [[Network Server Guide|Phidget Network Server Guide]] for more in-depth information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Flow_Navigation_Buttons|{{Flow Page Number|{{PAGENAME}} }} }}&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Product_Lifecycle&amp;diff=35312</id>
		<title>Product Lifecycle</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Product_Lifecycle&amp;diff=35312"/>
		<updated>2025-07-31T19:46:48Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Lifecycle Stages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Products designed by Phidgets Inc. often have a life span of decades. Learn about our product lifecycle here.}}&lt;br /&gt;
__TOC__&lt;br /&gt;
[[Category:IntroGuide]]&lt;br /&gt;
[[Image:Lifecycle_1014_example.png|400px|link=https://cdn.phidgets.com/docs/images/7/77/Lifecycle_1014_example.png|thumb|&amp;lt;center&amp;gt;The [https://phidgets.com/?prodid=9 PhidgetInterfaceKit 0/0/4 (ID: 1014_0)] was first released over 20 years ago.&amp;lt;/center&amp;gt;]]&lt;br /&gt;
==Introduction==&lt;br /&gt;
Products designed and manufactured by Phidgets Inc. often have a life span of &#039;&#039;&#039;decades&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Many of our customers integrate our products into their own systems and devices, and they depend on us to continue manufacturing a particular SKU, or a drop-in replacement, for many years.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this guide, we will provide information about the systems in place at Phidgets Inc. surrounding product lifecycle.&lt;br /&gt;
==Lifecycle Example - PhidgetInterfaceKit 0/0/4 ==&lt;br /&gt;
As referenced in the image above, the PhidgetInterfaceKit 0/0/4 (ID:1014_0) was first released in 2002, and new revisions are still available today.&lt;br /&gt;
[[Image:Lifecycle_1014_functional.jpg|600px|link=https://cdn.phidgets.com/docs/images/7/7c/Lifecycle_1014_functional.jpg|center]] &lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;The 1014_0 circa 2002&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By examining the [[#Product History|product history]] of this device, we can gain detailed insights into how Phidgets Inc. manages the lifecycle of all products, and how customers are supported and protected along the way.&lt;br /&gt;
&lt;br /&gt;
===Product History===&lt;br /&gt;
[[Image:Lifecycle_1014_producthistory.png|400px|link=https://cdn.phidgets.com/docs/images/1/17/Lifecycle_1014_producthistory.png|thumb|&amp;lt;center&amp;gt;1014 Product History ([https://cdn.phidgets.com/docs/images/1/17/Lifecycle_1014_producthistory.png click to expand])&amp;lt;/center&amp;gt;]]&lt;br /&gt;
By clicking on the &#039;&#039;Specifications&#039;&#039; tab of the latest revision ([https://www.phidgets.com/?prodid=1228#Tab_Specifications ID: 1014_3]), and scrolling down to &#039;&#039;Product History&#039;&#039;, we can view the full history of this product.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There have been three revisions to the original board:&lt;br /&gt;
* &#039;&#039;&#039;1014_1&#039;&#039;&#039;: Larger terminal blocks were introduced in 2008 which increased the PCB size resulting in a [[#Breaking Changes|breaking change]].&lt;br /&gt;
* &#039;&#039;&#039;1014_2&#039;&#039;&#039;: The B-Type connector was changed to a mini-USB connector in 2010 resulting in a [[#Breaking Changes|breaking change]].&lt;br /&gt;
* &#039;&#039;&#039;1014_3&#039;&#039;&#039;: A VINT connector was added and support for Phidget21 was dropped in 2023 resulting in a [[#Breaking Changes|breaking change]].&lt;br /&gt;
&lt;br /&gt;
====Breaking Changes====&lt;br /&gt;
When a board has changed in a meaningful way, a &#039;&#039;breaking&#039;&#039; change has been made. Here are some examples of breaking changes:&lt;br /&gt;
* The shape, size, and/or mounting holes have changed&lt;br /&gt;
* Software support has changed (e.g. Phidget21 is no longer supported)&lt;br /&gt;
* Major specifications or performance of the product has changed&lt;br /&gt;
* Major features or functionality have been modified or removed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When a breaking change is made on a new revision of a product, we protect our customers in the following ways:&lt;br /&gt;
* Mark the older revision as [[#Not Recommended for New Design|Not Recommended for New Design (NRND)]] on our website&lt;br /&gt;
* Notify any high-volume customers&lt;br /&gt;
* Notify any customers who explicitly signed up for [[#Product Notifications|product notifications]]&lt;br /&gt;
* Begin protecting the stock of the older revision. Eventually, this revision of the product will be discontinued on our website, and will only be available through purchase orders&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This means that even if a breaking change is introduced, existing customers will be taken care of, oftentimes for years, until they can transition to a newer revision.&lt;br /&gt;
&lt;br /&gt;
===Result===&lt;br /&gt;
As we can see from the information above, the 1014 has been incredibly stable for over 20 years. This is common for all hardware designed and manufactured by Phidgets Inc.&lt;br /&gt;
&lt;br /&gt;
==Lifecycle Stages==&lt;br /&gt;
[[File:NRND_badge_ex3.png | link=https://cdn.phidgets.com/docs/images/a/a9/NRND_badge_ex3.png|thumb|&amp;lt;center&amp;gt;Not recommended for new design (NRND) product labelling.&amp;lt;/center&amp;gt;]]&lt;br /&gt;
When you are designing a new system that will use products from Phidgets Inc., it is important to understand the lifecycle of our products.&lt;br /&gt;
===Products Designed by Phidgets Inc.===&lt;br /&gt;
There are two general categories for products designed by Phidgets Inc.:&lt;br /&gt;
* Not recommended for new design (NRND)&lt;br /&gt;
* All other products&lt;br /&gt;
&lt;br /&gt;
====Not Recommended for New Design (NRND)====&lt;br /&gt;
Products labeled &#039;&#039;NRND&#039;&#039; are no longer being actively developed and should be avoided for new designs intended for long-term use, such as OEM applications or multi-year systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For existing designs that include a Phidget that has transitioned to NRND, we recommend the following:&lt;br /&gt;
* Sign up for [[#Product Notifications|product notifications]] if you haven&#039;t already&lt;br /&gt;
* [https://www.phidgets.com/?view=contact Contact us] to receive specific information and recommendations about your product&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generally, we aim to continue producing NRND products for as long as possible, though this is dependent on component availability and customer demand.&lt;br /&gt;
&lt;br /&gt;
====All Other Products====&lt;br /&gt;
If a product is not labeled &#039;&#039;NRND&#039;&#039;, we expect to keep the product in stock or offer a drop-in replacement for 5 to 10 years.&lt;br /&gt;
&lt;br /&gt;
If you are planning a new high-volume design, please [https://www.phidgets.com/?view=contact contact us] to discuss a particular product&#039;s roadmap.&lt;br /&gt;
&lt;br /&gt;
===Products From Other Suppliers===&lt;br /&gt;
We cannot provide a guarantee or roadmap on products from other suppliers (e.g. load cells, mechanical parts, RFID tags, etc.). We always aim to keep these products in stock, however, if a product is discontinued, [https://www.phidgets.com/?view=contact contact us] and we will help you find alternate sourcing.&lt;br /&gt;
&lt;br /&gt;
[[File:Lifecycle_notifications2.png|thumb|link=https://cdn.phidgets.com/docs/images/d/d0/Lifecycle_notifications.png|&amp;lt;center&amp;gt;Sign up for notifications using the button on a product page&amp;lt;/center&amp;gt;|450px]]&lt;br /&gt;
&lt;br /&gt;
==Product Notifications==&lt;br /&gt;
We strongly recommend that you subscribe to our product notifications. By doing this, you will receive important information about your chosen product, including: &lt;br /&gt;
* Firmware upgrades&lt;br /&gt;
* Product revisions and NRND transitions&lt;br /&gt;
* Stock alerts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To subscribe, navigate to the product page of your chosen product. Find and click on the &#039;&#039;Sign Up for Notifications&#039;&#039; button and follow the prompts.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:NRND_badge_ex3.png&amp;diff=35311</id>
		<title>File:NRND badge ex3.png</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:NRND_badge_ex3.png&amp;diff=35311"/>
		<updated>2025-07-31T19:46:29Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Product_Lifecycle&amp;diff=35310</id>
		<title>Product Lifecycle</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Product_Lifecycle&amp;diff=35310"/>
		<updated>2025-07-31T19:42:51Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Lifecycle Stages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Products designed by Phidgets Inc. often have a life span of decades. Learn about our product lifecycle here.}}&lt;br /&gt;
__TOC__&lt;br /&gt;
[[Category:IntroGuide]]&lt;br /&gt;
[[Image:Lifecycle_1014_example.png|400px|link=https://cdn.phidgets.com/docs/images/7/77/Lifecycle_1014_example.png|thumb|&amp;lt;center&amp;gt;The [https://phidgets.com/?prodid=9 PhidgetInterfaceKit 0/0/4 (ID: 1014_0)] was first released over 20 years ago.&amp;lt;/center&amp;gt;]]&lt;br /&gt;
==Introduction==&lt;br /&gt;
Products designed and manufactured by Phidgets Inc. often have a life span of &#039;&#039;&#039;decades&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Many of our customers integrate our products into their own systems and devices, and they depend on us to continue manufacturing a particular SKU, or a drop-in replacement, for many years.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this guide, we will provide information about the systems in place at Phidgets Inc. surrounding product lifecycle.&lt;br /&gt;
==Lifecycle Example - PhidgetInterfaceKit 0/0/4 ==&lt;br /&gt;
As referenced in the image above, the PhidgetInterfaceKit 0/0/4 (ID:1014_0) was first released in 2002, and new revisions are still available today.&lt;br /&gt;
[[Image:Lifecycle_1014_functional.jpg|600px|link=https://cdn.phidgets.com/docs/images/7/7c/Lifecycle_1014_functional.jpg|center]] &lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;The 1014_0 circa 2002&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By examining the [[#Product History|product history]] of this device, we can gain detailed insights into how Phidgets Inc. manages the lifecycle of all products, and how customers are supported and protected along the way.&lt;br /&gt;
&lt;br /&gt;
===Product History===&lt;br /&gt;
[[Image:Lifecycle_1014_producthistory.png|400px|link=https://cdn.phidgets.com/docs/images/1/17/Lifecycle_1014_producthistory.png|thumb|&amp;lt;center&amp;gt;1014 Product History ([https://cdn.phidgets.com/docs/images/1/17/Lifecycle_1014_producthistory.png click to expand])&amp;lt;/center&amp;gt;]]&lt;br /&gt;
By clicking on the &#039;&#039;Specifications&#039;&#039; tab of the latest revision ([https://www.phidgets.com/?prodid=1228#Tab_Specifications ID: 1014_3]), and scrolling down to &#039;&#039;Product History&#039;&#039;, we can view the full history of this product.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There have been three revisions to the original board:&lt;br /&gt;
* &#039;&#039;&#039;1014_1&#039;&#039;&#039;: Larger terminal blocks were introduced in 2008 which increased the PCB size resulting in a [[#Breaking Changes|breaking change]].&lt;br /&gt;
* &#039;&#039;&#039;1014_2&#039;&#039;&#039;: The B-Type connector was changed to a mini-USB connector in 2010 resulting in a [[#Breaking Changes|breaking change]].&lt;br /&gt;
* &#039;&#039;&#039;1014_3&#039;&#039;&#039;: A VINT connector was added and support for Phidget21 was dropped in 2023 resulting in a [[#Breaking Changes|breaking change]].&lt;br /&gt;
&lt;br /&gt;
====Breaking Changes====&lt;br /&gt;
When a board has changed in a meaningful way, a &#039;&#039;breaking&#039;&#039; change has been made. Here are some examples of breaking changes:&lt;br /&gt;
* The shape, size, and/or mounting holes have changed&lt;br /&gt;
* Software support has changed (e.g. Phidget21 is no longer supported)&lt;br /&gt;
* Major specifications or performance of the product has changed&lt;br /&gt;
* Major features or functionality have been modified or removed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When a breaking change is made on a new revision of a product, we protect our customers in the following ways:&lt;br /&gt;
* Mark the older revision as [[#Not Recommended for New Design|Not Recommended for New Design (NRND)]] on our website&lt;br /&gt;
* Notify any high-volume customers&lt;br /&gt;
* Notify any customers who explicitly signed up for [[#Product Notifications|product notifications]]&lt;br /&gt;
* Begin protecting the stock of the older revision. Eventually, this revision of the product will be discontinued on our website, and will only be available through purchase orders&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This means that even if a breaking change is introduced, existing customers will be taken care of, oftentimes for years, until they can transition to a newer revision.&lt;br /&gt;
&lt;br /&gt;
===Result===&lt;br /&gt;
As we can see from the information above, the 1014 has been incredibly stable for over 20 years. This is common for all hardware designed and manufactured by Phidgets Inc.&lt;br /&gt;
&lt;br /&gt;
==Lifecycle Stages==&lt;br /&gt;
[[File:NRND_badge_ex2.jpg|link=https://cdn.phidgets.com/docs/images/f/f0/NRND_badge_ex2.jpg|thumb|&amp;lt;center&amp;gt;Not recommended for new design (NRND) product labelling.&amp;lt;/center&amp;gt;]]&lt;br /&gt;
When you are designing a new system that will use products from Phidgets Inc., it is important to understand the lifecycle of our products.&lt;br /&gt;
===Products Designed by Phidgets Inc.===&lt;br /&gt;
There are two general categories for products designed by Phidgets Inc.:&lt;br /&gt;
* Not recommended for new design (NRND)&lt;br /&gt;
* All other products&lt;br /&gt;
&lt;br /&gt;
====Not Recommended for New Design (NRND)====&lt;br /&gt;
Products labeled &#039;&#039;NRND&#039;&#039; are no longer being actively developed and should be avoided for new designs intended for long-term use, such as OEM applications or multi-year systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For existing designs that include a Phidget that has transitioned to NRND, we recommend the following:&lt;br /&gt;
* Sign up for [[#Product Notifications|product notifications]] if you haven&#039;t already&lt;br /&gt;
* [https://www.phidgets.com/?view=contact Contact us] to receive specific information and recommendations about your product&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generally, we aim to continue producing NRND products for as long as possible, though this is dependent on component availability and customer demand.&lt;br /&gt;
&lt;br /&gt;
====All Other Products====&lt;br /&gt;
If a product is not labeled &#039;&#039;NRND&#039;&#039;, we expect to keep the product in stock or offer a drop-in replacement for 5 to 10 years.&lt;br /&gt;
&lt;br /&gt;
If you are planning a new high-volume design, please [https://www.phidgets.com/?view=contact contact us] to discuss a particular product&#039;s roadmap.&lt;br /&gt;
&lt;br /&gt;
===Products From Other Suppliers===&lt;br /&gt;
We cannot provide a guarantee or roadmap on products from other suppliers (e.g. load cells, mechanical parts, RFID tags, etc.). We always aim to keep these products in stock, however, if a product is discontinued, [https://www.phidgets.com/?view=contact contact us] and we will help you find alternate sourcing.&lt;br /&gt;
&lt;br /&gt;
[[File:Lifecycle_notifications2.png|thumb|link=https://cdn.phidgets.com/docs/images/d/d0/Lifecycle_notifications.png|&amp;lt;center&amp;gt;Sign up for notifications using the button on a product page&amp;lt;/center&amp;gt;|450px]]&lt;br /&gt;
&lt;br /&gt;
==Product Notifications==&lt;br /&gt;
We strongly recommend that you subscribe to our product notifications. By doing this, you will receive important information about your chosen product, including: &lt;br /&gt;
* Firmware upgrades&lt;br /&gt;
* Product revisions and NRND transitions&lt;br /&gt;
* Stock alerts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To subscribe, navigate to the product page of your chosen product. Find and click on the &#039;&#039;Sign Up for Notifications&#039;&#039; button and follow the prompts.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=File:NRND_badge_ex2.jpg&amp;diff=35309</id>
		<title>File:NRND badge ex2.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=File:NRND_badge_ex2.jpg&amp;diff=35309"/>
		<updated>2025-07-31T19:41:53Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Product_Lifecycle&amp;diff=35308</id>
		<title>Product Lifecycle</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Product_Lifecycle&amp;diff=35308"/>
		<updated>2025-07-31T19:40:13Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Not Recommended for New Design (NRND) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Products designed by Phidgets Inc. often have a life span of decades. Learn about our product lifecycle here.}}&lt;br /&gt;
__TOC__&lt;br /&gt;
[[Category:IntroGuide]]&lt;br /&gt;
[[Image:Lifecycle_1014_example.png|400px|link=https://cdn.phidgets.com/docs/images/7/77/Lifecycle_1014_example.png|thumb|&amp;lt;center&amp;gt;The [https://phidgets.com/?prodid=9 PhidgetInterfaceKit 0/0/4 (ID: 1014_0)] was first released over 20 years ago.&amp;lt;/center&amp;gt;]]&lt;br /&gt;
==Introduction==&lt;br /&gt;
Products designed and manufactured by Phidgets Inc. often have a life span of &#039;&#039;&#039;decades&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Many of our customers integrate our products into their own systems and devices, and they depend on us to continue manufacturing a particular SKU, or a drop-in replacement, for many years.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this guide, we will provide information about the systems in place at Phidgets Inc. surrounding product lifecycle.&lt;br /&gt;
==Lifecycle Example - PhidgetInterfaceKit 0/0/4 ==&lt;br /&gt;
As referenced in the image above, the PhidgetInterfaceKit 0/0/4 (ID:1014_0) was first released in 2002, and new revisions are still available today.&lt;br /&gt;
[[Image:Lifecycle_1014_functional.jpg|600px|link=https://cdn.phidgets.com/docs/images/7/7c/Lifecycle_1014_functional.jpg|center]] &lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;The 1014_0 circa 2002&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By examining the [[#Product History|product history]] of this device, we can gain detailed insights into how Phidgets Inc. manages the lifecycle of all products, and how customers are supported and protected along the way.&lt;br /&gt;
&lt;br /&gt;
===Product History===&lt;br /&gt;
[[Image:Lifecycle_1014_producthistory.png|400px|link=https://cdn.phidgets.com/docs/images/1/17/Lifecycle_1014_producthistory.png|thumb|&amp;lt;center&amp;gt;1014 Product History ([https://cdn.phidgets.com/docs/images/1/17/Lifecycle_1014_producthistory.png click to expand])&amp;lt;/center&amp;gt;]]&lt;br /&gt;
By clicking on the &#039;&#039;Specifications&#039;&#039; tab of the latest revision ([https://www.phidgets.com/?prodid=1228#Tab_Specifications ID: 1014_3]), and scrolling down to &#039;&#039;Product History&#039;&#039;, we can view the full history of this product.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There have been three revisions to the original board:&lt;br /&gt;
* &#039;&#039;&#039;1014_1&#039;&#039;&#039;: Larger terminal blocks were introduced in 2008 which increased the PCB size resulting in a [[#Breaking Changes|breaking change]].&lt;br /&gt;
* &#039;&#039;&#039;1014_2&#039;&#039;&#039;: The B-Type connector was changed to a mini-USB connector in 2010 resulting in a [[#Breaking Changes|breaking change]].&lt;br /&gt;
* &#039;&#039;&#039;1014_3&#039;&#039;&#039;: A VINT connector was added and support for Phidget21 was dropped in 2023 resulting in a [[#Breaking Changes|breaking change]].&lt;br /&gt;
&lt;br /&gt;
====Breaking Changes====&lt;br /&gt;
When a board has changed in a meaningful way, a &#039;&#039;breaking&#039;&#039; change has been made. Here are some examples of breaking changes:&lt;br /&gt;
* The shape, size, and/or mounting holes have changed&lt;br /&gt;
* Software support has changed (e.g. Phidget21 is no longer supported)&lt;br /&gt;
* Major specifications or performance of the product has changed&lt;br /&gt;
* Major features or functionality have been modified or removed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When a breaking change is made on a new revision of a product, we protect our customers in the following ways:&lt;br /&gt;
* Mark the older revision as [[#Not Recommended for New Design|Not Recommended for New Design (NRND)]] on our website&lt;br /&gt;
* Notify any high-volume customers&lt;br /&gt;
* Notify any customers who explicitly signed up for [[#Product Notifications|product notifications]]&lt;br /&gt;
* Begin protecting the stock of the older revision. Eventually, this revision of the product will be discontinued on our website, and will only be available through purchase orders&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This means that even if a breaking change is introduced, existing customers will be taken care of, oftentimes for years, until they can transition to a newer revision.&lt;br /&gt;
&lt;br /&gt;
===Result===&lt;br /&gt;
As we can see from the information above, the 1014 has been incredibly stable for over 20 years. This is common for all hardware designed and manufactured by Phidgets Inc.&lt;br /&gt;
&lt;br /&gt;
==Lifecycle Stages==&lt;br /&gt;
[[File:NRND_badge_ex.png|link=https://cdn.phidgets.com/docs/images/a/ad/NRND_badge_ex.png|thumb|&amp;lt;center&amp;gt;Not recommended for new design (NRND) product labelling.&amp;lt;/center&amp;gt;]]&lt;br /&gt;
When you are designing a new system that will use products from Phidgets Inc., it is important to understand the lifecycle of our products.&lt;br /&gt;
===Products Designed by Phidgets Inc.===&lt;br /&gt;
There are two general categories for products designed by Phidgets Inc.:&lt;br /&gt;
* Not recommended for new design (NRND)&lt;br /&gt;
* All other products&lt;br /&gt;
&lt;br /&gt;
====Not Recommended for New Design (NRND)====&lt;br /&gt;
Products labeled &#039;&#039;NRND&#039;&#039; are no longer being actively developed and should be avoided for new designs intended for long-term use, such as OEM applications or multi-year systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For existing designs that include a Phidget that has transitioned to NRND, we recommend the following:&lt;br /&gt;
* Sign up for [[#Product Notifications|product notifications]] if you haven&#039;t already&lt;br /&gt;
* [https://www.phidgets.com/?view=contact Contact us] to receive specific information and recommendations about your product&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generally, we aim to continue producing NRND products for as long as possible, though this is dependent on component availability and customer demand.&lt;br /&gt;
&lt;br /&gt;
====All Other Products====&lt;br /&gt;
If a product is not labeled &#039;&#039;NRND&#039;&#039;, we expect to keep the product in stock or offer a drop-in replacement for 5 to 10 years.&lt;br /&gt;
&lt;br /&gt;
If you are planning a new high-volume design, please [https://www.phidgets.com/?view=contact contact us] to discuss a particular product&#039;s roadmap.&lt;br /&gt;
&lt;br /&gt;
===Products From Other Suppliers===&lt;br /&gt;
We cannot provide a guarantee or roadmap on products from other suppliers (e.g. load cells, mechanical parts, RFID tags, etc.). We always aim to keep these products in stock, however, if a product is discontinued, [https://www.phidgets.com/?view=contact contact us] and we will help you find alternate sourcing.&lt;br /&gt;
&lt;br /&gt;
[[File:Lifecycle_notifications2.png|thumb|link=https://cdn.phidgets.com/docs/images/d/d0/Lifecycle_notifications.png|&amp;lt;center&amp;gt;Sign up for notifications using the button on a product page&amp;lt;/center&amp;gt;|450px]]&lt;br /&gt;
&lt;br /&gt;
==Product Notifications==&lt;br /&gt;
We strongly recommend that you subscribe to our product notifications. By doing this, you will receive important information about your chosen product, including: &lt;br /&gt;
* Firmware upgrades&lt;br /&gt;
* Product revisions and NRND transitions&lt;br /&gt;
* Stock alerts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To subscribe, navigate to the product page of your chosen product. Find and click on the &#039;&#039;Sign Up for Notifications&#039;&#039; button and follow the prompts.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Product_Lifecycle&amp;diff=35307</id>
		<title>Product Lifecycle</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Product_Lifecycle&amp;diff=35307"/>
		<updated>2025-07-31T19:38:40Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* All Other Products */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Products designed by Phidgets Inc. often have a life span of decades. Learn about our product lifecycle here.}}&lt;br /&gt;
__TOC__&lt;br /&gt;
[[Category:IntroGuide]]&lt;br /&gt;
[[Image:Lifecycle_1014_example.png|400px|link=https://cdn.phidgets.com/docs/images/7/77/Lifecycle_1014_example.png|thumb|&amp;lt;center&amp;gt;The [https://phidgets.com/?prodid=9 PhidgetInterfaceKit 0/0/4 (ID: 1014_0)] was first released over 20 years ago.&amp;lt;/center&amp;gt;]]&lt;br /&gt;
==Introduction==&lt;br /&gt;
Products designed and manufactured by Phidgets Inc. often have a life span of &#039;&#039;&#039;decades&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Many of our customers integrate our products into their own systems and devices, and they depend on us to continue manufacturing a particular SKU, or a drop-in replacement, for many years.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this guide, we will provide information about the systems in place at Phidgets Inc. surrounding product lifecycle.&lt;br /&gt;
==Lifecycle Example - PhidgetInterfaceKit 0/0/4 ==&lt;br /&gt;
As referenced in the image above, the PhidgetInterfaceKit 0/0/4 (ID:1014_0) was first released in 2002, and new revisions are still available today.&lt;br /&gt;
[[Image:Lifecycle_1014_functional.jpg|600px|link=https://cdn.phidgets.com/docs/images/7/7c/Lifecycle_1014_functional.jpg|center]] &lt;br /&gt;
&amp;lt;center&amp;gt;&#039;&#039;The 1014_0 circa 2002&#039;&#039;&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By examining the [[#Product History|product history]] of this device, we can gain detailed insights into how Phidgets Inc. manages the lifecycle of all products, and how customers are supported and protected along the way.&lt;br /&gt;
&lt;br /&gt;
===Product History===&lt;br /&gt;
[[Image:Lifecycle_1014_producthistory.png|400px|link=https://cdn.phidgets.com/docs/images/1/17/Lifecycle_1014_producthistory.png|thumb|&amp;lt;center&amp;gt;1014 Product History ([https://cdn.phidgets.com/docs/images/1/17/Lifecycle_1014_producthistory.png click to expand])&amp;lt;/center&amp;gt;]]&lt;br /&gt;
By clicking on the &#039;&#039;Specifications&#039;&#039; tab of the latest revision ([https://www.phidgets.com/?prodid=1228#Tab_Specifications ID: 1014_3]), and scrolling down to &#039;&#039;Product History&#039;&#039;, we can view the full history of this product.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There have been three revisions to the original board:&lt;br /&gt;
* &#039;&#039;&#039;1014_1&#039;&#039;&#039;: Larger terminal blocks were introduced in 2008 which increased the PCB size resulting in a [[#Breaking Changes|breaking change]].&lt;br /&gt;
* &#039;&#039;&#039;1014_2&#039;&#039;&#039;: The B-Type connector was changed to a mini-USB connector in 2010 resulting in a [[#Breaking Changes|breaking change]].&lt;br /&gt;
* &#039;&#039;&#039;1014_3&#039;&#039;&#039;: A VINT connector was added and support for Phidget21 was dropped in 2023 resulting in a [[#Breaking Changes|breaking change]].&lt;br /&gt;
&lt;br /&gt;
====Breaking Changes====&lt;br /&gt;
When a board has changed in a meaningful way, a &#039;&#039;breaking&#039;&#039; change has been made. Here are some examples of breaking changes:&lt;br /&gt;
* The shape, size, and/or mounting holes have changed&lt;br /&gt;
* Software support has changed (e.g. Phidget21 is no longer supported)&lt;br /&gt;
* Major specifications or performance of the product has changed&lt;br /&gt;
* Major features or functionality have been modified or removed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When a breaking change is made on a new revision of a product, we protect our customers in the following ways:&lt;br /&gt;
* Mark the older revision as [[#Not Recommended for New Design|Not Recommended for New Design (NRND)]] on our website&lt;br /&gt;
* Notify any high-volume customers&lt;br /&gt;
* Notify any customers who explicitly signed up for [[#Product Notifications|product notifications]]&lt;br /&gt;
* Begin protecting the stock of the older revision. Eventually, this revision of the product will be discontinued on our website, and will only be available through purchase orders&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This means that even if a breaking change is introduced, existing customers will be taken care of, oftentimes for years, until they can transition to a newer revision.&lt;br /&gt;
&lt;br /&gt;
===Result===&lt;br /&gt;
As we can see from the information above, the 1014 has been incredibly stable for over 20 years. This is common for all hardware designed and manufactured by Phidgets Inc.&lt;br /&gt;
&lt;br /&gt;
==Lifecycle Stages==&lt;br /&gt;
[[File:NRND_badge_ex.png|link=https://cdn.phidgets.com/docs/images/a/ad/NRND_badge_ex.png|thumb|&amp;lt;center&amp;gt;Not recommended for new design (NRND) product labelling.&amp;lt;/center&amp;gt;]]&lt;br /&gt;
When you are designing a new system that will use products from Phidgets Inc., it is important to understand the lifecycle of our products.&lt;br /&gt;
===Products Designed by Phidgets Inc.===&lt;br /&gt;
There are two general categories for products designed by Phidgets Inc.:&lt;br /&gt;
* Not recommended for new design (NRND)&lt;br /&gt;
* All other products&lt;br /&gt;
&lt;br /&gt;
====Not Recommended for New Design (NRND)====&lt;br /&gt;
Products labeled &#039;&#039;NRND&#039;&#039; are no longer being actively developed and should be avoided for new designs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For existing designs that include a Phidget that has transitioned to NRND, we recommend the following:&lt;br /&gt;
* Sign up for [[#Product Notifications|product notifications]] if you haven&#039;t already&lt;br /&gt;
* [https://www.phidgets.com/?view=contact Contact us] to receive specific information and recommendations about your product&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generally, we aim to continue producing NRND products for as long as possible, though this is dependent on component availability and customer demand.&lt;br /&gt;
&lt;br /&gt;
====All Other Products====&lt;br /&gt;
If a product is not labeled &#039;&#039;NRND&#039;&#039;, we expect to keep the product in stock or offer a drop-in replacement for 5 to 10 years.&lt;br /&gt;
&lt;br /&gt;
If you are planning a new high-volume design, please [https://www.phidgets.com/?view=contact contact us] to discuss a particular product&#039;s roadmap.&lt;br /&gt;
&lt;br /&gt;
===Products From Other Suppliers===&lt;br /&gt;
We cannot provide a guarantee or roadmap on products from other suppliers (e.g. load cells, mechanical parts, RFID tags, etc.). We always aim to keep these products in stock, however, if a product is discontinued, [https://www.phidgets.com/?view=contact contact us] and we will help you find alternate sourcing.&lt;br /&gt;
&lt;br /&gt;
[[File:Lifecycle_notifications2.png|thumb|link=https://cdn.phidgets.com/docs/images/d/d0/Lifecycle_notifications.png|&amp;lt;center&amp;gt;Sign up for notifications using the button on a product page&amp;lt;/center&amp;gt;|450px]]&lt;br /&gt;
&lt;br /&gt;
==Product Notifications==&lt;br /&gt;
We strongly recommend that you subscribe to our product notifications. By doing this, you will receive important information about your chosen product, including: &lt;br /&gt;
* Firmware upgrades&lt;br /&gt;
* Product revisions and NRND transitions&lt;br /&gt;
* Stock alerts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To subscribe, navigate to the product page of your chosen product. Find and click on the &#039;&#039;Sign Up for Notifications&#039;&#039; button and follow the prompts.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Template:DCMotor_RescaleFactor&amp;diff=35304</id>
		<title>Template:DCMotor RescaleFactor</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Template:DCMotor_RescaleFactor&amp;diff=35304"/>
		<updated>2025-06-23T22:35:48Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller Type !! Related Video&lt;br /&gt;
|-&lt;br /&gt;
| DC Motor|| {{#ev:youtube|i_KKu2eQcRw|rel=0}}&lt;br /&gt;
|-&lt;br /&gt;
| Brushless DC Motor|| {{#ev:youtube|i_KKu2eQcRw|rel=0}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{#switch: {{{1}}}&lt;br /&gt;
 | position = The Rescale Factor allows you to change the units of the following properties:&lt;br /&gt;
* Target Position, Position, Expected Position, Deadband&lt;br /&gt;
* VelocityLimit, Acceleration&lt;br /&gt;
 | velocity = The Rescale Factor allows you to change the units of the following properties:&lt;br /&gt;
* Target Velocity, Velocity, Expected Velocity, Deadband&lt;br /&gt;
* Acceleration&lt;br /&gt;
 | #default = Unexpected error.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
By default, the units will be in encoder pulses which is dictated by your encoder and are often non-intuitive. We recommend utilizing the Rescale Factor so your software is easier to understand.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Template:DCMotor_RescaleFactor&amp;diff=35303</id>
		<title>Template:DCMotor RescaleFactor</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Template:DCMotor_RescaleFactor&amp;diff=35303"/>
		<updated>2025-06-23T22:32:41Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller Type !! Related Video&lt;br /&gt;
|-&lt;br /&gt;
| DC Motor|| {{#ev:youtube|i_KKu2eQcRw|rel=0}}&lt;br /&gt;
|-&lt;br /&gt;
| BLDC Motor|| {{#ev:youtube|i_KKu2eQcRw|rel=0}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
{{#switch: {{{1}}}&lt;br /&gt;
 | position = The Rescale Factor allows you to change the units of the following properties:&lt;br /&gt;
* Target Position, Position, Expected Position, Deadband&lt;br /&gt;
* VelocityLimit, Acceleration&lt;br /&gt;
 | velocity = The Rescale Factor allows you to change the units of the following properties:&lt;br /&gt;
* Target Velocity, Velocity, Expected Velocity, Deadband&lt;br /&gt;
* Acceleration&lt;br /&gt;
 | #default = Unexpected error.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
By default, the units will be in encoder pulses which is dictated by your encoder and are often non-intuitive. We recommend utilizing the Rescale Factor so your software is easier to understand.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=BLDCMotor_API_Guide&amp;diff=35302</id>
		<title>BLDCMotor API Guide</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=BLDCMotor_API_Guide&amp;diff=35302"/>
		<updated>2025-06-23T22:30:36Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Rescale Factor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Get started with your Brushless DC Motor Phidget}}&lt;br /&gt;
[[Category:IntroGuide]]&lt;br /&gt;
&amp;lt;div class=&amp;quot;nonumtoc&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;toclimit-4&amp;quot;&amp;gt;&lt;br /&gt;
=Introduction=&lt;br /&gt;
[[Image:DCC1120_0.png|thumb|link=https://cdn.phidgets.com/docs/images/3/38/DCC1120_0.png|&amp;lt;center&amp;gt;30V 50A Brushless DC Motor Phidget (DCC1120_0)&amp;lt;/center&amp;gt;]]&lt;br /&gt;
This guide will provide information about the Brushless DC Motor (BLDC) API to get you up and running with your new BLDC Motor Phidget.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before starting this guide, visit the Quick Start Guide on your BLDC Motor Phidget&#039;s product page for information about wiring and power.&lt;br /&gt;
&lt;br /&gt;
==Guide Compatibility==&lt;br /&gt;
&amp;lt;tabber&amp;gt;&lt;br /&gt;
Info=&lt;br /&gt;
&#039;&#039;Select your controller for compatibility information relating to this guide.&#039;&#039;&lt;br /&gt;
|-|&lt;br /&gt;
DCC1120=&lt;br /&gt;
[[Image:DCC1120_0.png|link=https://cdn.phidgets.com/docs/images/3/38/DCC1120_0.png|thumb|200px|[{{SERVER}}/?prodid=1334 30V 50A Brushless DC Motor Phidget (DCC1120_0)]]]&lt;br /&gt;
The [{{SERVER}}/?prodid=1334 30V 50A Brushless DC Motor Phidget (DCC1120_0)] is fully compatible with this guide.&lt;br /&gt;
|-|&lt;br /&gt;
DCC1100=&lt;br /&gt;
[[Image:DCC1100_0.jpg|link=https://cdn.phidgets.com/docs/images/8/87/DCC1100_0.jpg|thumb|200px|[https://www.phidgets.com/?prodid=1013 Brushless DC Motor Phidget (DCC1100_0)]]]&lt;br /&gt;
[https://www.phidgets.com/?prodid=1013 Brushless DC Motor Phidget (DCC1100_0)] considerations:&lt;br /&gt;
* Stall Velocity is not covered in this guide. Information on this topic is available in the device API.&lt;br /&gt;
|-|&lt;br /&gt;
&amp;lt;/tabber&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=BLDCMotor API Overview=&lt;br /&gt;
==Phidget Control Panel==&lt;br /&gt;
After wiring your BLDC Motor Phidget, we recommend opening the [https://www.phidgets.com/docs/Phidget_Control_Panel Phidget Control Panel] on a Windows computer to experiment with key features.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:DCC1120_0_Panel.png|center|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When the BLDC Motor Phidget is powered, it will appear up on the Phidget Control Panel device list as shown above. Double-click on the &#039;&#039;BLDC Motor Controller&#039;&#039; entry to view the program.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:DCC1120_0_BLDC.png|800px|center|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After opening the program, you will see the screen shown above. The program is split into multiple sections to help you get familiar with your motor controller.&lt;br /&gt;
#Phidget Info&lt;br /&gt;
#Motor Status&lt;br /&gt;
#Controls&lt;br /&gt;
#Configuration&lt;br /&gt;
&lt;br /&gt;
In this guide, we will focus on the areas that contain important information about controlling your Brushless DC motor. For information about the Phidget Info section, and the Phidget Control Panel in general, visit our [https://www.phidgets.com/docs/Phidget_Control_Panel Phidget Control Panel] Page.&lt;br /&gt;
&lt;br /&gt;
==Controls==&lt;br /&gt;
{{DCBLDCMotor_Controls}}&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
This area of the program allows you to try out different configurations with your BLDC Motor Phidget to determine the best fit for your application.&lt;br /&gt;
&lt;br /&gt;
===Drive Mode===&lt;br /&gt;
{{DCBLDCMotor_DriveMode|bldc}}&lt;br /&gt;
&lt;br /&gt;
===Rescale Factor===&lt;br /&gt;
&amp;lt;center&amp;gt;{{#ev:youtube|SbO3hAuYsAE|rel=0}}&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Rescale Factor allows you to change the units of the following properties:&lt;br /&gt;
* [[#Position|Position]]&lt;br /&gt;
&lt;br /&gt;
By default, the units will be in commutations which is dictated by the number of poles/phases your motor and are often non-intuitive. We recommend utilizing the Rescale Factor so your software is easier to understand.&lt;br /&gt;
&lt;br /&gt;
====Example Calculations====&lt;br /&gt;
Generally, most users will prefer units of degrees or rotations. To determine an appropriate Rescale Factor, you will need to know the following values:&lt;br /&gt;
*Commutations per revolution, equivalent to the number of poles multiplied by the number of phases&lt;br /&gt;
*Gearbox ratio (if applicable)&lt;br /&gt;
&lt;br /&gt;
These values will be available from manufacturer data sheets, or directly on the motor.&lt;br /&gt;
&lt;br /&gt;
=====Converting to Degrees=====&lt;br /&gt;
Specifications of system:&lt;br /&gt;
* Motor gear ratio: 10:1&lt;br /&gt;
* Motor poles: 2&lt;br /&gt;
* Motor phases: 3&lt;br /&gt;
&lt;br /&gt;
Rescale Factor = 360 / (10&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;2&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;3) = &#039;&#039;&#039;6.0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====Converting to Rotations=====&lt;br /&gt;
Specifications of system:&lt;br /&gt;
* Motor gear ratio: 10:1&lt;br /&gt;
* Motor poles: 2&lt;br /&gt;
* Motor phases: 3&lt;br /&gt;
&lt;br /&gt;
Rescale Factor = 1 / (10&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;2&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;3) = &#039;&#039;&#039;0.016666667&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Braking Enabled===&lt;br /&gt;
{{DCBLDCMotor_BrakingEnabled}}&lt;br /&gt;
&lt;br /&gt;
===Surge Current Limit===&lt;br /&gt;
{{DCBLDCMotor_SurgeCurrentLimit}}&lt;br /&gt;
&lt;br /&gt;
===Acceleration===&lt;br /&gt;
{{DCBLDCMotor_Acceleration}}&lt;br /&gt;
&lt;br /&gt;
===Data Interval===&lt;br /&gt;
{{DCBLDCMotor_DataInterval}}&lt;br /&gt;
&lt;br /&gt;
==Motor Status==&lt;br /&gt;
This area of the program shows information that has been sent back from the BLDC Motor Phidget.&lt;br /&gt;
===Velocity===&lt;br /&gt;
{{DCMotor_VelocityStatus}}&lt;br /&gt;
&lt;br /&gt;
===Braking Strength===&lt;br /&gt;
{{DCMotor_BrakingStrength}}&lt;br /&gt;
&lt;br /&gt;
===Position===&lt;br /&gt;
The most recent Position value reported by the controller. The Position is calculated using Hall Effect sensors mounted inside the motor, therefore, the resolution of the position depends on the motor you are using.&lt;br /&gt;
&lt;br /&gt;
====Other Considerations====&lt;br /&gt;
* {{DCMotor_RescaleFactorNote}}&lt;br /&gt;
* Consider using an encoder for more accurate position information.&lt;br /&gt;
&lt;br /&gt;
===Active Current Limit===&lt;br /&gt;
{{DCMotor_ActiveCurrentLimit}}&lt;br /&gt;
&lt;br /&gt;
===Motor Inductance===&lt;br /&gt;
{{DCMotor_MotorInductance}}&lt;br /&gt;
&lt;br /&gt;
==Failsafe==&lt;br /&gt;
{{DCMotor_Failsafe}}&lt;br /&gt;
&lt;br /&gt;
===E-Stop===&lt;br /&gt;
{{DCMotor_ESTOP|bldc}}&lt;br /&gt;
&lt;br /&gt;
==Errors==&lt;br /&gt;
{{DCMotor_Errors|bldc}}&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Google_Apps_Script_and_Phidgets&amp;diff=35299</id>
		<title>Google Apps Script and Phidgets</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Google_Apps_Script_and_Phidgets&amp;diff=35299"/>
		<updated>2025-06-18T22:11:15Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Project]]&lt;br /&gt;
{{#seo:|keywords=JavaScript}}&lt;br /&gt;
{{#seo:|description=Log data to a Google Sheet with Phidgets and JavaScript.}}&lt;br /&gt;
[[Image:Google_Apps_Script.png|400px|link=|thumb|&amp;lt;center&amp;gt;Google Apps Script&amp;lt;/center&amp;gt;]]&lt;br /&gt;
==Introduction==&lt;br /&gt;
Phidgets provides a JavaScript library for browser and Node.js applications. In this project, we&#039;ll create a browser application using Google Apps Script and log data from a Light Phidget to a Google Sheets spreadsheet.&lt;br /&gt;
===References===&lt;br /&gt;
[https://developers.google.com/apps-script/guides/web Apps Script - Web Apps Guide]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Demonstration==&lt;br /&gt;
&amp;lt;center&amp;gt;{{#ev:youtube|V1Q93jao85w|||||rel=0}}&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Connect Phidget Devices==&lt;br /&gt;
In this project, we will be using the [{{SERVER}}/?prodid=707 Light Phidget (LUX1000_0)] connected to a [{{SERVER}}/?prodid=1289 VINT Hub Phidget (HUB0002_0)].&lt;br /&gt;
&lt;br /&gt;
[[Image:LUX1000_setup_whitecable.jpg|600px|link=]]&lt;br /&gt;
&lt;br /&gt;
==Prepare Apps Script Environment==&lt;br /&gt;
===Start A New Spreadsheet===&lt;br /&gt;
Start by creating a new spreadsheet. This spreadsheet will be used to store sensor data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newspreadsheet.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
===Create Apps Script===&lt;br /&gt;
Name your spreadsheet and then navigate to &#039;&#039;&#039;Extensions &amp;gt; Apps Script&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newappsscript.png|center|500px||link=]]&lt;br /&gt;
&lt;br /&gt;
===Add HTML File===&lt;br /&gt;
Name your Apps Script project and click on the &#039;&#039;&#039;+&#039;&#039;&#039; symbol to add an HTML file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newhtml.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Name the file &#039;&#039;&#039;index.html&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_namehtml.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
==Modify Code==&lt;br /&gt;
===Code.gs===&lt;br /&gt;
Navigate to &#039;&#039;&#039;Code.gs&#039;&#039;&#039; and replace the contents with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=js&amp;gt;&lt;br /&gt;
function doGet(e) {&lt;br /&gt;
  var htmlOutput = HtmlService.createHtmlOutputFromFile(&#039;index&#039;);&lt;br /&gt;
  return htmlOutput;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function writeData(data, location) {&lt;br /&gt;
    var spreadsheetId = &#039;spreadsheetID&#039;; // Replace with your spreadsheet ID&lt;br /&gt;
    var sheetName = &#039;Sheet1&#039;; // Replace with your sheet name&lt;br /&gt;
    &lt;br /&gt;
    var spreadsheet = SpreadsheetApp.openById(spreadsheetId);&lt;br /&gt;
    var sheet = spreadsheet.getSheetByName(sheetName);&lt;br /&gt;
    sheet.getRange(location).setValue(data)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Spreadsheet ID====&lt;br /&gt;
You can find the spreadsheet ID by navigating to your spreadsheet and copying the string of letters and numbers between &#039;&#039;&#039;/d/&#039;&#039;&#039; and &#039;&#039;&#039;/edit&#039;&#039;&#039; in the URL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_spreadsheetid.png|center|500px|link=https://cdn.phidgets.com/docs/images/3/3f/Project_appscript_spreadsheetid.png]]&lt;br /&gt;
&lt;br /&gt;
===index.html===&lt;br /&gt;
Navigate to &#039;&#039;&#039;index.html&#039;&#039;&#039; and replace the contents with the following.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=js&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;head&amp;gt;&lt;br /&gt;
      &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;title&amp;gt;Light Sensor Example&amp;lt;/title&amp;gt;&lt;br /&gt;
   &amp;lt;/head&amp;gt;&lt;br /&gt;
   &amp;lt;body&amp;gt;&lt;br /&gt;
      &amp;lt;button id=&amp;quot;grant-usb-access&amp;quot;&amp;gt;Connect USB Device&amp;lt;/button&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;button onclick=&amp;quot;runExample()&amp;quot;&amp;gt;Run Example&amp;lt;/button&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Sensor Data: &amp;lt;/label&amp;gt;&amp;lt;label id=&amp;quot;sensorLabel&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;checkbox&amp;quot; id=&amp;quot;logCheckbox&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Log to File&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;script src=&amp;quot;https://unpkg.com/phidget22@3.x/browser/phidget22.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
      &amp;lt;script&amp;gt;&lt;br /&gt;
         (async function () {&lt;br /&gt;
         const illuminanceChangeDataEl = document.getElementById(&amp;quot;sensorLabel&amp;quot;);&lt;br /&gt;
           const checkbox = document.getElementById(&amp;quot;logCheckbox&amp;quot;);&lt;br /&gt;
           var index = 0;&lt;br /&gt;
         &lt;br /&gt;
         function onLightSensor0_IlluminanceChange(illuminance) {&lt;br /&gt;
         illuminanceChangeDataEl.textContent = illuminance.toString() + &#039;lx&#039;;                &lt;br /&gt;
             if (checkbox.checked) {&lt;br /&gt;
               google.script.run.writeData(illuminance.toString(), &amp;quot;A&amp;quot; + index++) &lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         &lt;br /&gt;
         try {&lt;br /&gt;
         const conn = new phidget22.USBConnection();&lt;br /&gt;
         await conn.connect();&lt;br /&gt;
         &lt;br /&gt;
         const grantAccessBtn = document.getElementById(&#039;grant-usb-access&#039;);&lt;br /&gt;
         grantAccessBtn.addEventListener(&#039;click&#039;, () =&amp;gt; conn.requestWebUSBDeviceAccess());&lt;br /&gt;
         &lt;br /&gt;
         const lightSensor0 = new phidget22.LightSensor();&lt;br /&gt;
         &lt;br /&gt;
         lightSensor0.onIlluminanceChange = onLightSensor0_IlluminanceChange;&lt;br /&gt;
         &lt;br /&gt;
         await lightSensor0.open(30000);&lt;br /&gt;
             lightSensor0.setDataInterval(1000);&lt;br /&gt;
         } catch(err) {&lt;br /&gt;
         console.error(&#039;Phidget error:&#039;, err);&lt;br /&gt;
         }&lt;br /&gt;
         &lt;br /&gt;
         })();&lt;br /&gt;
      &amp;lt;/script&amp;gt;&lt;br /&gt;
   &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====USB vs Network Server Connection====&lt;br /&gt;
When using the Phidgets with JavaScript, you can connect to devices directly via USB or remotely through the Phidget Network Server. Depending on what you choose, this line of code will change:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=js&amp;gt;&lt;br /&gt;
const conn = new phidget22.USBConnection(); //Use when connecting directly via USB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=js&amp;gt;&lt;br /&gt;
const conn = new phidget22.NetworkConnection(5661, &#039;localhost&#039;); //Use when connecting through the Phidget Network Server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, we are connecting directly via USB, so we use the first option. For more information, visit our [{{SERVER}}/docs/Language_-_JavaScript JavaScript page].&lt;br /&gt;
&lt;br /&gt;
==Deploy Web App==&lt;br /&gt;
To deploy the app, find the &#039;&#039;&#039;Deploy&#039;&#039;&#039; button and select &#039;&#039;&#039;New Deployment&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newdeployment.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Select &#039;&#039;&#039;Web App&#039;&#039;&#039; as the type, provide a description, and press &#039;&#039;&#039;Deploy&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newdeployment2.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Authorization is required as the web app will access a Google Sheet:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newdeployment_auth.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After authorizing, a URL for your web app will be generated:&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newdeployment_url.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
==Request USB Device Access==&lt;br /&gt;
The web app provides a &#039;&#039;&#039;Connect USB Device&#039;&#039;&#039; button:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_webapp.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to access Phidget devices over a [{{SERVER}}//docs/Language_-_JavaScript#USB_Connection USB Connection], websites must gain permission from the user through an interactive element, like a button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_webapp_usbauth.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
===Run Example===&lt;br /&gt;
After granting access, the &#039;&#039;&#039;Run Example&#039;&#039;&#039; button can be pressed, and data will stream from the Phidget device to your browser application:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_webapp_data.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check the &#039;&#039;&#039;Log to File&#039;&#039;&#039; box and data will be streamed to your spreadsheet.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Google_Apps_Script_and_Phidgets&amp;diff=35298</id>
		<title>Google Apps Script and Phidgets</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Google_Apps_Script_and_Phidgets&amp;diff=35298"/>
		<updated>2025-06-16T23:01:13Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Connect Phidget Devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Project]]&lt;br /&gt;
{{#seo:|keywords=JavaScript}}&lt;br /&gt;
{{#seo:|description=Log data to a Google Sheet with Phidgets and JavaScript.}}&lt;br /&gt;
[[Image:Google_Apps_Script.png|400px|link=|thumb|&amp;lt;center&amp;gt;Google Apps Script&amp;lt;/center&amp;gt;]]&lt;br /&gt;
==Introduction==&lt;br /&gt;
Phidgets provides a JavaScript library for browser and Node.js applications. In this project, we&#039;ll create a web application using Google Apps Script and log data from a Light Phidget to a Google Sheets spreadsheet.&lt;br /&gt;
===References===&lt;br /&gt;
[https://developers.google.com/apps-script/guides/web Apps Script - Web Apps Guide]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Demonstration==&lt;br /&gt;
&amp;lt;center&amp;gt;{{#ev:youtube|V1Q93jao85w|||||rel=0}}&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Connect Phidget Devices==&lt;br /&gt;
In this project, we will be using the [{{SERVER}}/?prodid=707 Light Phidget (LUX1000_0)] connected to a [{{SERVER}}/?prodid=1289 VINT Hub Phidget (HUB0002_0)].&lt;br /&gt;
&lt;br /&gt;
[[Image:LUX1000_setup_whitecable.jpg|600px|link=]]&lt;br /&gt;
&lt;br /&gt;
==Prepare Apps Script Environment==&lt;br /&gt;
===Start A New Spreadsheet===&lt;br /&gt;
Start by creating a new spreadsheet. This spreadsheet will be used to store sensor data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newspreadsheet.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
===Create Apps Script===&lt;br /&gt;
Name your spreadsheet and then navigate to &#039;&#039;&#039;Extensions &amp;gt; Apps Script&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newappsscript.png|center|500px||link=]]&lt;br /&gt;
&lt;br /&gt;
===Add HTML File===&lt;br /&gt;
Name your Apps Script project and click on the &#039;&#039;&#039;+&#039;&#039;&#039; symbol to add an HTML file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newhtml.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Name the file &#039;&#039;&#039;index.html&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_namehtml.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
==Modify Code==&lt;br /&gt;
===Code.gs===&lt;br /&gt;
Navigate to &#039;&#039;&#039;Code.gs&#039;&#039;&#039; and replace the contents with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=js&amp;gt;&lt;br /&gt;
function doGet(e) {&lt;br /&gt;
  var htmlOutput = HtmlService.createHtmlOutputFromFile(&#039;index&#039;);&lt;br /&gt;
  return htmlOutput;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function writeData(data, location) {&lt;br /&gt;
    var spreadsheetId = &#039;spreadsheetID&#039;; // Replace with your spreadsheet ID&lt;br /&gt;
    var sheetName = &#039;Sheet1&#039;; // Replace with your sheet name&lt;br /&gt;
    &lt;br /&gt;
    var spreadsheet = SpreadsheetApp.openById(spreadsheetId);&lt;br /&gt;
    var sheet = spreadsheet.getSheetByName(sheetName);&lt;br /&gt;
    sheet.getRange(location).setValue(data)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Spreadsheet ID====&lt;br /&gt;
You can find the spreadsheet ID by navigating to your spreadsheet and copying the string of letters and numbers between &#039;&#039;&#039;/d/&#039;&#039;&#039; and &#039;&#039;&#039;/edit&#039;&#039;&#039; in the URL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_spreadsheetid.png|center|500px|link=https://cdn.phidgets.com/docs/images/3/3f/Project_appscript_spreadsheetid.png]]&lt;br /&gt;
&lt;br /&gt;
===index.html===&lt;br /&gt;
Navigate to &#039;&#039;&#039;index.html&#039;&#039;&#039; and replace the contents with the following.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=js&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;head&amp;gt;&lt;br /&gt;
      &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;title&amp;gt;Light Sensor Example&amp;lt;/title&amp;gt;&lt;br /&gt;
   &amp;lt;/head&amp;gt;&lt;br /&gt;
   &amp;lt;body&amp;gt;&lt;br /&gt;
      &amp;lt;button id=&amp;quot;grant-usb-access&amp;quot;&amp;gt;Connect USB Device&amp;lt;/button&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;button onclick=&amp;quot;runExample()&amp;quot;&amp;gt;Run Example&amp;lt;/button&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Sensor Data: &amp;lt;/label&amp;gt;&amp;lt;label id=&amp;quot;sensorLabel&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;checkbox&amp;quot; id=&amp;quot;logCheckbox&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Log to File&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;script src=&amp;quot;https://unpkg.com/phidget22@3.x/browser/phidget22.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
      &amp;lt;script&amp;gt;&lt;br /&gt;
         (async function () {&lt;br /&gt;
         const illuminanceChangeDataEl = document.getElementById(&amp;quot;sensorLabel&amp;quot;);&lt;br /&gt;
           const checkbox = document.getElementById(&amp;quot;logCheckbox&amp;quot;);&lt;br /&gt;
           var index = 0;&lt;br /&gt;
         &lt;br /&gt;
         function onLightSensor0_IlluminanceChange(illuminance) {&lt;br /&gt;
         illuminanceChangeDataEl.textContent = illuminance.toString() + &#039;lx&#039;;                &lt;br /&gt;
             if (checkbox.checked) {&lt;br /&gt;
               google.script.run.writeData(illuminance.toString(), &amp;quot;A&amp;quot; + index++) &lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         &lt;br /&gt;
         try {&lt;br /&gt;
         const conn = new phidget22.USBConnection();&lt;br /&gt;
         await conn.connect();&lt;br /&gt;
         &lt;br /&gt;
         const grantAccessBtn = document.getElementById(&#039;grant-usb-access&#039;);&lt;br /&gt;
         grantAccessBtn.addEventListener(&#039;click&#039;, () =&amp;gt; conn.requestWebUSBDeviceAccess());&lt;br /&gt;
         &lt;br /&gt;
         const lightSensor0 = new phidget22.LightSensor();&lt;br /&gt;
         &lt;br /&gt;
         lightSensor0.onIlluminanceChange = onLightSensor0_IlluminanceChange;&lt;br /&gt;
         &lt;br /&gt;
         await lightSensor0.open(30000);&lt;br /&gt;
             lightSensor0.setDataInterval(1000);&lt;br /&gt;
         } catch(err) {&lt;br /&gt;
         console.error(&#039;Phidget error:&#039;, err);&lt;br /&gt;
         }&lt;br /&gt;
         &lt;br /&gt;
         })();&lt;br /&gt;
      &amp;lt;/script&amp;gt;&lt;br /&gt;
   &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====USB vs Network Server Connection====&lt;br /&gt;
When using the Phidgets with JavaScript, you can connect to devices directly via USB or remotely through the Phidget Network Server. Depending on what you choose, this line of code will change:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=js&amp;gt;&lt;br /&gt;
const conn = new phidget22.USBConnection(); //Use when connecting directly via USB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=js&amp;gt;&lt;br /&gt;
const conn = new phidget22.NetworkConnection(5661, &#039;localhost&#039;); //Use when connecting through the Phidget Network Server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, we are connecting directly via USB, so we use the first option. For more information, visit our [{{SERVER}}/docs/Language_-_JavaScript JavaScript page].&lt;br /&gt;
&lt;br /&gt;
==Deploy Web App==&lt;br /&gt;
To deploy the app, find the &#039;&#039;&#039;Deploy&#039;&#039;&#039; button and select &#039;&#039;&#039;New Deployment&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newdeployment.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Select &#039;&#039;&#039;Web App&#039;&#039;&#039; as the type, provide a description, and press &#039;&#039;&#039;Deploy&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newdeployment2.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Authorization is required as the web app will access a Google Sheet:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newdeployment_auth.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After authorizing, a URL for your web app will be generated:&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newdeployment_url.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
==Request USB Device Access==&lt;br /&gt;
The web app provides a &#039;&#039;&#039;Connect USB Device&#039;&#039;&#039; button:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_webapp.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to access Phidget devices over a [{{SERVER}}//docs/Language_-_JavaScript#USB_Connection USB Connection], websites must gain permission from the user through an interactive element, like a button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_webapp_usbauth.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
===Run Example===&lt;br /&gt;
After granting access, the &#039;&#039;&#039;Run Example&#039;&#039;&#039; button can be pressed, and data will stream from the Phidget device to your browser application:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_webapp_data.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check the &#039;&#039;&#039;Log to File&#039;&#039;&#039; box and data will be streamed to your spreadsheet.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Google_Apps_Script_and_Phidgets&amp;diff=35297</id>
		<title>Google Apps Script and Phidgets</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Google_Apps_Script_and_Phidgets&amp;diff=35297"/>
		<updated>2025-06-16T23:00:20Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Connect Phidget Devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Project]]&lt;br /&gt;
{{#seo:|keywords=JavaScript}}&lt;br /&gt;
{{#seo:|description=Log data to a Google Sheet with Phidgets and JavaScript.}}&lt;br /&gt;
[[Image:Google_Apps_Script.png|400px|link=|thumb|&amp;lt;center&amp;gt;Google Apps Script&amp;lt;/center&amp;gt;]]&lt;br /&gt;
==Introduction==&lt;br /&gt;
Phidgets provides a JavaScript library for browser and Node.js applications. In this project, we&#039;ll create a web application using Google Apps Script and log data from a Light Phidget to a Google Sheets spreadsheet.&lt;br /&gt;
===References===&lt;br /&gt;
[https://developers.google.com/apps-script/guides/web Apps Script - Web Apps Guide]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Demonstration==&lt;br /&gt;
&amp;lt;center&amp;gt;{{#ev:youtube|V1Q93jao85w|||||rel=0}}&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Connect Phidget Devices==&lt;br /&gt;
In this project, we will be using the [{{SERVER}}/?prodid=707 Light Phidget (LUX1000_0)] connected to a [{{SERVER}}/?prodid=1289 VINT Hub Phidget].&lt;br /&gt;
&lt;br /&gt;
[[Image:LUX1000_setup_whitecable.jpg|600px|link=]]&lt;br /&gt;
&lt;br /&gt;
==Prepare Apps Script Environment==&lt;br /&gt;
===Start A New Spreadsheet===&lt;br /&gt;
Start by creating a new spreadsheet. This spreadsheet will be used to store sensor data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newspreadsheet.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
===Create Apps Script===&lt;br /&gt;
Name your spreadsheet and then navigate to &#039;&#039;&#039;Extensions &amp;gt; Apps Script&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newappsscript.png|center|500px||link=]]&lt;br /&gt;
&lt;br /&gt;
===Add HTML File===&lt;br /&gt;
Name your Apps Script project and click on the &#039;&#039;&#039;+&#039;&#039;&#039; symbol to add an HTML file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newhtml.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Name the file &#039;&#039;&#039;index.html&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_namehtml.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
==Modify Code==&lt;br /&gt;
===Code.gs===&lt;br /&gt;
Navigate to &#039;&#039;&#039;Code.gs&#039;&#039;&#039; and replace the contents with the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=js&amp;gt;&lt;br /&gt;
function doGet(e) {&lt;br /&gt;
  var htmlOutput = HtmlService.createHtmlOutputFromFile(&#039;index&#039;);&lt;br /&gt;
  return htmlOutput;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function writeData(data, location) {&lt;br /&gt;
    var spreadsheetId = &#039;spreadsheetID&#039;; // Replace with your spreadsheet ID&lt;br /&gt;
    var sheetName = &#039;Sheet1&#039;; // Replace with your sheet name&lt;br /&gt;
    &lt;br /&gt;
    var spreadsheet = SpreadsheetApp.openById(spreadsheetId);&lt;br /&gt;
    var sheet = spreadsheet.getSheetByName(sheetName);&lt;br /&gt;
    sheet.getRange(location).setValue(data)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Spreadsheet ID====&lt;br /&gt;
You can find the spreadsheet ID by navigating to your spreadsheet and copying the string of letters and numbers between &#039;&#039;&#039;/d/&#039;&#039;&#039; and &#039;&#039;&#039;/edit&#039;&#039;&#039; in the URL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_spreadsheetid.png|center|500px|link=https://cdn.phidgets.com/docs/images/3/3f/Project_appscript_spreadsheetid.png]]&lt;br /&gt;
&lt;br /&gt;
===index.html===&lt;br /&gt;
Navigate to &#039;&#039;&#039;index.html&#039;&#039;&#039; and replace the contents with the following.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=js&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;head&amp;gt;&lt;br /&gt;
      &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;title&amp;gt;Light Sensor Example&amp;lt;/title&amp;gt;&lt;br /&gt;
   &amp;lt;/head&amp;gt;&lt;br /&gt;
   &amp;lt;body&amp;gt;&lt;br /&gt;
      &amp;lt;button id=&amp;quot;grant-usb-access&amp;quot;&amp;gt;Connect USB Device&amp;lt;/button&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;button onclick=&amp;quot;runExample()&amp;quot;&amp;gt;Run Example&amp;lt;/button&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Sensor Data: &amp;lt;/label&amp;gt;&amp;lt;label id=&amp;quot;sensorLabel&amp;quot;&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;checkbox&amp;quot; id=&amp;quot;logCheckbox&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;label&amp;gt;Log to File&amp;lt;/label&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;script src=&amp;quot;https://unpkg.com/phidget22@3.x/browser/phidget22.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
      &amp;lt;script&amp;gt;&lt;br /&gt;
         (async function () {&lt;br /&gt;
         const illuminanceChangeDataEl = document.getElementById(&amp;quot;sensorLabel&amp;quot;);&lt;br /&gt;
           const checkbox = document.getElementById(&amp;quot;logCheckbox&amp;quot;);&lt;br /&gt;
           var index = 0;&lt;br /&gt;
         &lt;br /&gt;
         function onLightSensor0_IlluminanceChange(illuminance) {&lt;br /&gt;
         illuminanceChangeDataEl.textContent = illuminance.toString() + &#039;lx&#039;;                &lt;br /&gt;
             if (checkbox.checked) {&lt;br /&gt;
               google.script.run.writeData(illuminance.toString(), &amp;quot;A&amp;quot; + index++) &lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
         &lt;br /&gt;
         try {&lt;br /&gt;
         const conn = new phidget22.USBConnection();&lt;br /&gt;
         await conn.connect();&lt;br /&gt;
         &lt;br /&gt;
         const grantAccessBtn = document.getElementById(&#039;grant-usb-access&#039;);&lt;br /&gt;
         grantAccessBtn.addEventListener(&#039;click&#039;, () =&amp;gt; conn.requestWebUSBDeviceAccess());&lt;br /&gt;
         &lt;br /&gt;
         const lightSensor0 = new phidget22.LightSensor();&lt;br /&gt;
         &lt;br /&gt;
         lightSensor0.onIlluminanceChange = onLightSensor0_IlluminanceChange;&lt;br /&gt;
         &lt;br /&gt;
         await lightSensor0.open(30000);&lt;br /&gt;
             lightSensor0.setDataInterval(1000);&lt;br /&gt;
         } catch(err) {&lt;br /&gt;
         console.error(&#039;Phidget error:&#039;, err);&lt;br /&gt;
         }&lt;br /&gt;
         &lt;br /&gt;
         })();&lt;br /&gt;
      &amp;lt;/script&amp;gt;&lt;br /&gt;
   &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====USB vs Network Server Connection====&lt;br /&gt;
When using the Phidgets with JavaScript, you can connect to devices directly via USB or remotely through the Phidget Network Server. Depending on what you choose, this line of code will change:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=js&amp;gt;&lt;br /&gt;
const conn = new phidget22.USBConnection(); //Use when connecting directly via USB&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=js&amp;gt;&lt;br /&gt;
const conn = new phidget22.NetworkConnection(5661, &#039;localhost&#039;); //Use when connecting through the Phidget Network Server&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, we are connecting directly via USB, so we use the first option. For more information, visit our [{{SERVER}}/docs/Language_-_JavaScript JavaScript page].&lt;br /&gt;
&lt;br /&gt;
==Deploy Web App==&lt;br /&gt;
To deploy the app, find the &#039;&#039;&#039;Deploy&#039;&#039;&#039; button and select &#039;&#039;&#039;New Deployment&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newdeployment.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Select &#039;&#039;&#039;Web App&#039;&#039;&#039; as the type, provide a description, and press &#039;&#039;&#039;Deploy&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newdeployment2.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Authorization is required as the web app will access a Google Sheet:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newdeployment_auth.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
After authorizing, a URL for your web app will be generated:&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_newdeployment_url.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
==Request USB Device Access==&lt;br /&gt;
The web app provides a &#039;&#039;&#039;Connect USB Device&#039;&#039;&#039; button:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_webapp.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to access Phidget devices over a [{{SERVER}}//docs/Language_-_JavaScript#USB_Connection USB Connection], websites must gain permission from the user through an interactive element, like a button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_webapp_usbauth.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
===Run Example===&lt;br /&gt;
After granting access, the &#039;&#039;&#039;Run Example&#039;&#039;&#039; button can be pressed, and data will stream from the Phidget device to your browser application:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_appscript_webapp_data.png|center|500px|link=]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check the &#039;&#039;&#039;Log to File&#039;&#039;&#039; box and data will be streamed to your spreadsheet.&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=35296</id>
		<title>Terms and Conditions</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=35296"/>
		<updated>2025-06-16T22:47:36Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* All returns must be authorized by Phidgets Inc. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linked From Website]]&lt;br /&gt;
&lt;br /&gt;
==Product Warranty==&lt;br /&gt;
&lt;br /&gt;
All Phidgets products are warranted to be free of defects in material or workmanship under normal use and service for a period of one year from the date of shipment. This warranty does not include damage resulting from accident or misuse. The warranty is also void if the product is modified.  This warranty is in lieu of all other warranties expressed or implied including the implied warranties of merchantability of fitness for a particular purpose, whether arising by law, custom or conduct, and the rights and remedies provided under this warranty are exclusive and in lieu of any other rights or remedies. In no event shall Phidgets Incorporated be liable for consequential damages.&lt;br /&gt;
&lt;br /&gt;
If you believe that your product is defective while still under warranty, {{ContactUs|contact us}}. Once the support desk confirms that the product is defective, we will replace your defective product free of charge.&lt;br /&gt;
&lt;br /&gt;
==Shipping==&lt;br /&gt;
===Last Call at 12:00PM===&lt;br /&gt;
Orders received before 12:00 PM Mountain Time (GMT-07:00) Monday to Friday will be shipped the same day.&lt;br /&gt;
&lt;br /&gt;
Orders containing cut-to-length parts may not ship on the same day due to the additional processing time associated with these orders.&lt;br /&gt;
&lt;br /&gt;
===Shipping Costs===&lt;br /&gt;
Shipping costs are calculated at checkout and presented for your review before you confirm your order. If multiple shipping options are available for your destination, all options will be listed so you can choose the one that best suits your needs.&lt;br /&gt;
&lt;br /&gt;
If you have your own UPS or FedEx account, you can use it at checkout and be billed directly by the carrier. This gives you access to a wider range of shipping options.&lt;br /&gt;
&lt;br /&gt;
Note that a $5.00 handling charge is added to all orders that are under $50.00.&lt;br /&gt;
&lt;br /&gt;
===Shipping in Canada===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
* &#039;&#039;&#039;UPS Standard&#039;&#039;&#039;. 3 - 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
===Shipping to the United States===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
* &#039;&#039;&#039;UPS Standard&#039;&#039;&#039;. 3 - 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
Effective May 2, 2025, orders shipped to the United States will incur additional duties, tariffs, and brokerage fees, regardless of the order value. For more details, visit our guide about [[U.S._Tariffs | U.S. Tariffs]].&lt;br /&gt;
&lt;br /&gt;
===International Shipments===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Worldwide Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Worldwide Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
&lt;br /&gt;
====European Union====&lt;br /&gt;
Effective July 1, 2021, the European Union (EU) updated its Value Added Tax (VAT) regulations. All shipments to EU countries now require formal customs clearance and are subject to VAT based on the destination country.&lt;br /&gt;
&lt;br /&gt;
For goods with an intrinsic value up to €150, VAT must be collected at the time of purchase. This means for orders under $200 USD, we require prepayment of VAT and brokerage fees at checkout to ensure fast, hassle-free delivery.&lt;br /&gt;
&lt;br /&gt;
For orders over $200 USD, we provide the option to prepay all applicable import fees (including VAT and brokerage). If you choose this option, the quoted amount is guaranteed — there will be no additional charges upon delivery.&lt;br /&gt;
&lt;br /&gt;
We use UPS® Global Checkout to collect import fees and taxes based on your product&#039;s HS Code and Country of Origin. There is a fee associated with the UPS® Global Checkout service. At Phidgets Inc., we continually monitor and negotiate all fees to ensure our customers receive the best deal possible.&lt;br /&gt;
&lt;br /&gt;
Customs policies vary by country, so we recommend contacting your local customs office for more information.&lt;br /&gt;
&lt;br /&gt;
====Other Countries====&lt;br /&gt;
International shipments may be subject to import duties, taxes, and brokerage fees upon arrival in your country. These charges are determined by your local customs authorities and are the responsibility of the recipient.&lt;br /&gt;
&lt;br /&gt;
At checkout, we provide the option to prepay these fees. If you choose this option, the quoted amount is guaranteed — there will be no additional charges upon delivery.&lt;br /&gt;
&lt;br /&gt;
We use UPS® Global Checkout to collect import fees and taxes based on your product&#039;s HS Code and Country of Origin. There is a fee associated with the UPS® Global Checkout service. At Phidgets Inc., we continually monitor and negotiate all fees to ensure our customers receive the best deal possible.&lt;br /&gt;
&lt;br /&gt;
Customs policies vary by country, so we recommend contacting your local customs office for more information.&lt;br /&gt;
&lt;br /&gt;
===Tracking Your Order===&lt;br /&gt;
You can track your shipment using the tracking number sent to you by email when your order was shipped.&lt;br /&gt;
&lt;br /&gt;
===Refunds on Late Deliveries===&lt;br /&gt;
&lt;br /&gt;
Normally, UPS will offer a service guarantee refund when their deliveries arrive late. However, for companies that apply for shipping discounts, this refund does not apply. Phidgets Inc. has applied for such discounts in order to keep shipping costs down and regrettably cannot offer compensation for late shipments.&lt;br /&gt;
&lt;br /&gt;
===Damaged or Lost Shipment===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on our UPS account&#039;&#039;&#039; - Report all damaged or lost shipments to support@phidgets.com and include your order number. According to UPS, in order to be considered lost, a package must be undelivered 24 hours after the expected delivery date and time. Before contacting us, check your shipment status at ups.ca.&lt;br /&gt;
&lt;br /&gt;
Damaged or lost items will be replaced at no charge (including shipping costs).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on your UPS account&#039;&#039;&#039; - You must notify your local UPS office. If they confirm that they have lost your shipment, you must repurchase the lost or damaged products from Phidgets and file a claim with your local UPS in order to get reimbursed.&lt;br /&gt;
&lt;br /&gt;
===Refused/Missed Delivery===&lt;br /&gt;
If no one is available to accept the package upon delivery, UPS will attempt redelivery two more times, as per their standard procedure. If all delivery attempts fail, UPS will hold the package for 5 days before returning it to us. In such cases, we will issue a refund for your order minus the cost of shipping (both directions) and a flat $50 fee, up to the total value of the package. This policy applies both to deliveries that failed due to no one being present and to packages that were refused at the delivery address.&lt;br /&gt;
&lt;br /&gt;
===Incoterms===&lt;br /&gt;
&lt;br /&gt;
We use the following Incoterms depending on the shipping and payment arrangement:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FCA (Free Carrier):&#039;&#039;&#039; Used when shipping on the customer’s carrier account. Risk and responsibility transfer to the customer once the goods are handed over to the carrier at our facility.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DDP (Delivered Duty Paid):&#039;&#039;&#039; Used when the customer chooses to pre-pay import fees and taxes at checkout. We handle all import fees and deliver the goods to the destination address.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DAP (Delivered at Place):&#039;&#039;&#039; Used when the customer opts to pay import fees and taxes upon delivery. We deliver the goods, but the customer is responsible for paying any import fees directly to the carrier.&lt;br /&gt;
&lt;br /&gt;
==Product Returns==&lt;br /&gt;
===All Returns Must Be Authorized===&lt;br /&gt;
Before returning a package {{ContactUs|contact us}} and ask for a Return Merchandise Authorization or RMA number.  Once you have received it, put the RMA number on the outside of the packaging as well as the packing slip so that it is possible for us to track what the package is supposed to be.  Any merchandise returned without an RMA number clearly visible on the packaging will be charged an administrative fee of $25.00 or the value of the returned product, whichever is less &#039;&#039;if we are able to determine what it is&#039;&#039;.  In the event we are unable to determine what the package is, it will be refused and returned to the sender.&lt;br /&gt;
&lt;br /&gt;
===Unopened Product===&lt;br /&gt;
Phidgets accepts returns of unopened products within 30 days of the date of purchase. To initiate a return, please contact us by phone or email to obtain an RMA number. Products must be shipped back to Phidgets Inc. prepaid. A refund will be issued to your credit card once we receive and inspect the returned items.&lt;br /&gt;
&lt;br /&gt;
Returns received after 30 days are subject to a restocking fee of 25% of the package&#039;s value (minimum $5.00, maximum $500).&lt;br /&gt;
&lt;br /&gt;
We do &#039;&#039;&#039;not&#039;&#039;&#039; accept returns beyond 90 days from the date of purchase.&lt;br /&gt;
&lt;br /&gt;
===Cut to Length===&lt;br /&gt;
Unfortunately we cannot accept returns on any items which are cut to custom lengths.  This includes: cable, wire, roller chain, linear shaft, rotary shaft, and t-slot extrusions.  &lt;br /&gt;
&lt;br /&gt;
===We Shipped the Wrong/Incomplete Product===&lt;br /&gt;
{{ContactUs|Contact us}}. We will get the correct product sent to you immediately, and will pay all shipping charges.&lt;br /&gt;
&lt;br /&gt;
==Payment Terms==&lt;br /&gt;
We accept credit cards, PayPal, and Wire Transfers.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Payment Method|| Terms&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Credit Cards&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Visa, MasterCard, American Express (for order in CAD only)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|PayPal&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|PayPal is accepted.  There are no extra fees for using PayPal&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Wire Transfers&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Wire transfers are only accepted for orders over $200.00 USD (excluding shipping charges). There is a $25.00 USD charge for wire transfers under $500.00 USD. Any fees charged by the sending bank are your responsibility.&amp;lt;br /&amp;gt;Please make sure that the amount sent to us covers both our invoice and your bank fees.  Products are not shipped until the money is deposited in our bank account.  We recommend that you e-mail orders@phidgets.com with the amount of the transfer and the invoice you are paying.  &amp;lt;br /&amp;gt;Any order for which payment is not received within 15 days, will be canceled.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Security and Privacy==&lt;br /&gt;
Phidgets Inc. pledges a safe and worry-free shopping experience. IF you are using the current version of Internet Explorer, on the checkout page where you enter your credit card information, you will notice a a locked padlock icon on the top bar your browser window. If you are using Mozilla Firefox, you will notice a locked padlock icon in the bottom right corner of your browser window. If this icon does not appear, please contact us directly to complete your purchase. These icons tell you that the page you are on is secure. We use Secure Sockets Layer (SSL 128-bit) technology with a digital certificate by GeoTrust, Inc. for Internet security to protect your personal information. This encryption makes it impossible for anyone to read your information in transit. We do not store your credit information and it is deleted once it has been securely transmitted to Moneris for processing.&lt;br /&gt;
&lt;br /&gt;
We use your e-mail address to let you know your shipment&#039;s tracking number. Your phone number is required by the Courier Company. We do not sell, rent or give any of your personal information to any unrelated third parties with the exception of Moneris for authorizing credit card payments and the Courier company to let them know where to deliver the shipment and how to contact you if there is any problems.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns about our Security and Privacy policy, call us at 1.403.282.7335 or e-mail us at support@phidgets.com&lt;br /&gt;
&lt;br /&gt;
Phidgets Inc. uses various Google Analytics tools such as conversion tracking in order to improve the effectiveness of the website. These statistics are completely anonymous.&lt;br /&gt;
&lt;br /&gt;
==Holidays==&lt;br /&gt;
Phidgets, Inc. will be closed on the following days. During these times, the site will still be accessible and orders can be placed, but they will not ship until the next business day.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| Holiday&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| Description&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| 2025&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| 2026&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Alberta Family Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Third Monday in February&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 17&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 16&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Good Friday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Friday before Easter Sunday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 18&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 3&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Victoria Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Monday before May 25&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 19&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 18&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Canada Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First day of July (or nearest business day)&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Heritage Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in August&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 4&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 3&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Labour Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in September&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 7&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Thanksgiving&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Second Monday in October&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 13&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 12&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Remembrance Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| November 11 (or nearest business day)&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Christmas and New Years&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Varies&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=35295</id>
		<title>Terms and Conditions</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=35295"/>
		<updated>2025-06-16T22:46:32Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* We shipped the wrong/incomplete product */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linked From Website]]&lt;br /&gt;
&lt;br /&gt;
==Product Warranty==&lt;br /&gt;
&lt;br /&gt;
All Phidgets products are warranted to be free of defects in material or workmanship under normal use and service for a period of one year from the date of shipment. This warranty does not include damage resulting from accident or misuse. The warranty is also void if the product is modified.  This warranty is in lieu of all other warranties expressed or implied including the implied warranties of merchantability of fitness for a particular purpose, whether arising by law, custom or conduct, and the rights and remedies provided under this warranty are exclusive and in lieu of any other rights or remedies. In no event shall Phidgets Incorporated be liable for consequential damages.&lt;br /&gt;
&lt;br /&gt;
If you believe that your product is defective while still under warranty, {{ContactUs|contact us}}. Once the support desk confirms that the product is defective, we will replace your defective product free of charge.&lt;br /&gt;
&lt;br /&gt;
==Shipping==&lt;br /&gt;
===Last Call at 12:00PM===&lt;br /&gt;
Orders received before 12:00 PM Mountain Time (GMT-07:00) Monday to Friday will be shipped the same day.&lt;br /&gt;
&lt;br /&gt;
Orders containing cut-to-length parts may not ship on the same day due to the additional processing time associated with these orders.&lt;br /&gt;
&lt;br /&gt;
===Shipping Costs===&lt;br /&gt;
Shipping costs are calculated at checkout and presented for your review before you confirm your order. If multiple shipping options are available for your destination, all options will be listed so you can choose the one that best suits your needs.&lt;br /&gt;
&lt;br /&gt;
If you have your own UPS or FedEx account, you can use it at checkout and be billed directly by the carrier. This gives you access to a wider range of shipping options.&lt;br /&gt;
&lt;br /&gt;
Note that a $5.00 handling charge is added to all orders that are under $50.00.&lt;br /&gt;
&lt;br /&gt;
===Shipping in Canada===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
* &#039;&#039;&#039;UPS Standard&#039;&#039;&#039;. 3 - 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
===Shipping to the United States===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
* &#039;&#039;&#039;UPS Standard&#039;&#039;&#039;. 3 - 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
Effective May 2, 2025, orders shipped to the United States will incur additional duties, tariffs, and brokerage fees, regardless of the order value. For more details, visit our guide about [[U.S._Tariffs | U.S. Tariffs]].&lt;br /&gt;
&lt;br /&gt;
===International Shipments===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Worldwide Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Worldwide Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
&lt;br /&gt;
====European Union====&lt;br /&gt;
Effective July 1, 2021, the European Union (EU) updated its Value Added Tax (VAT) regulations. All shipments to EU countries now require formal customs clearance and are subject to VAT based on the destination country.&lt;br /&gt;
&lt;br /&gt;
For goods with an intrinsic value up to €150, VAT must be collected at the time of purchase. This means for orders under $200 USD, we require prepayment of VAT and brokerage fees at checkout to ensure fast, hassle-free delivery.&lt;br /&gt;
&lt;br /&gt;
For orders over $200 USD, we provide the option to prepay all applicable import fees (including VAT and brokerage). If you choose this option, the quoted amount is guaranteed — there will be no additional charges upon delivery.&lt;br /&gt;
&lt;br /&gt;
We use UPS® Global Checkout to collect import fees and taxes based on your product&#039;s HS Code and Country of Origin. There is a fee associated with the UPS® Global Checkout service. At Phidgets Inc., we continually monitor and negotiate all fees to ensure our customers receive the best deal possible.&lt;br /&gt;
&lt;br /&gt;
Customs policies vary by country, so we recommend contacting your local customs office for more information.&lt;br /&gt;
&lt;br /&gt;
====Other Countries====&lt;br /&gt;
International shipments may be subject to import duties, taxes, and brokerage fees upon arrival in your country. These charges are determined by your local customs authorities and are the responsibility of the recipient.&lt;br /&gt;
&lt;br /&gt;
At checkout, we provide the option to prepay these fees. If you choose this option, the quoted amount is guaranteed — there will be no additional charges upon delivery.&lt;br /&gt;
&lt;br /&gt;
We use UPS® Global Checkout to collect import fees and taxes based on your product&#039;s HS Code and Country of Origin. There is a fee associated with the UPS® Global Checkout service. At Phidgets Inc., we continually monitor and negotiate all fees to ensure our customers receive the best deal possible.&lt;br /&gt;
&lt;br /&gt;
Customs policies vary by country, so we recommend contacting your local customs office for more information.&lt;br /&gt;
&lt;br /&gt;
===Tracking Your Order===&lt;br /&gt;
You can track your shipment using the tracking number sent to you by email when your order was shipped.&lt;br /&gt;
&lt;br /&gt;
===Refunds on Late Deliveries===&lt;br /&gt;
&lt;br /&gt;
Normally, UPS will offer a service guarantee refund when their deliveries arrive late. However, for companies that apply for shipping discounts, this refund does not apply. Phidgets Inc. has applied for such discounts in order to keep shipping costs down and regrettably cannot offer compensation for late shipments.&lt;br /&gt;
&lt;br /&gt;
===Damaged or Lost Shipment===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on our UPS account&#039;&#039;&#039; - Report all damaged or lost shipments to support@phidgets.com and include your order number. According to UPS, in order to be considered lost, a package must be undelivered 24 hours after the expected delivery date and time. Before contacting us, check your shipment status at ups.ca.&lt;br /&gt;
&lt;br /&gt;
Damaged or lost items will be replaced at no charge (including shipping costs).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on your UPS account&#039;&#039;&#039; - You must notify your local UPS office. If they confirm that they have lost your shipment, you must repurchase the lost or damaged products from Phidgets and file a claim with your local UPS in order to get reimbursed.&lt;br /&gt;
&lt;br /&gt;
===Refused/Missed Delivery===&lt;br /&gt;
If no one is available to accept the package upon delivery, UPS will attempt redelivery two more times, as per their standard procedure. If all delivery attempts fail, UPS will hold the package for 5 days before returning it to us. In such cases, we will issue a refund for your order minus the cost of shipping (both directions) and a flat $50 fee, up to the total value of the package. This policy applies both to deliveries that failed due to no one being present and to packages that were refused at the delivery address.&lt;br /&gt;
&lt;br /&gt;
===Incoterms===&lt;br /&gt;
&lt;br /&gt;
We use the following Incoterms depending on the shipping and payment arrangement:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FCA (Free Carrier):&#039;&#039;&#039; Used when shipping on the customer’s carrier account. Risk and responsibility transfer to the customer once the goods are handed over to the carrier at our facility.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DDP (Delivered Duty Paid):&#039;&#039;&#039; Used when the customer chooses to pre-pay import fees and taxes at checkout. We handle all import fees and deliver the goods to the destination address.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DAP (Delivered at Place):&#039;&#039;&#039; Used when the customer opts to pay import fees and taxes upon delivery. We deliver the goods, but the customer is responsible for paying any import fees directly to the carrier.&lt;br /&gt;
&lt;br /&gt;
==Product Returns==&lt;br /&gt;
===All returns must be authorized by Phidgets Inc.===&lt;br /&gt;
Before returning a package {{ContactUs|contact us}} and ask for a Return Merchandise Authorization or RMA number.  Once you have received it, put the RMA number on the outside of the packaging as well as the packing slip so that it is possible for us to track what the package is supposed to be.  Any merchandise returned without an RMA number clearly visible on the packaging will be charged an administrative fee of $25.00 or the value of the returned product, whichever is less &#039;&#039;if we are able to determine what it is&#039;&#039;.  In the event we are unable to determine what the package is, it will be refused and returned to the sender.&lt;br /&gt;
&lt;br /&gt;
===Unopened Product===&lt;br /&gt;
Phidgets accepts returns of unopened products within 30 days of the date of purchase. To initiate a return, please contact us by phone or email to obtain an RMA number. Products must be shipped back to Phidgets Inc. prepaid. A refund will be issued to your credit card once we receive and inspect the returned items.&lt;br /&gt;
&lt;br /&gt;
Returns received after 30 days are subject to a restocking fee of 25% of the package&#039;s value (minimum $5.00, maximum $500).&lt;br /&gt;
&lt;br /&gt;
We do &#039;&#039;&#039;not&#039;&#039;&#039; accept returns beyond 90 days from the date of purchase.&lt;br /&gt;
&lt;br /&gt;
===Cut to Length===&lt;br /&gt;
Unfortunately we cannot accept returns on any items which are cut to custom lengths.  This includes: cable, wire, roller chain, linear shaft, rotary shaft, and t-slot extrusions.  &lt;br /&gt;
&lt;br /&gt;
===We Shipped the Wrong/Incomplete Product===&lt;br /&gt;
{{ContactUs|Contact us}}. We will get the correct product sent to you immediately, and will pay all shipping charges.&lt;br /&gt;
&lt;br /&gt;
==Payment Terms==&lt;br /&gt;
We accept credit cards, PayPal, and Wire Transfers.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Payment Method|| Terms&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Credit Cards&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Visa, MasterCard, American Express (for order in CAD only)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|PayPal&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|PayPal is accepted.  There are no extra fees for using PayPal&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Wire Transfers&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Wire transfers are only accepted for orders over $200.00 USD (excluding shipping charges). There is a $25.00 USD charge for wire transfers under $500.00 USD. Any fees charged by the sending bank are your responsibility.&amp;lt;br /&amp;gt;Please make sure that the amount sent to us covers both our invoice and your bank fees.  Products are not shipped until the money is deposited in our bank account.  We recommend that you e-mail orders@phidgets.com with the amount of the transfer and the invoice you are paying.  &amp;lt;br /&amp;gt;Any order for which payment is not received within 15 days, will be canceled.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Security and Privacy==&lt;br /&gt;
Phidgets Inc. pledges a safe and worry-free shopping experience. IF you are using the current version of Internet Explorer, on the checkout page where you enter your credit card information, you will notice a a locked padlock icon on the top bar your browser window. If you are using Mozilla Firefox, you will notice a locked padlock icon in the bottom right corner of your browser window. If this icon does not appear, please contact us directly to complete your purchase. These icons tell you that the page you are on is secure. We use Secure Sockets Layer (SSL 128-bit) technology with a digital certificate by GeoTrust, Inc. for Internet security to protect your personal information. This encryption makes it impossible for anyone to read your information in transit. We do not store your credit information and it is deleted once it has been securely transmitted to Moneris for processing.&lt;br /&gt;
&lt;br /&gt;
We use your e-mail address to let you know your shipment&#039;s tracking number. Your phone number is required by the Courier Company. We do not sell, rent or give any of your personal information to any unrelated third parties with the exception of Moneris for authorizing credit card payments and the Courier company to let them know where to deliver the shipment and how to contact you if there is any problems.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns about our Security and Privacy policy, call us at 1.403.282.7335 or e-mail us at support@phidgets.com&lt;br /&gt;
&lt;br /&gt;
Phidgets Inc. uses various Google Analytics tools such as conversion tracking in order to improve the effectiveness of the website. These statistics are completely anonymous.&lt;br /&gt;
&lt;br /&gt;
==Holidays==&lt;br /&gt;
Phidgets, Inc. will be closed on the following days. During these times, the site will still be accessible and orders can be placed, but they will not ship until the next business day.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| Holiday&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| Description&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| 2025&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| 2026&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Alberta Family Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Third Monday in February&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 17&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 16&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Good Friday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Friday before Easter Sunday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 18&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 3&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Victoria Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Monday before May 25&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 19&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 18&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Canada Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First day of July (or nearest business day)&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Heritage Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in August&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 4&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 3&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Labour Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in September&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 7&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Thanksgiving&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Second Monday in October&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 13&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 12&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Remembrance Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| November 11 (or nearest business day)&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Christmas and New Years&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Varies&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=35294</id>
		<title>Terms and Conditions</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Terms_and_Conditions&amp;diff=35294"/>
		<updated>2025-06-16T22:45:44Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Tracking your order */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linked From Website]]&lt;br /&gt;
&lt;br /&gt;
==Product Warranty==&lt;br /&gt;
&lt;br /&gt;
All Phidgets products are warranted to be free of defects in material or workmanship under normal use and service for a period of one year from the date of shipment. This warranty does not include damage resulting from accident or misuse. The warranty is also void if the product is modified.  This warranty is in lieu of all other warranties expressed or implied including the implied warranties of merchantability of fitness for a particular purpose, whether arising by law, custom or conduct, and the rights and remedies provided under this warranty are exclusive and in lieu of any other rights or remedies. In no event shall Phidgets Incorporated be liable for consequential damages.&lt;br /&gt;
&lt;br /&gt;
If you believe that your product is defective while still under warranty, {{ContactUs|contact us}}. Once the support desk confirms that the product is defective, we will replace your defective product free of charge.&lt;br /&gt;
&lt;br /&gt;
==Shipping==&lt;br /&gt;
===Last Call at 12:00PM===&lt;br /&gt;
Orders received before 12:00 PM Mountain Time (GMT-07:00) Monday to Friday will be shipped the same day.&lt;br /&gt;
&lt;br /&gt;
Orders containing cut-to-length parts may not ship on the same day due to the additional processing time associated with these orders.&lt;br /&gt;
&lt;br /&gt;
===Shipping Costs===&lt;br /&gt;
Shipping costs are calculated at checkout and presented for your review before you confirm your order. If multiple shipping options are available for your destination, all options will be listed so you can choose the one that best suits your needs.&lt;br /&gt;
&lt;br /&gt;
If you have your own UPS or FedEx account, you can use it at checkout and be billed directly by the carrier. This gives you access to a wider range of shipping options.&lt;br /&gt;
&lt;br /&gt;
Note that a $5.00 handling charge is added to all orders that are under $50.00.&lt;br /&gt;
&lt;br /&gt;
===Shipping in Canada===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
* &#039;&#039;&#039;UPS Standard&#039;&#039;&#039;. 3 - 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
===Shipping to the United States===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
* &#039;&#039;&#039;UPS Standard&#039;&#039;&#039;. 3 - 5 business days ground delivery.&lt;br /&gt;
&lt;br /&gt;
Effective May 2, 2025, orders shipped to the United States will incur additional duties, tariffs, and brokerage fees, regardless of the order value. For more details, visit our guide about [[U.S._Tariffs | U.S. Tariffs]].&lt;br /&gt;
&lt;br /&gt;
===International Shipments===&lt;br /&gt;
We offer the following services:&lt;br /&gt;
* &#039;&#039;&#039;UPS Worldwide Express Saver&#039;&#039;&#039;. 1 - 3 business days.&lt;br /&gt;
* &#039;&#039;&#039;UPS Worldwide Expedited&#039;&#039;&#039;. 2 - 5 business days. Available for packages over 3 lbs. &lt;br /&gt;
&lt;br /&gt;
====European Union====&lt;br /&gt;
Effective July 1, 2021, the European Union (EU) updated its Value Added Tax (VAT) regulations. All shipments to EU countries now require formal customs clearance and are subject to VAT based on the destination country.&lt;br /&gt;
&lt;br /&gt;
For goods with an intrinsic value up to €150, VAT must be collected at the time of purchase. This means for orders under $200 USD, we require prepayment of VAT and brokerage fees at checkout to ensure fast, hassle-free delivery.&lt;br /&gt;
&lt;br /&gt;
For orders over $200 USD, we provide the option to prepay all applicable import fees (including VAT and brokerage). If you choose this option, the quoted amount is guaranteed — there will be no additional charges upon delivery.&lt;br /&gt;
&lt;br /&gt;
We use UPS® Global Checkout to collect import fees and taxes based on your product&#039;s HS Code and Country of Origin. There is a fee associated with the UPS® Global Checkout service. At Phidgets Inc., we continually monitor and negotiate all fees to ensure our customers receive the best deal possible.&lt;br /&gt;
&lt;br /&gt;
Customs policies vary by country, so we recommend contacting your local customs office for more information.&lt;br /&gt;
&lt;br /&gt;
====Other Countries====&lt;br /&gt;
International shipments may be subject to import duties, taxes, and brokerage fees upon arrival in your country. These charges are determined by your local customs authorities and are the responsibility of the recipient.&lt;br /&gt;
&lt;br /&gt;
At checkout, we provide the option to prepay these fees. If you choose this option, the quoted amount is guaranteed — there will be no additional charges upon delivery.&lt;br /&gt;
&lt;br /&gt;
We use UPS® Global Checkout to collect import fees and taxes based on your product&#039;s HS Code and Country of Origin. There is a fee associated with the UPS® Global Checkout service. At Phidgets Inc., we continually monitor and negotiate all fees to ensure our customers receive the best deal possible.&lt;br /&gt;
&lt;br /&gt;
Customs policies vary by country, so we recommend contacting your local customs office for more information.&lt;br /&gt;
&lt;br /&gt;
===Tracking Your Order===&lt;br /&gt;
You can track your shipment using the tracking number sent to you by email when your order was shipped.&lt;br /&gt;
&lt;br /&gt;
===Refunds on Late Deliveries===&lt;br /&gt;
&lt;br /&gt;
Normally, UPS will offer a service guarantee refund when their deliveries arrive late. However, for companies that apply for shipping discounts, this refund does not apply. Phidgets Inc. has applied for such discounts in order to keep shipping costs down and regrettably cannot offer compensation for late shipments.&lt;br /&gt;
&lt;br /&gt;
===Damaged or Lost Shipment===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on our UPS account&#039;&#039;&#039; - Report all damaged or lost shipments to support@phidgets.com and include your order number. According to UPS, in order to be considered lost, a package must be undelivered 24 hours after the expected delivery date and time. Before contacting us, check your shipment status at ups.ca.&lt;br /&gt;
&lt;br /&gt;
Damaged or lost items will be replaced at no charge (including shipping costs).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shipping on your UPS account&#039;&#039;&#039; - You must notify your local UPS office. If they confirm that they have lost your shipment, you must repurchase the lost or damaged products from Phidgets and file a claim with your local UPS in order to get reimbursed.&lt;br /&gt;
&lt;br /&gt;
===Refused/Missed Delivery===&lt;br /&gt;
If no one is available to accept the package upon delivery, UPS will attempt redelivery two more times, as per their standard procedure. If all delivery attempts fail, UPS will hold the package for 5 days before returning it to us. In such cases, we will issue a refund for your order minus the cost of shipping (both directions) and a flat $50 fee, up to the total value of the package. This policy applies both to deliveries that failed due to no one being present and to packages that were refused at the delivery address.&lt;br /&gt;
&lt;br /&gt;
===Incoterms===&lt;br /&gt;
&lt;br /&gt;
We use the following Incoterms depending on the shipping and payment arrangement:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;FCA (Free Carrier):&#039;&#039;&#039; Used when shipping on the customer’s carrier account. Risk and responsibility transfer to the customer once the goods are handed over to the carrier at our facility.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DDP (Delivered Duty Paid):&#039;&#039;&#039; Used when the customer chooses to pre-pay import fees and taxes at checkout. We handle all import fees and deliver the goods to the destination address.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;DAP (Delivered at Place):&#039;&#039;&#039; Used when the customer opts to pay import fees and taxes upon delivery. We deliver the goods, but the customer is responsible for paying any import fees directly to the carrier.&lt;br /&gt;
&lt;br /&gt;
==Product Returns==&lt;br /&gt;
===All returns must be authorized by Phidgets Inc.===&lt;br /&gt;
Before returning a package {{ContactUs|contact us}} and ask for a Return Merchandise Authorization or RMA number.  Once you have received it, put the RMA number on the outside of the packaging as well as the packing slip so that it is possible for us to track what the package is supposed to be.  Any merchandise returned without an RMA number clearly visible on the packaging will be charged an administrative fee of $25.00 or the value of the returned product, whichever is less &#039;&#039;if we are able to determine what it is&#039;&#039;.  In the event we are unable to determine what the package is, it will be refused and returned to the sender.&lt;br /&gt;
&lt;br /&gt;
===Unopened Product===&lt;br /&gt;
Phidgets accepts returns of unopened products within 30 days of the date of purchase. To initiate a return, please contact us by phone or email to obtain an RMA number. Products must be shipped back to Phidgets Inc. prepaid. A refund will be issued to your credit card once we receive and inspect the returned items.&lt;br /&gt;
&lt;br /&gt;
Returns received after 30 days are subject to a restocking fee of 25% of the package&#039;s value (minimum $5.00, maximum $500).&lt;br /&gt;
&lt;br /&gt;
We do &#039;&#039;&#039;not&#039;&#039;&#039; accept returns beyond 90 days from the date of purchase.&lt;br /&gt;
&lt;br /&gt;
===Cut to Length===&lt;br /&gt;
Unfortunately we cannot accept returns on any items which are cut to custom lengths.  This includes: cable, wire, roller chain, linear shaft, rotary shaft, and t-slot extrusions.  &lt;br /&gt;
&lt;br /&gt;
===We shipped the wrong/incomplete product===&lt;br /&gt;
{{ContactUs|Contact us}}. We will get the correct product sent to you immediately, and will pay all shipping charges.&lt;br /&gt;
&lt;br /&gt;
==Payment Terms==&lt;br /&gt;
We accept credit cards, PayPal, and Wire Transfers.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! Payment Method|| Terms&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Credit Cards&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Visa, MasterCard, American Express (for order in CAD only)&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|PayPal&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|PayPal is accepted.  There are no extra fees for using PayPal&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center|Wire Transfers&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=left|Wire transfers are only accepted for orders over $200.00 USD (excluding shipping charges). There is a $25.00 USD charge for wire transfers under $500.00 USD. Any fees charged by the sending bank are your responsibility.&amp;lt;br /&amp;gt;Please make sure that the amount sent to us covers both our invoice and your bank fees.  Products are not shipped until the money is deposited in our bank account.  We recommend that you e-mail orders@phidgets.com with the amount of the transfer and the invoice you are paying.  &amp;lt;br /&amp;gt;Any order for which payment is not received within 15 days, will be canceled.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Security and Privacy==&lt;br /&gt;
Phidgets Inc. pledges a safe and worry-free shopping experience. IF you are using the current version of Internet Explorer, on the checkout page where you enter your credit card information, you will notice a a locked padlock icon on the top bar your browser window. If you are using Mozilla Firefox, you will notice a locked padlock icon in the bottom right corner of your browser window. If this icon does not appear, please contact us directly to complete your purchase. These icons tell you that the page you are on is secure. We use Secure Sockets Layer (SSL 128-bit) technology with a digital certificate by GeoTrust, Inc. for Internet security to protect your personal information. This encryption makes it impossible for anyone to read your information in transit. We do not store your credit information and it is deleted once it has been securely transmitted to Moneris for processing.&lt;br /&gt;
&lt;br /&gt;
We use your e-mail address to let you know your shipment&#039;s tracking number. Your phone number is required by the Courier Company. We do not sell, rent or give any of your personal information to any unrelated third parties with the exception of Moneris for authorizing credit card payments and the Courier company to let them know where to deliver the shipment and how to contact you if there is any problems.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or concerns about our Security and Privacy policy, call us at 1.403.282.7335 or e-mail us at support@phidgets.com&lt;br /&gt;
&lt;br /&gt;
Phidgets Inc. uses various Google Analytics tools such as conversion tracking in order to improve the effectiveness of the website. These statistics are completely anonymous.&lt;br /&gt;
&lt;br /&gt;
==Holidays==&lt;br /&gt;
Phidgets, Inc. will be closed on the following days. During these times, the site will still be accessible and orders can be placed, but they will not ship until the next business day.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border:1px solid darkgray;&amp;quot; cellpadding=&amp;quot;7px;&amp;quot;&lt;br /&gt;
|-style=&amp;quot;background: #d1d1d1&amp;quot; align=center &lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| Holiday&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| Description&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| 2025&lt;br /&gt;
! style=&amp;quot;text-align:center;&amp;quot;| 2026&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Alberta Family Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Third Monday in February&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 17&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Feb 16&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Good Friday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Friday before Easter Sunday&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 18&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Apr 3&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Victoria Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Monday before May 25&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 19&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| May 18&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Canada Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First day of July (or nearest business day)&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Jul 1&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Heritage Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in August&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 4&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Aug 3&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Labour Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| First Monday in September&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 1&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Sept 7&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Thanksgiving&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Second Monday in October&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 13&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Oct 12&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Remembrance Day&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| November 11 (or nearest business day)&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Nov 11&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Christmas and New Years&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| Varies&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|style=&amp;quot;background: #f0f0f0&amp;quot; align=center| TBA&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Language_-_C_Sharp&amp;diff=35293</id>
		<title>Language - C Sharp</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Language_-_C_Sharp&amp;diff=35293"/>
		<updated>2025-06-13T19:47:25Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: /* Visual Studio Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Learn how to use Phidget USB devices with C#.}}&lt;br /&gt;
[[Category:Language]]&lt;br /&gt;
&lt;br /&gt;
==Get Started==&lt;br /&gt;
With the Phidget22.NET library, it&#039;s easy to create C# applications that work with Phidget devices.&lt;br /&gt;
&lt;br /&gt;
==C# Libraries==&lt;br /&gt;
===Nuget Package===&lt;br /&gt;
The Phidget22.NET library is available as a [https://www.nuget.org/packages/Phidget22.NET/ nuget package]. This is the recommend way to install and manage the Phidget22.NET library.&lt;br /&gt;
&lt;br /&gt;
====macOS Considerations====&lt;br /&gt;
Phidget devices running a HID USB stack require the installation of the macOS libraries or the standalone Phidget Control Panel ([{{SERVER}}/docs/OS_-_macOS download here]).&lt;br /&gt;
&lt;br /&gt;
To determine what USB stack your Phidget device is on, navigate to the product page and then to the specification tab, and look for the &#039;&#039;USB Stack&#039;&#039; specification. If you are using a VINT device, navigate to the product page for the VINT Hub you are using.&lt;br /&gt;
&lt;br /&gt;
[[Image:Javascript_networkserver_webusb_spec.png|center|600px|link=https://cdn.phidgets.com/docs/images/8/80/Javascript_networkserver_webusb_spec.png]]&lt;br /&gt;
&lt;br /&gt;
====Linux Considerations====&lt;br /&gt;
Linux restricts access to USB devices to the root user. To run your .NET application as a regular user, you&#039;ll need to [{{SERVER}}/docs/OS_-_Linux#Setting_udev_Rules set up udev rules] on your system.&lt;br /&gt;
&lt;br /&gt;
===Library Files===&lt;br /&gt;
If you would like to manually manage the Phidget22.NET library files, you can download them [https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-windevel.zip here].&lt;br /&gt;
&lt;br /&gt;
==Development Environment Configuration==&lt;br /&gt;
===Visual Studio===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| Create your Visual Studio project, and navigate to the &#039;&#039;&#039;Solution Explorer&#039;&#039;&#039;. From there, right-click on &#039;&#039;&#039;Dependencies&#039;&#039;&#039; and select &#039;&#039;&#039;Manage NuGet Packages...&#039;&#039;&#039;|| [[Image:Language_csharp_vs_managenuget.png|center|350px|link=https://cdn.phidgets.com/docs/images/c/cc/Language_csharp_vs_managenuget.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, click &#039;&#039;&#039;Browse&#039;&#039;&#039; and enter &#039;&#039;&#039;Phidget22.NET&#039;&#039;&#039; in the search bar. || [[Image:Language_csharp_vs_browsenuget.png|center|350px|link=https://cdn.phidgets.com/docs/images/6/61/Language_csharp_vs_browsenuget.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Click on the package and press the &#039;&#039;&#039;Install&#039;&#039;&#039; button. || [[Image:Language_csharp_vs_installnuget.png|center|350px|link=https://cdn.phidgets.com/docs/images/b/b8/Language_csharp_vs_installnuget.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Finally, add your C# code and run it using the button at the top of the screen. || [[Image:Language_csharp_vs_run.png|center|350px|link=https://cdn.phidgets.com/docs/images/5/5a/Language_csharp_vs_run.png]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| Install the [https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit C# Dev Kit extension for Visual Studio Code].|| [[Image:Language_csharp_vscode_installext.png|center|350px|link=https://cdn.phidgets.com/docs/images/b/b8/Language_csharp_vscode_installext.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, create a directory and open it in Visual Studio Code. You can do this by opening Visual Studio Code and selecting &#039;&#039;&#039;File &amp;gt; Open Folder...&#039;&#039;&#039; || [[Image:Language_csharp_vscode_newfolder.png|center|350px|link=https://cdn.phidgets.com/docs/images/4/43/Language_csharp_vscode_newfolder.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Open the Command Palette (Ctrl + Shift + P), type &#039;&#039;&#039;.NET: New Project&#039;&#039;&#039;, and press Enter. A list of supported project types will appear. || [[Image:Language_csharp_vscode_netnewproject.png|center|350px|link=https://cdn.phidgets.com/docs/images/f/f7/Language_csharp_vscode_netnewproject.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Select your preferred project type from the list. For this example, we will select &#039;&#039;&#039;Console App&#039;&#039;&#039;. || [[Image:Language_csharp_vscode_netconsoleapp.png|center|350px|link=https://cdn.phidgets.com/docs/images/b/bc/Language_csharp_vscode_netconsoleapp.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, we need to add the Phidget22.NET library using NuGet. Open the Command Palette again (Ctrl + Shift + P), and enter &#039;&#039;&#039;NuGet: Add NuGet package...&#039;&#039;&#039;. &lt;br /&gt;
 || [[Image:Language_csharp_vscode_addnugetpackage.png|center|350px|link=https://cdn.phidgets.com/docs/images/2/26/Language_csharp_vscode_addnugetpackage.png]]&lt;br /&gt;
|-&lt;br /&gt;
| When prompted, enter &#039;&#039;&#039;Phidget22.NET&#039;&#039;&#039; and install the latest package.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&#039;&#039;&#039;Note&#039;&#039;&#039;: Ensure you are downloading the latest version which can be seen [{{SERVER}}/?view=changelog here]. Visual Studio Code may incorrectly show an older version as the &#039;&#039;latest&#039;&#039; by default.|| [[Image:Language_csharp_vscode_phidget22net.png|center|350px|link=https://cdn.phidgets.com/docs/images/d/d5/Language_csharp_vscode_phidget22net.png]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Finally, add your C# code and run it using the button at the top of the screen. || [[Image:Language_csharp_vscode_runcodepng.png|center|350px|link=https://cdn.phidgets.com/docs/images/d/dc/Language_csharp_vscode_runcodepng.png]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===.NET Command-Line Interface (CLI)===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| Download and install the latest version of.NET from [https://dotnet.microsoft.com/en-us/download/dotnet Microsoft&#039;s .NET download page].|| [[Image:Language_csharp_cli_download.png|center|350px|link=https://cdn.phidgets.com/docs/images/9/90/Language_csharp_cli_download.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, open a command prompt or terminal in a new folder and enter the following command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
dotnet new console&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|| [[Image:Language_csharp_cli_newconsole.png|center|350px|link=https://cdn.phidgets.com/docs/images/3/3a/Language_csharp_cli_newconsole.png]]&lt;br /&gt;
|-&lt;br /&gt;
| This previous command will create a new console application at the folder location. || [[Image:Language_csharp_cli_newproject.png|center|350px|link=https://cdn.phidgets.com/docs/images/c/cb/Language_csharp_cli_newproject.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Navigate back to the command prompt or terminal, and add the Phidget22.NET package with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
dotnet add package Phidget22.NET&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 || [[Image:Language_csharp_cli_addpackage.png|center|350px|link=https://cdn.phidgets.com/docs/images/7/78/Language_csharp_cli_addpackage.png]]&lt;br /&gt;
|-&lt;br /&gt;
| You can now open the &#039;&#039;&#039;Program.cs&#039;&#039;&#039; file and add your code. Run the program by entering the following command into your command prompt or terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
dotnet run&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 || [[Image:Language_csharp_cli_runcode.png|center|350px|link=https://cdn.phidgets.com/docs/images/f/f3/Language_csharp_cli_runcode.png]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Example Code==&lt;br /&gt;
Navigate to our [https://www.phidgets.com/?view=code_samples&amp;amp;lang=CSharp Code Sample Generator] to view and download code samples that are tailored to your specific device.&lt;br /&gt;
&lt;br /&gt;
[[Image:Language_csharp_codesample.png|center|600px|link=https://cdn.phidgets.com/docs/images/0/03/Language_csharp_codesample.png]]&lt;br /&gt;
&lt;br /&gt;
===Phidget Programming Basics===&lt;br /&gt;
{{PhidgetProgrammingBasicsLink}}&lt;br /&gt;
&lt;br /&gt;
==API==&lt;br /&gt;
[{{SERVER}}/?view=api&amp;amp;lang=CSharp Phidget22 API]&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Programming_Resources&amp;diff=35291</id>
		<title>Programming Resources</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Programming_Resources&amp;diff=35291"/>
		<updated>2025-06-11T19:24:22Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Overview]]&lt;br /&gt;
&lt;br /&gt;
We support a variety of programming languages, each with code samples and a detailed API to help you get started. If you&#039;re unsure which language to choose, consider [[Language - Python|Python]]. It&#039;s easy to set up and beginner friendly. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;LangTableFull&amp;quot;&amp;gt;&lt;br /&gt;
{|class=&amp;quot;table-no-border&amp;quot;&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-Python.png|alt=Python|link=Language - Python|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-Javascript.png|alt=JavaScript|link=Language - JavaScript|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-CSharp.png|alt=C#|link=Language - C Sharp|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-C.png|alt=C|link=Language - C|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-Java.png|alt=Java|link=Language - Java|120px]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - Python|Python]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - JavaScript|JavaScript]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - C Sharp|C#]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - C|C]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - Java|Java]]&lt;br /&gt;
|}&lt;br /&gt;
{|class=&amp;quot;table-no-border&amp;quot;&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-Swift.png|alt=Swift|link=Language - Swift|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-ObjC.png|alt=Objective C|link=Language - Objective C|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-VBNet.png|alt=VB|link=Language_-_Visual_Basic|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-LabVIEW.png|alt=LabVIEW|link=Language - LabVIEW|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-MaxMSP.png|alt=Max|link=Language_-_Max|120px]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - Swift|Swift]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - Objective C|Objective C]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - Visual Basic|VB]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - LabVIEW|LabVIEW]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language_-_Max|Max]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;LangTableSmall&amp;quot;&amp;gt;&lt;br /&gt;
{|class=&amp;quot;table-no-border&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:50px;&amp;quot;|[[Image:Logo-C.png|alt=C|link=Language - C|30px]]||[[Language - C|C]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-CSharp.png|alt=C#|link=Language - C Sharp|30px]]||[[Language - C Sharp|C#]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-Python.png|alt=Python|link=Language - Python|30px]]||[[Language - Python|Python]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-Java.png|alt=Java|link=Language - Java|30px]]||[[Language - Java|Java]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-Javascript.png|alt=JavaScript|link=Language - JavaScript|30px]]||[[Language - JavaScript|JavaScript]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-Swift.png|alt=Swift|link=Language - Swift|30px]]||[[Language - Swift|Swift]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-ObjC.png|alt=Objective C|link=Language - Objective C|30px]]||[[Language - Objective C|Objective C]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:50px;&amp;quot;|[[Image:Logo-VBNet.png|alt=VB|link=Language_-_Visual_Basic|30px]]||[[Language - Visual Basic|VB]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-LabVIEW.png|alt=LabVIEW|link=Language - LabVIEW|30px]]||[[Language - LabVIEW|LabVIEW]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-MaxMSP.png|alt=Max|link=Language_-_Max|30px]]||[[Language_-_Max|Max]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Programming_Resources&amp;diff=35290</id>
		<title>Programming Resources</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Programming_Resources&amp;diff=35290"/>
		<updated>2025-06-11T19:22:11Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Overview]]&lt;br /&gt;
&lt;br /&gt;
We support a variety of programming languages, each with code samples and a detailed API to help you get started. If you&#039;re unsure which language to choose, consider [[Language - Python|Python]]. It&#039;s easy to set up and beginner friendly. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;LangTableFull&amp;quot;&amp;gt;&lt;br /&gt;
{|class=&amp;quot;table-no-border&amp;quot;&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-C.png|alt=C|link=Language - C|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-CSharp.png|alt=C#|link=Language - C Sharp|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-Python.png|alt=Python|link=Language - Python|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-Java.png|alt=Java|link=Language - Java|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-Javascript.png|alt=JavaScript|link=Language - JavaScript|120px]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - C|C]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - C Sharp|C#]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - Python|Python]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - Java|Java]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - JavaScript|JavaScript]]&lt;br /&gt;
|}&lt;br /&gt;
{|class=&amp;quot;table-no-border&amp;quot;&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-Swift.png|alt=Swift|link=Language - Swift|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-ObjC.png|alt=Objective C|link=Language - Objective C|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-VBNet.png|alt=VB|link=Language_-_Visual_Basic|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-LabVIEW.png|alt=LabVIEW|link=Language - LabVIEW|120px]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;|[[Image:Logo-MaxMSP.png|alt=Max|link=Language_-_Max|120px]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - Swift|Swift]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - Objective C|Objective C]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - Visual Basic|VB]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language - LabVIEW|LabVIEW]]&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| [[Language_-_Max|Max]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;LangTableSmall&amp;quot;&amp;gt;&lt;br /&gt;
{|class=&amp;quot;table-no-border&amp;quot;&lt;br /&gt;
|style=&amp;quot;width:50px;&amp;quot;|[[Image:Logo-C.png|alt=C|link=Language - C|30px]]||[[Language - C|C]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-CSharp.png|alt=C#|link=Language - C Sharp|30px]]||[[Language - C Sharp|C#]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-Python.png|alt=Python|link=Language - Python|30px]]||[[Language - Python|Python]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-Java.png|alt=Java|link=Language - Java|30px]]||[[Language - Java|Java]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-Javascript.png|alt=JavaScript|link=Language - JavaScript|30px]]||[[Language - JavaScript|JavaScript]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-Swift.png|alt=Swift|link=Language - Swift|30px]]||[[Language - Swift|Swift]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-ObjC.png|alt=Objective C|link=Language - Objective C|30px]]||[[Language - Objective C|Objective C]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;width:50px;&amp;quot;|[[Image:Logo-VBNet.png|alt=VB|link=Language_-_Visual_Basic|30px]]||[[Language - Visual Basic|VB]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-LabVIEW.png|alt=LabVIEW|link=Language - LabVIEW|30px]]||[[Language - LabVIEW|LabVIEW]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Logo-MaxMSP.png|alt=Max|link=Language_-_Max|30px]]||[[Language_-_Max|Max]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
	<entry>
		<id>https://www.phidgets.com/docs/index.php?title=Language_-_C_Sharp&amp;diff=35289</id>
		<title>Language - C Sharp</title>
		<link rel="alternate" type="text/html" href="https://www.phidgets.com/docs/index.php?title=Language_-_C_Sharp&amp;diff=35289"/>
		<updated>2025-06-11T19:10:29Z</updated>

		<summary type="html">&lt;p&gt;Lmpacent: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:|description=Learn how to use Phidget USB devices with C#.}}&lt;br /&gt;
[[Category:Language]]&lt;br /&gt;
&lt;br /&gt;
==Get Started==&lt;br /&gt;
With the Phidget22.NET library, it&#039;s easy to create C# applications that work with Phidget devices.&lt;br /&gt;
&lt;br /&gt;
==C# Libraries==&lt;br /&gt;
===Nuget Package===&lt;br /&gt;
The Phidget22.NET library is available as a [https://www.nuget.org/packages/Phidget22.NET/ nuget package]. This is the recommend way to install and manage the Phidget22.NET library.&lt;br /&gt;
&lt;br /&gt;
====macOS Considerations====&lt;br /&gt;
Phidget devices running a HID USB stack require the installation of the macOS libraries or the standalone Phidget Control Panel ([{{SERVER}}/docs/OS_-_macOS download here]).&lt;br /&gt;
&lt;br /&gt;
To determine what USB stack your Phidget device is on, navigate to the product page and then to the specification tab, and look for the &#039;&#039;USB Stack&#039;&#039; specification. If you are using a VINT device, navigate to the product page for the VINT Hub you are using.&lt;br /&gt;
&lt;br /&gt;
[[Image:Javascript_networkserver_webusb_spec.png|center|600px|link=https://cdn.phidgets.com/docs/images/8/80/Javascript_networkserver_webusb_spec.png]]&lt;br /&gt;
&lt;br /&gt;
====Linux Considerations====&lt;br /&gt;
Linux restricts access to USB devices to the root user. To run your .NET application as a regular user, you&#039;ll need to [{{SERVER}}/docs/OS_-_Linux#Setting_Udev_Rules set up udev rules] on your system.&lt;br /&gt;
&lt;br /&gt;
===Library Files===&lt;br /&gt;
If you would like to manually manage the Phidget22.NET library files, you can download them [https://cdn.phidgets.com/downloads/phidget22/libraries/windows/Phidget22-windevel.zip here].&lt;br /&gt;
&lt;br /&gt;
==Development Environment Configuration==&lt;br /&gt;
===Visual Studio===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| Create your Visual Studio project, and navigate to the &#039;&#039;&#039;Solution Explorer&#039;&#039;&#039;. From there, right-click on &#039;&#039;&#039;Dependencies&#039;&#039;&#039; and select &#039;&#039;&#039;Manage NuGet Packages...&#039;&#039;&#039;|| [[Image:Language_csharp_vs_managenuget.png|center|350px|link=https://cdn.phidgets.com/docs/images/c/cc/Language_csharp_vs_managenuget.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, click &#039;&#039;&#039;Browse&#039;&#039;&#039; and enter &#039;&#039;&#039;Phidget22.NET&#039;&#039;&#039; in the search bar. || [[Image:Language_csharp_vs_browsenuget.png|center|350px|link=https://cdn.phidgets.com/docs/images/6/61/Language_csharp_vs_browsenuget.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Click on the package and press the &#039;&#039;&#039;Install&#039;&#039;&#039; button. || [[Image:Language_csharp_vs_installnuget.png|center|350px|link=https://cdn.phidgets.com/docs/images/b/b8/Language_csharp_vs_installnuget.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Finally, add your C# code and run it using the button at the top of the screen. || [[Image:Language_csharp_vs_run.png|center|350px|link=https://cdn.phidgets.com/docs/images/5/5a/Language_csharp_vs_run.png]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Visual Studio Code===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| Install the [https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit C# Dev Kit extension for Visual Studio Code].|| [[Image:Language_csharp_vscode_installext.png|center|350px|link=https://cdn.phidgets.com/docs/images/b/b8/Language_csharp_vscode_installext.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, create a directory and open it in Visual Studio Code. You can do this by opening Visual Studio Code and selecting &#039;&#039;&#039;File &amp;gt; Open Folder...&#039;&#039;&#039; || [[Image:Language_csharp_vscode_newfolder.png|center|350px|link=https://cdn.phidgets.com/docs/images/4/43/Language_csharp_vscode_newfolder.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Open the Command Palette (Ctrl + Shift + P), type &#039;&#039;&#039;.NET: New Project&#039;&#039;&#039;, and press Enter. A list of supported project types will appear. || [[Image:Language_csharp_vscode_netnewproject.png|center|350px|link=https://cdn.phidgets.com/docs/images/f/f7/Language_csharp_vscode_netnewproject.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Select your preferred project type from the list. For this example, we will select &#039;&#039;&#039;Console App&#039;&#039;&#039;. || [[Image:Language_csharp_vscode_netconsoleapp.png|center|350px|link=https://cdn.phidgets.com/docs/images/b/bc/Language_csharp_vscode_netconsoleapp.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, we need to add the Phidget22.NET library using NuGet. Open the Command Palette again (Ctrl + Shift + P), and enter &#039;&#039;&#039;NuGet: Add NuGet package...&#039;&#039;&#039;. &lt;br /&gt;
 || [[Image:Language_csharp_vscode_addnugetpackage.png|center|350px|link=https://cdn.phidgets.com/docs/images/2/26/Language_csharp_vscode_addnugetpackage.png]]&lt;br /&gt;
|-&lt;br /&gt;
| When prompted, enter &#039;&#039;&#039;Phidget22.NET&#039;&#039;&#039; and install the package.|| [[Image:Language_csharp_vscode_phidget22net.png|center|350px|link=https://cdn.phidgets.com/docs/images/d/d5/Language_csharp_vscode_phidget22net.png]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| Finally, add your C# code and run it using the button at the top of the screen. || [[Image:Language_csharp_vscode_runcodepng.png|center|350px|link=https://cdn.phidgets.com/docs/images/d/dc/Language_csharp_vscode_runcodepng.png]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===.NET Command-Line Interface (CLI)===&lt;br /&gt;
{| style=&amp;quot;margin:auto;&amp;quot; class=&amp;quot;table-no-border mw-collapsible mw-collapsed&amp;quot;&lt;br /&gt;
|+ &#039;&#039;&#039;Instructions&#039;&#039;&#039;&lt;br /&gt;
| Download and install the latest version of.NET from [https://dotnet.microsoft.com/en-us/download/dotnet Microsoft&#039;s .NET download page].|| [[Image:Language_csharp_cli_download.png|center|350px|link=https://cdn.phidgets.com/docs/images/9/90/Language_csharp_cli_download.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Next, open a command prompt or terminal in a new folder and enter the following command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
dotnet new console&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|| [[Image:Language_csharp_cli_newconsole.png|center|350px|link=https://cdn.phidgets.com/docs/images/3/3a/Language_csharp_cli_newconsole.png]]&lt;br /&gt;
|-&lt;br /&gt;
| This previous command will create a new console application at the folder location. || [[Image:Language_csharp_cli_newproject.png|center|350px|link=https://cdn.phidgets.com/docs/images/c/cb/Language_csharp_cli_newproject.png]]&lt;br /&gt;
|-&lt;br /&gt;
| Navigate back to the command prompt or terminal, and add the Phidget22.NET package with the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
dotnet add package Phidget22.NET&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 || [[Image:Language_csharp_cli_addpackage.png|center|350px|link=https://cdn.phidgets.com/docs/images/7/78/Language_csharp_cli_addpackage.png]]&lt;br /&gt;
|-&lt;br /&gt;
| You can now open the &#039;&#039;&#039;Program.cs&#039;&#039;&#039; file and add your code. Run the program by entering the following command into your command prompt or terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
dotnet run&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 || [[Image:Language_csharp_cli_runcode.png|center|350px|link=https://cdn.phidgets.com/docs/images/f/f3/Language_csharp_cli_runcode.png]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Example Code==&lt;br /&gt;
Navigate to our [https://www.phidgets.com/?view=code_samples&amp;amp;lang=CSharp Code Sample Generator] to view and download code samples that are tailored to your specific device.&lt;br /&gt;
&lt;br /&gt;
[[Image:Language_csharp_codesample.png|center|600px|link=https://cdn.phidgets.com/docs/images/0/03/Language_csharp_codesample.png]]&lt;br /&gt;
&lt;br /&gt;
===Phidget Programming Basics===&lt;br /&gt;
{{PhidgetProgrammingBasicsLink}}&lt;br /&gt;
&lt;br /&gt;
==API==&lt;br /&gt;
[{{SERVER}}/?view=api&amp;amp;lang=CSharp Phidget22 API]&lt;/div&gt;</summary>
		<author><name>Lmpacent</name></author>
	</entry>
</feed>