Hello Everyone, This is my forth blog post for the Internet Of Holiday Lighting Road Test, in this post I will explain how did I managed to perform to change the color of RGB led strip with a Web Browser . The setup is really simple it's just the Arduino YUN , the Infineon RGB shield and A RGB Strip.
Below ars pictures of the setup :
The Sketch ( Program ) is based upon the "MailboxReadMessage" example in the " Bridge " library, and the demo code for the Infineon RGB shield, The arduino is always ready to receive messages from a local computer in the same Wi-Fi network, and what I did was to read the message and equate it to predefined colors. example : I just had to type "192.168.1.17/mailbox/red"
to turn the red LED on. Below is the full code :
#define ADDRESS 0x15EUL #define INTENSITY_RED 0x11U #define INTENSITY_GREEN 0x12U #define INTENSITY_BLUE 0x13U #define INTENSITY_RGB 0x14U #define CURRENT_RED 0x21U #define CURRENT_GREEN 0x22U #define CURRENT_BLUE 0x23U #define CURRENT_RGB 0x24U #define OFFTIME_RED 0x41U #define OFFTIME_GREEN 0x42U #define OFFTIME_BLUE 0x43U #define WALKTIME 0x50U #define DIMMINGLEVEL 0x60U #define FADERATE 0x61U #define READ_INTENSITY_RED 0x81U #define READ_INTENSITY_GREEN 0x82U #define READ_INTENSITY_BLUE 0x83U #define READ_CURRENT_RED 0x84U #define READ_CURRENT_GREEN 0x85U #define READ_CURRENT_BLUE 0x86U #define READ_OFFTIME_RED 0x87U #define READ_OFFTIME_GREEN 0x88U #define READ_OFFTIME_BLUE 0x89U #define READ_WALKTIME 0x8AU #define READ_DIMMINGLEVEL 0x8BU #define READ_FADERATE 0x8CU #define SAVEPARAMETERS 0xA0U #define BCCUMODID 0x50030008U #define CHIPID 0x40010004U #define REDINTS 0x500300A0U // BCCU_CH5 #define REDINT 0x500300A4U #define BLUEINTS 0x50030078U #define STARTWALK 0x50030018U #include <Wire.h> #include <Mailbox.h> char string; unsigned int c[2] = {0}; unsigned int d[4] = {0}; unsigned int on = 0; unsigned int message = 0; unsigned long redcurr = 0; unsigned long greencurr = 0; unsigned long bluecurr = 0; unsigned long redoff = 0; unsigned long greenoff = 0; unsigned long blueoff = 0; unsigned long redint = 0x00; unsigned long greenint = 0x00; unsigned long blueint = 0x00; unsigned long fadetime = 0x00; unsigned long walk = 0x00; unsigned long brightness = 1; void setup() { Serial.begin(9600); pinMode(13, OUTPUT); digitalWrite(13, LOW); // Initialize Bridge and Mailbox Bridge.begin(); Mailbox.begin(); digitalWrite(13, HIGH); Wire.begin(); while (on != 1) // Wait for shield to respond, keep setting the values till it does { I2CWRITE2BYTES (ADDRESS, FADERATE, 0x0000); // Immediate fade I2CWRITE2BYTES (ADDRESS, DIMMINGLEVEL, 0x0000); // 0% brightness level on = I2CREAD(ADDRESS, READ_DIMMINGLEVEL); // Request for brightness level if (message == 1 && on == 0) // If message received and dimming level = 0%, "message" is set in the I2CREAD function { message = 0; on = 1; // break out of loop } } // now we will chane the values again and wait till there being red back while (redcurr != 0x15 || greencurr != 0x15 || bluecurr != 0x15 || redoff != 0x38 || greenoff != 0x39 || blueoff != 0x38 || brightness != 0) { I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0000, 0x000, 0x0000); // Off Light // Ensure that parameters are set up correctly. Read back and check. If wrong, write and read again. redcurr = I2CREAD (ADDRESS, READ_CURRENT_RED); // Read the red current intensity greencurr = I2CREAD (ADDRESS, READ_CURRENT_GREEN); // Read the green current intensity bluecurr = I2CREAD (ADDRESS, READ_CURRENT_BLUE); // Read the blue current intensity redoff = I2CREAD (ADDRESS, READ_OFFTIME_RED); // Read the off-time of the red channel greenoff = I2CREAD (ADDRESS, READ_OFFTIME_GREEN); // Read the off-time of the green channel blueoff = I2CREAD (ADDRESS, READ_OFFTIME_BLUE); // Read the off-time of the blue channel brightness = I2CREAD (ADDRESS, READ_DIMMINGLEVEL); // Read the dimming level I2CWRITE2BYTES (ADDRESS, OFFTIME_RED, 0x38); // Set off-time of red channel to 0x38 I2CWRITE2BYTES (ADDRESS, OFFTIME_GREEN, 0x39); // Set off-time of green channel to 0x39 I2CWRITE2BYTES (ADDRESS, OFFTIME_BLUE, 0x38); // Set off-time of blue channel to 0x38 I2CWRITE2BYTES (ADDRESS, CURRENT_RED, 0x15); // Set current intensity of red channel to 0x15 I2CWRITE2BYTES (ADDRESS, CURRENT_GREEN, 0x15); // Set current intensity of green channel to 0x15 I2CWRITE2BYTES (ADDRESS, CURRENT_BLUE, 0x15); // Set current intensity of blue channel to 0x15 I2CWRITE2BYTES (ADDRESS, DIMMINGLEVEL, 0x0000); // LEDs all off as any intensity * 0 will = 0 } delay(100); // OK, so were getting response from the infineon so read back values from slave and print them Serial.print("Red Int: "); redint = I2CREAD (ADDRESS, READ_INTENSITY_RED); // request from shield red colour intensity Serial.print("Green Int: "); greenint = I2CREAD (ADDRESS, READ_INTENSITY_GREEN); // request from shield green colour intensity Serial.print("Blue Int: "); blueint = I2CREAD (ADDRESS, READ_INTENSITY_BLUE); // request from shield blue colour intensity Serial.print("Red Curr: "); redcurr = I2CREAD (ADDRESS, READ_CURRENT_RED); // request from shield peak current reference of red channel Serial.print("Green Curr "); greencurr = I2CREAD (ADDRESS, READ_CURRENT_GREEN); // request from shield peak current reference of green channel Serial.print("Blue Curr: "); bluecurr = I2CREAD (ADDRESS, READ_CURRENT_BLUE); // request from shield peak current reference of blue channel Serial.print("Red PWM: "); redoff = I2CREAD (ADDRESS, READ_OFFTIME_RED); // request from shield off-time of red channel Serial.print("Green PWM: "); greenoff = I2CREAD (ADDRESS, READ_OFFTIME_GREEN); // request from shield off-time of green channel Serial.print("Blue PWM: "); blueoff = I2CREAD (ADDRESS, READ_OFFTIME_BLUE); // request from shield off-time of blue channel Serial.print("Walk: "); walk = I2CREAD (ADDRESS, READ_WALKTIME); // request from shield walk-time Serial.print("Brightness: "); brightness = I2CREAD (ADDRESS, READ_DIMMINGLEVEL); // request from shield brightness level Serial.print("FadeTime: "); fadetime = I2CREAD (ADDRESS, READ_FADERATE); // request from shield fade rate // now setup for test I2CWRITE2BYTES (ADDRESS, OFFTIME_RED, 0x38); // Set off-time of red channel to 0x38 I2CWRITE2BYTES (ADDRESS, OFFTIME_GREEN, 0x39); // Set off-time of green channel to 0x39 I2CWRITE2BYTES (ADDRESS, OFFTIME_BLUE, 0x38); // Set off-time of blue channel to 0x38 I2CWRITE6BYTES (ADDRESS, CURRENT_RGB, 0x80, 0x80, 0x80); // Set current of red channel to 0x80 = 780mA I2CWRITE2BYTES (ADDRESS, FADERATE, 0x0000); // Fade Rate between intensities --> 0.0s I2CWRITE2BYTES (ADDRESS, WALKTIME, 0x0000); // walk time between colors = 0s I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0555, 0x0555, 0x0555); // low level White Light I2CWRITE2BYTES (ADDRESS, DIMMINGLEVEL, 0x0FFF); // Maximum dimming level means inensity settings are directly used I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0, 0x0, 0x0); } // the loop routine runs over and over again forever: void loop() { String msg; // if there is a message in the Mailbox if (Mailbox.messageAvailable()){ // read all the messages present in the queue while (Mailbox.messageAvailable()) { Mailbox.readMessage(msg); // Serial.println(msg); if (msg=="red"){ I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0fff, 0x0, 0x0); // red delay(100); } else if (msg=="off"){ I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x000, 0x0, 0x0); // red delay(100); } else if (msg=="green"){ I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0, 0x0fff, 0x0); // red delay(100); } else if (msg=="blue"){ I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0, 0x0, 0x0fff); // red delay(100); } else if (msg=="white"){ I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0fff, 0x0fff, 0x0fff); // red delay(100); } else if (msg=="cyan"){ I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0, 0x0fff, 0x0fff); // red delay(100); } else if (msg=="purple"){ I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0fff, 0x0, 0x0fff); // red delay(100); } else if (msg=="yellow"){ I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0fff, 0x0999, 0x0); // red delay(100); } else if (msg=="orange"){ I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0fff, 0x0444, 0x0); // red delay(100); } else if (msg=="aqua"){ I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0, 0x0888, 0x0fff); // red delay(100); } else if (msg=="pink"){ I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0fff, 0x0, 0x0888); // red delay(100); } else if (msg=="teal"){ I2CWRITE6BYTES (ADDRESS, INTENSITY_RGB, 0x0, 0x0fff, 0x0888); // red delay(100); } delay(1000); } } } // Infineon functions follow /* Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E int Command - Defined I2C Commands i.e. INTENSITY_RED, INTENSITY_GREEN, INTENSITY_BLUE unsigned int Data - 16bit data to be written to slave Parameters (OUT): None Return Value: None Description: This function will write 2 bytes of word to the I2C bus line */ void I2CWRITE2BYTES (int Address, int Command, unsigned int Data) { unsigned int upperByte, lowerByte; // Separate 4 byte data into 2 byte values lowerByte = Data; upperByte = Data >> 8; unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF); // Putting address into correct format unsigned int upperSLAD = Address >> 8; upperSLAD |= 0x79; // First 5 bits 11110 and last bit '1' for a write Wire.beginTransmission(byte(upperSLAD)); // Start I2C transmission Wire.write(byte(lowerSLAD)); // address lower 8 bits of i2c address Wire.write(byte(Command)); // write command Wire.write(byte(upperByte)); // write data Wire.write(byte(lowerByte)); Wire.endTransmission(true); } /* Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E int Command - Defined I2C Commands i.e. INTENSITY_RGB, CURRENT_RGB unsigned int DataOne, unsigned int DataTwo, unsigned int DataThree - Three 16bit data to be written to slave Parameters (OUT): None Return Value: None Description: This function will write 6 bytes of word to the I2C bus line */ void I2CWRITE6BYTES (unsigned int Address, unsigned int Command, unsigned int DataOne, unsigned int DataTwo, unsigned int DataThree) // DataOne: Red, DataTwo: Green, DataThree: Blue { unsigned int upperByte, lowerByte; // Split each Data parameter into upper and lower 8 bytes because I2C format sends 8 bytes of data each time lowerByte = DataOne; upperByte = DataOne >> 8; unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF); unsigned int upperSLAD = Address >> 8; upperSLAD |= 0x79; // First 5 bits 11110 and last bit '1' for a write Wire.beginTransmission(byte(upperSLAD)); // Red Wire.write(byte(lowerSLAD)); Wire.write(byte(Command)); Wire.write(byte(upperByte)); Wire.write(byte(lowerByte)); lowerByte = DataTwo; upperByte = DataTwo >> 8; Wire.write(byte(upperByte)); Wire.write(byte(lowerByte)); lowerByte = DataThree; upperByte = DataThree >> 8; Wire.write(byte(upperByte)); Wire.write(byte(lowerByte)); Wire.endTransmission(true); } /* Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E int Command - Defined I2C Commands i.e. DMX16Bit unsigned int DataOne, unsigned int DataTwo, unsigned int DataThree, usigned int DataFour, unsigned int DataFive - Three 16bit data to be written to slave Parameters (OUT): None Return Value: None Description: This function will write 12 bytes of word to the I2C bus line */ void I2CWRITE12BYTES (unsigned int Address, unsigned int Command, unsigned int DataOne, unsigned int DataTwo, unsigned int DataThree, unsigned int DataFour, unsigned int DataFive, unsigned int DataSix) // DataOne: Red, DataTwo: Green, DataThree: Blue { unsigned int upperByte, lowerByte; lowerByte = DataOne; upperByte = DataOne >> 8; unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF); unsigned int upperSLAD = Address >> 8; upperSLAD |= 0x79; // First 5 bits 11110 and last bit '1' for a write Wire.beginTransmission(byte(upperSLAD)); Wire.write(byte(lowerSLAD)); Wire.write(byte(Command)); // write command Wire.write(byte(upperByte)); // write 2 bytes Wire.write(byte(lowerByte)); lowerByte = DataTwo; upperByte = DataTwo >> 8; Wire.write(byte(upperByte)); // write next two bytes Wire.write(byte(lowerByte)); lowerByte = DataThree; upperByte = DataThree >> 8; Wire.write(byte(upperByte)); Wire.write(byte(lowerByte)); lowerByte = DataFour; upperByte = DataFour >> 8; Wire.write(byte(upperByte)); Wire.write(byte(lowerByte)); lowerByte = DataFive; upperByte = DataFive >> 8; Wire.write(byte(upperByte)); Wire.write(byte(lowerByte)); lowerByte = DataSix; upperByte = DataSix >> 8; Wire.write(byte(upperByte)); Wire.write(byte(lowerByte)); Wire.endTransmission(true); } /* Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E int Command - Defined read I2C Commands i.e. READ_INTENSITY_RED, READ_INTENSITY_GREEN, READ_INTENSITY_BLUE Parameters (OUT): None Return Value: Requested data from Shield will be sent back Description: This function will request 2 bytes of word from the shield */ unsigned int I2CREAD (unsigned int Address, unsigned int Command) // Returns data sent by slave { int i = 0; unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF); unsigned int upperSLAD = Address >> 8; upperSLAD |= 0x79; Wire.beginTransmission(byte(upperSLAD)); // Red Wire.write(byte(lowerSLAD)); Wire.write(byte(Command)); Wire.endTransmission(false); // false for Repeated Start Wire.beginTransmission(byte(upperSLAD)); Wire.write(byte(lowerSLAD)); Wire.requestFrom(upperSLAD, 2, true); unsigned int data = 0; while(Wire.available()) // slave may send less than requested. Print out received data byte { message = 1; c[i] = Wire.read(); // receive a byte as character i++; } Wire.endTransmission(true); data = c[1]; // write data to serial monitor. c[1] is higher byte data = (data << 8) | c[0]; // shift left and combine with lower byte Serial.print("0x"); if (data < 0x1000) Serial.print("0"); Serial.println(data, HEX); return data; } /* Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E int Command - DIRECTACCESS_READ Parameters (OUT): None Return Value: Requested data from the Shield will be returned Description: This function will request 4 bytes of data from shield. */ unsigned long I2CREAD_DIRECTACCESS (unsigned int Address, unsigned int Command, unsigned long registerAddress) { int i = 0; unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF); // sending command + address unsigned int upperSLAD = Address >> 8; upperSLAD |= 0x79; // First 5 bits 11110 and last bit '1' for a write Wire.beginTransmission(byte(upperSLAD)); Wire.write(byte(lowerSLAD)); Wire.write(byte(Command)); unsigned int firstByte, secondByte, thirdByte, fourthByte; firstByte = registerAddress >> 24; // top byte secondByte = registerAddress >> 16; thirdByte = registerAddress >> 8; fourthByte = registerAddress; // bottom byte Wire.write(byte(firstByte)); Wire.write(byte(secondByte)); Wire.write(byte(thirdByte)); Wire.write(byte(fourthByte)); Wire.endTransmission(false); // false for Repeated Start Wire.beginTransmission(byte(upperSLAD)); // request for read Wire.write(byte(lowerSLAD)); Wire.requestFrom(upperSLAD, 4, true); unsigned long data = 0; while(Wire.available()) // slave may send less than requested. Print out received data byte { d[i] = 0; d[i] = Wire.read(); // receive a byte as character i++; } Wire.endTransmission(true); data = d[3]; // combining into one variable. Highest byte received first data = (data << 8) | d[2]; data = (data << 8) | d[1]; data = (data << 8) | d[0]; Serial.print("0x"); if (data < 0x10000000) Serial.print("0"); Serial.println(data, HEX); return data; } /* Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E int Command - Defined I2C Commands i.e. DIRECTACCESS_OR, DIRECTACCESS_AND, DIRECTACCESS_MOVE unsigned long registerAddress - address of target register unsigned long Data - 32 bits data to be written to register Parameters (OUT): None Return Value: None Description: This function will write 4 bytes of data to specified register */ void I2CWRITE_DIRECTACCESS (unsigned int Address, unsigned int Command, unsigned long registerAddress, unsigned long Data) // For accessing registers directly { int i = 0; unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF); // sending command + address unsigned int upperSLAD = Address >> 8; upperSLAD |= 0x79; // First 5 bits 11110 and last bit '1' for a write Wire.beginTransmission(byte(upperSLAD)); Wire.write(byte(lowerSLAD)); Wire.write(byte(Command)); unsigned int firstByte, secondByte, thirdByte, fourthByte; // Send address of register first firstByte = registerAddress >> 24; // top byte secondByte = registerAddress >> 16; thirdByte = registerAddress >> 8; fourthByte = registerAddress; // bottom byte Wire.write(byte(firstByte)); Wire.write(byte(secondByte)); Wire.write(byte(thirdByte)); Wire.write(byte(fourthByte)); firstByte = Data >> 24; // top byte secondByte = Data >> 16; thirdByte = Data >> 8; fourthByte = Data; // bottom byte Wire.write(byte(firstByte)); // send 4 bytes of data Wire.write(byte(secondByte)); Wire.write(byte(thirdByte)); Wire.write(byte(fourthByte)); Wire.endTransmission(true); } /* Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E unsigned int newAddress - Address the shield should change to Parameters (OUT): None Return Value: None Description: This function will change the I2C address of the slave */ void CHANGEADDRESS (unsigned int Address, unsigned int newAddress) { unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF); unsigned int upperSLAD = Address >> 8; upperSLAD |= 0x79; // First 5 bits 11110 and last bit '1' for a write Wire.beginTransmission(byte(upperSLAD)); // Red Wire.write(byte(lowerSLAD)); Wire.write(byte(0x70)); // Command to change address lowerSLAD = (unsigned int) (newAddress & 0x00FF); upperSLAD = newAddress >> 7; // Split address into 2 bytes upperSLAD |= 0xF0; // 10 bit addressing: First 5 bits have to be 11110. upperSLAD &= 0xFE; Wire.write(byte(upperSLAD)); Wire.write(byte(lowerSLAD)); Wire.endTransmission(true); } /* Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E unsigned int Command - DMXON, DMXOFF Parameters (OUT): None Return Value: None Description: This function will enable or disable DMX512 control on shield */ void I2CDMX (unsigned int Address, unsigned int Command) // Switch off / on the DMX { unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF); // Putting address into correct format unsigned int upperSLAD = Address >> 8; upperSLAD |= 0x79; Wire.beginTransmission(byte(upperSLAD)); // Start I2C transmission Wire.write(byte(lowerSLAD)); Wire.write(byte(Command)); Wire.endTransmission(true); } /* Parameters (IN): int Address - Address of RGB LED Shield, Default 0x15E Parameters (OUT): None Return Value: None Description: This function will request the shield to save configurations to flash memory */ void I2CSAVEPARAM (unsigned int Address) { int i = 0; unsigned int lowerSLAD = (unsigned int) (Address & 0x00FF); unsigned int upperSLAD = Address >> 8; upperSLAD |= 0x79; Wire.beginTransmission(byte(upperSLAD)); Wire.write(byte(lowerSLAD)); Wire.write(byte(SAVEPARAMETERS)); // write SAVEPARAMETERS command Wire.endTransmission(false); // false for Repeated Start Wire.beginTransmission(byte(upperSLAD)); Wire.write(byte(lowerSLAD)); // write to address lower 8 bits of slave address Wire.requestFrom(upperSLAD, 2, true); // send READ request with upper slave address unsigned int data = 0; while(Wire.available()) // slave may send less than requested. Print out received data byte { message = 1; c[i] = Wire.read(); // receive a byte as character i++; } Wire.endTransmission(true); // STOP condition data = c[1]; // print the data on serial monitor data = (data << 8) | c[0]; Serial.print("0x"); if (data < 0x1000) Serial.print("0"); Serial.println(data, HEX); }
I also made a HTML web app for this purpose, so that i can have a convenient interface and no need to type the address in the address bar, it ran perfectly on the PC and in the chrome browser on an android device. Here is a screenshot :
And here is the HTML code (Do change the address of my yun with your yun's address) :
<!doctype html> <html> <head> <title>arduino LEDcolor</title> <style type="text/css"> <--body{background-color:#abab00;}--> h1{color:orange;text-align:center;text-decoration:none;} h2{font-style:italic;} p{color:#CC0052;text-indent:25px;font-size:20px;text-align:center} table{text-align:center;} #one{height:35px;width:75px;} </style> </head> <body> <h1> Internet of Holiday Lights !</h1> <hr> <p>Press button to select color... </p><br> <table align="center"> <h3><h3> <tr> <td ><a href="http://192.168.1.17/mailbox/red" onclick="window.open('#','_blank');window.open(this.href,'_self');"><input type="button" value=""style="background-color:#FF0000" id="one" /></a></td> <td ><a href="http://192.168.1.17/mailbox/green" onclick="window.open('#','_blank');window.open(this.href,'_self');"><input type="button" style="background-color:#00FF00"value="" id="one"/></a></td> <td><a href="http://192.168.1.17/mailbox/blue" onclick="window.open('#','_blank');window.open(this.href,'_self');"><input type="button" value="" style="background-color:#0000FF"id="one"/></a></td> </tr> <tr> <td><a href="http://192.168.1.17/mailbox/yellow" onclick="window.open('#','_blank');window.open(this.href,'_self');"><input type="button" value="" style="background-color:#FFFF00"id="one"/></a></td> <td><a href="http://192.168.1.17/mailbox/purple" onclick="window.open('#','_blank');window.open(this.href,'_self');"><input type="button" value="" style="background-color:#FF00FF"id="one"/></a></td> <td><a href="http://192.168.1.17/mailbox/cyan" onclick="window.open('#','_blank');window.open(this.href,'_self');"><input type="button" value="" style="background-color:#00FFFF"id="one"/></a></td> </tr> <tr> <td><a href="http://192.168.1.17/mailbox/orange" onclick="window.open('#','_blank');window.open(this.href,'_self');"><input type="button" value="" style="background-color:#FF3300"id="one"/></a></td> <td><a href="http://192.168.1.17/mailbox/pink" onclick="window.open('#','_blank');window.open(this.href,'_self');"><input type="button" value="" style="background-color:#FF0066"id="one"/></a></td> <td><a href="http://192.168.1.17/mailbox/aqua" onclick="window.open('#','_blank');window.open(this.href,'_self');"><input type="button" value="" style="background-color:#0099FF"id="one"/></a></td> <tr> <td><a href="http://192.168.1.17/mailbox/off" onclick="window.open('#','_blank');window.open(this.href,'_self');"><input type="button" value="OFF" id="one"/></a></td> <td><a href="http://192.168.1.17/mailbox/teal" onclick="window.open('#','_blank');window.open(this.href,'_self');"><input type="button" value="" style="background-color:#006600"id="one"/></a></td> <td><a href="http://192.168.1.17/mailbox/white" onclick="window.open('#','_blank');window.open(this.href,'_self');"><input type="button" value="" style="background-color:#FFFFFF"id="one"/></a></td> </table> </tr> </body> </html>
HERE is a demo video it explains more I can write :
So this is It, this is how I made the First IoT project of my life, it was a great learning experience for me, and I got to compete with some of the most talented People and work with awesome hardware i.e. Arduino YUN and Infineon RGB shield. I will not feel bad if I don't get 3D printer, because this learning opportunity was the biggest prize for me, Thanks Element14 and specially doctorcdf for selecting me..
Top Comments