ESP8266 + DS18B20

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
Braddock
Młodszy majsterkowicz
Posty: 3
Rejestracja: 1 lut 2016, 16:05

ESP8266 + DS18B20

Post autor: Braddock » 1 lut 2016, 16:32

Mam taki mały problem, a w zasadzie prośbę chciałbym napisać program który będzie odczytywał temperaturę z czujnika i na tej podstawie sterował przekaźnikiem jeżeli temperatura <27* to na pinie pojawia się stan niski jeżeli większa niż 27,30* to stan wysoki. Mam taki program, ale pod Arduino UNO i ostatnio zakupiłem moduł ESP8266 i chciałbym ten program przerobić żeby pracował pod ESP i mieć możliwość podglądu temperatury na stronie czyli jak odwołam się na adres który otrzyma moduł to wtedy zostanie wyświetlona aktualna temperatura. Nigdy nie miałem odczynienia z modułem ESP8266 i nie potrafię sobie poradzić z tym problemem. Miałbym prośbę do kogoś to przerobi lub napisze program który tak będzie działać (może z jakimś komentarzem).
Oczywiście programuje ESP8266 w środowisku Arduino.

Kod: Zaznacz cały

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

#define ONE_WIRE_BUS 2


OneWire oneWire(ONE_WIRE_BUS);


DallasTemperature sensors(&oneWire);
int i=0, opoznienie = 0;
unsigned long lastTemp = 0;
float temp=-100;

void setup(void)
{
  delay(500);
  Serial.begin(9600);
  Serial.println("Termostat Arduino UNO & DS18B20 [v0.2]");
  Serial.println("by Braddock");
  pinMode(6,OUTPUT);
  digitalWrite(6,HIGH);


  sensors.begin();
 
  sensors.setResolution(12);
  sensors.requestTemperatures();
  opoznienie = 750 / (1 << (12 - 12)); 
  lastTemp = millis(); 
}

void loop(void)
{ 

  if (millis() - lastTemp >= opoznienie)
  {
    temp = sensors.getTempCByIndex(0);
    sensors.requestTemperatures();
    opoznienie = 750 / (1 << (12 - 12));
    lastTemp = millis();

    Serial.println(sensors.getTempCByIndex(0));

  if(sensors.getTempCByIndex(0) < 27.00 && i == 0)
  {
    digitalWrite(6,LOW);
    i=1;
  }
  if(sensors.getTempCByIndex(0) > 27.30 && i == 1)
  {
    digitalWrite(6,HIGH);
    i=0;
  }
  }
 
}

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Braddock
Młodszy majsterkowicz
Posty: 3
Rejestracja: 1 lut 2016, 16:05

Re: ESP8266 + DS18B20

Post autor: Braddock » 1 lut 2016, 19:50

To nie był program kopiuj-wklej :D sam go napisałem na podstawie innego jakiś rok temu :D Ok udało mi się wymodzić coś takiego i działa. Mam tylko pytanie czy do tego modułu ESP można jakoś przypisać adres MAC albo odczytać z niego adres? Bo chciałbym do adresu przypisać IP. Bo mam w domu sporo urządzeń które się łączą po Wi-Fi, a ten moduł będzie codziennie resetowany i nie chciał bym żeby adres IP uległ zmianie. Oraz jeżeli ktoś widzi coś co można poprawić w tym kodzie to pisać.

Kod: Zaznacz cały

/*=================================
 *|   Termostat ESP8266&DS18B20   |
 *|           by Malina           |
 *|          Version 1.2          |
 *=================================
 */

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

const char *ssid = "......."; // SSID twojej sieci WiFi
const char *password = "........"; // Twoje hasło do WiFi

#define ONE_WIRE_BUS 0 // PIN termometru DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int opoznienie = 0;
boolean stan = 0;
unsigned long lastTemp = 0;

ESP8266WebServer server(80);
IPAddress ip(192,168,1,8);  // IP pod jakim będzie dostępna strona
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);

void handleRoot() {
  char temp[400];
  float temperatura = (sensors.getTempCByIndex(0));
  int temp1 = temperatura;
  int temp2 = (temperatura - temp1) * 100;
  
  snprintf(temp, 400,

"<html>\
  <head>\
    <title>Termostat</title>\
    <meta charset=\"utf-8\">\
    <style>\
      body { background-color: #000; font-family: Calibri; Color: #fff; text-align: center; }\
    </style>\
  </head>\
  <body>\
    <h1>Termostat ESP8266 & DS18B20</h1>\
    <p>by Malina&#169</p>\
    <h2>Temperatura: %d.%02d&#176C</h2>\
    <p>Grzałka: %d</p>\
    <p>0 - off, 1 - on</p>\
  </body>\
</html>",
    temp1, temp2, stan
  );
  server.send ( 200, "text/html", temp );
}

void setup(){
  WiFi.begin ( ssid,password);
  WiFi.config(ip, gateway, subnet);
  while ( WiFi.status() != WL_CONNECTED ) {
    delay ( 500 );
  }
  pinMode(2,OUTPUT);
  digitalWrite(2,HIGH);
  server.on("/", handleRoot);
  server.begin();
  sensors.begin();
  sensors.setWaitForConversion(false); // ustawiamy aby sensor pobierał dane w tle
  sensors.setResolution(12); // Rozdzielczość pomiaru
  sensors.requestTemperatures(); // żądanie odczytu
  opoznienie = 750 / (1 << (12 - 12)); 
  lastTemp = millis();
}

