vogeltje39
Gebruiker
- Lid geworden
- 27 sep 2006
- Berichten
- 13
Hallo Graag jullie hulp.
Met een arduino lees ik een slimmemeter uit en een kwh meter met s0 bus.
Deze gegevens stuur ik naar een database middels get en insert to. Dit werkt prima.
Nu heb ik die sketch aangepast dat werkt , echter er wordt niks meer verstuurd naar de database.
De werking kan ik zien met serial monitor daar komen de gegevens ,ook laat deze zien dat er verbinding is met de database maar schrijven ho maar.
bij behorende php
de inlog en wachtwoord gegevens zijn 100% goed.
Graag jullie hulp
Met een arduino lees ik een slimmemeter uit en een kwh meter met s0 bus.
Deze gegevens stuur ik naar een database middels get en insert to. Dit werkt prima.
Nu heb ik die sketch aangepast dat werkt , echter er wordt niks meer verstuurd naar de database.
De werking kan ik zien met serial monitor daar komen de gegevens ,ook laat deze zien dat er verbinding is met de database maar schrijven ho maar.
Code:
/*
* FILE: KWh monitoring
* AUTHOR: Rob Tillaart
* DATE: 2010 03 31
* URL: http://playground.arduino.cc/Main/EEM12L-32AKWhMonitoring
*
* PURPOSE: prototype KWh monitoring
*
* Digital Pin layout ARDUINO
* =============================
* 2 IRQ 0 - to KW meter EEM12L-32A
*
* This KWh meter gives a pulse every 0.5 Watt
*/
//
// KWH SENSOR CODE
//
// TODO - make a class
//
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = {0xDE, 0xAD, 0xAF, 0x82, 0x31, 0x30};
IPAddress ip(192, 168, 2, 7);
IPAddress dnServer(8, 8, 8, 8);
IPAddress gateway(192,168,2,254);
IPAddress subnet(255, 255, 255, 0);
IPAddress server(0,0,0,0);
char serverName[] = "www.mijnwebsite.com";
EthernetClient client;
char input; // incoming serial data (byte)
bool readnextLine = false;
#define BUFSIZE 500
char buffer[BUFSIZE]; //Buffer for serial data to find \n .
unsigned long kwh = 0; // pulse
unsigned long sum = 0; // sum pulse
unsigned long lastTime = 0; // will store last time
unsigned long interval = 60000; // interval at which to blink (milliseconds)60000
volatile unsigned long rpk = 0; // raw pulse KWH counter (private)
volatile unsigned long rpk_old = 0; // value of last read (private)
volatile boolean CS_kwh = false; // Critical Section for KWH meter (private)
// The interrupt routine
void Kirq()
{
rpk++; // just increment raw pulse counter.
if (rpk > 1000000000) // reset pulse counter after 10e9 pulse = 500.000 KW
{
if (false == CS_kwh) // in critical section? // assumption IRQ-call is handled atomic on arduino.
{
rpk -= rpk_old;
rpk_old = 0;
}
}
}
// returns kwh's since last reset
float readkwh1()
{
return rpk / 1000.0; // one pulse = 0.5 watt.
}
// returns kwh's since last call
float readkwh()
{
CS_kwh = true; // Start Critical Section - prevent interrupt Kirq() from changing rpk & rpk_old ;
long t = rpk; // store the raw pulse counter in a temp var.
long k = t - rpk_old; // subtract last measure to get delta
rpk_old = t; // remember old value
CS_kwh = false; // End Critical Section
return k/2000.0; // return delta, one pulse = 0.5 watt.
}
//
// SETUP
//
void setup()
{
Serial.begin(115200);
Serial.print("Start ");
Serial.println(__FILE__);
delay(1000);
//Ethernet.begin(mac, ip);
Ethernet.begin(mac);
delay(1000);
pinMode(4, OUTPUT); // SD select pin
digitalWrite(4, HIGH); // Explicitly disable SD
// KWH interrupt attached to IRQ 0 = pin2
attachInterrupt(0, Kirq, FALLING);
}
//
// MAIN LOOP
//
void loop()
{
if (millis() - lastTime > interval) {
lastTime = millis();
// read the pulses
kwh = readkwh1();
sum += kwh;
// send new data
httpRequest();
delay(1000);
float kwh = readkwh();
float sum = readkwh1();
Serial.print("kwh: ");
Serial.print(kwh, 5);
Serial.print(" ");
Serial.println(sum, 5);
}
}
void httpRequest()
{
// if there's a successful connection:
if (client.connect(serverName, 80))
{ float kwh = readkwh();
float sum = readkwh1();
Serial.print("GET /datalogger/p32.php?kwh=");
Serial.print(kwh, 4);
Serial.print("&sum=");
Serial.print(sum, 4);
Serial.println(" HTTP/1.1");
Serial.println("Host: mijnwebsite.com");
Serial.println("User-Agent: arduino-ethernet");
Serial.println("Connection: stop/close");
Serial.println();
Serial.println("web ");
client.print("GET /datalogger/p32.php?kwh=");
client.print(kwh, 4);
client.print("&sum=");
client.print(sum, 4);;
client.println(" HTTP/1.1");
client.println("Host: mijnwebsite.com");
client.println("User-Agent: arduino-ethernet");
client.println("Connection: close");
//Request complete; empty recieve buffer
while (client.available())
{
char c = client.read(); //gets byte from ethernet buffer
if (client.available() == false)
{
delay(25); // give some extra time for next packet to arrive
}
}
client.println();
Serial.println("Success!");
}
else
{
Serial.println("Failed");
}
client.stop();
}
//
// END OF PROGRAM
//
bij behorende php
Code:
<?php
error_reporting(E_ALL);
//Connect to database
include 'configp3.php';
include 'opendb.php';
//Waardes van vorige wegschrijf actie ophalen
$query = mysql_query("SELECT id, time, kwh, sum FROM `pellets` ORDER BY `pellets`.`time` DESC LIMIT 1");
$row = mysql_fetch_array($query);
//GET variabelen naar andere variabele schrijven
$kwh = $_GET["kwh"];
$sum = $_GET["sum"];
//GET variabelen op 'integer' zetten
settype($kwh, "integer");
settype($sum, "integer");
{
$SQL = ("INSERT INTO md1452255.pellets (kwh, sum) VALUES ('".$_GET["kwh"]."','".$_GET["sum"]."')");
mysql_query($SQL);
}
else {
//Foutieve waarden wegschrijven naar tabel voor latere debugging
$SQL = "INSERT INTO md1452255.faulty_pellets (kwh, sum) VALUES ('".$_GET["kwh"]."','".$_GET["sum"]."')";
mysql_query($SQL);
}
?>
de inlog en wachtwoord gegevens zijn 100% goed.
Graag jullie hulp
Laatst bewerkt: