Всем привет!
Собственно проблема:
имеется на руках
Подключение:
mh-z19(датчик - nodemcu)
rx - d6
tx - d4
vin - vusb
gnd - gnd
bme-280(датчик - nodemcu)
vcc - 3.3v
gnd - gnd
scl - d1
sda - d2
csb - d3
sdo - d5
ili9341(экран- nodemcu)
vcc, led, reset - 3.3v
gnd - gnd
cs - d8
d/c - d7
sdi(mosi) -d2
sck - d1
DS3231(датчик - nodemcu)
vcc - 3.3v
gnd - gnd
sda - d2
scl - d1
Скетч рабочий(на экране появляются показания и даже правдивые):
Скетч с добавлением кода для часов(не работает):
Дополнение:
Отдельно работают все датчики и nodemcu(по 3 штуки каждого имеется в запасах, кроме датчика СО2)
Сканером прозваниваются и видятся - и часы, и bme280, когда подключены вместе .
Стоит в любую комбинацию добавить часы - любой код перестает работать. Часы отдельно от всего - работают(есть 3 платы часов, проверил каждую).
Нужна ваша помощь. Подскажите, где я ошибаюсь и как это можно исправить?
Собственно проблема:
имеется на руках
- NodeMCU (с чипом CH340G) на вот такой вот удобной платформе расширении 99.75 руб. |Greatzt nodemcu узел MCU базы ESP8266 тестирование DIY макет базовый тестер подходит для nodemcu V3 купить на AliExpress
- GY-BMP/E280 266.22 руб. |GY BME280 3.3 точности высотомер атмосферное давление BME280 модуль датчика i2c gy bme280 купить на AliExpress
- tft экран 442.13 руб. 25% СКИДКА|2,8 "240x320 SPI, TFT, ЖК последовательный Порты и разъёмы модуль + PCB адаптер Micro SD ILI9341 5 V/3,3 V купить на AliExpress
- MH-Z19 1366.8 руб. 5% СКИДКА|MH Z19 инфракрасный co2 датчик co2 Монитор купить на AliExpress
- Модуль часов DS3231 68.08 руб. |DS3231 AT24C32 iic модуль точность часы модуль (без батареи) DS3231SN модуль памяти купить на AliExpress
Подключение:
mh-z19(датчик - nodemcu)
rx - d6
tx - d4
vin - vusb
gnd - gnd
bme-280(датчик - nodemcu)
vcc - 3.3v
gnd - gnd
scl - d1
sda - d2
csb - d3
sdo - d5
ili9341(экран- nodemcu)
vcc, led, reset - 3.3v
gnd - gnd
cs - d8
d/c - d7
sdi(mosi) -d2
sck - d1
DS3231(датчик - nodemcu)
vcc - 3.3v
gnd - gnd
sda - d2
scl - d1
Скетч рабочий(на экране появляются показания и даже правдивые):
Код:
#include <UTFT.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <SoftwareSerial.h>
// assign the ESP8266 pins to arduino pins
#define D1 5
#define D2 4
#define D3 0
#define D5 14
// assign the SPI bus to pins
#define BME_SCK D1
#define BME_MISO D5
#define BME_MOSI D2
#define BME1_CS D3
#define SEALEVELPRESSURE_HPA (1013.25)
extern uint8_t SmallFont[];
UTFT myGLCD ( ILI9341_S5P, 4,5,15,1,13 );
//Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
Adafruit_BME280 bme(BME1_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI
SoftwareSerial mySerial(2, 12); // RX, TX
byte request[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
unsigned char response[9];
float getCO2(){
mySerial.write(request, 9);
memset(response, 0, 9);
mySerial.readBytes(response, 9);
int i;
byte crc = 0;
for (i = 1; i < 8; i++) crc+=response[i];
crc = 255 - crc;
crc++;
if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) {
Serial.println("CRC error");
} else {
unsigned int HLconcentration = (unsigned int) response[2];
unsigned int LLconcentration = (unsigned int) response[3];
unsigned int co2 = (256*HLconcentration) + LLconcentration;
Serial.print("PPM = ");
Serial.println(co2);
return co2;
//Serial.println();
}
}
void setup() {
Serial.begin(9600);
//Wire.begin(5/*D1*/, 4/*D3*/); delay(10);
Serial.println(F("BME280 test"));
if (!bme.begin()) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
myGLCD.InitLCD ( );
myGLCD.setFont ( SmallFont );
}
void loop() {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print( bme.readPressure() / 133.32239F);
Serial.println(" mmHg");
Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
Serial.println();
float coo = getCO2();
myGLCD.clrScr ( );
myGLCD.setColor ( 255, 255, 255 );
myGLCD.setBackColor ( 255, 0, 0 );
myGLCD.print ( String("Temp: ")+bme.readTemperature()+" *C", CENTER, 93 );
myGLCD.print ( String("Pressure: ")+(bme.readPressure()/133.32239F)+" mmHg", CENTER, 106 );
myGLCD.print ( String("Humidity: ")+bme.readHumidity()+" %", CENTER, 119 );
myGLCD.print ( String("Co2: ")+coo+" ppm", CENTER, 132 );
myGLCD.setColor ( 0, 255, 0 );
myGLCD.setBackColor ( 0, 0, 255 );
myGLCD.print ( String("Runtime: (msecs)"), CENTER, 210 );
myGLCD.printNumI ( millis ( ), CENTER, 225 );
delay(2000);
}
Код:
#include <DS3231.h>
#include <UTFT.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <SoftwareSerial.h>
DS3231 clock;
RTCDateTime dt;
// assign the ESP8266 pins to arduino pins
#define D1 5
#define D2 4
#define D3 0
#define D5 14
// assign the SPI bus to pins
#define BME_SCK D1
#define BME_MISO D5
#define BME_MOSI D2
#define BME1_CS D3
#define SEALEVELPRESSURE_HPA (1013.25)
extern uint8_t SmallFont[];
UTFT myGLCD ( ILI9341_S5P, 4,5,15,1,13 );
//Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME1_CS); // hardware SPI
Adafruit_BME280 bme(BME1_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI
SoftwareSerial mySerial(2, 12); // RX, TX
byte request[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
unsigned char response[9];
float getCO2(){
mySerial.write(request, 9);
memset(response, 0, 9);
mySerial.readBytes(response, 9);
int i;
byte crc = 0;
for (i = 1; i < 8; i++) crc+=response[i];
crc = 255 - crc;
crc++;
if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) {
Serial.println("CRC error");
} else {
unsigned int HLconcentration = (unsigned int) response[2];
unsigned int LLconcentration = (unsigned int) response[3];
unsigned int co2 = (256*HLconcentration) + LLconcentration;
Serial.print("PPM = ");
Serial.println(co2);
return co2;
//Serial.println();
}
}
void setup() {
Serial.begin(9600);
Serial.println(F("BME280 test"));
if (!bme.begin()) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
clock.begin();
// Set sketch compiling time
clock.setDateTime(__DATE__, __TIME__);
myGLCD.InitLCD ( );
myGLCD.setFont ( SmallFont );
}
void loop() {
dt = clock.getDateTime();
Serial.print("Long format with month name: ");
Serial.println(clock.dateFormat("d F Y H:i:s", dt));
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print( bme.readPressure() / 133.32239F);
Serial.println(" mmHg");
Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
Serial.println();
float coo = getCO2();
myGLCD.clrScr ( );
myGLCD.setColor ( 255, 255, 255 );
myGLCD.setBackColor ( 255, 0, 0 );
myGLCD.print ( String("Time: ")+clock.dateFormat("d F Y H:i:s", dt), CENTER, 73 );
myGLCD.print ( String("Temp: ")+bme.readTemperature()+" *C", CENTER, 93 );
myGLCD.print ( String("Pressure: ")+(bme.readPressure()/133.32239F)+" mmHg", CENTER, 106 );
myGLCD.print ( String("Humidity: ")+bme.readHumidity()+" %", CENTER, 119 );
myGLCD.print ( String("Co2: ")+coo+" ppm", CENTER, 132 );
myGLCD.setColor ( 0, 255, 0 );
myGLCD.setBackColor ( 0, 0, 255 );
myGLCD.print ( String("Runtime: (msecs)"), CENTER, 210 );
myGLCD.printNumI ( millis ( ), CENTER, 225 );
delay(2000);
}
Отдельно работают все датчики и nodemcu(по 3 штуки каждого имеется в запасах, кроме датчика СО2)
Сканером прозваниваются и видятся - и часы, и bme280, когда подключены вместе .
Стоит в любую комбинацию добавить часы - любой код перестает работать. Часы отдельно от всего - работают(есть 3 платы часов, проверил каждую).
Нужна ваша помощь. Подскажите, где я ошибаюсь и как это можно исправить?