Vielen Dank, es hat geklappt. Habe es bisschen umgeschrieben. Hier mal mein Code.
/******************************************************************
Created with PROGRAMINO IDE for Arduino - 01.09.2017 13:29:38
Project : Frischwassertankmesser
Libraries : OW, Dallas, ESP8266
Author : Cihan Sahin
Description : Wasserstandsmessung mittels US und Temp DS18b12 UDP
******************************************************************/
//Libs
#include <ESP8266WiFi.h>
#include <WiFiUDP.h>
#include <OneWire.h>
WiFiUDP Client;
OneWire ds(2);
int zulauf = 13;
byte serdata=0;
byte fromserver=0;
char incomingbuffer[255];
#define TRIGGER 5
#define ECHO 4
void setup()
{
Serial.begin(9600);
WiFi.mode(WIFI_STA);
WiFi.begin("CinoRBD2","retrobit");
Serial.println();
Serial.println();
Serial.print("Wait for WiFi... ");
pinMode(TRIGGER, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(BUILTIN_LED, OUTPUT);
pinMode(zulauf,INPUT_PULLUP);
while(WiFi.status() != WL_CONNECTED)
{
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Client.begin(6002);
pinMode(12, OUTPUT);
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
}
void loop()
{
hoeheudp();
tempudp();
checkUDP();
if (digitalRead(zulauf)==HIGH){
zulaufaus();
} else {
zulaufan();
}
}
void hoeheudp()
{
const char ip[]="192.168.0.101";
long duration, distance;
long distance1;
digitalWrite(TRIGGER, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER, LOW);
duration = pulseIn(ECHO, HIGH);
distance = (duration/2) / 29.1;
Serial.print(distance);
Serial.println("Centimeter:");
distance1 = map(distance, 1, 200, 100, 1);
Client.beginPacket(ip,6001);
Client.print("#41M");
Client.print(distance1);
Client.print("<");
Client.endPacket();
}
void tempudp()
{
const char ip[]="192.168.0.101";
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if ( !ds.search(addr)) {
Serial.println("No more addresses.");
Serial.println();
ds.reset_search();
delay(250);
return;
}
Serial.print("ROM =");
for ( i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(addr[i], HEX);
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
// the first ROM byte indicates which chip
switch (addr[0]) {
case 0x10:
Serial.println(" Chip = DS18S20"); // or old DS1820
type_s = 1;
break;
case 0x28:
Serial.println(" Chip = DS18B20");
type_s = 0;
break;
case 0x22:
Serial.println(" Chip = DS1822");
type_s = 0;
break;
default:
Serial.println("Device is not a DS18x20 family device.");
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the end
delay(1000);
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the end
delay(750); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
Serial.print(" Data = ");
Serial.print(present, HEX);
Serial.print(" ");
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
Serial.print(data[i], HEX);
Serial.print(" ");
}
Serial.print(" CRC=");
Serial.print(OneWire::crc8(data, 8), HEX);
Serial.println();
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // 9 bit resolution default
if (data[7] == 0x10) {
// "count remain" gives full 12 bit resolution
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
// at lower res, the low bits are undefined, so let's zero them
if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
//// default is 12 bit resolution, 750 ms conversion time
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
Serial.print(" Temperature = ");
Client.beginPacket(ip,6001);
Client.print("#40M");
Client.print(celsius);
Client.print("<");
Client.endPacket();
delay(1000);
}
void zulaufan()
{
const char ip[]="192.168.0.104";
Client.beginPacket(ip,6001);
Client.print("#42M");
Client.print("231");
Client.print("<");
Client.endPacket();
}
void zulaufaus()
{
const char ip[]="192.168.0.104";
Client.beginPacket(ip,6001);
Client.print("#42M");
Client.print("310");
Client.print("<");
Client.endPacket();
}
void checkUDP()
{
int packetSize;
char* pos;
memset(incomingbuffer, 0, sizeof(incomingbuffer));
packetSize = Client.parsePacket();
if (packetSize)
{
// read the packet into packetBufffer
Client.read(incomingbuffer, sizeof(incomingbuffer));
pos = strstr(incomingbuffer, "#10M1<");
if (pos)
{
digitalWrite(12, HIGH);
delay(500);
digitalWrite(12, LOW);
}
pos = strstr(incomingbuffer, "#10M0<");
if (pos)
{
digitalWrite(12, LOW);
}
}
return;
}