
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://combustory.com/wiki/skins/common/feed.css?301"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://combustory.com/wiki/index.php?feed=atom&amp;namespace=0&amp;title=Special%3ANewPages</id>
		<title>Combustory - New pages [en]</title>
		<link rel="self" type="application/atom+xml" href="http://combustory.com/wiki/index.php?feed=atom&amp;namespace=0&amp;title=Special%3ANewPages"/>
		<link rel="alternate" type="text/html" href="http://combustory.com/wiki/index.php/Special:NewPages"/>
		<updated>2026-04-04T07:59:43Z</updated>
		<subtitle>From Combustory</subtitle>
		<generator>MediaWiki 1.17.0</generator>

	<entry>
		<id>http://combustory.com/wiki/index.php/Deflated_Balls</id>
		<title>Deflated Balls</title>
		<link rel="alternate" type="text/html" href="http://combustory.com/wiki/index.php/Deflated_Balls"/>
				<updated>2015-01-23T00:51:34Z</updated>
		
		<summary type="html">&lt;p&gt;Jvaughters: /* Ideal Gas Equation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
If you clicked on this link trying to gain information about your old sagging man-hood, be glad that this doesn't apply to you. The reason for this web page is to evaluate the Deflated Football from a scientific feasibility test on how a ball could become depressurized by Half Time even though New England met the specification at the NFL required time two hours before the game.&lt;br /&gt;
&lt;br /&gt;
=Ideal Gas Equation=&lt;br /&gt;
PV = nRT&lt;br /&gt;
&lt;br /&gt;
* P = Pressure (Pa)&lt;br /&gt;
* V = Volume (m^3)&lt;br /&gt;
* n = Number of moles&lt;br /&gt;
* T = Temperature (K)&lt;br /&gt;
&lt;br /&gt;
=State 1=&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* Balls were inside the locker room or building at the pressure inspection time&lt;br /&gt;
* Balls are brand new&lt;br /&gt;
* Balls met the minimum required pressure test two hours prior to the game&lt;br /&gt;
==Equation==&lt;br /&gt;
(P1)(V1)= nR(T1)&lt;br /&gt;
&lt;br /&gt;
=State 2=&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* Balls were outside in the playing field all the way until half time&lt;br /&gt;
* Balls were used in the game at various times throughout the first half&lt;br /&gt;
* Balls were not tampered with in any way to change the pressure through air mass reduction&lt;br /&gt;
==Equation==&lt;br /&gt;
(P2)(V2)= nR(T2)&lt;br /&gt;
&lt;br /&gt;
=Case 1=&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* Ball remains constant Volume (V1=V2)&lt;br /&gt;
* nR is a constant for both states&lt;br /&gt;
* T1 = 82 F = 301 K&lt;br /&gt;
* T2 = 50 F = 283 K&lt;br /&gt;
* P1 = 12.5 psi = 86207 Pa&lt;br /&gt;
==Equation==&lt;br /&gt;
P2 = (P1)(T2/T1)&lt;br /&gt;
&lt;br /&gt;
 Note: Solve two equations for nR and V1 and V2 cancel&lt;br /&gt;
&lt;br /&gt;
==Result==&lt;br /&gt;
P2 = (86207)(283/301) = 82143 Pa = 11.8 psi&lt;br /&gt;
&lt;br /&gt;
=Case 2=&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* Ball volume changes from wear and tear 5% increase in volume (V1/V2) = 0.95&lt;br /&gt;
* Conditions from Case 1 exactly the same&lt;br /&gt;
==Equation==&lt;br /&gt;
P2 = (P1)(T2/T1)(V1/V2)&lt;br /&gt;
&lt;br /&gt;
==Result==&lt;br /&gt;
P2 = (86207)(283/301)(0.95) = 76999 Pa = 11.2 psi&lt;br /&gt;
&lt;br /&gt;
=Summary=&lt;br /&gt;
Case 1 is a viable situation, yet the pressure drop is minimal due to temperature alone. In case 2 we are very generous on the the volume expansion. It is doubtful that the volume changes very much on a new ball, if at all. However, even with the generous volume expansion, the pressure drop still is only 1.3 psi. &lt;br /&gt;
&lt;br /&gt;
The probability of a full 2 psi drop in pressure is doubtful, but cannot be completely ruled out as impossible. The part that we do not know is the exact measurements of the footballs before and after for each football and that is very important. If there was significant variation, you could have some evidence that a new football can change in volume if the lower pressure balls were also the balls used most. Probably a kicked ball being the most likely to change volume. The biggest public evidence is the fact that 11 of the 12 were low and that is a tough probability to ignore.&lt;br /&gt;
&lt;br /&gt;
=Final Judgement=&lt;br /&gt;
The final conclusion is '''Plausible''' but '''Unlikely'''.&lt;br /&gt;
&lt;br /&gt;
=NFL Rules=&lt;br /&gt;
The NFL rules matter here. If there is no temperature at time of measurement rule stated, then does the NFL really have a case against New England? I say no. A small fine at best is the worst punishment, and a rule change to prevent this exploit in the future.&lt;/div&gt;</summary>
		<author><name>Jvaughters</name></author>	</entry>

	<entry>
		<id>http://combustory.com/wiki/index.php/Down_There</id>
		<title>Down There</title>
		<link rel="alternate" type="text/html" href="http://combustory.com/wiki/index.php/Down_There"/>
				<updated>2013-04-29T21:55:03Z</updated>
		
		<summary type="html">&lt;p&gt;Jvaughters: Created page with &amp;quot;By John Vaughters &amp;lt;pre&amp;gt; Well I'll tell you this story, One well burned in mind Not even Alziemers could leave this behind The story is true and all that is stated A form of small...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By John Vaughters&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Well I'll tell you this story, One well burned in mind&lt;br /&gt;
Not even Alziemers could leave this behind&lt;br /&gt;
The story is true and all that is stated&lt;br /&gt;
A form of small torture one very ill fated&lt;br /&gt;
&lt;br /&gt;
On a typical day of a typical morn&lt;br /&gt;
My Mother, your Grandmother was on her chore&lt;br /&gt;
Fat back and Bacon was the 70's way&lt;br /&gt;
And so were heart attacks back in them days&lt;br /&gt;
&lt;br /&gt;
With bacon complete and stacked oh so neat&lt;br /&gt;
it was time for the eggs and in they went&lt;br /&gt;
with a bath of bacon grease ready and hot&lt;br /&gt;
no need for turning, just a splash on the top&lt;br /&gt;
&lt;br /&gt;
One little mistake from a busy distraction&lt;br /&gt;
One splash too many for this grave infraction&lt;br /&gt;
Over the top&lt;br /&gt;
Out of the pan&lt;br /&gt;
Onto the burner &lt;br /&gt;
And then came fire&lt;br /&gt;
With one final crash&lt;br /&gt;
&lt;br /&gt;
There arose such a flame it was out of control&lt;br /&gt;
rising to the ceiling with it's dark black soul&lt;br /&gt;
&lt;br /&gt;
Fire alarm You say? I think NOT!&lt;br /&gt;
Hysterical screaming is all we GOT!&lt;br /&gt;
We fled from our bed and into the hall&lt;br /&gt;
We stopped in our tracks to see such a sight&lt;br /&gt;
we could not move we had such fright&lt;br /&gt;
&lt;br /&gt;
BILL BILL BILL the wailing continued&lt;br /&gt;
Even over the shower the sound went in you&lt;br /&gt;
In a rush to see what the screech was about&lt;br /&gt;
He moved quick, even nearly fell out&lt;br /&gt;
&lt;br /&gt;
To the kitchen he went without even thinking&lt;br /&gt;
All he knew was his dansel was screaming&lt;br /&gt;
He arrived at the kitchen, grease on a tear&lt;br /&gt;
Three kids brightly staring, hey what's that there?&lt;br /&gt;
&lt;br /&gt;
Wiggly jiggly it it moved all around &lt;br /&gt;
Flippity Flop it made such a sound&lt;br /&gt;
Back in the 70's unlike today&lt;br /&gt;
it wasn't polite but just to say, &amp;quot;Hey something's going on down there&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Was it the fire or his eggs that caused his reaction&lt;br /&gt;
Only he knows what put him in action&lt;br /&gt;
He reached for a glass and was filling the water&lt;br /&gt;
When mother struck quick and saw a GREAT matter&lt;br /&gt;
Oh my, this will cause such a splatter&lt;br /&gt;
&lt;br /&gt;
Was it the fire or down there that caused her reaction&lt;br /&gt;
Only she knows what put her in action&lt;br /&gt;
Selfish or not she pulled from the cupboard&lt;br /&gt;
Some white powdered soda that created a smother&lt;br /&gt;
Out went the fire with Bill standing ready&lt;br /&gt;
Fresh water in glass and all watching steady&lt;br /&gt;
&lt;br /&gt;
After the fire, all was well&lt;br /&gt;
except three kids whose jaws had fell&lt;br /&gt;
&lt;br /&gt;
BILL! Jeanne shout out, You're Naked!!! &lt;br /&gt;
Oh what truth she just spout&lt;br /&gt;
&lt;br /&gt;
With a quick little Shutter &lt;br /&gt;
He moved his bare ass&lt;br /&gt;
He moved it real fast&lt;br /&gt;
He shot like a bull and left all a flutter&lt;br /&gt;
Flippity Flop, Flippity Flop, as the sound turned down&lt;br /&gt;
&lt;br /&gt;
Jeanne, My mother, your grandmother turned with a grin&lt;br /&gt;
she stated quite nicely and very politely&lt;br /&gt;
Go get dressed and I'll get your breakfast.&lt;br /&gt;
Wheaties is was with Bruce Jenner our Champion.&lt;br /&gt;
&lt;br /&gt;
With Man Hood in tact, we all must exclaim&lt;br /&gt;
that my mother, your grandmother saved my father, your grandfather&lt;br /&gt;
from a lifetime of shame by smothering that fire and protecting Down There.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvaughters</name></author>	</entry>

	<entry>
		<id>http://combustory.com/wiki/index.php/Arduino_Sever_PXE_Script</id>
		<title>Arduino Sever PXE Script</title>
		<link rel="alternate" type="text/html" href="http://combustory.com/wiki/index.php/Arduino_Sever_PXE_Script"/>
				<updated>2012-11-04T18:23:08Z</updated>
		
		<summary type="html">&lt;p&gt;Jvaughters: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;anyweb&amp;gt;http://combustory.com/wiki/ads/ad_rtc.html&amp;lt;/anyweb&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{default}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;anyweb&amp;gt;http://combustory.com/wiki/ads/ad_rtc_1.html&amp;lt;/anyweb&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
 Note:This page is related to the [[Arduino Server]] article. Without reading that article, this one will probably not make much sense.&lt;br /&gt;
&lt;br /&gt;
This article provides instructions to build a complete PXE directory for the [http://distro.ibiblio.org/tinycorelinux/ Tiny Core Linux] Distribution. You will be able to run the script below and then move the created directory to the /tftpboot directory and point your dhcp server to the new directory. This will allow you to boot a wide range of computers via the network. The script is focused on taking care of the details to configure an [[Arduino Server]] that basically acts as a terminal server for connected Arduinos. The server is much more capable than just serving Arduinos, but I will let you investigate anything outside of the [[Arduino Server]] focus.&lt;br /&gt;
&lt;br /&gt;
=Assumptions=&lt;br /&gt;
* You have access to the internet&lt;br /&gt;
* You are familiar with the Linux command line&lt;br /&gt;
* You understand basic text file configuration methods&lt;br /&gt;
* You are familiar with serial communications in Linux&lt;br /&gt;
* You are able to manipulate computer BIOS settings&lt;br /&gt;
* You understand how to configure PXE booting&lt;br /&gt;
* You have a tfpt server running&lt;br /&gt;
* You understand sudo, su, chroot commands&lt;br /&gt;
&lt;br /&gt;
=Instructions=&lt;br /&gt;
 Note: These instructions were tested on Fedora 13, but should run on typical linux distributions &lt;br /&gt;
* Become root user. All commands below assume root access&lt;br /&gt;
* Create a directory to use for PXE development and change into the directory&lt;br /&gt;
 mkdir ~/my_tinycore_dir&lt;br /&gt;
 cd ~/my_tinycore_dir&lt;br /&gt;
* Create a file and copy the contents of the script below&lt;br /&gt;
 gedit tc_pxe_build&lt;br /&gt;
* Find the text '''tftplist=192.168.1.1''' in your script and change it to the ip address of your tftp server&lt;br /&gt;
* Save the script and make it executable by root only&lt;br /&gt;
 chmod 700 tc_pxe_build&lt;br /&gt;
* Run the script. It will download what it needs and create necessary directories&lt;br /&gt;
 ./tc_pxe_script&lt;br /&gt;
* The follwing directories will be created. Keep all the directories, because you may want to run the script multiple times&lt;br /&gt;
** tc_downloads - This is where the files needed are downloaded&lt;br /&gt;
** tc_pxe - This is the directory that is ready to be moved to /tftpboot&lt;br /&gt;
** tc_pxe_mnt - Just a temporary directory to mount the iso file&lt;br /&gt;
* Copy the tc_pxe directory to the /tftpboot directory (You should not change the directory name, it has other references to it)&lt;br /&gt;
 cp -r ~/my_tinycore_dir/tc_pxe /tftpboot/tc_pxe&lt;br /&gt;
* Point your PXE settings to this directory &lt;br /&gt;
* Set up the BIOS on the computer you want to boot and you should be able to boot just about any PC that has netboot capability&lt;br /&gt;
&lt;br /&gt;
=Further Configuration=&lt;br /&gt;
Hopefully you were able to get a server running. That is a big part of this set up and the computer is useful even in this state, but I believe you will find it beneficial to make some more changes. In this section we will discuss how to modify your system further to make the it even more useful.&lt;br /&gt;
&lt;br /&gt;
==Root File System==&lt;br /&gt;
Any changes you make on the server are not kept once you reboot. To change any files on the root file system you will need to change it in the ''/tftboot/tc_pxe/tc_pxe_dev/core_root'' directory. This is the root directory for your server. Then you will need to run a script to compact the root file system and copy it to your ''/tftpboot/tc_pxe'' directory. You can also use chroot commands to modify settings that that are needed to be done root access.&lt;br /&gt;
&lt;br /&gt;
===Best Practices===&lt;br /&gt;
If you have created a bootable PXE system, then you are off to a great start. Since the configuration part can take some time, you may want to save the file periodically. That way if you make a mistake, you do not loose all your effort. Fortunately this is a breeze. You only need to copy one file. In a jam, you can extract this file and create known good root file system.&lt;br /&gt;
&lt;br /&gt;
* Create backup of root file system&lt;br /&gt;
 cd /tftpboot/tc_pxe/tc_pxe_dev/ard-core.gz /tftpboot/tc_pxe/tc_pxe_dev/ard-core.gz.bak&lt;br /&gt;
* restore the backup of root file system&lt;br /&gt;
 cd /tftpboot/tc_pxe/tc_pxe_dev/core_root&lt;br /&gt;
 rm -rf /tftpboot/tc_pxe/tc_pxe_dev/core_root/*&lt;br /&gt;
 zcat ../ard-core.gz.bak | sudo cpio -i -H newc -d&lt;br /&gt;
&lt;br /&gt;
===Create New Root File System===&lt;br /&gt;
How to change files in your root file system:&lt;br /&gt;
* Make sure you have root access&lt;br /&gt;
* Make any changes like adding files, changing files or chroot commands&lt;br /&gt;
* Once you are finished with your changes run these commands&lt;br /&gt;
 cd /tftpboot/tc_pxe/tc_pxe_dev&lt;br /&gt;
 ./build_tinycore&lt;br /&gt;
* Your new file system changes will show on the next reboot&lt;br /&gt;
&lt;br /&gt;
==Arduino Naming with udev==&lt;br /&gt;
If you plan on hosting more than one Arduino device on this server, then you need consider naming the device with udev. This is probably the most useful feature for making sure that your Arduino devices get named the same at boot up so you can access the correct Arduino with the correct script. The default set up should work with an Arduino Deciemilla. It will name the serial device ''/dev/arduino_1''. Even if I only have one device, I find it rather convenient to use for finding my devices. &lt;br /&gt;
&lt;br /&gt;
How to change the device names of your Arduinos (Or any other USB to Serial Device):&lt;br /&gt;
* I highly recommend you visit the [[Arduino Communications Device Naming with udev]] article to help you understand&lt;br /&gt;
* Below is the file you will want to modify to match up your devices&lt;br /&gt;
 /tftpboot/tc_pxe/tc_pxe_dev/core_root/etc/udev/rules.d/98-arduino.rules&lt;br /&gt;
* Example entry in the file. Changing the attributes and the NAME will be most important. You do not want duplicate names.&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{serial}==&amp;quot;A700618T&amp;quot;, ATTRS{product}==&amp;quot;FT232R USB UART&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, NAME=&amp;quot;arduino_1&amp;quot;&lt;br /&gt;
* Once you have made the changes to the files, follow the instructions on updating the root file system above. &lt;br /&gt;
&lt;br /&gt;
 TIP: You probably will want to test on any other linux computer to get your settings correct and then copy the settings to your tc_pxe root file system. Otherwise you will spend much time changing and rebooting your system. &lt;br /&gt;
&lt;br /&gt;
==ssh via dropbear==&lt;br /&gt;
If you plan on using this server for more than just an [[Arduino Server]] I recommend you configure ssh, which I included in the additional packages. You can also use ssh to transfer files that can be used as a method other than the default set up of connecting the serial ports to a network TCP port. To use ssh on TinyCore linux, we have loaded a package called dropbear. We will need to change our root file system to create passwords for the tc and root users. We will also want to copy over the server identifying keys to prevent new keys every time the server reboots. This can be quite annoying when trying to access the server and getting rejected because of the keys.&lt;br /&gt;
&lt;br /&gt;
Steps to use ssh:&lt;br /&gt;
* Make sure you have root access&lt;br /&gt;
* Set the passwords of tc and root users (Enter password when promted)&lt;br /&gt;
 chroot /tftpboot/tc_pxe/tc_pxe_dev/core_root/ passwd tc&lt;br /&gt;
 chroot /tftpboot/tc_pxe/tc_pxe_dev/core_root/ passwd root&lt;br /&gt;
* If your Tiny Core system is already booted, then we can transfer over the keys to the root file system with scp&lt;br /&gt;
 mkdir /tftboot/tc_pxe/tc_pxe_dev/core_root/etc/dropbear&lt;br /&gt;
* Log into your TinyCore computer via ssh (Change ip's to match your network, accept ssh key and enter password), then copy key files over via scp&lt;br /&gt;
 ssh tc@192.168.1.150&lt;br /&gt;
 sudo scp /etc/dropbear/dropbear_dss_host_key root@192.168.1.1:/tftpboot/tc_pxe/tc_pxe_dev/core_root/etc/dropbear/&lt;br /&gt;
 sudo scp /etc/dropbear/dropbear_rsa_host_key root@192.168.1.1:/tftpboot/tc_pxe/tc_pxe_dev/core_root/etc/dropbear/ &lt;br /&gt;
 exit&lt;br /&gt;
* Update the root file system per instructions above. &lt;br /&gt;
* Next time you reboot, you should be able to access ssh without accepting a key&lt;br /&gt;
&lt;br /&gt;
==Change the tc_pxe directory name==&lt;br /&gt;
You may want to use your own directory names and if you want to have multiple computers using different images, then you will want to consider changing the tc_pxe directory name.&lt;br /&gt;
&lt;br /&gt;
* Change directory to ard_srv_1 from tc_pxe&lt;br /&gt;
 sed -i 's/tc_pxe/ard_srv_1/g' /tftpboot/tc_pxe/cde/onboot_x.lst&lt;br /&gt;
 sed -i 's/tc_pxe/ard_srv_1/g' /tftpboot/tc_pxe/pxelinux.cfg/default&lt;br /&gt;
 cd /tftpboot&lt;br /&gt;
 mv tc_pxe ard_srv_1&lt;br /&gt;
* Point your PXE set up to the new directory and you are good to go.&lt;br /&gt;
&lt;br /&gt;
==Other Configuration Ideas==&lt;br /&gt;
* Use multiple servers with different image directories. Study how to boot PXE by MAC address.&lt;br /&gt;
* Add packages to the PXE server. &lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Replace PXE TinyCore System==&lt;br /&gt;
The best part of using TinyCore and this script is that if for some reason you messed up, you just start from scratch and it only takes a few minutes to run the script again as long as you do not delete the tc_downloads directory. It is even more useful if you had a running system from the start, then messed it up, then all you have to do is delete the /tftpboot/tc_pxe directory and then copy it from the ~/my_tinycore_dir directory.&lt;br /&gt;
* Remove PXE set up and replace it with the default system created by script&lt;br /&gt;
 rm -rf /tftpboot/tc_pxe&lt;br /&gt;
 cp -r ~/my_tinycore_dir/tc_pxe /tftpboot/tc_pxe&lt;br /&gt;
* More drastic measure to remove the default system and re-run script&lt;br /&gt;
 rm -rf ~/my_tinycore_dir/tc_pxe&lt;br /&gt;
 cd ~/my_tinycore_dir&lt;br /&gt;
 ./tc_pxe_script&lt;br /&gt;
&lt;br /&gt;
=TinyCore PXE build script=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#/bin/bash&lt;br /&gt;
#tc_pxe_build v0.1&lt;br /&gt;
# Written by John Vaughters at http://combustory.com/wiki/index.php/Arduino_Sever_PXE_Script&lt;br /&gt;
# This script will build the entire pxe directory structure needed to start a tinycore arduino server&lt;br /&gt;
&lt;br /&gt;
# Check if already installed&lt;br /&gt;
if [ -d tc_pxe ]&lt;br /&gt;
   then&lt;br /&gt;
        echo '********************* Directory tc_pxe already exists. Please remove tc_pxe directory to run this Intall'&lt;br /&gt;
	exit 0&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Create Directories&lt;br /&gt;
echo '*********************Creating Directories'&lt;br /&gt;
&lt;br /&gt;
mkdir tc_downloads&lt;br /&gt;
mkdir tc_pxe_mnt&lt;br /&gt;
mkdir tc_pxe&lt;br /&gt;
mkdir tc_pxe/pxelinux.cfg&lt;br /&gt;
mkdir tc_pxe/tc_pxe_dev&lt;br /&gt;
mkdir tc_pxe/tc_pxe_dev/core_root&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Download and copy TinyCore&lt;br /&gt;
echo '*********************Downloading, Extracting and Copying TinyCore-current.iso'&lt;br /&gt;
&lt;br /&gt;
cd tc_downloads&lt;br /&gt;
if [ ! -f TinyCore-current.iso ] &lt;br /&gt;
   then&lt;br /&gt;
	wget http://distro.ibiblio.org/tinycorelinux/4.x/x86/release/TinyCore-current.iso&lt;br /&gt;
fi&lt;br /&gt;
mount TinyCore-current.iso ../tc_pxe_mnt -o loop,ro&lt;br /&gt;
cp -r ../tc_pxe_mnt/* ../tc_pxe&lt;br /&gt;
umount ../tc_pxe_mnt&lt;br /&gt;
cp ../tc_pxe/boot/core.gz ../tc_pxe/tc_pxe_dev&lt;br /&gt;
cd ../tc_pxe/tc_pxe_dev/core_root&lt;br /&gt;
zcat ../core.gz | sudo cpio -i -H newc -d&lt;br /&gt;
&lt;br /&gt;
# Make directories and scripts for arduino initialization&lt;br /&gt;
echo '*********************Build new rootfs and add scripts for PXE boot'&lt;br /&gt;
&lt;br /&gt;
mkdir home/scada&lt;br /&gt;
mkdir home/scada/scripts&lt;br /&gt;
mkdir home/scada/data&lt;br /&gt;
echo '#!/bin/bash' &amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '# arduino_init - initialization tasks for scada' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '### Main script starts here ###' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '# Store file name of arduino' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo 'FILE=&amp;quot;/dev/arduino_1&amp;quot;' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo ' ' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '# Arduino Communications' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '# set serial commuication for arduino' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo 'stty -F $FILE cs8 115200 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '# make sure file (serial device) exist and is readable' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo 'if ! pidof socat TCP-LISTEN:2111,fork OPEN:/dev/arduino_1; then' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '  echo &amp;quot;$FILE is not logging&amp;quot;' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '  if [ ! -c $FILE ]; then' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo ' 	echo &amp;quot;$FILE : does not exists&amp;quot;' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '	exit 1' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '  elif [ ! -r $FILE ]; then' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '  	echo &amp;quot;$FILE: can not read&amp;quot;' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '  	exit 2' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '  else' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '        socat TCP-LISTEN:2111,fork OPEN:/dev/arduino_1 &amp;amp;' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '        echo &amp;quot;start process - socat TCP-LISTEN:2111,fork OPEN:$FILE&amp;quot;' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo '  fi' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo 'fi' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
echo 'exit 0' &amp;gt;&amp;gt; home/scada/scripts/arduino_init&lt;br /&gt;
chmod 755 home/scada/scripts/arduino_init&lt;br /&gt;
&lt;br /&gt;
# Add services to the boot script&lt;br /&gt;
echo '/etc/init.d/dropbear start' &amp;gt;&amp;gt; opt/bootlocal.sh&lt;br /&gt;
echo 'sh /home/scada/scripts/arduino_init &amp;amp;' &amp;gt;&amp;gt; opt/bootlocal.sh&lt;br /&gt;
echo 'SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{serial}==&amp;quot;A700618T&amp;quot;, ATTRS{product}==&amp;quot;FT232R USB UART&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, NAME=&amp;quot;arduino_1&amp;quot;' &amp;gt; etc/udev/rules.d/98-arduino.rules&lt;br /&gt;
&lt;br /&gt;
# Build tiny_core rootfs&lt;br /&gt;
find | cpio -o -H newc | gzip -2 &amp;gt; ../ard-core.gz&lt;br /&gt;
cd ..&lt;br /&gt;
cp ard-core.gz ../boot/&lt;br /&gt;
&lt;br /&gt;
# Create build_tinycore script&lt;br /&gt;
echo 'cd core_root' &amp;gt; build_tinycore&lt;br /&gt;
echo 'find | cpio -o -H newc | gzip -2 &amp;gt; ../ard-core.gz' &amp;gt;&amp;gt; build_tinycore&lt;br /&gt;
echo 'cd ..' &amp;gt;&amp;gt; build_tinycore&lt;br /&gt;
echo 'cp ard-core.gz ../boot/' &amp;gt;&amp;gt; build_tinycore&lt;br /&gt;
chmod 700 build_tinycore&lt;br /&gt;
&lt;br /&gt;
# Download optional software packages&lt;br /&gt;
echo '*********************Downloading Additional Packages for TinyCore'&lt;br /&gt;
&lt;br /&gt;
cd ../../tc_downloads&lt;br /&gt;
# Get ssh dropbear&lt;br /&gt;
if [ -f dropbear.tcz ] &lt;br /&gt;
   then&lt;br /&gt;
	cp dropbear.tcz ../tc_pxe/cde/optional/&lt;br /&gt;
   else&lt;br /&gt;
	wget http://distro.ibiblio.org/tinycorelinux/4.x/x86/tcz/dropbear.tcz&lt;br /&gt;
	cp dropbear.tcz ../tc_pxe/cde/optional/&lt;br /&gt;
fi&lt;br /&gt;
# Get net utility socat&lt;br /&gt;
if [ -f socat.tcz ] &lt;br /&gt;
   then&lt;br /&gt;
	cp socat.tcz ../tc_pxe/cde/optional/&lt;br /&gt;
   else&lt;br /&gt;
	wget http://distro.ibiblio.org/tinycorelinux/4.x/x86/tcz/socat.tcz&lt;br /&gt;
	cp socat.tcz ../tc_pxe/cde/optional/&lt;br /&gt;
fi&lt;br /&gt;
# Get usb to serial utility&lt;br /&gt;
if [ -f usb-serial-3.0.21-tinycore.tcz ] &lt;br /&gt;
   then&lt;br /&gt;
	cp usb-serial-3.0.21-tinycore.tcz ../tc_pxe/cde/optional/&lt;br /&gt;
   else&lt;br /&gt;
	wget http://distro.ibiblio.org/tinycorelinux/4.x/x86/tcz/usb-serial-3.0.21-tinycore.tcz&lt;br /&gt;
	cp usb-serial-3.0.21-tinycore.tcz ../tc_pxe/cde/optional/&lt;br /&gt;
fi&lt;br /&gt;
cd ../tc_pxe&lt;br /&gt;
&lt;br /&gt;
# Check if file exists before copy. If it does not exist then download the syslinux and extract&lt;br /&gt;
if [ -f &amp;quot;/usr/share/syslinux/pxelinux.0&amp;quot; ]&lt;br /&gt;
    then&lt;br /&gt;
	cp /usr/share/syslinux/pxelinux.0 .&lt;br /&gt;
    else&lt;br /&gt;
	echo '*********************Unable to find /usr/share/syslinux/pxelinux.0 downloading syslinux'&lt;br /&gt;
	cd ../tc_downloads&lt;br /&gt;
    	if [ ! -f &amp;quot;syslinux-4.06/core/pxelinux.0&amp;quot; ]&lt;br /&gt;
     	  then&lt;br /&gt;
		if [ ! -f &amp;quot;syslinux-4.06.tar.gz&amp;quot; ]&lt;br /&gt;
		  then&lt;br /&gt;
		      wget http://www.kernel.org/pub/linux/utils/boot/syslinux/4.xx/syslinux-4.06.tar.gz&lt;br /&gt;
	    	fi&lt;br /&gt;
		tar -zxf syslinux-4.06.tar.gz&lt;br /&gt;
		cp syslinux-4.06/core/pxelinux.0 ../tc_pxe/pxelinux.0&lt;br /&gt;
	  else &lt;br /&gt;
		cp syslinux-4.06/core/pxelinux.0 ../tc_pxe/pxelinux.0&lt;br /&gt;
	fi	&lt;br /&gt;
	cd ../tc_pxe&lt;br /&gt;
fi&lt;br /&gt;
cd pxelinux.cfg&lt;br /&gt;
echo 'default boot/vmlinuz' &amp;gt; default&lt;br /&gt;
echo 'append initrd=boot/ard-core.gz tftplist=192.168.1.1:/tc_pxe/cde/onboot_x.lst xvesa=800x600x32' &amp;gt;&amp;gt; default &lt;br /&gt;
cd ../cde&lt;br /&gt;
echo '/tc_pxe/cde/optional/Xlibs.tcz' &amp;gt; onboot_x.lst&lt;br /&gt;
echo '/tc_pxe/cde/optional/Xprogs.tcz' &amp;gt;&amp;gt; onboot_x.lst&lt;br /&gt;
echo '/tc_pxe/cde/optional/Xvesa.tcz' &amp;gt;&amp;gt; onboot_x.lst&lt;br /&gt;
echo '/tc_pxe/cde/optional/fltk-1.10.tcz' &amp;gt;&amp;gt; onboot_x.lst&lt;br /&gt;
echo '/tc_pxe/cde/optional/wbar.tcz' &amp;gt;&amp;gt; onboot_x.lst&lt;br /&gt;
echo '/tc_pxe/cde/optional/flwm_topside.tcz' &amp;gt;&amp;gt; onboot_x.lst&lt;br /&gt;
echo '/tc_pxe/cde/optional/usb-serial-3.0.21-tinycore.tcz' &amp;gt;&amp;gt; onboot_x.lst&lt;br /&gt;
echo '/tc_pxe/cde/optional/dropbear.tcz' &amp;gt;&amp;gt; onboot_x.lst&lt;br /&gt;
echo '/tc_pxe/cde/optional/socat.tcz' &amp;gt;&amp;gt; onboot_x.lst&lt;br /&gt;
&lt;br /&gt;
echo '*********************Install Complete'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jvaughters</name></author>	</entry>

	<entry>
		<id>http://combustory.com/wiki/index.php/Arduino_Server</id>
		<title>Arduino Server</title>
		<link rel="alternate" type="text/html" href="http://combustory.com/wiki/index.php/Arduino_Server"/>
				<updated>2012-10-28T15:05:41Z</updated>
		
		<summary type="html">&lt;p&gt;Jvaughters: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;anyweb&amp;gt;http://combustory.com/wiki/ads/ad_rtc.html&amp;lt;/anyweb&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{default}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;anyweb&amp;gt;http://combustory.com/wiki/ads/ad_rtc_1.html&amp;lt;/anyweb&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Summary=&lt;br /&gt;
In determining a method to create a distributed sensor network I decided to test the idea of taking some old hardware to use it as a remote server to communicate with Arduinos. The basic idea is to have a server that communicates with the Arduinos and sends the data to a central monitoring process over the network. As long as you have a network connection to the server, you can add as many Arduinos as the server can handle to monitor or control whatever it is you are trying to accomplish.The motivation for this investigation revolved around Energy Management, therefore, I may have some references that apply to that subject to use as examples.&lt;br /&gt;
&lt;br /&gt;
This article is not meant to be a step by step procedure, simply because there are many variables in each of our situations. Mainly this is a guide to how to accomplish the task with a conceptual basis that will lead you to discover some solutions that are needed for your application. It is more of a framework with some details and references.&lt;br /&gt;
&lt;br /&gt;
=Software=&lt;br /&gt;
The Arduino Server will be focused on Linux. I guess it is possible to consider windows, but I have not been able to find the same capabilities easily and I am not sure it is even worth investigating, given the ease and flexibility of linux in this application. The central monitoring computers can be any OS that is capable of communicating to network TCP ports or file transfer, which is pretty much anything.&lt;br /&gt;
&lt;br /&gt;
=Assumptions=&lt;br /&gt;
If you do not fully understand these topics below, this article will still be helpful for learning the capabilities of computers. Finding out computing techniques is half the battle to finding solutions. You can always learn the skills later and things will eventually fall in place.&lt;br /&gt;
&lt;br /&gt;
* You are familiar with the Linux command line&lt;br /&gt;
* You understand basic text file configuration methods&lt;br /&gt;
* You are familiar with serial communications in Linux&lt;br /&gt;
* You are able to manipulate computer BIOS settings&lt;br /&gt;
* You understand how to configure booting from HD,USB,CD,PXE&lt;br /&gt;
* You understand sudo, su, chroot commands&lt;br /&gt;
&lt;br /&gt;
=Server=&lt;br /&gt;
The idea is that you are able to find any old server that you may have laying around and put it to use and save money or buy one cheap just to help you learn as a low cost education. The hardware requirements are very little, you should be fine as long as you have about 256k in memory. It may be possible to have less, but that is where I decided to draw the line. The processor is mostly irrelevant, because just about any processor you have laying around will most likely be able to manage the light load we are creating. I will not be testing it, but it may be possible to go as far back as a 386. The hardware configuration that I am using is a 1.2MHz pentium with 256k in memory, which actually works very well even in full GUI mode. You should also be able to find this type of computer laying around in many junk piles at a computer swap.&lt;br /&gt;
&lt;br /&gt;
==Operating System==&lt;br /&gt;
After a significant search and years of playing around with small linux distributions, I have fallen on upon [http://distro.ibiblio.org/tinycorelinux/ Tiny Core Linux]. It is amazing. With this distribution you can breath life into old computers you thought were long useless. It has a full GUI and is quite capable of many tasks. With a quick download you can be up and running in no time. What really sealed the deal for me was the fact that I could change all the characteristics of this OS with ease and quickly. After fiddling around with many other linux distros for hours or even days, I was making progress with Tiny Core literally in minutes. I'm completely sold on this idea and while many have created small distributions, this concept is masterful in my eyes and far better than any other that I have tried.&lt;br /&gt;
&lt;br /&gt;
==Boot Methods==&lt;br /&gt;
With Tiny Core you have these boot options: HD,CD,USB,PXE. I am focusing on PXE (Network Booting), because to me this is the best way to manage old computers that tend to die. I can pretty much find any old computer with net boot capability and just plug it in and off we go with very little work. The CD and USB are similar in this capability, but not nearly as fast on booting up. The HD being the least flexible of all options, but may not be too bad if you use an IDE or SATA to SD converter, which I have not tried yet, but they look interesting.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
===PXE Setup===&lt;br /&gt;
The PXE boot process requires a tftp server. If you decide to use this process then you will need to install that software first. I originally had some long instructions, but I decided to create a script, which is still long, so I moved it to this page: [[Arduino Sever PXE Script]]&lt;br /&gt;
====Operation====&lt;br /&gt;
At this stage you should have the server working and we will test it and connect to the arduino from a client.&lt;br /&gt;
&lt;br /&gt;
Test Server:&lt;br /&gt;
* Log into the server from the console or ssh&lt;br /&gt;
* Verify that the /home/scada/scripts/arduino_init script worked with this command&lt;br /&gt;
 netstat -tl&lt;br /&gt;
Expected command ouput:&lt;br /&gt;
 Active Internet connections (only servers)&lt;br /&gt;
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       &lt;br /&gt;
 tcp        0      0 0.0.0.0:2111            0.0.0.0:*               LISTEN      &lt;br /&gt;
 tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      &lt;br /&gt;
 netstat: /proc/net/tcp6: No such file or directory&lt;br /&gt;
This shows the port 2111 we are looking for to show that the arduino_init script worked. If you do not see that line, then it did not work.&lt;br /&gt;
* Try to manually run socat command: (Note:This resets the program in Arduino after a reconnect to port)&lt;br /&gt;
 stty -F /dev/arduino_1 cs8 115200 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts&lt;br /&gt;
 socat TCP-LISTEN:2111,fork OPEN:/dev/arduino_1&lt;br /&gt;
If this fails, then check that /dev/arduino_1 exists, it may be a udev naming issue. See this article for assitance with udev: [[Arduino Communications Device Naming with udev]]&lt;br /&gt;
* Connect to TCP port 2111 from another computer (If you have trouble try this as root)&lt;br /&gt;
  rm -f /home/scada/data/arduino_1_in&lt;br /&gt;
  mkfifo /home/scada/data/arduino_1_in&lt;br /&gt;
  tail -f /home/scada/data/arduino_1_in | nc 172.1.1.147 2111 &amp;gt; /home/scada/data/arduino_1 &amp;amp;&lt;br /&gt;
* Send a command to the pipe into the nc command&lt;br /&gt;
 echo S &amp;gt; /home/scada/data/arduino_1_in&lt;br /&gt;
=More Investigation=&lt;br /&gt;
* Create scripts to connect to the port on the Arduino Server and collect data&lt;br /&gt;
* Discuss security and ssh &lt;br /&gt;
* Discuss file transfer methods&lt;br /&gt;
* Discuss cron jobs and set up&lt;br /&gt;
* This section will end up being a wide scope with many ideas presented and possibly referenced&lt;/div&gt;</summary>
		<author><name>Jvaughters</name></author>	</entry>

	<entry>
		<id>http://combustory.com/wiki/index.php/Writing_Article_Overviews</id>
		<title>Writing Article Overviews</title>
		<link rel="alternate" type="text/html" href="http://combustory.com/wiki/index.php/Writing_Article_Overviews"/>
				<updated>2012-10-21T01:10:27Z</updated>
		
		<summary type="html">&lt;p&gt;Jvaughters: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jvaughters</name></author>	</entry>

	<entry>
		<id>http://combustory.com/wiki/index.php/Arduino_Communications_Device_Naming_with_udev</id>
		<title>Arduino Communications Device Naming with udev</title>
		<link rel="alternate" type="text/html" href="http://combustory.com/wiki/index.php/Arduino_Communications_Device_Naming_with_udev"/>
				<updated>2012-10-21T01:08:25Z</updated>
		
		<summary type="html">&lt;p&gt;Jvaughters: /* udev */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;anyweb&amp;gt;http://combustory.com/wiki/ads/ad_rtc_1.html&amp;lt;/anyweb&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{default}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&amp;lt;anyweb&amp;gt;http://combustory.com/wiki/ads/ad_rtc_1.html&amp;lt;/anyweb&amp;gt;&lt;br /&gt;
{{Article summary start}}&lt;br /&gt;
{{Article summary text|This article covers the configuration of udev for Arduino Communication.}}&lt;br /&gt;
{{Article summary end}}&lt;br /&gt;
&lt;br /&gt;
==Summary==&lt;br /&gt;
If you use more than one Arduino with USB or have other USB-to-Serial devices, then you may find it convenient to make the device have the same name every time you reboot or connect the Arduino. The technique here is shown for an FTDI device, but the same process can be used for just about any USB-to-Serial device that the system recognizes.&lt;br /&gt;
&lt;br /&gt;
==Assumptions==&lt;br /&gt;
* You are familiar with the Linux command line&lt;br /&gt;
* You understand basic text file configuration methods&lt;br /&gt;
* You are familiar with serial communications in Linux&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
{{Note|All scripts will assume that there is a '{{ic|/dev/arduino_1}}'.}}&lt;br /&gt;
&lt;br /&gt;
The drivers for the FTDI chip is included in the kernel, so it should be detected as soon as it's plugged in, and assigned to device {{ic|/dev/ttyUSB[0-9]}}.&lt;br /&gt;
To check where it got assigned, run:&lt;br /&gt;
&lt;br /&gt;
  dmesg | grep FTDI&lt;br /&gt;
&lt;br /&gt;
The output will contain a line that looks something like this:&lt;br /&gt;
&lt;br /&gt;
  usb 1-4.4: FTDI USB Serial Device converter now attached to ttyUSB0&lt;br /&gt;
&lt;br /&gt;
===udev===&lt;br /&gt;
&lt;br /&gt;
It can be annoying to have to look up what {{ic|/dev/ttyUSB[0-9]}} the device gets assigned, so it's a good idea to add a simple udev rule that creates a link to the device when it is plugged in. It used to be possible to rename the device which would leave the ttyUSB[0-9] open for other devices. If you are using a linux kernel that is old enough you can rename the device. However, the linux community has determined the link is the proper method to track the device. Below I will show both methods.&lt;br /&gt;
&lt;br /&gt;
First of all, you will need to find out the serial number of FTDI chip on the Arduino. This can be achieved by running the following, assuming your device is plugged in and was assigned to {{ic|/dev/ttyUSB0}}:&lt;br /&gt;
&lt;br /&gt;
  udevadm info --attribute-walk -n /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
Now add/create the following file:&lt;br /&gt;
&lt;br /&gt;
  /etc/udev/rules.d/98-arduino.rules&lt;br /&gt;
&lt;br /&gt;
For the old kernels put this in your file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{serial}==&amp;quot;XXXXXXXX&amp;quot;, ATTRS{product}==&amp;quot;FT232R USB UART&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, NAME=&amp;quot;arduino_1&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the new kernels put this in your file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{serial}==&amp;quot;XXXXXXXX&amp;quot;, ATTRS{product}==&amp;quot;FT232R USB UART&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, SYMLINK+=&amp;quot;arduino_1&amp;quot;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change 'ATTRS{serial}==&amp;quot;XXXXXXXX&amp;quot;' to the serial on your device and force udev to load the new rule:&lt;br /&gt;
&lt;br /&gt;
  udevadm control --reload-rules&lt;br /&gt;
&lt;br /&gt;
At this point, whenever you plug in the device, the device should be renamed to {{ic|/dev/arduino_1}} or a link created. You can rename or link more by adding more lines to the rules file and extract the serial number for each device and of course name it what ever you like. The same process can be used for other USB-to-Serial devices as well.&lt;br /&gt;
&lt;br /&gt;
==Communication==&lt;br /&gt;
&lt;br /&gt;
To communicate with the device, you can use any of the following, to name a few:&lt;br /&gt;
&lt;br /&gt;
* {{ic|minicom}}&lt;br /&gt;
  minicom -b 115200 -8 -D /dev/arduino_1&lt;br /&gt;
* {{ic|screen}}&lt;br /&gt;
  screen /dev/arduino_1 115200 8N1&lt;br /&gt;
* {{ic|picocom}}&lt;br /&gt;
  picocom -b 115200 -p n -d 8 /dev/arduino_1&lt;br /&gt;
* {{ic|putty}} - gui utility&lt;br /&gt;
 putty -serial /dev/arduino_1 -sercfg 115200,8,n,1,X&lt;br /&gt;
* {{ic|plink}} - cli utility&lt;br /&gt;
 plink -serial /dev/arduino_1 -sercfg 115200,8,n,1,X&lt;/div&gt;</summary>
		<author><name>Jvaughters</name></author>	</entry>

	<entry>
		<id>http://combustory.com/wiki/index.php/Arduino_Communications_Using_the_netcat(nc)_Utility</id>
		<title>Arduino Communications Using the netcat(nc) Utility</title>
		<link rel="alternate" type="text/html" href="http://combustory.com/wiki/index.php/Arduino_Communications_Using_the_netcat(nc)_Utility"/>
				<updated>2012-09-08T00:24:26Z</updated>
		
		<summary type="html">&lt;p&gt;Jvaughters: /* Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;anyweb&amp;gt;http://combustory.com/wiki/ads/ad_rtc.html&amp;lt;/anyweb&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{default}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--------------------------------Featured picture------------------------------&lt;br /&gt;
{| id=&amp;quot;mp-tfp&amp;quot; style=&amp;quot;margin:4px 0px 0px 0px; width:30%; background:none;&amp;quot;&lt;br /&gt;
|class=&amp;quot;MainPageBG&amp;quot; style=&amp;quot;width:30%; border:1px solid #ddcef2; background:#faf5ff; vertical-align:top; color:#000;&amp;quot;|&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;5&amp;quot; style=&amp;quot;vertical-align:top; background:#faf5ff; color:#000; width:30%&amp;quot;&lt;br /&gt;
! &amp;lt;h3  id=&amp;quot;mp-tfp-h2&amp;quot; style=&amp;quot;margin:0; background:#ddcef2; font-size:120%; font-weight:bold; border:1px solid #afa3bf; text-align:top; color:#000; padding:0.2em 0.4em&amp;quot;&amp;gt;Featured picture&amp;lt;/h3&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;color:#000;&amp;quot;| {{Featured Picture}}&lt;br /&gt;
|}&lt;br /&gt;
|}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;---------Interwiki strapline----------&amp;gt;&lt;br /&gt;
&amp;lt;anyweb&amp;gt;http://combustory.com/wiki/ads/ad_rtc_1.html&amp;lt;/anyweb&amp;gt;&lt;br /&gt;
=Overview=&lt;br /&gt;
Why reinvent the wheel. I have seen very complicated methods for communicating with the Arduino, Including some I have made on my own. What I have recently found out is that the easiest way to communicate to the Arduino is using the existing tool ''netcat''. It is soooooo simple and super powerful. You can send the output to a Network port and access the communications from literally any place in the world. &lt;br /&gt;
&lt;br /&gt;
=nc Versions=&lt;br /&gt;
One thing that you have to realize is that there are more versions of netcat than there are versions of linux. Ok maybe that is a stretch, but it seems that every system that I use has a different version with different options or worse same option that acts differently. This is generally not an issue if you use the main versions of linux as they have come to use the same version. However, if you are using embedded linux with busybox, then make sure you look at the help to get the options. In general I recommend always looking at the help of nc(netcat) just to make sure, because I am constantly getting confused on which options to use on this command. &lt;br /&gt;
&lt;br /&gt;
There is also some windows versions that have with or without the -e option that is considered a gaping security hole, which is really quite over blown considering the other utilites that can do the same thing. But the claim on the securlty issue is quite ridiculas considering that you can still accomplish the same task using fifo's on linux. Windows is not as easy considering that you do not have the ability to create a fifo so easily from the command line. If you plan on using Windows, make sure you get the version with the -e aka - Gaping Security Hole.&lt;br /&gt;
&lt;br /&gt;
=Assumptions=&lt;br /&gt;
* You have basic knowledge of command line usage &lt;br /&gt;
* You know how to load a program to the Arduino&lt;br /&gt;
&lt;br /&gt;
=Linux=&lt;br /&gt;
Here is the one line linux command that will send the serial terminal /dev/ttyUSB0 to a network TCP port:&lt;br /&gt;
 mkfifo arduino_fifo; nc -lk 2111 &amp;lt;arduino_fifo | plink -serial /dev/ttyUSB0 -sercfg 115200,8,n,1,n &amp;gt;arduino_fifo &amp;amp;&lt;br /&gt;
Before you start asking, plink is a command that is downloaded with the putty pacakge. Since I use windows and linux quite often, I decided to stick with putty as a multi-use package. It is easy to download and you can get it from any major linux distribution with the package manager that meets your linux distribution. You could just as easily replace putty with minicom or screen. I will leave it to the user to figure out which serial communication software to use.&lt;br /&gt;
&lt;br /&gt;
To explain the basis of this command we are redirecting inputs and outputs to get the information to the TCP port by looping back on a fifo (named pipe). So after you run this command you will able to connect to the port and communicate back and forth with the arduino. From another computer on your network, here is how you would connect to the port:&lt;br /&gt;
&lt;br /&gt;
 nc 192.168.30.208 2111&lt;br /&gt;
&lt;br /&gt;
You would put the ip of the computer you have the Arduino connected to and port 2111 is the port we used on the nc command to send the data through that port. When you press enter on that command you will have direct access to that arduino and it's serial port through the network. Now you can access that port from wherever you are on the internet if you have access your network. I encourage you to use VPN's or ssh to securly access this port and do not just put it out on the web.&lt;br /&gt;
&lt;br /&gt;
=Mini2440 or Embedded Systems=&lt;br /&gt;
Embedded systems like the Mini2440, use Busy Box as a small utility package that includes a version of nc that makes communications to Arduino a breeze. All you have to do is go to a terminal and use these two commands after you plug in the Arduino.&lt;br /&gt;
&lt;br /&gt;
 stty -F /dev/ttyUSB0 cs8 115200 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts&lt;br /&gt;
 nc -f /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
You should now have a terminal session that is communicating with the Arduino. Of course you should have a program that responds to serial communication on the Arduino, or nothing will be happening. How this works is the ''nc'' command has redirected the input and output streams of the /dev/ttyUSB0, which is the Arduino terminal and the ''stty'' command sets the serial communication parameters. To exit out of the program, just use ''^C (ctrl-c)''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we expand on this idea and we send the Arduino serial port to a network port with this command. &lt;br /&gt;
&lt;br /&gt;
 nc -ll -p 2111 -e nc -f /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
This is where it gets interesting. Now you can access your Arduino from anywhere on the planet, or space if you still have a good satellite connection `,~) Use this command from any other computer that has ''netcat''.&lt;br /&gt;
&lt;br /&gt;
 nc 192.168.30.206 2111&lt;br /&gt;
&lt;br /&gt;
Use the ip of your Mini2440 of course.&lt;/div&gt;</summary>
		<author><name>Jvaughters</name></author>	</entry>

	</feed>