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.
Många guider finner också på vår blogg: https://blog.m.nu/
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:

DIY Temperatur reporter (bilder)

Inlägg av Thief »

Hej!
Har lust att göra en egen temperaturrapporterare, typ som: https://www.m.nu/paket-temperatur-rh/te ... mperaturnu
Tanken är att den ska vara billig i inköp och inte vara för avancerad, lite lödning har jag inget emot.
Bra om den kunde fungera på wifi, men trådat går bra om det blir för svårt.
Sen ska den givetvis kunna rapportera till temperatur.nu
Vad skulle kunna vara lösningen som kräver minst kunskap om programmering? Kanske finns nåt halvfärdigt?

Tar gärna emot massor med tips om hårdvara/mjukvara, sensorer mm.

(edit: bilder på projektet på sida 2 av tråden)
Senast redigerad av Thief den 07 apr 2018, 22:15, redigerad totalt 2 gång.
larky
Moderator
Inlägg: 1166
Blev medlem: 01 feb 2008, 12:21
Ort: Skellefteå
Kontakt:

Re: DIY Temperatur reporter

Inlägg av larky »

ESP8266/NodeMCU och liknande ska nog inte vara så svårt att få till, då går det att få wifi.

Titta på olika alternativ för rapportering
http://wiki.temperatur.nu/index.php/Rap ... peratur.nu

Rapporteringsurl tror jag är enklast, hårdkoda in en, eller två för två sensorer, adreser som besöks med jämna mellanrum, typ
www. temperatur .nu/rapportera.php?hash=1130a550a5e619d962e0f3da4755d4e4&t=12.2

DS18b20 som sensor, lätt att läsa av.

Jag har satt ihop ett par NodeMCU med temperaturmätning men då skickar jag till Thingspeak.

Ta en titt på koden som innehåller några bra grejer, typ ett wifibibliotek som startar i AP-läge så att man väljer via telefonen vilket nät man vill koppla sig till, och en del onödigt i form av ultraljudssensor och ett försök att sortera ultraljudsmätningar för att kolla snödjup;

Givarnas adresser är hårdkodade in i programmet för att kunna skilja på dem.

http://karlander.net/temperatur/marktemperatur.html

Kod: Markera allt

//Lars Karlander 2016
#include <ESP8266WiFi.h>  //https://github.com/esp8266/Arduino
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>    //https://github.com/tzapu/WiFiManager
#include "ThingSpeak.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#include <NewPing.h>
#define TRIGGER_PIN  D1  // Pin tied to trigger pin on the ultrasonic sensor.
#define ECHO_PIN     D2  //Pin tied to echo pin on the ultrasonic sensor.
#define MAX_DISTANCE 350 // Maximum distance we want t ping for (in cm).
#define ONE_WIRE_BUS D4 // 1-wire data pin for temp sensors

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); 
// NewPing setup of pins and maximum distance.
#define CNT 921 // Array for averaging sonar value

int d[CNT];
unsigned long looptime;

// Assign the addresses of 1-Wire temp sensors, max 6 sensors, 8 if no rssi or sonar.
// Missing sensor will give -127.00C reading
DeviceAddress Temp1 = {  0x28, 0x44, 0xC3, 0xAF, 0x06, 0x00, 0x00, 0x39 }; //-10cm
DeviceAddress Temp2 = {  0x28, 0x70, 0x18, 0xB1, 0x06, 0x00, 0x00, 0x0B }; //-30cm
DeviceAddress Temp3 = {  0x28, 0x49, 0xA9, 0xAF, 0x06, 0x00, 0x00, 0xDF }; //-60cm
DeviceAddress Temp4 = {  0x28, 0xA5, 0x9F, 0xAF, 0x06, 0x00, 0x00, 0x93 }; //-100cm
DeviceAddress Temp5 = {  0x28, 0x57, 0xEB, 0xAF, 0x06, 0x00, 0x00, 0xFD }; //-150cm
DeviceAddress Temp6 = {  0x28, 0x2D, 0xB0, 0xB0, 0x06, 0x00, 0x00, 0xED }; //-200cm
DeviceAddress Temp7 = {  0x28, 0x0E, 0xDA, 0xB0, 0x06, 0x00, 0x00, 0xAE };

unsigned long sleeptime =251000; //milliseconds
unsigned long myChannelNumber = 75712;
const char * myWriteAPIKey = "XXXXXXXXXXXXX";
         
WiFiClient  client;
          
void setup() {
Serial.begin(9600);
Serial.println("Startar...");
//WiFiManager
//Local intialization. Once its business is done, there is no need to keep it around
WiFiManager wifiManager;
//reset saved settings
//wifiManager.resetSettings();
//set custom ip for portal
//wifiManager.setAPConfig(IPAddress(10,0,1,1),
IPAddress(10,0,1,1), IPAddress(255,255,255,0));
//fetches ssid and pass from eeprom and tries to connect
//if it does not connect it starts an access point with the specified name
       
wifiManager.autoConnect("NodeMCU-01-wifi-setup");
  
//if you get here you have connected to the WiFi
Serial.println("connected...yeey :)");
sensors.begin();
// set the resolution
sensors.setResolution(Temp1, 12);
sensors.setResolution(Temp2, 12);
sensors.setResolution(Temp3, 12);
sensors.setResolution(Temp4, 12);
sensors.setResolution(Temp5, 12);
sensors.setResolution(Temp6, 12);

ThingSpeak.begin(client);
}

void loop() {
looptime=millis(); // Kolla tiden för ett varv
int i;
long m;
long m2; //mean value from middle of array
int loopcount;
m2=0;
loopcount=0;
Serial.println("Start pinging!");
for(i=0; i<CNT; i++)
                { 

                 d[i] = (sonar.ping_cm());

                 delay (40);
                 loopcount=loopcount+1;
                 if (loopcount==40) {
                  Serial.print((i*100)/CNT);
                  Serial.print("% ");
                  loopcount=0;
                 } //end if 921 loops
        }  

Serial.println(" ");
Serial.println("Done pinging, start sorting");
sort(d,CNT);
Serial.println("Done sorting");
for(i=900; i<CNT-10; i++)
     {
                 m2=m2+d[i];
                 // Serial.println(d[i]);
        } 
m2=m2/(CNT-910);  

//Print Temperatures
Serial.println("Getting temperatures...");
sensors.requestTemperatures();
float t1 = sensors.getTempC(Temp1);
delay(50);
float t2 = sensors.getTempC(Temp2);
delay(50);
float t3 = sensors.getTempC(Temp3);
delay(50);
float t4 = sensors.getTempC(Temp4);
delay(50);
float t5 = sensors.getTempC(Temp5);
delay(50);
float t6 = sensors.getTempC(Temp6); 
ThingSpeak.setField(1,t1); 
ThingSpeak.setField(2,t2);
ThingSpeak.setField(3,t3); 
ThingSpeak.setField(4,t4);
ThingSpeak.setField(5,t5); 
ThingSpeak.setField(6,t6);
ThingSpeak.setField(7,m2); //average sonar reading in field 7

Serial.print("Temp 1 is: "); 
Serial.print(t1);
Serial.println("C: ");
Serial.print("Temp 2 is: "); 
Serial.print(t2);
Serial.println("C: ");
Serial.print("Temp 3 is: "); 
Serial.print(t3);
Serial.println("C: ");
Serial.print("Temp 4 is: "); 
Serial.print(t4);
Serial.println("C: ");
Serial.print("Temp 5 is: "); 
Serial.print(t5);
Serial.println("C: ");
Serial.print("Temp 6 is: "); 
Serial.print(t6);
Serial.println("C: ");
Serial.println("");
Serial.print("Medel2, values cut:");
Serial.println(m2);    
// print your WiFi IP address:
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print("RSSI:");
Serial.println(rssi);
ThingSpeak.setField(8,rssi); 

// Write the fields that you've set all at once.
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);  
delay(sleeptime);
Serial.print("Looptime last loop ");
Serial.print((millis()-looptime)/1000);
Serial.print(" Seconds, and of that was ");
Serial.print(sleeptime/1000);
Serial.println(" seconds sleeptime, the rest pingtime");
 }
void sort(int a[], int size) {
    for(int i=0; i<(size-1); i++) {
                   for(int o=0;
              o<(size-(i+1)); o++) {  
              if(a[o] > a[o+1]) {           
              int t = a[o];                
              a[o] = a[o+1];             
              a[o+1] = t;         
        }
      }
   }
 }
Thief
Gillar hemautomation
Inlägg: 37
Blev medlem: 19 dec 2017, 08:55
Ort: Haparanda
Kontakt:

Re: DIY Temperatur reporter

