Hello,
I have an issue and it's been a week but a can't solve it so here's my question. I have to send several mesure to a Mysql database and when i start the card everething is working and data are send to the database but these data are all at 0.
Here's my code :
#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>
#include <Wire.h> //I2C needed for sensors
#include "SparkFunMPL3115A2.h" //Pressure sensor - Search "SparkFun MPL3115" and install from Library Manager
#include "SparkFunHTU21D.h" //Humidity sensor - Search "SparkFun HTU21D" and install from Library Manager
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x11, 0xAC }; //physical mac address
char server[] = "**********.000webhostapp.com";
IPAddress ip(********);
EthernetClient client;
MPL3115A2 myPressure; //Create an instance of the pressure sensor
HTU21D myHumidity; //Create an instance of the humidity sensor
//Hardware pin definitions
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
const byte STAT_BLUE = 7;
const byte STAT_GREEN = 8;
const byte RAIN = 2;
const byte REFERENCE_3V3 = A3;
const byte LIGHT = A1;
const byte BATT = A2;
const byte WDIR = A0;
//Global Variables
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
long lastSecond; //The millis counter to see when a second rolls by
// temps minimum entre deux requêtes
const long updateInterval = 10000;
// mémorise l'état de la connexion entre deux tours de loop
bool etaitConnecte = false;
long derniereRequete = 0;
volatile float rainHour[60]; //60 floating numbers to keep track of 60 minutes of rain
volatile unsigned long raintime, rainlast, raininterval, rain;
volatile float dailyrainin = 0; // [rain inches so far today in local time]
char carlu = 0;
void rainIRQ()
// Count rain gauge bucket tips as they occur
// Activated by the magnet and reed switch in the rain gauge, attached to input D2
{
raintime = millis(); // grab current time
raininterval = raintime - rainlast; // calculate interval between this and last event
if (raininterval > 10) // ignore switch-bounce glitches less than 10mS after initial edge
{
dailyrainin += 0.011; //Each dump is 0.011" of water
rainHour[60] += 0.011; //Increase this minute's amount of rain
rainlast = raintime; // set up for next event
}
}
float get_light_level()
{
float operatingVoltage = analogRead(REFERENCE_3V3);
float lightSensor = analogRead(LIGHT);
operatingVoltage = 3.3 / operatingVoltage; //The reference voltage is 3.3V
lightSensor = operatingVoltage * lightSensor;
return (lightSensor);
}
int get_wind_direction()
{
unsigned int adc;
adc = analogRead(WDIR);
if (adc < 380) return (113);
if (adc < 393) return (68);
if (adc < 414) return (90);
if (adc < 456) return (158);
if (adc < 508) return (135);
if (adc < 551) return (203);
if (adc < 615) return (180);
if (adc < 680) return (23);
if (adc < 746) return (45);
if (adc < 801) return (248);
if (adc < 833) return (225);
if (adc < 878) return (338);
if (adc < 913) return (0);
if (adc < 940) return (293);
if (adc < 967) return (315);
if (adc < 990) return (270);
return (-1);
}
void setup()
{
Serial.begin(9600);
char erreur = 0;
// On démarre le shield Ethernet SANS adresse IP (donc donnée via DHCP)
erreur = Ethernet.begin(mac);
if (erreur == 0) {
Serial.println("Parametrage avec ip fixe...");
// si une erreur a eu lieu cela signifie que l'attribution DHCP
// ne fonctionne pas. On initialise donc en forçant une IP
Ethernet.begin(mac, ip);
}
Serial.println("Init...");
// Donne une seconde au shield pour s'initialiser
delay(1000);
Serial.println("Pret !");
pinMode(STAT_BLUE, OUTPUT); //Status LED Blue
pinMode(STAT_GREEN, OUTPUT); //Status LED Green
pinMode(REFERENCE_3V3, INPUT);
pinMode(LIGHT, INPUT);
pinMode(RAIN, INPUT_PULLUP); // input from wind meters rain gauge sensor
pinMode(WDIR, INPUT);
//Configure the pressure sensor
myPressure.begin(); // Get sensor online
myPressure.setModeBarometer(); // Measure pressure in Pascals from 20 to 110 kPa
myPressure.setOversampleRate(7); // Set Oversample to the recommended 128
myPressure.enableEventFlags(); // Enable all three pressure and temp event flags
//Configure the humidity sensor
myHumidity.begin();
lastSecond = millis();
// attach external interrupt pins to IRQ functions
attachInterrupt(0, rainIRQ, FALLING);
}
void loop()
{
float temp = myHumidity.readTemperature();
float pression = myPressure.readPressure();
float light = get_light_level();
float wind = get_wind_direction();
float rain = 0;
float humidite = myHumidity.readHumidity();
for(int i = 0 ; i < 60 ; i++)
rain += rainHour[i];
// on lit les caractères s'il y en a de disponibles
if(client.available()) {
carlu = client.read();
Serial.print(carlu);
}
if (etaitConnecte && !client.connected()) {
Serial.println();
Serial.println("Deconnexion !");
// On ferme le client
client.stop();
}
// Si on est déconnecté
// et que cela fait plus de xx secondes qu'on a pas fait de requête
if(!client.connected() && ((millis() - derniereRequete) > updateInterval)) {
requete();
}
// enregistre l'état de la connexion (ouvert ou fermé)
etaitConnecte = client.connected();
}
void requete() {
char erreur = client.connect(server, 80);
if(erreur == 1) {
// Pas d'erreur ? on continue !
Serial.println("Connexion OK, envoi en cours...");
// On construit l'en-tête de la requête
client.println("GET /add.php? HTTP/1.1");
client.print("winddir=");
client.print(wind);
client.print("&humidity=");
client.print(humidite);
client.print("&tempf=");
client.print(temp);
client.print("&rainin=");
client.print(rain);
client.print("&dailyrainin=");
client.print(dailyrainin);
client.print("&pressure=");
client.print(pression);
client.print("light_lvl=");
client.print(light);
client.println( "Content-Type: application/x-www-form-urlencoded" );
client.println("Host: *******.000webhostapp.com");
client.println("Connection: close");
client.println();
// On enregistre le moment d'envoi de la dernière requête
derniereRequete = millis();
} else {
// La connexion a échoué :(
// On ferme notre client
client.stop();
// On avertit l'utilisateur
Serial.println("Echec de la connexion");
switch(erreur) {
case(-1):
Serial.println("Time out");
break;
case(-2):
Serial.println("Serveur invalide");
break;
case(-3):
Serial.println("Tronque");
break;
case(-4):
Serial.println("Reponse invalide");
break;
}
}
}
My php :
<?php include_once('database/init.php'); ?>
<!DOCTYPE html
<html>
<head class="header">
<meta charset="utf-8" />
<meta http-equiv= "refresh" content="86400"/>
<link rel="stylesheet" href="Projetcss.css" />
<title>Projet Station</title>
</head>
<body class="wallpaper">
<?php
$requete = $connexion->prepare('INSERT INTO station_meteo(winddir, humidity, tempf, rainin, dailyrainin, pressure,light_lvl) VALUES(:winddir, :humidity, :tempf, :rainin, :dailyrainin, :pressure, :light_lvl)');
$requete->execute(array(
'winddir' => $_GET['winddir'] = floatval($_GET['winddir']),
'humidity' => $_GET['humidity'] = floatval($_GET['humidity']),
'tempf' => $_GET['tempf'] = floatval($_GET['tempf']),
'rainin' => $_GET['rainin'] = floatval($_GET['rainin']),
'dailyrainin' => $_GET['dailyrainin'] = floatval($_GET['dailyrainin']),
'pressure' => $_GET['pressure'] = floatval($_GET['pressure']),
'light_lvl' => $_GET['light_lvl'] = floatval($_GET['light_lvl']),
));
echo 'data send';
?>
</body>
</html> </body>
</html>