Wemos temperatuur binnen en buiten

Arduino specifieke Software
Berichten: 31
Geregistreerd: 10 Mrt 2014, 22:01

Wemos temperatuur binnen en buiten

Berichtdoor Olan » 13 Dec 2021, 19:45

hallo ik wil het volgende maken binnen een Wemos met scherm waar info op komt, buiten een Wemos met een temp sensor en deze waarde wil ik op de eerste Wemos met scherm weergeven.hoe doe ik dit? moet de een een server zijn en de andere een client. of kan ik de buiten Wemos een webpage laten generen waar de temp opstaat en de binnen Wemos daar laten kijken en de waarde er af halen? ik weet niet goed hoe ik dit doe hebben jullie ideeën? of zijn er nog andere mogelijkheden?
graag feedback!

Advertisement

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: Wemos temperatuur binnen en buiten

Berichtdoor FonzieBonzo » 13 Dec 2021, 22:45

Hoi Olan,

Wat je ipv buiten iets ophangen is gebruik maken van https://openweathermap.org/api
Deze services is gratis en kun je instellen op je postcode om vervolgens eens in de zoveel tijd de buitentemp in JSON formaat op te halen.

Werkt hier al jaren prima.

Gr,
Fonzie

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Wemos temperatuur binnen en buiten

Berichtdoor zuid » 14 Dec 2021, 14:25

Nog een gratis versie: https://weerlive.nl/delen.php

mvg Nico

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Wemos temperatuur binnen en buiten

Berichtdoor zuid » 14 Dec 2021, 18:56

Met een Wemos is een prima oplossing te maken.
De "buiten" Wemos als server en de "binnen" Wemos die bijvoorbeeld elke minuut ( of 5 minuten) actuele data vraagt via http (dus als client) aan de "buiten" Wemos.
Kijk daarbij ook naar de mogelijkheden van OTA (sketch update via Wifi).
Ik heb een soortgelijke oplossing gemaakt waarbij een Wemos de data verzamelt van een PV omvormer en van de elektra meter.
Naast deze info wordt er via http door deze Wemos ook weer gegevens verzamelt via mijn eerder genoemde link.
https://weerlive.nl/delen.php


Ik heb als display geen tweede Wemos maar een "oude" GSM telefoon.
Via een Webpagina op de Wemos met javascript wordt e.e.a. grafisch weergegeven op deze GSM.
Maar met een tweede Wemos met een daaraan gekoppeld display is ook veel mogelijk.

Ik heb zelf nog wel een wens; een Wemos voor mijn gasmeter, die staat helaas buiten mijn Wifi mogelijkheden en vervelender ook ver van een stopcontact.
Voor een Wemos zonder stopcontact heb ik nog geen haalbare oplossing.
m.v.g Nico

Berichten: 31
Geregistreerd: 10 Mrt 2014, 22:01

Re: Wemos temperatuur binnen en buiten

Berichtdoor Olan » 18 Dec 2021, 17:40

hallo ik heb dit als server gebruikt dit is de code:
#include <ESP8266WiFi.h>
#include <OneWire.h>

const char* ssid = "OEPINET";
const char* password = "geenDRAAD";

OneWire ds(D2);
WiFiServer server(80);

void setup()
{
Serial.begin(115200);
delay(10);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
digitalWrite(LED_BUILTIN, LOW);
// Start the server
server.begin();
Serial.println("Server started");

// Print the IP address
Serial.print("Use this URL : ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");

}

void loop()
{
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}

// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}

// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();

//now the DS18b20
if ( !ds.search(addr))
{
ds.reset_search();
delay(250);
return;
}

if (OneWire::crc8(addr, 7) != addr[7])
{
Serial.println("CRC is not valid!");
return;
}

// the first ROM byte indicates which chip
switch (addr[0])
{
case 0x10:
type_s = 1;
break;
case 0x28:
type_s = 0;
break;
case 0x22:
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);
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad

for ( i = 0; i < 9; i++)
{
data[i] = ds.read();
}

// Convert the data to actual temperature
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // 9 bit resolution default
if (data[7] == 0x10)
{
raw = (raw & 0xFFF0) + 12 - data[6];
}
}
else
{
byte cfg = (data[4] & 0x60);
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

}

celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;

// Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<meta http-equiv=\"refresh\" content=\"5\">"); //refresh every 5 seconds


client.println("<H3>DS18b20 temperature example</h3>");
client.print("Temperature in Celsius = ");
client.println(celsius);
client.println("<br><br>");
client.print("Temperature in Celsius = ");
client.println(fahrenheit);
client.println("</html>");

delay(1);
Serial.println("Client disconnected");
Serial.println("");

}


maar het probleem is ik krijg via de seriële monitor een ip adres maar deze wil niet openen.
doe ik iets fout of wat ?

Gebruikers-avatar
Berichten: 118
Geregistreerd: 01 Okt 2015, 11:54
Woonplaats: Castricum

Re: Wemos temperatuur binnen en buiten

Berichtdoor FonzieBonzo » 19 Dec 2021, 12:12

Hoi Olan,


Los van je vraag, je bent je wifi login gegevens vergeten te censureren. Beter even je post aanpassen :mrgreen:


Gr,
Fonzie

Berichten: 31
Geregistreerd: 10 Mrt 2014, 22:01

Re: Wemos temperatuur binnen en buiten

Berichtdoor Olan » 19 Dec 2021, 14:25

Olan schreef:hallo ik heb dit als server gebruikt dit is de code:
#include <ESP8266WiFi.h>
#include <OneWire.h>

const char* ssid = "xxxxxxxxxxxx";
const char* password = "xxxxxxxxx";

OneWire ds(D2);
WiFiServer server(80);

void setup()
{
Serial.begin(115200);
delay(10);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
digitalWrite(LED_BUILTIN, LOW);
// Start the server
server.begin();
Serial.println("Server started");

// Print the IP address
Serial.print("Use this URL : ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");

}

void loop()
{
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}

// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}

// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();

//now the DS18b20
if ( !ds.search(addr))
{
ds.reset_search();
delay(250);
return;
}

if (OneWire::crc8(addr, 7) != addr[7])
{
Serial.println("CRC is not valid!");
return;
}

// the first ROM byte indicates which chip
switch (addr[0])
{
case 0x10:
type_s = 1;
break;
case 0x28:
type_s = 0;
break;
case 0x22:
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);
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad

for ( i = 0; i < 9; i++)
{
data[i] = ds.read();
}

// Convert the data to actual temperature
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // 9 bit resolution default
if (data[7] == 0x10)
{
raw = (raw & 0xFFF0) + 12 - data[6];
}
}
else
{
byte cfg = (data[4] & 0x60);
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

}

celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;

// Return the response
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<meta http-equiv=\"refresh\" content=\"5\">"); //refresh every 5 seconds


client.println("<H3>DS18b20 temperature example</h3>");
client.print("Temperature in Celsius = ");
client.println(celsius);
client.println("<br><br>");
client.print("Temperature in Celsius = ");
client.println(fahrenheit);
client.println("</html>");

delay(1);
Serial.println("Client disconnected");
Serial.println("");

}


maar het probleem is ik krijg via de seriële monitor een ip adres maar deze wil niet openen.
doe ik iets fout of wat ?

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten