Roma_40
New member
Господа, прошу снова помочь.
К своему предыдущему железу добавил BME280 + кнопку и пищалку
BME280 - поставил для отображения информации окружающей среды. Он работает, все отображает.
Кнопку с пищалкой добавил, что бы зафиксировать температуру от DS18B20 и при её увеличении должна сработать пищалка.
Но вот не срабатывает она, не знаю что делать Сама пищалка рабочая.
так же буду рад замечаниям по скетчу))
К своему предыдущему железу добавил BME280 + кнопку и пищалку
BME280 - поставил для отображения информации окружающей среды. Он работает, все отображает.
Кнопку с пищалкой добавил, что бы зафиксировать температуру от DS18B20 и при её увеличении должна сработать пищалка.
Но вот не срабатывает она, не знаю что делать Сама пищалка рабочая.
#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
#include <Adafruit_BME280.h> // include Adafruit BME280 sensor 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);
// define device I2C address: 0x76 or 0x77 (0x77 is library default address)
#define BME280_I2C_ADDRESS 0x76
// initialize Adafruit BME280 library
Adafruit_BME280 bme280;
float temp;
float humi;
float pres;
char temp_s[6];
char humi_s[6];
char pres_s[6];
/* ESP & Blynk */
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial
/* Blynk credentials */
char auth[] = "***********************";
/* WiFi credentials */
char ssid[] = "********************";
char pass[] = "*******************";
/* TIMER */
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_0;
float temp_1;
char temp0_s[7];
char temp1_s[7];
unsigned long myTimer1, myTimer2;
float setTmp; // переменная для заданного значения температуры
int buttFixPin = 16; // кнопку подключаем на D6 на плате
int buttFixPinCurentState = LOW; // текущее состояние кнопки
const int Buzz = 12; // пищалку подключаем на D0 на плате
void Buzzer(int number)
{
for (int i = 0; i < number; i++)
{
digitalWrite (Buzz, HIGH);
delay (500);
digitalWrite(Buzz, LOW);
delay(100);
}
}
void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
timer.setInterval(3000L, getSendData);
DS18B20.begin();
DS18B20.setResolution(12);
pinMode(buttFixPin, INPUT_PULLUP);
pinMode(Buzz, OUTPUT);
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
tft.setTextColor(ST7735_WHITE, ST7735_BLACK); // set text color to white and black background
tft.setTextSize(1); // размер шрифта = 1
tft.setCursor(44, 0); // move cursor to position pixel
tft.print("KOLONNA");
tft.fillTriangle(4, 45, 10, 26, 16, 45, ST77XX_RED); // print Triangle up symbol
tft.fillTriangle(4, 61, 10, 80, 16, 61, ST77XX_BLUE); // print Triangle down symbol
tft.drawCircle(115, 27, 2, ST7735_CYAN); // print degree symbol ( ° )
tft.drawCircle(115, 62, 2, ST7735_CYAN); // print degree symbol ( ° )
// initialize the BME280 sensor
Wire.begin(D3, D2); // set I2C pins [SDA = D3, SCL = D2], default clock is 100kHz
if ( bme280.begin(BME280_I2C_ADDRESS) == 0 )
{ // connection error or device address wrong!
tft.setTextColor(ST7735_RED, ST7735_BLACK); // set text color to red and black background
tft.setTextSize(2); // text size = 2
tft.setCursor(5, 113); // move cursor to position pixel
tft.print("Connection");
tft.setCursor(35, 133); // move cursor to position pixel
tft.print("Error");
while (1) // stay here
delay(1000);
}
tft.setTextSize(2); // text size = 2
tft.drawFastHLine(0, 96, tft.width(), ST7735_CYAN); // draw horizontal white line at position
tft.setTextColor(ST7735_RED, ST7735_BLACK); // set text color to red and black background
tft.setCursor(5, 104); // move cursor to position pixel
tft.print("T=");
tft.setTextColor(ST7735_CYAN, ST7735_BLACK); // set text color to cyan and black background
tft.setCursor(5, 123); // move cursor to position pixel
tft.print("H=");
tft.setTextColor(ST7735_MAGENTA, ST7735_BLACK); // set text color to cyan and black background
tft.setCursor(100, 123); // move cursor to position pixel
tft.print("%");
tft.setTextColor(ST7735_GREEN, ST7735_BLACK); // set text color to green and black background
tft.setCursor(5, 144); // move cursor to position pixel
tft.print("P=");
tft.setTextColor(0xFD00, ST7735_BLACK);
tft.setCursor(80, 144);
tft.print("mmHg");
tft.setTextSize(2); // text size = 2
// print °C
tft.drawCircle(100, 106, 2, ST7735_YELLOW); // print degree symbol ( ° )
tft.setCursor(105, 104); // move cursor to position pixel
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background
tft.print("C");
}
void loop()
{
timer.run(); // запуск таймера
Blynk.run(); //запуск Blynk
if (millis() - myTimer1 >= 3000 )
{
myTimer1 = millis(); // сброс таймера
DS18B20.requestTemperatures();
//Serial.println(DS18B20.getResolution());
temp_0 = DS18B20.getTempCByIndex(0); // Sensor 0 показания для датчика 1 в цельсиях
temp_1 = DS18B20.getTempCByIndex(1); // Sensor 1 показания для датчика 2 в цельсиях
dtostrf(temp_0, 0, 1, temp0_s);
//Serial.println(temp0_s);
dtostrf(temp_1, 0, 1, temp1_s);
//Serial.println(temp1_s);
tft.setTextSize(3);
tft.setCursor(35, 25);
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background
tft.printf(temp0_s);
tft.setCursor(35, 60);
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background
tft.printf(temp1_s);
}
if (millis() - myTimer2 >= 6000 )
{
myTimer2 = millis(); // сброс
// read temperature, humidity and pressure from the BME280 sensor
temp = bme280.readTemperature(); // get temperature in °C
humi = bme280.readHumidity(); // get humidity in %
pres = bme280.readPressure() / 133.32; // get pressure in mmHg
dtostrf(temp, 0, 1, temp_s);
//Serial.println(temp_s);
dtostrf(humi, 0, 1, humi_s);
//Serial.println(humi_s);
dtostrf(pres, 0, 0, pres_s);
//Serial.println(pres_s);
// print temperature (in °C)
tft.setTextSize(2);
tft.setCursor(35, 104);
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background
tft.printf(temp_s);
// 2: print humidity
tft.setCursor(35, 123);
tft.setTextColor(ST7735_MAGENTA, ST7735_BLACK); // set text color to magenta and black background
tft.printf(humi_s);
// 3: print pressure (in mmHg)
tft.setCursor(35, 144);
tft.setTextColor(0xFD00, ST7735_BLACK); // set text color to orange and black background
tft.printf(pres_s);
}
// считываем состояние кнопки
buttFixPinCurentState = digitalRead(buttFixPin);
//Запись температуры фиксации в переменную setTmp
if (buttFixPinCurentState == LOW && setTmp == 0)
{
Buzzer(1);
setTmp = DS18B20.getTempCByIndex(1); //Если нажата кнопка, пишем в переменную текущее значение температуры
}
if (DS18B20.getTempCByIndex(1) > setTmp + 0.3) // Температура поднялась выше зафиксированной
{
Buzzer(2); // Сигнал 2 раза
}
}
/***************************************************
Send Sensor data to Blynk
**************************************************/
void getSendData()
{
Blynk.virtualWrite(0, temp0_s); //вывод данных на виртуальный пин V0
Blynk.virtualWrite(1, temp1_s); //вывод данных на виртуальный пин V1
Blynk.virtualWrite(2, temp_s); //вывод данных на виртуальный пин V2
Blynk.virtualWrite(3, humi_s); //вывод данных на виртуальный пин V3
Blynk.virtualWrite(4, pres_s); //вывод данных на виртуальный пин V4
}
#include <Adafruit_GFX.h> // include Adafruit graphics library
#include <Adafruit_ST7735.h> // include Adafruit ST7735 TFT library
#include <Adafruit_BME280.h> // include Adafruit BME280 sensor 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);
// define device I2C address: 0x76 or 0x77 (0x77 is library default address)
#define BME280_I2C_ADDRESS 0x76
// initialize Adafruit BME280 library
Adafruit_BME280 bme280;
float temp;
float humi;
float pres;
char temp_s[6];
char humi_s[6];
char pres_s[6];
/* ESP & Blynk */
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial
/* Blynk credentials */
char auth[] = "***********************";
/* WiFi credentials */
char ssid[] = "********************";
char pass[] = "*******************";
/* TIMER */
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_0;
float temp_1;
char temp0_s[7];
char temp1_s[7];
unsigned long myTimer1, myTimer2;
float setTmp; // переменная для заданного значения температуры
int buttFixPin = 16; // кнопку подключаем на D6 на плате
int buttFixPinCurentState = LOW; // текущее состояние кнопки
const int Buzz = 12; // пищалку подключаем на D0 на плате
void Buzzer(int number)
{
for (int i = 0; i < number; i++)
{
digitalWrite (Buzz, HIGH);
delay (500);
digitalWrite(Buzz, LOW);
delay(100);
}
}
void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
timer.setInterval(3000L, getSendData);
DS18B20.begin();
DS18B20.setResolution(12);
pinMode(buttFixPin, INPUT_PULLUP);
pinMode(Buzz, OUTPUT);
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
tft.setTextColor(ST7735_WHITE, ST7735_BLACK); // set text color to white and black background
tft.setTextSize(1); // размер шрифта = 1
tft.setCursor(44, 0); // move cursor to position pixel
tft.print("KOLONNA");
tft.fillTriangle(4, 45, 10, 26, 16, 45, ST77XX_RED); // print Triangle up symbol
tft.fillTriangle(4, 61, 10, 80, 16, 61, ST77XX_BLUE); // print Triangle down symbol
tft.drawCircle(115, 27, 2, ST7735_CYAN); // print degree symbol ( ° )
tft.drawCircle(115, 62, 2, ST7735_CYAN); // print degree symbol ( ° )
// initialize the BME280 sensor
Wire.begin(D3, D2); // set I2C pins [SDA = D3, SCL = D2], default clock is 100kHz
if ( bme280.begin(BME280_I2C_ADDRESS) == 0 )
{ // connection error or device address wrong!
tft.setTextColor(ST7735_RED, ST7735_BLACK); // set text color to red and black background
tft.setTextSize(2); // text size = 2
tft.setCursor(5, 113); // move cursor to position pixel
tft.print("Connection");
tft.setCursor(35, 133); // move cursor to position pixel
tft.print("Error");
while (1) // stay here
delay(1000);
}
tft.setTextSize(2); // text size = 2
tft.drawFastHLine(0, 96, tft.width(), ST7735_CYAN); // draw horizontal white line at position
tft.setTextColor(ST7735_RED, ST7735_BLACK); // set text color to red and black background
tft.setCursor(5, 104); // move cursor to position pixel
tft.print("T=");
tft.setTextColor(ST7735_CYAN, ST7735_BLACK); // set text color to cyan and black background
tft.setCursor(5, 123); // move cursor to position pixel
tft.print("H=");
tft.setTextColor(ST7735_MAGENTA, ST7735_BLACK); // set text color to cyan and black background
tft.setCursor(100, 123); // move cursor to position pixel
tft.print("%");
tft.setTextColor(ST7735_GREEN, ST7735_BLACK); // set text color to green and black background
tft.setCursor(5, 144); // move cursor to position pixel
tft.print("P=");
tft.setTextColor(0xFD00, ST7735_BLACK);
tft.setCursor(80, 144);
tft.print("mmHg");
tft.setTextSize(2); // text size = 2
// print °C
tft.drawCircle(100, 106, 2, ST7735_YELLOW); // print degree symbol ( ° )
tft.setCursor(105, 104); // move cursor to position pixel
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background
tft.print("C");
}
void loop()
{
timer.run(); // запуск таймера
Blynk.run(); //запуск Blynk
if (millis() - myTimer1 >= 3000 )
{
myTimer1 = millis(); // сброс таймера
DS18B20.requestTemperatures();
//Serial.println(DS18B20.getResolution());
temp_0 = DS18B20.getTempCByIndex(0); // Sensor 0 показания для датчика 1 в цельсиях
temp_1 = DS18B20.getTempCByIndex(1); // Sensor 1 показания для датчика 2 в цельсиях
dtostrf(temp_0, 0, 1, temp0_s);
//Serial.println(temp0_s);
dtostrf(temp_1, 0, 1, temp1_s);
//Serial.println(temp1_s);
tft.setTextSize(3);
tft.setCursor(35, 25);
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background
tft.printf(temp0_s);
tft.setCursor(35, 60);
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background
tft.printf(temp1_s);
}
if (millis() - myTimer2 >= 6000 )
{
myTimer2 = millis(); // сброс
// read temperature, humidity and pressure from the BME280 sensor
temp = bme280.readTemperature(); // get temperature in °C
humi = bme280.readHumidity(); // get humidity in %
pres = bme280.readPressure() / 133.32; // get pressure in mmHg
dtostrf(temp, 0, 1, temp_s);
//Serial.println(temp_s);
dtostrf(humi, 0, 1, humi_s);
//Serial.println(humi_s);
dtostrf(pres, 0, 0, pres_s);
//Serial.println(pres_s);
// print temperature (in °C)
tft.setTextSize(2);
tft.setCursor(35, 104);
tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background
tft.printf(temp_s);
// 2: print humidity
tft.setCursor(35, 123);
tft.setTextColor(ST7735_MAGENTA, ST7735_BLACK); // set text color to magenta and black background
tft.printf(humi_s);
// 3: print pressure (in mmHg)
tft.setCursor(35, 144);
tft.setTextColor(0xFD00, ST7735_BLACK); // set text color to orange and black background
tft.printf(pres_s);
}
// считываем состояние кнопки
buttFixPinCurentState = digitalRead(buttFixPin);
//Запись температуры фиксации в переменную setTmp
if (buttFixPinCurentState == LOW && setTmp == 0)
{
Buzzer(1);
setTmp = DS18B20.getTempCByIndex(1); //Если нажата кнопка, пишем в переменную текущее значение температуры
}
if (DS18B20.getTempCByIndex(1) > setTmp + 0.3) // Температура поднялась выше зафиксированной
{
Buzzer(2); // Сигнал 2 раза
}
}
/***************************************************
Send Sensor data to Blynk
**************************************************/
void getSendData()
{
Blynk.virtualWrite(0, temp0_s); //вывод данных на виртуальный пин V0
Blynk.virtualWrite(1, temp1_s); //вывод данных на виртуальный пин V1
Blynk.virtualWrite(2, temp_s); //вывод данных на виртуальный пин V2
Blynk.virtualWrite(3, humi_s); //вывод данных на виртуальный пин V3
Blynk.virtualWrite(4, pres_s); //вывод данных на виртуальный пин V4
}
так же буду рад замечаниям по скетчу))