Actibus Skrevet 27. august 2016 Skrevet 27. august 2016 Fikk min ESP8266 NodeMCU dev kit i posten igår, tanken var å prøve den med Arduino plugin, som er men t å få støtte for den etterhvert. Jeg skal bruke den hovedsaklig for temp/fukt måling med DHT11 følere, etter litt inspirasjon fra Tasker plugin tråden her på forumet, hvor man kan styre ting via JSON tenkte jeg at det burde jo gå ann å bruke for å overføre målinger fra ESP8266 også. Kan godt hende det finnes en lettere måte eller mer elegant måte, men jeg syntes nå det var enkelt og greit å få til Modifisert scriptet fra denne siden http://randomnerdtutorials.com/esp8266-dht11dht22-temperature-and-humidity-web-server-with-arduino-ide/ /********* Rui Santos Complete project details at http://randomnerdtutorials.com *********/ // Including the ESP8266 WiFi library #include <ESP8266WiFi.h> #include "DHT.h" #include <ESP8266HTTPClient.h> // Uncomment one of the lines below for whatever DHT sensor type you're using! #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT21 // DHT 21 (AM2301) //#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 // Replace with your network details const char* ssid = "DIN SSID"; const char* password = "DITT PASSORD"; String lastTemp; String lastFukt; IPAddress ip(192, 168, 1, 203); IPAddress subnet(255, 255, 255, 0); IPAddress gateway(192, 168, 1, 1); // DHT Sensor const int DHTPin = 5; // Initialize DHT sensor. DHT dht(DHTPin, DHTTYPE); // Temporary variables static char celsiusTemp[7]; static char fahrenheitTemp[7]; static char humidityTemp[7]; // only runs once on boot void setup() { // Initializing serial port for debugging purposes Serial.begin(115200); delay(10); dht.begin(); // Connecting to WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.config(ip, gateway, subnet); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); String s = WiFi.macAddress(); Serial.println(s); Serial.println(WiFi.macAddress()); // Printing the ESP IP address Serial.println(WiFi.localIP()); } // runs over and over again void loop() { float temp = dht.readTemperature(); float fukt = dht.readHumidity(); String stringFukt = String(fukt); String stringTemp = String(temp); HTTPClient http; HTTPClient httpFukt; if(stringTemp != lastTemp) { Serial.println("Temp endret"); Serial.println("Temp er:"+stringTemp+" Forrige var:"+lastTemp); http.begin("http://192.168.1.61/JSON?request=controldevicebyvalue&ref=85&value="+stringTemp); int httpCode = http.GET(); //http.writeToStream(&Serial); http.end(); lastTemp = stringTemp; delay(3000); } if(stringFukt != lastFukt) { Serial.println("Fukt endret"); Serial.println("Fukt er:"+stringFukt+"Forrige var:"+lastFukt); httpFukt.begin("http://192.168.1.61/JSON?request=controldevicebyvalue&ref=86&value="+stringFukt); int httpCodeFukt = httpFukt.GET(); //httpFukt.writeToStream(&Serial); httpFukt.end(); lastFukt = stringFukt; delay(3000); } delay(30000); //Venter 30 sek før ny måling } Laget 2 nye devices i HS3, satt de som dimmbare og satt value range til mellom 0-100 (alle følerne står inne og vil ikke oppleve minusgrader), regner med det ikke er noe problem å sette de til minus ved behov(?) 1 Siter
GeneralVirus Skrevet 27. august 2016 Skrevet 27. august 2016 Hvis du tar en titt i denne tråden på HS forumet finner du en måte å få ESP8266 å snakke med Arduino plugin. Siter
Actibus Skrevet 27. august 2016 Forfatter Skrevet 27. august 2016 Har sett den der ja, begynte først å prøve litt med den, men syntes det ble så mye kode å styre med, spesielt når det antagelig ikke vil fungere uansett når han som lager Arduino pluginen får utviklet den funksjonaliteten Siter
Moskus Skrevet 28. august 2016 Skrevet 28. august 2016 20 timer siden, Actibus skrev: men syntes det ble så mye kode å styre med ... erm.. unnskyld, men "hæ"? Det er jo det som er så fint med Arduino-plugin'en: Det er særdeles lite kode å styre med. Siter
Actibus Skrevet 28. august 2016 Forfatter Skrevet 28. august 2016 Ja, men den støtter jo ikke denne modulen ennå, da må man skrive om deler av Arduino koden selv. For bruk på Arduino er plugin genial Siter
GeneralVirus Skrevet 28. august 2016 Skrevet 28. august 2016 3 timer siden, Actibus skrev: da må man skrive om deler av Arduino koden selv. Bruker selv NodeMCU med arduino plugin, den linken jeg postet har en sketch man bruker for å få ESP8266 til å funke med Arduino plugin isteden for den som er med Arduino plugin. Siter
Moskus Skrevet 29. august 2016 Skrevet 29. august 2016 ... .ino-filen ligger i "HomeSeer.zip"-vedlegget i den øverste posten... Siter
Actibus Skrevet 29. august 2016 Forfatter Skrevet 29. august 2016 (endret) Jeg har som skrevet over sett på den filen som ligger i linken, men syntes det var lite oversiktelig å se ha som måtte endres ifht filen jeg har selv, spesielt da jeg bruker API oppsettet. Hadde nok funnet ut av det, men orket ikke styre med det, iogmed at den blir offisielt støttet av Arduino pluginen etterhvert. Og for de som ikke har kjøpt arduino pluginen, så funker koden min uten Endret 29. august 2016 av Actibus 1 Siter
Moskus Skrevet 29. august 2016 Skrevet 29. august 2016 Det er bare litt overraskende at det oppleves som lettere å skrive sitt eget script, enn å endre 4-5 linjer i et ferdig oppsett, men gjør det som fungerer for deg. FYI, disse linjene endres (litt ned i filen): IPAddress ip(192, 168, 1, 195); //IP entered in HS config. IPAddress gateway(192, 168, 1, 1); //Gateway const unsigned int localPort = 9000; //port entered in HS config. IPAddress HomeseerIP(192, 168, 1, 178); //Homeseer IP address Siter
Actibus Skrevet 29. august 2016 Forfatter Skrevet 29. august 2016 (endret) Det er jo mye mer som må endres, selvfølgelig for å bruke akkurat det scriptet han har postet er det bare de linjene som må endres, men for at jeg skal kunne bruke mitt eget script som jeg har i en eksisterende ino fil idag, så må jeg jo legge inn all kode som hører til ESP8266 fra hans Homeseer.ino script og inn i mitt, og siden han ikke har kommentert ut alle linjene han har endret/lagt til/fjernet så ble det mer jobb, syntes nå jeg. Og hans .ino fil er jo basert på Normal og ikke API (valget man gjør når man lager nytt board i pluginen), jeg kjører API fordi jeg har custom kode som kjører på arduinoen og sender videre til HS, da blir den enda mer forvirrende at det ikke er kommentert inn hva som er lagt til for å bruke ESP8266. Endret 29. august 2016 av Actibus Siter
Moskus Skrevet 29. august 2016 Skrevet 29. august 2016 Ja, OK. Jeg hadde nok bare hentet verdien inn fra ESP8266, og behandlet den der for å unngå å bruke API, men alt er mulig. Det er jo det som er så greit med Arduinoer. ... og som du også fint demonstrerer er det jo veldig enkelt å bruke JSON-interfacet også. Siter
ZoRaC Skrevet 19. mars 2017 Skrevet 19. mars 2017 (endret) Jeg prøvde meg på dette, men det var jaggu ikke enkelt! Slet med at jeg ikke fikk noe output i console, ser ut til at den må ligge åpen når man sender sketchen? Jeg slet med å bruke rett PIN, jeg brukte 4 (som jeg trodde var 6), men det er visst feil - anbefales å bruke f.eks D6, da den konstanten "oversettes" til intern PIN-nummer basert på valgt board. I tillegg har jeg jo TLS-sertifikat og passord på min HS, så da kunne ikke HTTPClient brukes, måtte bruke WifiClientSecure. Oppå det hele så hadde jeg ingen ciphers som NodeMCU støtter på serveren, så jeg måtte endre NGINX-oppsettet for at det skulle fungere. EDIT: Optimaliserte koden litt og la til "protothreading" slik at den bedre kan utføre "parallelle" oppgaver. Kanskje ikke så stor greie akkurat her, men om man legger til flere sensorer, så kan jo det bli viktig. // http://platformio.org/lib/show/721/TaskScheduler/examples #include <TaskScheduler.h> void checkDHT(); void checkWifi(); Task tskCheckDHT(30000, TASK_FOREVER, &checkDHT); Task tskCheckWifi(10000, TASK_FOREVER, &checkWifi); Scheduler runner; // Including the ESP8266 WiFi library #include <ESP8266WiFi.h> #include "DHT.h" #include <WiFiClientSecure.h> // Use WiFiClientSecure class to create TLS connection // https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/examples/HTTPSRequest/HTTPSRequest.ino WiFiClientSecure client; // Uncomment one of the lines below for whatever DHT sensor type you're using! //#define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT21 // DHT 21 (AM2301) #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 // Replace with your network details const char* ssid = "..."; const char* password = "..."; String lastTemperature; String lastHumidity; IPAddress ip(192, 168, 1, 3); IPAddress subnet(255, 255, 255, 0); IPAddress gateway(192, 168, 1, 1); IPAddress dns(192, 168, 1, 2); const char* host = "HS3"; const int httpsPort = 443; // DHT Sensor const int DHTPin = D6; // Initialize DHT sensor. DHT dht(DHTPin, DHTTYPE); void checkDHT() { Serial.println("Sjekker DHT"); String strHumidity = String((int)(dht.readHumidity() + 0.5)); String strTemperature = String(dht.readTemperature()); if (strTemperature != lastTemperature) { Serial.println("Temp er:" + strTemperature + " - Forrige var:" + lastTemperature); sendDataToHS(520, strTemperature); lastTemperature = strTemperature; } if (strHumidity != lastHumidity) { Serial.println("Fukt er:" + strHumidity + " - Forrige var:" + lastHumidity); sendDataToHS(521, strHumidity); lastHumidity = strHumidity; } Serial.println("END: Sjekker DHT"); } void checkWifi() { Serial.println("Sjekker wifi"); if (WiFi.status() != WL_CONNECTED) { Serial.println("Mistet wifi, reconnect..."); WiFi.begin(ssid, password); } while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println("END: Sjekker wifi"); } // only runs once on boot void setup() { // Initializing serial port for debugging purposes Serial.begin(115200); delay(10); dht.begin(); // Connecting to WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.config(ip, gateway, subnet, dns); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println(WiFi.macAddress()); // Printing the ESP IP address Serial.println(WiFi.localIP()); configTime(3 * 3600, 3600, "pool.ntp.org", "time.nist.gov"); runner.init(); runner.addTask(tskCheckDHT); runner.addTask(tskCheckWifi); tskCheckDHT.enable(); tskCheckWifi.enable(); } // runs over and over again void loop() { runner.execute(); } bool sendDataToHS(int dvRef, String data) { if (!client.connect(host, httpsPort)) { Serial.println("Connection failed"); return false; } String url = "/JSON?request=controldevicebyvalue&ref=" + String(dvRef) + "&value=" + String(data); client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Authorization: Basic BASE64-STRENG-HER\r\n" + "User-Agent: ESP8266\r\n" + "Connection: close\r\n\r\n"); Serial.println("Request sent (device " + String(dvRef) + ", data " + String(data) + ")"); while (client.connected()) { String line = client.readStringUntil('\n'); if (line == "\r") { Serial.println("headers received"); return true; break; } } return false; } Endret 22. mars 2017 av ZoRaC Siter
ZoRaC Skrevet 22. mars 2017 Skrevet 22. mars 2017 Viste seg at koden min hadde havnet på bare en linje (uten at noen har sagt i fra, hmm...). Har redigert innlegget over nå. Siter
bjornepappa Skrevet 25. mai 2018 Skrevet 25. mai 2018 Rotar opp igjen denne gamle tråden eg... Har fått tak i ein ESP8266 med DHT11 temp- og fuktsensor, konfigurert denne med tilsvarande kode som du har brukt og fått den på nettverket. Alt vel så langt. Men slit med å konfigurere devices tilsvarande som du har gjort. Har du litt meir detaljar om desse, @ZoRaC? Siter
ZoRaC Skrevet 25. mai 2018 Skrevet 25. mai 2018 2 minutter siden, bjornepappa skrev: Men slit med å konfigurere devices tilsvarande som du har gjort. Har du litt meir detaljar om desse, @ZoRaC? Det er bare å gå på «device view» og lage to nye devicer med den grønne plussen oppe til høyre - en for temp og en for fukt. Legg inn at den skal akseptere verdier fra -50 til 50 og fra 0 til 100. Bytt så ut deviceIDene i scriptet mitt med dine. Siter
bjornepappa Skrevet 25. mai 2018 Skrevet 25. mai 2018 Takk! Skal prøve i morra! Er det der du har brukt 85 og 86 som er deviceID? Siter
ZoRaC Skrevet 25. mai 2018 Skrevet 25. mai 2018 8 minutter siden, bjornepappa skrev: Er det der du har brukt 85 og 86 som er deviceID? I den første koden, ja. Siter
bjornepappa Skrevet 25. mai 2018 Skrevet 25. mai 2018 Og tilsvarande i den andre er 520 og 521? Skjønnar eg det rett at du ikkje skal legge inn IP eller andre data til HS-server? Siter
ZoRaC Skrevet 25. mai 2018 Skrevet 25. mai 2018 16 minutter siden, bjornepappa skrev: Og tilsvarande i den andre er 520 og 521? Jepp. 16 minutter siden, bjornepappa skrev: Skjønnar eg det rett at du ikkje skal legge inn IP eller andre data til HS-server? På den første koden til @Actibus så står IPen på samme linje som devID. I min kode legger du det in i «host»-variabelen. Merk an min versjon bruker HTTPS og brukernavn/passord til HS. Hvis du ikke har det er det nok enklere å bruke @Actibus sin versjon. Siter
bjornepappa Skrevet 25. mai 2018 Skrevet 25. mai 2018 Takk for god tilbakemelding, hadde ikkje heilt fått med meg at de var to som hadde lagt inn kode... ? Uansett skal dette prøvest, blir nok kanskje @Actibus sin kode i første omgang. Siter
bjornepappa Skrevet 26. mai 2018 Skrevet 26. mai 2018 Trur eg har konfigurert i HomeSeer no, men det er noko feil. Får denne feilmeldingen gang på gang i HS-loggen: mai-26 07:46:01 Warning JSON controldevicebyvalue caused an error: Inndatastrengen hadde ugyldig format. Sånn ser devicane ut i HS, er det noko åpenbart feil? Siter
ZoRaC Skrevet 26. mai 2018 Skrevet 26. mai 2018 3 minutter siden, bjornepappa skrev: Trur eg har konfigurert i HomeSeer no, men det er noko feil. Får denne feilmeldingen gang på gang i HS-loggen: mai-26 07:46:01 Warning JSON controldevicebyvalue caused an error: Inndatastrengen hadde ugyldig format. Har du oppe consolet i Aruinoe IDE og ser at den gir riktige verdier? Hvis den ikke får kontakt med DHTen så vil den lese verdiene som «NaN» og det godtar ikke HS som verdi. Siter
ZoRaC Skrevet 26. mai 2018 Skrevet 26. mai 2018 2 minutter siden, bjornepappa skrev: Ja, den gir verdier der i Arduino... Får du ingen verdier over til HS? Jeg får også slike i loggen med jevne mellomrom, for det virker som den av og til får NaN-verdier. Siter
bjornepappa Skrevet 26. mai 2018 Skrevet 26. mai 2018 Ingen verdiar til HS dessverre, kun samme feilmelding om og om igjen kvar gang det blir sendt data. Sånn ser det ut i Arduino, som du nevner er det ein del "nan" inni mellom, men stort sett er det gyldige verdiar for både temp og fukt. Siter
Anbefalte innlegg
Bli med i samtalen
Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.