DIY Temperatur reporter (bilder)

Hur gör man för att ... ? Hur fungerar ... ? Steg för steg-guider och förklarande artiklar finns i detta forum.

Moderator: elf98

Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
Thief
Gillar hemautomation
Inlägg: 37
Blev medlem: 19 dec 2017, 08:55
Ort: Haparanda
Kontakt:

Re: DIY Temperatur reporter

Inlägg av Thief » 06 apr 2018, 23:23

Nu är jag i "Beta" stadiet med mitt lilla projekt :D
Har fått det att fungera som jag vill
D1:an kopplar sig mot wifi och när man "surfar" till den med ddns adressen så visas temperaturen i webbläsaren.
Och det fungerar även utifrån.

Återstår att rensa bort fahrenheit och annat skräp från koden, men jag är överlycklig att jag kommit så långt med mina usla kunskaper :roll:
larky, jag pm:ar addressen till dig, om du har tid så kolla att det funkar.

Nu återstår att maila till supporten att de ändrar rapporteringssätt.

Thief
Gillar hemautomation
Inlägg: 37
Blev medlem: 19 dec 2017, 08:55
Ort: Haparanda
Kontakt:

Re: DIY Temperatur reporter (bilder)

Inlägg av Thief » 07 apr 2018, 22:07

Då är allt klart, och loggningen på temperatur.nu har fungerat felfritt i redan 8 timmar :D
Stort tack till larky för hans hjälp!

Delarna: Wemos D1 Mini Pro https://www.m.nu/esp8266/d1-mini-pro (går absolut bra med "ej pro" versionen)
Var bara först rädd att Wemosen har kort räckvidd på wifit, (möjlighet till extern antenn på pro-versionen) men nej den slår min 7000kr mobil på räckvidd!

DS18B20 sensor https://www.m.nu/komponenter-1-wire/1wi ... or-ds18b20
Lådorna är bara billiga kopplingsdosor för ute bruk.

Wemosen är verkligen toppen att använda till liknande projekt.
När den är programmerad så är den helt underhållsfri. Plugga in strömsladden så är det klart.
Den ansluter till wifi automatiskt, återuppkopplar om nätet går ner.
Samma om strömmen går.

Den som vill komma igång med Wemos D1 rekommenderar jag använda programmet Arduino IDE.
https://wiki.wemos.cc/tutorials:get_sta ... in_arduino

Bifogar lite bilder från "mini" projektet..
1.JPG
Valde att löda motståndet under kortet då det var enklast så.
2.JPG
Hittade en gammal telefonsladd som funkar bra eftersom kabellängden är bara 1.5 meter.
DS18B20 lödd fast, och lite krympslang på.
3.JPG
D4 pinnen tänkte jag välja först eftersom den ligger närmast jord och +5V och skulle då kunna använt en kontakt från en gammal datorfläkt. men sen hävdar vissa att den pinnen redan har 10K pull-up resistor inbyggt och kan skapa problem, så det blev D3 istället.
4.JPG
Färdigt! Det var ett självklart val att ha sensorn och Wemosen i separata lådor eftersom all elektronik genererar värme och någon extra värme vill man ju inte ha om man ska mäta utetemperatur. Efteråt borrade jag ca. 30st 2mm hål i sensorboxen på sidorna och undertill för bättre luftcirkulation.

Thief
Gillar hemautomation
Inlägg: 37
Blev medlem: 19 dec 2017, 08:55
Ort: Haparanda
Kontakt:

Re: DIY Temperatur reporter (bilder)

Inlägg av Thief » 22 dec 2018, 12:09

Här är koden till reportern:
Fyll i wifi SSID och lösenord
Glöm inte att ändra GPIO pin i koden om du inte använder samma som jag, D3 (se bild i tidigare inlägg).
Ip adressen får den automatiskt av din routers dhcp.

Kod: Markera allt

#include <ESP8266WiFi.h>
#include <OneWire.h>
#include <DallasTemperature.h>

const char* ssid = "DITT WIFI NAMN HIT";
const char* password = "DITT WIFI LÖSENORD HIT";

// Data wire is plugged into pin D3 on the ESP8266 12-E - GPIO 0
#define ONE_WIRE_BUS 0

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature DS18B20(&oneWire);
char temperatureCString[7];

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(8020);

// only runs once on boot
void setup() {
    // Initializing serial port for debugging purposes
    Serial.begin(115200);
    delay(10);

    DS18B20.begin(); // IC Default 9 bit. If you have troubles consider upping it 12. Ups the delay giving the IC more time to process the temperature measurement

    // 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");

    // Starting the web server
    server.begin();
    Serial.println("Web server running. Waiting for the ESP IP...");
    delay(10000);

    // Print the IP address
    Serial.println(WiFi.localIP());
}

void getTemperature() {
    float tempC;
    do {
        DS18B20.requestTemperatures();
        tempC = DS18B20.getTempCByIndex(0);
        dtostrf(tempC, 2, 2, temperatureCString);
        delay(100);
    } while (tempC == 85.0 || tempC == (-127.0));
}

// runs over and over again
void loop() {
    // Listenning for new clients
    WiFiClient client = server.available();
    if (client) {
        Serial.println("New client");
        // bolean to locate when the http request ends
        boolean blank_line = true;
        while (client.connected()) {
            if (client.available()) {
                char c = client.read();

                if (c == '\n' && blank_line) {
                    getTemperature();
                    client.println("HTTP/1.1 200 OK");
                    client.println("Content-Type: text/html");
                    client.println("Connection: close");
                    client.println();
                    // your actual web page that displays temperature
                    client.println("<!DOCTYPE HTML>");
                    client.println("<html>");
                    client.println("<head></head><body><h1>");
                    client.println(temperatureCString);
                    client.println("</body></html>");

                    break;
                }
                if (c == '\n') {
                    // when starts reading a new line
                    blank_line = true;
                }
                else if (c != '\r') {
                    // when finds a character on the current line
                    blank_line = false;
                }
            }
        }
        // closing the client connection
        delay(1);
        client.stop();
        Serial.println("Client disconnected.");
    }
}

Skriv svar