void loop(){
  server.handleClient();
  if (millis() - lastTemp >= opoznienie)
  {
    sensors.requestTemperatures();
    opoznienie = 2000 / (1 << (12 - 12));
    lastTemp = millis();

  if(sensors.getTempCByIndex(0) < 27.00 && stan == 0)
  {
    digitalWrite(2,LOW); // przekaźnik on
    stan = 1;
  }
  if(sensors.getTempCByIndex(0) > 27.30 && stan == 1)
  {
    digitalWrite(2,HIGH); // przekaźnik off
    stan = 0;
  }
  }
}
Ostatnio zmieniony 1 lut 2016, 21:45 przez Braddock, łącznie zmieniany 2 razy.
Braddock
Młodszy majsterkowicz
Posty: 3
Rejestracja: 1 lut 2016, 16:05

Re: ESP8266 + DS18B20

Post autor: Braddock » 1 lut 2016, 21:46

Dzięki wszystko ogarnięte i działa jak należy. Poprawiłem wyżej kod gdyby komuś się przydał.
kogan77
Młodszy majsterkowicz
Posty: 2
Rejestracja: 20 lut 2018, 11:36

Re: ESP8266 + DS18B20

Post autor: kogan77 » 21 lut 2018, 10:47

Witam wszystkich.

Jestem z tych zielonych w temacie.

Obecnie mam na warsztacie do zmontowanie wytrawiarkę do PCB.
Pomyślałem, że mógłbym ubogacić ją w ten właśnie układ jaki w postaci kodu zawarł kolega Braddock.
Podniosłem w programie temperaturę i podmieniłem dane IP do mojej sieci i resztę potrzebną do zalogowania.

Moduł ESP mam w wersji E12. Czujnik Dallasa podłączyłem do pinu D3 przez rezystor 4,7k równoległy do 3.3V. Całość mam zasilane tym napięciem.
Niestety wywala mi cały czas błąd kompilacji tego modułu.

Biblioteki są, moduł na odpowiednim porcie...... nie wiem, o co chodzi.
Proszę o pomoc.

P.S Jutro wkleję błędy jakie mi sie wyświetlają w Arduino, może to coś pomoże.

Kiepsko być zielonym :-(
kogan77
Młodszy majsterkowicz
Posty: 2
Rejestracja: 20 lut 2018, 11:36

Re: ESP8266 + DS18B20

Post autor: kogan77 » 23 lut 2018, 11:46

Przez ostatnie dni zmieniłem barwę z zielonej na żółtawą ( nadal żółciodup) w kwestii doświadczenia w tym temacie.

Po upgrade JAVA błędy zniknęły. Kod programu wklejany do Arduino z Word'a , a nie z notatnika też jest ok. Notatnik koduje w tle i dodaje jakieś znaki, co kończy się całą masa błędów - nie miałem o tym pojęcia.

W sekcji HEAD dodałem linijkę <meta http-equiv=\"refresh\" content=\"5\">\ , co by odświeżało stronkę co 5 s i nie trzeba było robić tego ręcznie.

Działa.

Popracuję troszkę nad wyglądem stronki.

A może jest tu magik, który pomoże w pojęciu, jak wysłać na własną stronę www?
MrLewerence
Majsterkowicz
Posty: 147
Rejestracja: 12 paź 2013, 20:48

Re: ESP8266 + DS18B20

Post autor: MrLewerence » 23 lut 2018, 12:27

kogan77 pisze:
23 lut 2018, 11:46
...

W sekcji HEAD dodałem linijkę <meta http-equiv=\"refresh\" content=\"5\">\ , co by odświeżało stronkę co 5 s i nie trzeba było robić tego ręcznie.

...
Żaden ze mnie webmaster, ale odświeżanie strony www co 5 sekund to za szybko...
kaczakat
Młodszy majsterkowicz
Posty: 20
Rejestracja: 8 wrz 2017, 15:01

Re: ESP8266 + DS18B20

Post autor: kaczakat » 5 mar 2018, 02:07

Witam
Kiedyś z tym walczyłem i przy stronie WWW mającej kilkadziesiąt znaków html w losowych momentach esp się resetował (parę minut do paru godzin, rzadko dni)- przepełnienie stosu/pamięci/nie wiem. Generalnie zabawa ze stringami i wycieki pamięci. Rozwiązaniem było web-sockets i obejrzenie kursów na Youtube html/css/js Mirosława Zelenta pasja informatyki. Korzystając z przykładów web-socket zrobiłem sobie coś co mi wystarcza:
github_com_kaczakat_ESP8266 (wstawić kropke i /)
W zmiennych VAR1,VAR2, VAR3, VAR4 można wysłać na stronę swoje dane, przyciskami sterować, stan przycisków zmienia się w czasie rzeczywistym dla max 5 użytkowników (jeśli program sam zmieni stan to również wyśle na WWW do wszystkich). Można podłączyć max 5 klientów do ESP jednocześnie.
Aktualnie są już lepsze przykłady tu:
github_com_gmag11_FSBrowserNG (wstawić kropke i /)
Strona WWW może być w całości wgrana na dysk flash ESP, aktualizowana niezależnie od programu, osobne pliki HTML, CSS, JS, ale ciągle brak czasu na więcej testów. Jest tu nawet edytor plików online, wykresy, konfiguracja dostępu do internetu, setup modułu, ntp.
ODPOWIEDZ

Strony partnerskie: