SparkFun Forums 

Where electronics enthusiasts find answers.

For the discussion of Arduino related topics.
By jacksosamu
#195954
Hi there I am trying to make a network, to run 12 TCS34725 adafruit colour sensors (https://www.adafruit.com/product/1334) and send that information to my online database. Currently, I have one Arduino and colour sensor sending data over Ethernet shield. I think what I need to do is run 11 Arduino in a slave relationship to the one Arduino (master) I have plugged into ethernet shield?

Is that right, or is there an easier way. I have 12 Arduinos, but only one Ethernet shield and would prefer not to buy any more, as the cost is prohibitive.

Here is my
Code: Select all
#include <Wire.h>
#include "Adafruit_TCS34725.h"
#include <Ethernet.h>
#include <SPI.h>

byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 }; // RESERVED MAC ADDRESS
EthernetClient client;

String data;
// Pick analog outputs, for the UNO these three work well
// use ~560  ohm resistor between Red & Blue, ~1K for green (its brighter)
#define redpin 3
#define greenpin 5
#define bluepin 6
// for a common anode LED, connect the common pin to +5V
// for common cathode, connect the common to ground

// set to false if using a common cathode LED
#define commonAnode true

// our RGB -> eye-recognized gamma color
byte gammatable[256];


Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_4X);

void setup() {
  Serial.begin(9600);
  Serial.println("Color View Test!");

  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
  }

  if (tcs.begin()) {
    Serial.println("Found sensor");
  } else {
    Serial.println("No TCS34725 found ... check your connections");
    while (1); // halt!
  }

  // use these three pins to drive an LED
  pinMode(redpin, OUTPUT);
  pinMode(greenpin, OUTPUT);
  pinMode(bluepin, OUTPUT);

  // thanks PhilB for this gamma table!
  // it helps convert RGB colors to what humans see
  for (int i=0; i<256; i++) {
    float x = i;
    x /= 255;
    x = pow(x, 2.5);
    x *= 255;

    if (commonAnode) {
      gammatable[i] = 255 - x;
    } else {
      gammatable[i] = x;
    }
    //Serial.println(gammatable[i]);
  }
}


void loop() {
  uint16_t clear, red, green, blue;
  data = "temp1=1&hum1=2";
  tcs.setInterrupt(false);      // turn on LED

  delay(60);  // takes 50ms to read

  tcs.getRawData(&red, &green, &blue, &clear);

  tcs.setInterrupt(true);  // turn off LED

  Serial.print("C:\t"); Serial.print(clear);
  Serial.print("\tR:\t"); Serial.print(red);
  Serial.print("\tG:\t"); Serial.print(green);
  Serial.print("\tB:\t"); Serial.print(blue);

  // Figure out some basic hex code for visualization
  uint32_t sum = clear;
  float r, g, b;
  r = red; r /= sum;
  g = green; g /= sum;
  b = blue; b /= sum;
  r *= 256; g *= 256; b *= 256;
  Serial.print("\t");
  Serial.print((int)r, HEX); Serial.print((int)g, HEX); Serial.print((int)b, HEX);
  Serial.println();

  //Serial.print((int)r ); Serial.print(" "); Serial.print((int)g);Serial.print(" ");  Serial.println((int)b );

  analogWrite(redpin, gammatable[(int)r]);
  analogWrite(greenpin, gammatable[(int)g]);
  analogWrite(bluepin, gammatable[(int)b]);

  if (client.connect("www.hotelsoap.org",80)) { // REPLACE WITH YOUR SERVER ADDRESS
    client.println("POST /junk/ado/add.php HTTP/1.1");
    client.println("Host: www.hotelsoap.org"); // SERVER ADDRESS HERE TOO
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.print("Content-Length: ");
    client.println(data.length());
    client.println();
    client.print(data);
  }

  if (client.connected()) {
    client.stop();  // DISCONNECT FROM THE SERVER
  }

  delay(300000); // WAIT FIVE MINUTES BEFORE SENDING AGAIN
By sterretje
#195956
It would be better to have one master and 12 slaves; that way each one can concentrate on one task.

The approach would to let the master poll the slaves for data. Depending on distance between master and slave
1)
you can use SPI communication between master and slaves; it will cost you 11 (or 12) extra pins (or a port expander or shiftregisters) for the master to be able to select the slave that it communicates with.
2)
you can use RS485 to communicate between master and slave (you need one TTL to RS485 converter for the master and one for each slave).; all slaves will listen to commands; by using an addressing scheme only the slave that is asked to give data will reply.