17-05-2024, 16:46
Witam,
Tworzę projekt który ma za zadanie zbierać dane z czujników BME280 i SGP30 po czym wyświetlać zebrane dane na wyświetlaczu i wysyłać poprzez UART dane do modułu ESP32 który wysyła je do aplikacji Blynk i wyświetla. Problem polega na połączeniu prawdopodobnie między arduino a ESP32 ponieważ przy braku komunikacji między nimi kod wgrywa się natomiast jeśli podłącze piny RX i TX żeby arduino pracowało jako master a ESP32 jako slave wyrzuca błąd:
A fatal error occurred: Failed to connect to ESP32: Download mode successfully detected, but getting no sync reply: The serial TX path seems to be down.
For troubleshooting steps visit: https://docs.espressif.com/projects/espt...oting.html
Failed uploading: uploading error: exit status 2
Dodam że moduł niepodłączony po wgraniu programu startowego Blynk łączy się prawidłowo natomiast z arduino nie chce współpracować i pobierać danych.
Kod wgrany do ESP32
Kod wgrany do Arduino
Tworzę projekt który ma za zadanie zbierać dane z czujników BME280 i SGP30 po czym wyświetlać zebrane dane na wyświetlaczu i wysyłać poprzez UART dane do modułu ESP32 który wysyła je do aplikacji Blynk i wyświetla. Problem polega na połączeniu prawdopodobnie między arduino a ESP32 ponieważ przy braku komunikacji między nimi kod wgrywa się natomiast jeśli podłącze piny RX i TX żeby arduino pracowało jako master a ESP32 jako slave wyrzuca błąd:
A fatal error occurred: Failed to connect to ESP32: Download mode successfully detected, but getting no sync reply: The serial TX path seems to be down.
For troubleshooting steps visit: https://docs.espressif.com/projects/espt...oting.html
Failed uploading: uploading error: exit status 2
Dodam że moduł niepodłączony po wgraniu programu startowego Blynk łączy się prawidłowo natomiast z arduino nie chce współpracować i pobierać danych.
Kod wgrany do ESP32
Kod:
#define BLYNK_TEMPLATE_ID "TMPL4z6EtDmun"
#define BLYNK_TEMPLATE_NAME "Quickstart Template"
#define BLYNK_AUTH_TOKEN "8W_VxNM6iQo0FYvVmb9B0DtGZzdw9vvL"
#define BLYNK_PRINT Serial
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include "Adafruit_SGP30.h"
#include <LiquidCrystal_PCF8574.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#define SEALEVELPRESSURE_HPA (1013.25)
char ssid[] = "HUAWEI-A642";
char pass[] = "3892DMHN5DF";
Adafruit_BME280 bme;
Adafruit_SGP30 sgp;
LiquidCrystal_PCF8574 lcd(0x27);
BlynkTimer timer;
void myTimerEvent() {
float temperature = bme.readTemperature();
float humidity = bme.readHumidity();
float pressure = bme.readPressure() / 100.0F;
if (!isnan(temperature) && !isnan(humidity) && !isnan(pressure)) {
Serial.print("Temperature = ");
Serial.print(temperature);
Serial.println(" *C");
Serial.print("Humidity = ");
Serial.print(humidity);
Serial.println(" %");
Serial.print("Pressure = ");
Serial.print(pressure);
Serial.println(" hPa");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print("%");
lcd.setCursor(0, 2);
lcd.print("Pressure: ");
lcd.print(pressure);
lcd.print("hPa");
Blynk.virtualWrite(V0, temperature);
Blynk.virtualWrite(V1, humidity);
Blynk.virtualWrite(V2, pressure);
}
if (sgp.IAQmeasure()) {
Serial.print("eCO2: ");
Serial.print(sgp.eCO2);
Serial.print(" ppm\tTVOC: ");
Serial.print(sgp.TVOC);
Serial.println(" ppb");
lcd.setCursor(0, 3);
lcd.print("eCO2: ");
lcd.print(sgp.eCO2);
lcd.print(" ppm");
lcd.setCursor(12, 3);
lcd.print("TVOC: ");
lcd.print(sgp.TVOC);
lcd.print(" ppb");
Blynk.virtualWrite(V3, sgp.eCO2);
Blynk.virtualWrite(V4, sgp.TVOC);
}
// Wysyłanie danych do Arduino UNO przez UART
Serial.print("T:");
Serial.print(temperature);
Serial.print(" H:");
Serial.print(humidity);
Serial.print(" P:");
Serial.print(pressure);
Serial.print(" eCO2:");
Serial.print(sgp.eCO2);
Serial.print(" TVOC:");
Serial.print(sgp.TVOC);
Serial.println();
}
void setup() {
Serial.begin(115200);
while (!Serial);
Serial.println("Starting...");
Blynk.config(BLYNK_AUTH_TOKEN);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to WiFi");
if (!bme.begin(0x76)) {
Serial.println("Could not find BME280 sensor, check wiring!");
while (1);
}
if (!sgp.begin()){
Serial.println("Could not find SGP30 sensor, check wiring!");
while (1);
}
lcd.begin(20, 4);
lcd.setBacklight(255);
lcd.setCursor(0, 0);
lcd.print("BME280 & SGP30");
delay(2000);
timer.setInterval(1000L, myTimerEvent);
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
Blynk.run();
} else {
Serial.println("WiFi disconnected, trying to reconnect...");
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nReconnected to WiFi");
}
timer.run();
}
Kod wgrany do Arduino
Kod:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include "Adafruit_SGP30.h"
#include <LiquidCrystal_PCF8574.h>
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme;
Adafruit_SGP30 sgp;
LiquidCrystal_PCF8574 lcd(0x27);
void setup() {
Serial.begin(9600);
while (!Serial);
if (!bme.begin(0x76)) {
Serial.println("Could not find BME280 sensor, check wiring!");
while (1);
}
if (!sgp.begin()){
Serial.println("Could not find SGP30 sensor, check wiring!");
while (1);
}
lcd.begin(20, 4);
lcd.setBacklight(255);
lcd.setCursor(0,0);
lcd.print("BME280 & SGP30");
delay(2000);
}
void loop() {
float temperature = bme.readTemperature();
float humidity = bme.readHumidity();
float pressure = bme.readPressure() / 100.0F;
if (!isnan(temperature) && !isnan(humidity) && !isnan(pressure)) {
Serial.print("T:");
Serial.print(temperature);
Serial.print(",H:");
Serial.print(humidity);
Serial.print(",P:");
Serial.print(pressure);
Serial.print(",");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.print("%");
lcd.setCursor(0, 2);
lcd.print("Pressure: ");
lcd.print(pressure);
lcd.print("hPa");
}
if (sgp.IAQmeasure()) {
Serial.print("eCO2:");
Serial.print(sgp.eCO2);
Serial.print(",TVOC:");
Serial.print(sgp.TVOC);
Serial.println();
lcd.setCursor(0, 3);
lcd.print("eCO2: ");
lcd.print(sgp.eCO2);
lcd.print(" ppm");
lcd.setCursor(12, 3);
lcd.print("TVOC: ");
lcd.print(sgp.TVOC);
lcd.print(" ppb");
}
delay(1000);
}