• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ds18b20+st7735+blynk

CodeNameHawk

Moderator
Команда форума
а почему по последнему вашему скетчу , датчики показывают одни и те же показания?
Я вам уже подсказал, где надо искать ошибку.
У меня почему то новая оказия, при загрузке моего исходного скетча, второй датчик показывает -127.
Ищите ошибку в коде, метод выбросить все лишнее неплохо помогает.
 

pvvx

Активный участник сообщества
Специально для Вас поясняю -МОЖНО -это означает что я так делал и все работает, а нужно или нет решает каждый сам
Пока ни один человек не видел, что у вас что-то "работает". Но вот обратное - видно по вашим постам и информированности.
 

Roma_40

New member
Можете и сами поправить немного подумав, по аналогии с
да, проглядел, что второй вывод берет с первого датчика (temp_1)

Ищите ошибку в коде, метод выбросить все лишнее неплохо помогает.
индексы в датчиках поставил не те

#include <Wire.h> // include Wire library (required for I2C devices)
#include <Adafruit_GFX.h> // include Adafruit graphics library
#include <Adafruit_ST7735.h> // include Adafruit ST7735 TFT library

// ST7735 TFT module connections
#define TFT_RST -1 // TFT RST pin is connected to NodeMCU reset pin
#define TFT_CS D8 // TFT CS pin is connected to NodeMCU pin D8 (GPIO15)
#define TFT_DC D4 // TFT DC pin is connected to NodeMCU pin D4 (GPIO2)
// initialize ST7735 TFT library with hardware SPI module
// SCK (CLK) ---> NodeMCU pin D5 (GPIO14)
// MOSI(DIN) ---> NodeMCU pin D7 (GPIO13)
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

/* ESP & Blynk */
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial

/* Blynk credentials */
char auth[] = "********************";

/* WiFi credentials */
char ssid[] = "*******************";
char pass[] = "******************";

/* TIMER */
//#include <SimpleTimer.h>
SimpleTimer timer;

/* DS18B20 Temperature Sensor */
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 5 // DS18B20 подключаем на D1 на плате
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
float temp_1;
float temp_2;
char temp1_s[7];
char temp2_s[7];

void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
timer.setInterval(2000L, getSendData);
DS18B20.begin();
DS18B20.setResolution(12);

tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab
tft.fillScreen(ST7735_BLACK); // fill screen with black color
tft.drawFastHLine(0, 10, tft.width(), ST7735_WHITE); // draw horizontal white line at position (0, 15)

tft.setTextColor(ST7735_WHITE, ST7735_BLACK); // set text color to white and black background
tft.setTextSize(1); // text size = 1
tft.setCursor(44, 0); // move cursor to position (40, 0) pixel
tft.print("KOLONNA");

tft.setTextColor(ST7735_GREEN, ST7735_BLACK); // set text color to green and black background
tft.setCursor(8, 20); // move cursor to position (8, 20) pixel
tft.print("TEMPERATURA =");

tft.fillTriangle(4, 60, 10, 41, 16, 60, ST77XX_RED); // print Triangle up symbol
tft.fillTriangle(4, 71, 10, 90, 16, 71, ST77XX_BLUE); // print Triangle down symbol

tft.drawCircle(120, 42, 2, ST7735_CYAN); // print degree symbol ( ° )
tft.drawCircle(120, 72, 2, ST7735_CYAN); // print degree symbol ( ° )
}

void loop()
{
timer.run(); // Initiates SimpleTimer
Blynk.run();

DS18B20.requestTemperatures();
delay(2000); // wait a 2 second
//Serial.println(DS18B20.getResolution());

temp_1 = DS18B20.getTempCByIndex(0); // Sensor 0 показания для датчика 1 в цельсиях
temp_2 = DS18B20.getTempCByIndex(1); // Sensor 1 показания для датчика 2 в цельсиях
dtostrf(temp_1 , 0, 1, temp1_s);
//Serial.println(temp1_s);
dtostrf(temp_2 , 0, 1, temp2_s);
//Serial.println(temp2_s);

tft.setTextSize(3);
tft.setCursor(35, 40);
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background
tft.printf(temp1_s);

tft.setCursor(35, 70);
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background
tft.printf(temp2_s);
}

/***************************************************
Send Sensor data to Blynk
**************************************************/
void getSendData()
{
Blynk.virtualWrite(10, temp1_s); //вывод данных на виртуальный пин V10
Blynk.virtualWrite(11, temp2_s); //вывод данных на виртуальный пин V11
}

вот полученный рабочий скетч))
может будут замечания по улучшению кода?
 

svs2007m

Active member
BlynkSimpleEsp8266.h и SimpleTimer.h одно и тоже. И как было сказано выше забудьте про delay.
Стабильность работы серверов Blynk оставляет желать лучшего, поэтому если нет локального то это возможно пригодится
пример :)
 

Roma_40

New member
Выкиньте delay, используйте millis().
либо я не допонял принцип действия millis(), либо что-то не так сделал. Ставлю хоть 5000, в serial показания выкидывает все равно ~2 раза в секунду. С периодом тоже пробовал, результат тот же
/* DS18B20 Temperature Sensor */
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 5 // DS18B20 подключаем на D1 на плате
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
float temp_1;
float temp_2;
char temp1_s[7];
char temp2_s[7];

unsigned long myTimer1;

void setup()
{
Serial.begin(115200);
DS18B20.begin();
DS18B20.setResolution(12);
}

void loop()
{
if (millis() - myTimer1 >= 5000 );
{
myTimer1 = millis(); // сброс таймера
DS18B20.requestTemperatures();
//Serial.println(DS18B20.getResolution());

temp_1 = DS18B20.getTempCByIndex(0); // Sensor 0 показания для датчика 1 в цельсиях
temp_2 = DS18B20.getTempCByIndex(1); // Sensor 1 показания для датчика 2 в цельсиях
dtostrf(temp_1 , 0, 1, temp1_s);
Serial.println(temp1_s);
dtostrf(temp_2 , 0, 1, temp2_s);
Serial.println(temp2_s);
}
}
 

svs2007m

Active member
Если с millis() у Вас засада, тогда чем базовые функции библиотеки BlynkSimpleEsp8266.h или SimpleTimer.h плохи ? Справка здесь. :)
 

Roma_40

New member
Если с millis() у Вас засада, тогда чем базовые функции библиотеки BlynkSimpleEsp8266.h или SimpleTimer.h плохи ?
Если это правильное решение, значит надо что бы работало)) Blynk у меня просто как приятное дополнение :)
В конце строки с if ..... убери точку с запятой 😏
Все заработало. Спасибо (y)
 
Сверху Снизу