Inlägg av Thief »

Ok, tack för ditt svar.. Vad sägs om Arduino Uno R3 + Wemos D1 mini Pro + DS18B20+ (eller DHT22?)
Eller behövs Arduinon i detta fall alls?

Observera att jag är en total nybörjare, så jag vet inte ens om ovanstående delar går att använda ihop :lol: :lol:

Men jag har bestämt mig för att lära så någonstans måste man börja :roll:
larky
Moderator
Inlägg: 1166
Blev medlem: 01 feb 2008, 12:21
Ort: Skellefteå
Kontakt:

Re: DIY Temperatur reporter

Inlägg av larky »

Webmos D1 mini pro och en eller två DS18B20+ räcker bra.

Förslag på arbetsgång;
Få Webmos att funka med Arduino programvara i datorn, testa att få lysdioden att blinka osv.

Ladda in någon av demoprogrammen för DS18B20, skriv av serienumren.

Tjuvkika på mitt program ovan och ta bort väldigt mycket som inte behövs, skriv ut temperaturer på serieporten.

Gå in på https://temperatur.nu/nystation/, välj rapporteringsurl, klistra in i ditt program.

Få till att Webmos försöker öppna adressen med rapporteringen.

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

Re: DIY Temperatur reporter

Inlägg av Thief »

Låter extremt spännande :shock:
Ska beställa grejerna genast.
Återkommer säkert när jag kör fast :lol:

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

Re: DIY Temperatur reporter

Inlägg av Thief »

Jaha, då har man kört fast, som ja misstänkte :lol:

Allt annat är färdigt, förutom kodningen.
Har kommit så långt att jag fick led:en i wemos att blinka med en exempelkod.

Jag förstår att all kod som behövs ska uploadas till wemosen i en enda kodfil. (använder Arduino IDE)
Men hur i hela friden sätter jag ihop koderna som ska göra allt? Menar Wifi, temp loggning mm som behövs.

Det är väl några tecken som säger när något kommando börjar/slutar, så man kan väl inte kopiera och klistra flera olika kommandon bara så där?
Och var hittar man all denna kod? och hur vet man att det är rätt? för själv kan jag noll!

Om någon vänlig själ kunde hjälpa mig en bit på vägen vore jag för evigt tacksam.
larky
Moderator
Inlägg: 1166
Blev medlem: 01 feb 2008, 12:21
Ort: Skellefteå
Kontakt:

Re: DIY Temperatur reporter

Inlägg av larky »

Jag är en usel klipp-och-klistra programmerare men titta på mitt exempel ovan, där är allt med.
Generellt så är arduinoprogram uppbyggda med en massa information i början för att få igång allt, varaiabeldeklarationer, bibliotek, pinnar och sånt, sen en loop som körs om och om igen.

Nästa steg för dit tycker jag är att få demoprogrammen för tempgivaren att fungera, och då tror jag att du behöver ladda hem något extra bibliotek för onewire.

Gå till Skiss, inkludera bibliotek, hantera bibliotek. Sök efter "onewire", ladda in det som bara heter "OneWire"

Nu ska det finnas ett exempel under Fil, Exempel, Onewire DS18x20_Temperature.
Ändra pinnen i exemplet till det du du har, kanske D3 beroende på hur du kopplat istället för 10, kör exemplet.
Det borde ge dig temperaturer under verktyg, Seriell monitor. (kolla att hastigheten är samma som i exemplet, 9600)

wifimanager by tzapu finns också som bibliotek att ladda hem via samma meny, med exempel.

Om du ska få mitt kodexempel att funka behövs det flera bibliotek, för ultraljudsgivaren (newping), wifi (ESP8266WiFi) och (wifimanager), thingspeak och onewire men det är lite svårt att få till direkt så jag tycker att du ska ta det ett steg i taget genom att läsa in exempelkoder från menyn, och sen när varje steg för sig fungerar måste man klippa och klistra alla olika delar till ett program.

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

Re: DIY Temperatur reporter

Inlägg av Thief »

Ok, nu förstår jag genast lite bättre.
Alltså ska man hämta ett "library" som någon skrivit färdigt, och sen inkludera det i sketchen.
Synd att man arbetar, vill testa genast :D

En liten undring...
Om jag skriver detta i sketchen:

Kod: Markera allt

