wie o wie wil waarde niet printen

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 46
Geregistreerd: 13 Okt 2016, 22:25

wie o wie wil waarde niet printen

Berichtdoor tijne » 11 Dec 2016, 22:35

beste,

ik ben nu al meerdere avonden aan het zoeken en ik krijg het niet voor mekaar.

ik gebruik de DallasTemperature.h om meerdere temp sensoren te monitoren. nou heb ik het na heel lang tobben voor me kaar gekregen om iedere temp apart in seriel monitor te krijgen en op geslagen op een sd kaart.

maar ik krijg het niet voor me kaar om het op een website te krijgen laat staan om het naar een database te schrijven (dit wil ik het lieste maar dat komt later wel).

hier mijn code:

cpp code
#include <RTClib.h>
#include <Wire.h>
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <OneWire.h>
#include <DallasTemperature.h>

RTC_DS1307 rtc;

const int chipSelect = 4;

File dataFile;



// size of buffer used to capture HTTP requests
#define REQ_BUF_SZ 20
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress Aa = { 0x28, 0xFF, 0x90, 0x83, 0x50, 0x16, 0x04, 0xF2 };
DeviceAddress Ra = { 0x28, 0xFF, 0x82, 0x35, 0x86, 0x16, 0x04, 0x5D };
DeviceAddress Az = { 0x28, 0xFF, 0x01, 0x32, 0x86, 0x16, 0x04, 0x5E };
DeviceAddress Rz = { 0x28, 0xFF, 0xBD, 0x83, 0x58, 0x16, 0x04, 0xC3 };
DeviceAddress Av = { 0x28, 0xFF, 0xEF, 0x30, 0x81, 0x16, 0x05, 0x05 };
DeviceAddress Rv = { };
DeviceAddress Ak = { };
DeviceAddress Rk = { };

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 178, 69); // IP address, may need to change depending on network
EthernetServer server(80); // create a server at port 80
File webFile;
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0; // index into HTTP_req buffer

void setup()
{

#ifdef AVR
Wire.begin();
#else
Wire1.begin();
#endif

rtc.begin();


rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
sensors.begin();
// set the resolution to 10 bit (good enough?)
sensors.setResolution(Aa, 10);
sensors.setResolution(Ra, 10);
sensors.setResolution(Az, 10);
sensors.setResolution(Rz, 10);
sensors.setResolution(Av, 10);
sensors.setResolution(Rv, 10);
sensors.setResolution(Ak, 10);
sensors.setResolution(Rk, 10);


// disable Ethernet chip
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);

Serial.begin(9600); // for debugging

// initialize SD card
Serial.println("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("ERROR - SD card initialization failed!");
return; // init failed
}
Serial.println("SUCCESS - SD card initialized.");
// check for index.htm file
if (!SD.exists("index.htm")) {
Serial.println("ERROR - Can't find index.htm file!");
return; // can't find index file
}
Serial.println("SUCCESS - Found index.htm file.");

Ethernet.begin(mac, ip); // initialize Ethernet device
server.begin(); // start to listen for clients
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
Serial.print("Error getting temperature");
} else {
Serial.print("C: ");
Serial.print(tempC);
dataFile.print(tempC);
}
}
void loop()
{

DateTime now = rtc.now();
sensors.requestTemperatures();


Serial.print("Aanvoer achter temperature is: ");
printTemperature(Aa);
Serial.print("\n\r");

Serial.print("Retour achter temperature is: ");
printTemperature(Ra);
Serial.print("\n\r");



Serial.print("Aanvoer zijkant temperature is: ");
printTemperature(Az);
Serial.print("\n\r");











Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(' ');
Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.year(), DEC);
Serial.println();
EthernetClient client = server.available(); // try to get client

if (client) { // got client?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // client data available to read
char c = client.read(); // read 1 byte (character) from client
// buffer first part of HTTP request in HTTP_req array (string)
// leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)
if (req_index < (REQ_BUF_SZ - 1)) {
HTTP_req[req_index] = c; // save HTTP request character
req_index++;
}
// print HTTP request character to serial monitor
Serial.print(c);
// last line of client request is blank and ends with \n
// respond to client only after last line received
if (c == '\n' && currentLineIsBlank) {
// open requested web page file
if (StrContains(HTTP_req, "GET / ")
|| StrContains(HTTP_req, "GET /index.htm")) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connnection: close");
client.println("refresh: 10");
client.println();
client.println("<!DOCTYPE HTML>");
webFile = SD.open("index.htm"); // open web page file



client.print(now.hour(), DEC);
client.print(':');
client.print(now.minute(), DEC);
client.print(':');
client.print(now.second(), DEC);
client.print(' ');
client.print(now.day(), DEC);
client.print('/');
client.print(now.month(), DEC);
client.print('/');
client.print(now.year(), DEC);


client.print("Aanvoer achter temperature is: ");
client.print(Temperature(Aa));
client.print("\n\r");

client.print("Retour achter temperature is: ");
printTemperature(Ra);
client.print("\n\r");



client.print("Aanvoer zijkant temperature is: ");
printTemperature(Az);
client.print("\n\r");
client.println();



}


else if (StrContains(HTTP_req, "GET /zolder.png")) {
webFile = SD.open("zolder.png");
if (webFile) {
client.println("HTTP/1.1 200 OK");
client.println();
}
}
if (webFile) {
while (webFile.available()) {
client.write(webFile.read()); // send web page to client
}
webFile.close();
}
// reset buffer index and all buffer elements to 0
req_index = 0;
StrClear(HTTP_req, REQ_BUF_SZ);
break;
}
// every line of text received from the client ends with \r\n
if (c == '\n') {
// last character on line of received text
// starting new line with next character read
currentLineIsBlank = true;
}
else if (c != '\r') {
// a text character was received from client
currentLineIsBlank = false;
}
} // end if (client.available())
} // end while (client.connected())
delay(1); // give the web browser time to receive the data
client.stop(); // close the connection
} // end if (client)
}

// sets every element of str to 0 (clears array)
void StrClear(char *str, char length)
{
for (int i = 0; i < length; i++) {
str[i] = 0;
}
}

// searches for the string sfind in the string str
// returns 1 if string found
// returns 0 if string not found
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;



}


het gaat even niet om de webserver (deze had ik nog ergens liggen) het gaat er mij om hoe ik de temp verstuurt krijg.

ik gebruik nu de regel "printTemperature(Ra);" maar dan laat hij niks zien en in me serial en sd wel.

gr martijn

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: wie o wie wil waarde niet printen

Berichtdoor Koepel » 12 Dec 2016, 04:42

De printTemperature() stuurt het niet naar de 'client'.
De EthernetClient 'client' is de browser, die iets stuurt naar de server (de Arduino), zoals bijvoorbeeld een GET request. Met client.print() kun je dan iets terug sturen naar de browser.

Dit stuurt wel iets naar de browser: client.print(Temperature(Aa)), maar bestaat die functie "Temperature()" eigenlijk wel ?

Berichten: 46
Geregistreerd: 13 Okt 2016, 22:25

Re: wie o wie wil waarde niet printen

Berichtdoor tijne » 13 Dec 2016, 23:09

Koepel schreef:De printTemperature() stuurt het niet naar de 'client'.
De EthernetClient 'client' is de browser, die iets stuurt naar de server (de Arduino), zoals bijvoorbeeld een GET request. Met client.print() kun je dan iets terug sturen naar de browser.

Dit stuurt wel iets naar de browser: client.print(Temperature(Aa)), maar bestaat die functie "Temperature()" eigenlijk wel ?



sorry voor me late reactie koepel.

ik ben met die code gestopt want ik kon er eigenlijk niks mee verder.

ik ben nu in het volgende probleem beland.

heb een andere code waar mee het wel lukt maar deze code wil geen verbinding maken met me phpmysql server. als ik via me tel een opdracht geef zet hij het keurig in de database maar arduino wil geen verbinding maken.

Code: Alles selecteren
//  This Arduino sketch reads DS18B20 "1-Wire" digital
//  temperature sensors.
//  Copyright (c) 2010 Mark McComb, hacktronics LLC
//  License: http://www.opensource.org/licenses/mit-license.php (Go crazy)
//  Tutorial:
//  http://www.hacktronics.com/Tutorials/arduino-1-wire-tutorial.html
// http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html

#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include <Ethernet.h>

//byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

IPAddress ip(192, 168, 178, 25);

char server[] = "192.168.178.15";

EthernetClient client;

//const int chipSelect = 4;

#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);



void setup(void)
{

  Serial.begin(9600);

  Ethernet.begin(ip);

  sensors.begin();

}
void loop(void)
{
  sensors.requestTemperatures();

  if (client.connect(server, 80)) {
    client.print("GET /write_data.php?"); // This 
    client.print("temp1="); // This
    //client.print(sensors.getTempCByIndex(0));
    client.print("temp2=");
    //client.print(sensors.getTempCByIndex(1));
    client.print("temp3=");
    //client.print(sensors.getTempCByIndex(2));
    client.print("temp4=");
    //client.print(sensors.getTempCByIndex(3));
    client.print("temp5=");
   // client.print(sensors.getTempCByIndex(4));
    client.print("temp6=");
   // client.print(sensors.getTempCByIndex(5));
    client.print("temp7=");
   // client.print(sensors.getTempCByIndex(6));
    client.print("temp8=");
   // client.print(sensors.getTempCByIndex(7));
    client.println(" HTTP/1.1"); // Part of the GET request
    client.println("Host: 192.168.178.15");
    client.println("Connection: close");
    client.println(); // Empty line
    client.println(); // Empty line
    client.stop();    // Closing connection to server
   
  }

  else {
    // If Arduino can't connect to the server (your computer or web page)
    Serial.println("--> connection failed\n");
  }
  Serial.print(sensors.getTempCByIndex(0));
  Serial.print("\n\r");
}


ben hier nu al 2 avonden mee bezig maar krijg het niet voor mekaar.

mijn write_data.php:

Code: Alles selecteren
<?php

    // Prepare variables for database connection
   
    $dbusername = "Tijne";  // enter database username, I used "arduino" in step 2.2
    $dbpassword = "Opelvectra01";  // enter database password, I used "arduinotest" in step 2.2
    $server = "localhost"; // IMPORTANT: if you are using XAMPP enter "localhost", but if you have an online website enter its address, ie."www.yourwebsite.com"

    // Connect to your database

    $dbconnect = mysql_pconnect($server, $dbusername, $dbpassword);
    $dbselect = mysql_select_db("huis",$dbconnect);

    // Prepare the SQL statement

//   $sql = "INSERT INTO huis.huis_temp (value) temp 1 ('".$_GET["value"]."')";   
   $sql = "INSERT INTO huis_temp (datum,temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8) VALUES( now(), " .$_GET["temp1"] ."," .$_GET["temp2"] ."," .$_GET["temp3"] ."," .$_GET["temp4"] ."," .$_GET["temp5"] ."," .$_GET["temp6"] ."," .$_GET["temp7"] ."," .$_GET["temp8"] .")";
   

    // Execute SQL statement

    mysql_query($sql);

?>


ik hoop dat je me hier ook mee kan helpen?

gr martijn

Berichten: 46
Geregistreerd: 13 Okt 2016, 22:25

Re: wie o wie wil waarde niet printen

Berichtdoor tijne » 14 Dec 2016, 00:14

kom er net achter dat me arduino de volgende adressen krijgt terwijl hij een vast ip adres heeft gekregen van me:
IP Address : 255.255.223.255
Subnet Mask : 223.255.223.255
Default Gateway IP: 223.255.223.255
DNS Server IP : 0.0.0.0
--> connection failed

vreemd

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: wie o wie wil waarde niet printen

Berichtdoor Koepel » 14 Dec 2016, 00:47

Van PHP weet ik helaas niets af.

Ik begrijp dat je nu de Arduino geen (web)server maakt, maar alleen een client. En de Arduino maakt verbinding met een server die een PHP script draait.

Kun je met een browser iets intypen zodat het PHP script een temperatuur oppakt ? Als dat lukt, dan kun je dat proberen in de Arduino na te doen.
Kun je beginnen met één temperatuur.
Ik heb ook wel eens veel moeten proberen, onder andere met HTTP/1.0 en HTTP/1.1, totdat die server het eindelijk pakte.

Het lijkt me beter om onderin de loop() een delay(5000); te doen. Dan wordt het iedere 5 seconden gedaan, nu draait het op de hoogste snelheid. Je zit je eigen PHP server te bestoken met een DoS aanval.

Je gebruikt DHCP. Kun je laten zien welk IP adres is toegewezen ?
Dat gaat met .localIP() : https://www.arduino.cc/en/Reference/EthernetLocalIP

Die IP adressen die je laat zien, dat lijkt me nogal vreemd. Dan zou ik graag de sketch willen zien die het afdrukt.

Je gaat toch niet willekeurige stukken code van internet proberen totdat het werkt ? Er schijnen goede tutorials te zijn van Arduino met AJAX of met PHP, maar zover ben ik nog niet gekomen.

Berichten: 46
Geregistreerd: 13 Okt 2016, 22:25

Re: wie o wie wil waarde niet printen

Berichtdoor tijne » 14 Dec 2016, 00:52

ik heb het probleem een min. of 3 geleden gevonden.

sd kaart verwijderen en het werkt en hij schrijft alles gelijk keurig weg in de database.

dank je wel voor je hulp wederom koepel. je bent een topper!!!!!!!!!!!

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 34 gasten