So I'm a newbie to Arduino and I thought I'd check I have all the parts I need before ordering. I want to have an arduino connected to some sensors that will upload the sensor data via an ethernet shield to a database. I know there are some websites for this but I don't like their display and instead would like to pull my data from a database and format it myself with php and html. As an addon I would like to have a light linked up that I can turn on and off via the web interface. Is this all possible and simple enough to do using currently available projects?
I'm planning to buy an Uno R3, Ethernet shield, jumpers, breadboard, temp sensor, light sensor, LCD and float switch
Thanks for the help, I'm really excited to play about with the Arduino.
Yes, it is. Making the Arduino act as a client (making requests to store data in the database) and as a server (serving up a web page containing sensor data) is not trivial, but not impossible, either. zoomkat occasionally posts code to do just that.
I'm planning to buy an Uno R3, Ethernet shield, jumpers, breadboard, temp sensor, light sensor, LCD and float switch
You'll need a domain and a web hosting company that supports PHP and mySQL databases. That shouldn't be too hard to find. Or set up your own local server (no domain needed and no web hosting company involved) for development purposes. If you then want to allow others to access your data, or store data in your database, you can acquire the domain and find a web hosting company.
Thanks for the reply! I saw a post on a similar thing and it was basically just using the arduino to connect to the php file and then using GET to take the variables and submit to mySQL. Is it then possible to have it act the other way and have the arduino GET a a command to turn a light on and off? I have seen this done but I think he used relays and I'm not sure what the purpose of a relay is.
Some combined server/client test code. The server supplies a web page to a browser, and responds to request from the supplied web page. The client makes an event (receiving an "e" in the serial input buffer) based GET request to a server.
//zoomkat 7-03-12, combined client and server
//simple button GET with iframe code
//for use with IDE 1.0
//open serial monitor and send an g to test client and
//see what the arduino client/server receives
//web page buttons make pin 5 high/low
//use the ' in html instead of " to prevent having to escape the "
//address will look like http://192.168.1.102:84 when submited
//for use with W5100 based ethernet shields
//note that the below bug fix may be required
// http://code.google.com/p/arduino/issues/detail?id=605
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //assign arduino mac address
byte ip[] = {192, 168, 1, 102 }; // ip in lan assigned to arduino
byte gateway[] = {192, 168, 1, 1 }; // internet access via router
byte subnet[] = {255, 255, 255, 0 }; //subnet mask
EthernetServer server(84); //server port arduino server will use
EthernetClient client;
char serverName[] = "web.comporium.net"; // (DNS) zoomkat's test web page server
//byte serverName[] = { 208, 104, 2, 86 }; // (IP) zoomkat web page server IP address
String readString; //used by server to capture GET request
//////////////////////
void setup(){
pinMode(5, OUTPUT); //pin selected to control
pinMode(6, OUTPUT); //pin selected to control
pinMode(7, OUTPUT); //pin selected to control
pinMode(8, OUTPUT); //pin selected to control
//pinMode(5, OUTPUT); //pin 5 selected to control
Ethernet.begin(mac,ip,gateway,gateway,subnet);
server.begin();
Serial.begin(9600);
Serial.println("server/client 1.0 test 7/03/12"); // keep track of what is loaded
Serial.println("Send an g in serial monitor to test client"); // what to do to test client
}
void loop(){
// check for serial input
if (Serial.available() > 0)
{
byte inChar;
inChar = Serial.read();
if(inChar == 'g')
{
sendGET(); // call client sendGET function
}
}
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
if (readString.length() < 100) {
//store characters to string
readString += c;
//Serial.print(c);
}
//if HTTP request has ended
if (c == '\n') {
///////////////
Serial.print(readString); //print to serial monitor for debuging
//now output HTML data header
if(readString.indexOf('?') >=0) { //don't send new page
client.println(F("HTTP/1.1 204 Zoomkat"));
client.println();
client.println();
}
else {
client.println(F("HTTP/1.1 200 OK")); //send new page on browser request
client.println(F("Content-Type: text/html"));
client.println();
client.println(F("<HTML>"));
client.println(F("<HEAD>"));
client.println(F("<TITLE>Arduino GET test page</TITLE>"));
client.println(F("</HEAD>"));
client.println(F("<BODY>"));
client.println(F("<H1>Zoomkat's simple Arduino 1.0 button</H1>"));
// DIY buttons
client.println(F("Pin5"));
client.println(F("<a href=/?on2 target=inlineframe>ON</a>"));
client.println(F("<a href=/?off3 target=inlineframe>OFF</a>
"));
client.println(F("Pin6"));
client.println(F("<a href=/?on4 target=inlineframe>ON</a>"));
client.println(F("<a href=/?off5 target=inlineframe>OFF</a>
"));
client.println(F("Pin7"));
client.println(F("<a href=/?on6 target=inlineframe>ON</a>"));
client.println(F("<a href=/?off7 target=inlineframe>OFF</a>
"));
client.println(F("Pin8"));
client.println(F("<a href=/?on8 target=inlineframe>ON</a>"));
client.println(F("<a href=/?off9 target=inlineframe>OFF</a>
"));
client.println(F("Pins"));
client.println(F(" <a href=/?off2468 target=inlineframe>ALL ON</a>"));
client.println(F(" <a href=/?off3579 target=inlineframe>ALL OFF</a>
"));
// mousedown buttons
client.println(F("<input type=button value=ON onmousedown=location.href='/?on4;' target=inlineframe>"));
client.println(F("<input type=button value=OFF onmousedown=location.href='/?off5;' target=inlineframe>"));
client.println(F(" <input type=button value='ALL OFF' onmousedown=location.href='/?off3579;' target=inlineframe>
"));
// mousedown radio buttons
client.println(F("<input type=radio onmousedown=location.href='/?on6;' target=inlineframe>ON</>"));
client.println(F("<input type=radio onmousedown=location.href='/?off7; target=inlineframe'>OFF</>"));
client.println(F(" <input type=radio onmousedown=location.href='/?off3579;' target=inlineframe>ALL OFF</>
"));
// custom buttons
client.print(F("<input type=submit value=ON target=inlineframe style=width:100px;height:45px onClick=location.href='/?on8;'>"));
client.print(F("<input type=submit value=OFF target=inlineframe style=width:100px;height:45px onClick=location.href='/?off9;' target=inlineframe>"));
client.print(F(" <input type=submit value='ALL OFF' target=inlineframe style=width:100px;height:45px onClick=location.href='/?off3579;' target=inlineframe>"));
client.println(F("<IFRAME name=inlineframe style='display:none'>"));
client.println(F("</IFRAME>"));
client.println(F("</BODY>"));
client.println(F("</HTML>"));
}
delay(1);
//stopping client
client.stop();
///////////////////// control arduino pin
if(readString.indexOf('2') >0)//checks for 2
{
digitalWrite(5, HIGH); // set pin 5 high
Serial.println("Led 5 On");
Serial.println();
}
if(readString.indexOf('3') >0)//checks for 3
{
digitalWrite(5, LOW); // set pin 5 low
Serial.println("Led 5 Off");
Serial.println();
}
if(readString.indexOf('4') >0)//checks for 4
{
digitalWrite(6, HIGH); // set pin 6 high
Serial.println("Led 6 On");
Serial.println();
}
if(readString.indexOf('5') >0)//checks for 5
{
digitalWrite(6, LOW); // set pin 6 low
Serial.println("Led 6 Off");
Serial.println();
}
if(readString.indexOf('6') >0)//checks for 6
{
digitalWrite(7, HIGH); // set pin 7 high
Serial.println("Led 7 On");
Serial.println();
}
if(readString.indexOf('7') >0)//checks for 7
{
digitalWrite(7, LOW); // set pin 7 low
Serial.println("Led 7 Off");
Serial.println();
}
if(readString.indexOf('8') >0)//checks for 8
{
digitalWrite(8, HIGH); // set pin 8 high
Serial.println("Led 8 On");
Serial.println();
}
if(readString.indexOf('9') >0)//checks for 9
{
digitalWrite(8, LOW); // set pin 8 low
Serial.println("Led 8 Off");
Serial.println();
}
//clearing string for next read
readString="";
}
}
}
}
}
//////////////////////////
void sendGET() //client function to send and receive GET data from external server.
{
if (client.connect(serverName, 80)) {
Serial.println("connected");
client.println("GET /~shb/arduino.txt HTTP/1.0");
client.println();
}
else {
Serial.println("connection failed");
Serial.println();
}
while(client.connected() && !client.available()) delay(1); //waits for data
while (client.connected() || client.available()) { //connected or data available
char c = client.read();
Serial.print(c);
}
Serial.println();
Serial.println("disconnecting.");
Serial.println("==================");
Serial.println();
client.stop();
}