#include <ESP8266WiFi.h>
Så om jag förstår det rätt så är detta wifi "biblioteket" som inkluderas när koden körs..
Men var skriver jag mitt wifi ssid och password?
larky
Moderator
Inlägg: 1166
Blev medlem: 01 feb 2008, 12:21
Ort: Skellefteå
Kontakt:

Re: DIY Temperatur reporter

Inlägg av larky »

Om du går på skiss, inkludera bibliotek så är det det precis det som görs, texten #include <onewire.h> klistras in i koden.

Det fina med just det wifibiblioteket är att man inte skriver in det, första gången du startar blir det en egen accesspunkt som heter något som står i koden, "NodeMCU-01-wifi-setup", anslut till den med telefonen så kommer det en meny där du får välja mellan vilka tillgängliga nätverk som finns, och där skriva in koden.
Det finns absolut wifibibliotek där man i koden skriver in ssid och lösenord men jag gillar denna variant bättre.
Thief
Gillar hemautomation
Inlägg: 37
Blev medlem: 19 dec 2017, 08:55
Ort: Haparanda
Kontakt:

Re: DIY Temperatur reporter

Inlägg av Thief »

Ok, efter mycket :evil: :twisted: :evil: så är man nästan färdig..
Har lyckats få wifi och temperaturvisningen att fungera. (tror jag)

Nu återstår det att få värdena till temperatur.nu

Jag valde använda samma wifi sketch som du larky,
så du kanske vet vad som är enklast att göra näst?
ddns? (föredrar)
Thingspeak?

Det gick fint att få den att ansluta till mitt wifi med mobilen och fick upp "connected....yeey" på serial monitor,
men sen går det väl inte logga in i den med webbläsare och lokal ip?

Om man ska använda ddns så ska man väl välja "rapporteringssätt" / "sida/fil på nätet" ?
Hur gör man det eftersom jag vid intresseanmälan valde "rapporterings url" ? (https://temperatur.nu/vuono.html)
larky
Moderator
Inlägg: 1166
Blev medlem: 01 feb 2008, 12:21
Ort: Skellefteå
Kontakt:

Re: DIY Temperatur reporter

Inlägg av larky »

Precis, accesspunkten fungerar bara när den inte har kontakt med omvärden.

Att skriva till en thingspeak-kanal är inte så svårt och är nog bra som en test att du ser att det fungerar med en eller flera tempsensorer över lite tid.
Men för att rapportera till temperatur.nu borde rapporteringsurl vara rätt.
Du ska egentligen bara få till att din D1 ska besöka en websida, typ
www. temperatur .nu/rapportera.php?hash=1130a550a5e619d962e0f3da4755d4e4&t=12.2
och sen är allt kart.
För att göra det tror jag att det är ett bibliotek som heter
https://www.arduino.cc/en/Tutorial/HttpClient
som ska användas och göra en HTTP get med rätt url.
Thief
Gillar hemautomation
Inlägg: 37
Blev medlem: 19 dec 2017, 08:55
Ort: Haparanda
Kontakt:

Re: DIY Temperatur reporter

Inlägg av Thief »

Men går det att fixa med ddns?
Vad är rätt rapporteringssätt isf?
larky
Moderator
Inlägg: 1166
Blev medlem: 01 feb 2008, 12:21
Ort: Skellefteå
Kontakt:

Re: DIY Temperatur reporter

Inlägg av larky »

ddns och att du skapar en på D1 lokal websida som bara skriver ut temperaturerna och som hämtas från temperatur.nu med typ kalleanka.dyndns.org:81 är givetvis möjligt.
Då väljer du "sida/fil på nätet" och skriver in adressen i fältet under på nystationsidan,
Thief
Gillar hemautomation
Inlägg: 37
Blev medlem: 19 dec 2017, 08:55
Ort: Haparanda
Kontakt:

Re: DIY Temperatur reporter

Inlägg av Thief »

Ok, ddns har jag egen.

Jag har redan anmält station ett tag sedan med rapp url, går det att byta till sida/fil ?
kan du göra det, eller jag själv?
larky
Moderator
Inlägg: 1166
Blev medlem: 01 feb 2008, 12:21
Ort: Skellefteå
Kontakt:

Re: DIY Temperatur reporter

Inlägg av larky »

Skicka ett mail till support@temperatur.nu med uppgifter om vilken station som ska ändras och till vad, och skicka det mailet från samma mailadress som stationen är registrerad på så löser det sig!
Skriv svar