Internet Controlled Arduino (no Ethernet Shield)

117,467

995

57

Posted

Introduction: Internet Controlled Arduino (no Ethernet Shield)

Ethernet Shields are a lot of fun, but they can be expensive. In this project I will show you how to control your Arduino from any computer that is connected to the internet, without using an Ethernet shield. This project is completely free, assuming you already have an Arduino.

Step 1: Ingredients:

  1. An Arduino with USB cable
  2. Internet Connected Computer
  3. Web Hosting with php support (I use biz.nf for free)
  4. Processing App (Which you can get here https://processing.org/download )

Step 2: Getting Started: Arduino Part

This is where we add the functionality we want to the Arduino. This part is very similar to setting up a simple Arduino project; the difference is the input the arduino receives.

Set up an arduino sketch that does whatever you like upon receiving the input of a certain character from the serial port. This is done by starting the serial conversatin with Serial.begin(9600); in the setup. Then in the loop if (Serial.available() > 0) checks for serial input and Serial.read(); returns a string of input text. The example I will refer to throughout opens and closes my blinds for me. You can see that my Arduino will open my blinds upon receiving the character 2 and will close them upon receiving the character 1.

Step 3: The Internet Side

In this step we will create a webpage that takes user input, and using that input edits a text file on the server.

The website does not not to be complex, it just has to take some input and send it back to the server for processing. The easiest way to do this is with a get request. When making the form to receive the input, define method as "get".

My whole HTML consists of just a form.

The form is submitted back to my page itself, and is handled my the PHP. This is where the magic happens. If it receives a get request, it opens my file Blinds.txt on the server. When it opens the file in the "w" mode it deletes everything in the file and then writes whatever you tell it to on the blank file. I have mine write either a one or two, then replace it with a zero after five seconds. The delay comes from sleep(5);. I have the number, either one or two, written the the file from only five seconds because I am sure that my Processing app can detect the change during that interval. I reset it to zero afterwards because otherwise, if I want to open my shades twice in a row, the second time I updated Blinds.txt my processing app wouldn't see any difference and therefore wouldn't do anything.

Step 4: Put It Together With Processing

Processing is a useful little tool that comes in handy when interfacing the Arduino with the computer (among other times).

The point of the processing app is to retrieve the data from the text file on your server and feed it, through the serial port, to the Arduino. To send the data we need the processing serial library. To start we set up the serial port at the same baud rate as we set the Arduino (9600). In the draw loop we begin by retrieving the data from my text file using loadstrings("url"); which returns an array of strings, each element being a line of text from the document. I then parse the array element into an int so it is a primitive instead of a reference variable, and I can compare its value. After waiting a second I retrieve another value and if they are different I know that something has happened and I need to tell my Arduino, so I send the data using ComPort.write(data);. I also test for nullity throughout so I do not accidentally pass on misread data.

Step 5: Test It Out!

  1. Make sure your Arduino is plugged into your computer
  2. Upload Arduino Sketch (You cannot do this while your processing app is running).
  3. Run Processing app
  4. Go to your website and submit your forms!

2 People Made This Project!

Recommendations

  • Science of Cooking

    Science of Cooking
  • Microcontroller Contest

    Microcontroller Contest
  • Spotless Contest

    Spotless Contest
user

We have a be nice policy.
Please be positive and constructive.

Tips

Questions

60 Comments

Here is the Code(if anybody wants) :D

Arduino

"int led =13;

void setup() {

Serial.begin(9600);

pinMode(led,OUTPUT);

}

void loop() {

if (Serial.available()>0){

int Key=Serial.read();

if(Key==1)

Close();

else if(Key==2)

Open();}}

void Open(){

digitalWrite(led, HIGH);

delay(200);

}

void Close(){

digitalWrite(led, LOW);

delay(200);

}"

Processing "

import processing.serial.*;

Serial ComPort;

String input[];

void setup(){

String portName=Serial.list()[0];

ComPort = new Serial(this, portName,9600);

ComPort.bufferUntil('\n');

}

void draw(){

input =loadStrings("site");

if(input!=null){

String s_last=input[0];

int last =Integer.parseInt(s_last);

delay(1000);

input =loadStrings("site");

if(input.length!=0){

String s_current=input[0];

int current =Integer.parseInt(s_current);

if(current!=last){

println(current);

println(last);

ComPort.write(current);

}}}

}"

HTML + PHP"<?php

if($_GET["action"] !="0"){

$myfile = fopen("Blinds.txt", "w") or die("Unable to open file!");

if($_GET["action"] =="close"){

fwrite($myfile,"1");

}elseif($_GET["action"] =="open"){

fwrite($myfile,"2");

}

fclose($myfile);

sleep(5);

$myfile = fopen("Blinds.txt", "w") or ("Unable to open file!");

fwrite($myfile,"0");

fclose($myfile);

}

?>

<HTML>

<body>

<form method="get">

<input type="radio" name="action" Value="open" > open

<br>

<input type="radio" name="action" Value="close" > close

<br>

<input type="submit">

</form>

</body>

</html>"

Please be thorough I like your work but it is so hard to follow.

What codes are for arduino sketches?

create them and keep them for us.

What html or whatever php goes to the web host?

create them and keep it for your fans.

What code goes to processor?

Create these files and be explicit on how to set them up.

do you need a data base or whatever.

In your displayed codes there are string identifiers that act up during compilation. The quotations mark might not be necessary if not needed in the code don't use them. EVERY ONE DOESN'T UNDERSTAND CODES.

Thanks when my grandma can use this then I know you have done a good job.

Thanks again.

processing is giving a error like this can you please help???

Untitled.png

hj.html is the place that you are getting the data from. This file should consist of just a number, nothing else. It looks like it contains more than that. Maybe you accidentally have your webpage saved as hj.html.

It looks like the first line of hj.html is <?php which would mean that that file is your webpage. You should have your php in hj.html write the data to a file, say "info.txt" and then your processing would say input = loadStrings"info.txt". Also don't forget that if your page is on the web you need the whole address (www.mygreatwebsite.com/info.txt)

hi i use you code ,,, arduino part was fine but getting error in processing "arrayindexoutofboundsexception-0" will you please helm to solve it

processing.png

You get this error when the list of serial devices is null - so your Arduino is not being seen. Try resetting it and restarting it, or maybe you have the serial monitor open on your Arduino.

Thanks for this addition! Can anybody point me in the direction of an easy way to share code on Instructables?