Vraagje ?

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 22
Geregistreerd: 02 Dec 2013, 05:52

Vraagje ?

Berichtdoor KRISKRAS9660 » 09 Jan 2015, 04:18

Dag,

ik probeer hier mijn probleem te omschrijven.

Ik gebruik het voorbeeld webservertje van :
http://startingelectronics.com/tutorial ... eb-server/

De analoge waarden dat ik op die webserver kan aflezen wil ik ook gaan loggen.

Ik had gedacht om deze analoge waarden op te sturen naar een datalogserver "www.sparkfun.com".

ik heb een voorbeeld sketch geschreven die data naar sparkfun opstuurt en deze data kan ik terugvinden op sparkfun.
Dus deze sketch werkt.(sketch gebaseerd op ethernet client).

alleen lukt het me niet op de ethernet client sketch (sparkfun) samen te voegen met dat voorbeeld webservertje.

Hoe pak ik dit aan?
heeft iemand richtlijnen waar ik mee moet beginnen?

Code: Alles selecteren
 //hier een probeersel van mijn code

#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <elapsedMillis.h>

const int ledPin =  9;      // the number of the LED9 pin

int ledState = LOW;             // ledState used to set the LED
long previousMillis = 0;        // will store last time LED was updated
long interval = 1000;           // interval at which to blink (milliseconds)

//update datavermogen to file
const unsigned long UPDATE_RATE = 5000; // 300000ms = 5 minutes 600000ms = 10 min
unsigned long lastUpdate = 0; // Keep track of last update time

//Timers Relaisuitgangen
//----------------------
elapsedMillis timer0;
#define interval0 500        // the interval Timer0 in mS
boolean timer0Fired;

// size of buffer used to capture HTTP requests
#define REQ_BUF_SZ   60

// MAC address from Ethernet shield sticker under board
byte mac[] = {
  0x90, 0xA2, 0xDA, 0x0E, 0x0D, 0xC7 };
byte gateway[] = {
  192, 168, 0, 1 };                   
byte subnet[] = {
  255, 255, 255, 0 };                 
IPAddress ip(192, 168, 0, 20);     // IP address, may need to change depending on network
EthernetServer server(80);         // create a server at port 80
File webFile;                      // the web page file on the SD card
char HTTP_req[REQ_BUF_SZ] = {
  0};   // buffered HTTP request stored as null terminated string
char req_index = 0;                // index into HTTP_req buffer
boolean LED_state[5] = {
  0};        // stores the states of the LEDs


//IPAddress server(54,86,132,254);  // numeric IP for data.sparkfun.com
//char server[] = "data.sparkfun.com";    // name address for data.sparkFun (using DNS)

EthernetClient client;

const String publicKey = "0lQ0KWa0L3uawo0ObKdX";
const String privateKey = "D68BY7lBxacwP0DB12Zy";
const byte NUM_FIELDS = 6;
const String fieldNames[NUM_FIELDS] = {"belasting1", "belasting2", "belasting3","generator1","generator2","generator3"};
String fieldData[NUM_FIELDS];

int data[6];      //float als er na de komma moet gewerkt worden

int vermogen1 = A2;               
int vermogen2 = A3;             
int vermogen3 = A4;             


void setup()
{
  timer0 = 0;
 
  pinMode(10, OUTPUT);
  digitalWrite(10, HIGH);

  Serial.begin(9600);           // for debugging

 
  if (!SD.begin(4)) {
   
    return;                    // init failed
  }
  Serial.println("SUCCESS - SD card initialized.");
  // check for index.htm file
  if (!SD.exists("index.htm")) {
   
    return;                 
  }
  Serial.println("SUCCESS - Found index.htm file.");


  pinMode(2, OUTPUT);           
  pinMode(3, OUTPUT);           
  pinMode(8, OUTPUT);
  pinMode(ledPin, OUTPUT);


  Ethernet.begin(mac, ip); 
  server.begin();         
}

void loop()
{
  EthernetClient client = server.available(); 

  if (client) { 
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {   
        char c = client.read();

        if (req_index < (REQ_BUF_SZ - 1)) {
          HTTP_req[req_index] = c;         
          req_index++;
        }

        if (c == '\n' && currentLineIsBlank) {

          client.println("HTTP/1.1 200 OK");

          if (StrContains(HTTP_req, "ajax_inputs")) {

            client.println("Content-Type: text/xml");
            client.println("Connection: keep-alive");
            client.println();
            SetLEDs();
            XML_response(client);   
          }
          else { 
            client.println("Content-Type: text/html");
            client.println("Connection: keep-alive");
            client.println();

            webFile = SD.open("index.htm");       

            if (webFile) {
              while(webFile.available()) {
                client.write(webFile.read());
              }
              webFile.close();
            }
          }

          Serial.print(HTTP_req);

          req_index = 0;
          StrClear(HTTP_req, REQ_BUF_SZ);
          break;
        }

        if (c == '\n') {

          currentLineIsBlank = true;
        }
        else if (c != '\r') {

          currentLineIsBlank = false;
        }
      }
    }
    delay(1);     
    client.stop();
  }


  SetLEDs();
  XML_response(client);


  unsigned long currentMillis = millis();

  if(currentMillis - previousMillis > interval) {

    previousMillis = currentMillis;   


    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;


    digitalWrite(ledPin, ledState);
  }

  if (millis() > (lastUpdate + UPDATE_RATE)) //  sparkfun
  {
    lastUpdate = millis();
    setupEthernet();     
    postData(); 
  }
}


void SetLEDs(void)
{

  //LED 1 (pin 8)
  //-------------
  if (StrContains(HTTP_req, "LED1=1")){               
    LED_state[0] = 1;                                 

  }
  else if (StrContains(HTTP_req, "LED1=0")){   
    LED_state[0] = 0;                               

  }
}

// send the XML file with analog values.
void XML_response(EthernetClient cl)
{
  int count;                 
  //float data[6];

  data[0] = map (analogRead(vermogen1), 205 , 1023 , -200 , 2000);  //205 bit = 4mA , 1023 bit = 20mA
  data[0] = constrain ( data[0],0,1600);                             //limits van data 0
  data[1] = map (analogRead(vermogen1), 280 , 875 , 0, 100);        // in %
  data[1] = constrain ( data[1],0,100);                             //limits van data 1
  data[2] = map (analogRead(vermogen2), 0 , 1023 , 0, 800);         // 800KW/1023=0.783
  data[3] = map (analogRead(vermogen2), 0 , 1023 , 0, 100);         //100% = 1023 bit
  data[4] = map (analogRead(vermogen3), 0 , 1023 , 0, 800);         // 800KW/1023=0.783
  data[5] = map (analogRead(vermogen3), 0 , 1023 , 0, 100);         //100% = 1023 bit

  int alarm[4];

  alarm[0] = data[1];
  alarm[1] = data[3];
  alarm[2] = data[5];
  alarm[3] = 90;               //alarmgrens



  if (( 2 < data[1]) || ( 2 < data[3]) || ( 2 < data[5])) {
    digitalWrite(2, HIGH);              //alarmlamp aan
    digitalWrite(3, HIGH);

    timer0Fired = false;
    if ((!timer0Fired) && (timer0 > interval0)){   // pulse uitgang van 500 msec lang                             
      digitalWrite(3, LOW);                           
    }
  }
  else {
    digitalWrite(2, LOW);
    timer0 = 0;                                    //reset timer0
  }


  cl.print("<?xml version = \"1.0\" ?>");
  cl.print("<inputs>");


  for (count = 0; count <= 5; count++) {

    cl.print("<analog>");
    cl.print(data[count]);        //cl.print(data[count],0);  0 = aantal achter de komma
    cl.println("</analog>");


  }


  for (count = 0; count <= 2; count++) {


    if ((alarm[3] < alarm[0])|| (alarm[3] < alarm[1]) || (alarm[3] < alarm[2])) {
      digitalWrite(8, HIGH);           
    }
    else {
      digitalWrite(8, LOW);
    }

    cl.print("<switch>");
    if ((alarm[3] <(alarm[count]))&& ledState) {                 
      cl.print("ALARM OVERBELASTING GENERATOR");

    }
    else {
      cl.print(" ");

    }
    cl.println("</switch>");
  }   


  cl.print("<LED>");

  if (ledState) {
    cl.print("on");
  }
  else {
    cl.print("off");
  }
  cl.println("</LED>");

  cl.print("</inputs>");
}


void StrClear(char *str, char length)
{
  for (int i = 0; i < length; i++) {
    str[i] = 0;
  }
}


char StrContains(char *str, char *sfind)
{
  char found = 0;
  char index = 0;
  char len;

  len = strlen(str);

  if (strlen(sfind) > len) {
    return 0;
  }
  while (index < len) {
    if (str[index] == sfind[found]) {
      found++;
      if (strlen(sfind) == found) {
        return 1;
      }
    }
    else {
      found = 0;
    }
    index++;
  }

  return 0;
}

/*void setupEthernet()  //for client sparkfun.com
{

  if (Ethernet.begin(mac) == 0) {

    Ethernet.begin(mac, ip);
  }

  delay(1);
} */

void postData()  //post data naar sparkfun

{
  char server[] = "data.sparkfun.com";   
  if (client.connect(server, 80))
  {

    client.print("GET /input/");
    client.print(publicKey);
    client.print("?private_key=");
    client.print(privateKey);
    for (int i=0; i<NUM_FIELDS; i++)
    {
      client.print("&");
      client.print(fieldNames[i]);
      Serial.print(fieldNames[i]);
      client.print("=");

      //client.print(fieldData[i]);
      //Serial.print(fieldData[i]);
      client.print(data[i]);
      Serial.print(data[i]);
    }
    client.println(" HTTP/1.1");
    client.print("Host: ");


Advertisement

Berichten: 22
Geregistreerd: 02 Dec 2013, 05:52

Re: Vraagje ?

Berichtdoor KRISKRAS9660 » 09 Jan 2015, 04:25

Wanneer ik met mijn laptop de voorbeeld webserver benader,
kan de Arduino dan tegelijk data doorsturen naar www.sparkfun.com?

ik veronderstel dat ik dat ik ze om beurten moet aanspreken.
alle tips zijn welkom :

Mvg
Kris

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Vraagje ?

Berichtdoor nicoverduin » 09 Jan 2015, 10:02

Tips:
a) becommentarieer je programma zodat je door de bomen toch het bos blijft zien. En als een leverancier het niet heeft gedaan des te meer reden om het zelf te doen. Schijnt dat je daar heel veel van kan leren
b) Als jij een programma zowel in client als server mode wil laten werken zul je inderdaad beide moeten uitvoeren ACHTER elkaar. Dit is geen multi-thread processor.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 22
Geregistreerd: 02 Dec 2013, 05:52

Re: Vraagje ?

Berichtdoor KRISKRAS9660 » 09 Jan 2015, 20:02

Ik ga een poging nemen om deze optesplitsen.

Alvast bedankt.

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 37 gasten