Vraagje ?
4 berichten
• Pagina 1 van 1
- KRISKRAS9660
- Berichten: 22
- Geregistreerd: 02 Dec 2013, 05:52
Vraagje ?
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?
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
- KRISKRAS9660
- Berichten: 22
- Geregistreerd: 02 Dec 2013, 05:52
Re: Vraagje ?
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
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
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Vraagje ?
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.
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.
- KRISKRAS9660
- Berichten: 22
- Geregistreerd: 02 Dec 2013, 05:52
Re: Vraagje ?
Ik ga een poging nemen om deze optesplitsen.
Alvast bedankt.
Alvast bedankt.
4 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten