• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
NodeMCU + LCD+ DS18b20
#11
(26-08-2018, 22:34)Stark napisał(a): Próbowałem zrobić jak napisałeś wyżej... nadal to samo. Na zagranicznych forach natknąłem się, że jest to problem który nie tylko mnie spotkał. Dziś już na to nie mam siły.  Będę próbował, aż się uda.

W programie musisz po swojemu ponumerować DS18B20. Musisz stworzyć funkcję przypisującą te numery. Powinna ona przeskanować magistralę. W tablicy będziesz miał kolejne numery seryjne. W programie przypiszesz, że termometr nr 0 to ID z elementu np 3 tablicy, nr 2 to np ID 1, nr 3 to ID pod indeksem 0, itd.
Tablicę musisz zapamiętać w eeprom. Program może wykrywać brak termometru jak i pojawienie się nowego.

Jest też inna metoda. Każdy DS18B20 ma 2 bajty eeprom. Przeznaczyć można je do alarmu temperatury albo ID układu. Możesz więc w tym eeprom zapisac swoje identyfikatory i uwzględniać je podczas wyświetlania temperatury. Metoda o tyle dobra, ze nie potrzebujesz eeprom w uC. Standardowo, wgrywając soft programatorem eeprom jest kasowany. Można ustawić w fuses EESAVE i takiego kasowania nie będzie. Arduino jest dość kiepskim narzędziem i pewnie nie daje możliwości zapisu eeprom z bootloadera, choć same pliki ELF tworzone przez GCC/G++ mają taką możliwość (atrybut EEMEM). Następna korzyść to większa przenośność kodu, bo np tylko nieliczne ARM mają EEPROM a powoli, używanie AVR staje się coraz mniej sensowne i może niedługo kod przeniesiesz na ARM.
 
Odpowiedź
#12
Trochę było męczarni ale działa
Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <LiquidCrystal_I2C.h>
#include <Timers.h>
#define treconnect 30 //czasy wywoływania Blynk.run przy braku łączności w sek
int liczreconnect = 10;
LiquidCrystal_I2C lcd(0x27, 16, 2);
Timers <3> akcja;

#define ONE_WIRE_BUS 5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

BlynkTimer timer;

float SALON=0; //temperatura zbiornika
float BALKON=0; //temp bufora
float KUCHNIA=0; // temperatura 10p
float LAZIENKA=0; // temp głowicy


int stanLED_ok=0;
int LED; // wskaźnik działania procesora

char auth[] = "xxxxxxx"; //kod autoryzacji blynk

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "xxxxxxxx";// nazwa sieci
char pass[] = "xxxxxxxxx"; // hasło do wifi



void setup()
{

akcja.attach(0, 1000, testconnect); // timer 1 sek

WiFi.begin(ssid, pass);

Blynk.config(auth, "blynk-cloud.com", 8442); // dla serwera lokalnego
// Blynk.config(auth); /// dla Cloud server

// You can also specify server:
//Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
//Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);
//WiFi.begin(auth,ssid, pass);
Blynk.connect();
if (Blynk.connected()) Blynk.run(); else Blynk.connect();
// Debug console
Serial.begin(9600);
  lcd.backlight();
  lcd.begin(16,2);
  lcd.init();
Serial.println(LED);

sensors.begin();
sensors.requestTemperatures();

timer.setInterval(1000L, temp);

// The begin call takes the width and height. This
// Should match the number provided to the constructor.

}


void  temp()
{

 SALON = sensors.getTempCByIndex(0);
 BALKON = sensors.getTempCByIndex(1);
 KUCHNIA  = sensors.getTempCByIndex(2);
 LAZIENKA = sensors.getTempCByIndex(3);
 sensors.requestTemperatures();

 
Blynk.virtualWrite(0,SALON);
Blynk.virtualWrite(1,BALKON);
Blynk.virtualWrite(2,KUCHNIA);
Blynk.virtualWrite(3,LAZIENKA);

stanLED_ok = !stanLED_ok;
if (stanLED_ok == 0) {
 Blynk.virtualWrite(10,255);Blynk.setProperty(V10,"color","#D3435C");
}
else {
  Blynk.virtualWrite(10,255);Blynk.setProperty(V10,"color","#04C0F8");
}

//Blynk.syncAll();
}
void loop()
{

sensors.requestTemperatures();
lcd.setCursor(0, 0);
lcd.print("1:");
lcd.setCursor(2, 0);      
lcd.print(SALON);
lcd.setCursor(7,0);
lcd.print("  2:");
lcd.setCursor(11,0);
lcd.print(BALKON);
lcd.setCursor(0, 1);
lcd.print("3:");      
lcd.print(KUCHNIA);
lcd.setCursor(7,1);
lcd.print("  4:");
lcd.setCursor(11,1);
lcd.print(LAZIENKA);  


  akcja.process(); // timer Timers.h
  if (Blynk.connected()) {
    Blynk.run();
  }
timer.run();
}
void testconnect() //procedura wywoływana co 1 sek
{
if (Blynk.connected()) {
  liczreconnect = treconnect;
} else {
  liczreconnect--;
  if (liczreconnect==0) {
    Blynk.connect();
    liczreconnect = treconnect;
   
  }
}
}
@es2 z tego jak ja to rozumiem to tymi sposobami przypisany konkretną sonde do numerów.
Ja chce mieć sondy odpinane. Chce żeby np pierwsze gniazdo z od prawej strony miało w programie numer jeden i bez znaczenia jaką sonde tam podepne żeby przypisywał ją do numeru w programie 1. Drugie gniazdo do 2. itd...
 
Odpowiedź
#13
Masz przykład w Arduino one wire ds z multibus, tylko tak możesz sobie banglować czujnikami, na każdej magistrali możesz mieć wtedy 1.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#14
(28-08-2018, 20:37)kaczakat napisał(a): Masz przykład w Arduino one wire ds z multibus

Tyle, że każda magistrala, która wychodzi poza PCB, powinna miec zabezpieczenie ESD, a te skuteczne (DS9503) do tanich nie należą.
 
Odpowiedź
#15
O nie, nie będę nawet dopytywał i wdawał się w dyskusje...
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#16
(29-08-2018, 00:37)kaczakat napisał(a): O nie, nie będę nawet dopytywał i wdawał się w dyskusje...

Dyskusje na temat sensu stosowania zabezpieczenia magistrali? Faktycznie nie ma o czym dyskutować tak jak i o konieczności używania kondensatorów odsprzegajacych zasilanie czy kondensatorach o obwodach oscylatora kwarcowego zapobiegających wzbudzaniu sie na częstotliwościach harmonicznych.
 
Odpowiedź
#17
Panowie. Działa tylko teraz blynk zrywa i wznawia połączenie co jakiś czas. Macie pomysł jak się tego pozbyć? Jak dopisać warunek aby po ustanowieniu połączenia program to zatrzymał ??
 
Odpowiedź
#18
(03-09-2018, 00:14)Stark napisał(a): Panowie. Działa tylko teraz blynk zrywa i wznawia połączenie co jakiś czas. Macie pomysł jak się tego pozbyć?
Co jest powodem zerwania połączenia?
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości