ESP32 Mini + 2.8 TFT Touch Ili9341 Linki bezpośrednie.
-
- Posts: 175
- Joined: Sun Nov 08, 2020 2:54 pm
Swego czasu była partia Wemos D1 mini które miały podobne przypadłości, pomagał kondensator 470uF pomiędzy Gnd a 3.3V i działały dalej, ciężko powiedzieć czy regulator 3.3V niedomagał czy może esp pobierało więcej mA
-
- Posts: 21
- Joined: Wed Dec 13, 2023 1:08 pm
Hej, dzięki, u mnie też właśnie tak jest i nie wiem gdzie jeszcze mam problem... A dziś dopiero mam chwile by usiąść do tego jak coś wymyślę to wrzucę tunowtech wrote: ↑Thu May 09, 2024 8:10 pm Hejka, fajny projekt ale mam tez jeden problem, mianowicie program który wgrałem na esp32 dziala , wyswietla na wyswietlaczu tekst tylko po : nie wyswietla temperatury, w monitorze szeregowym normalnie odczytuje tylko na wyswietlaczu sie nie wyswietla temperatura
-
- Posts: 21
- Joined: Wed Dec 13, 2023 1:08 pm
BlueInsi wrote: ↑Wed May 15, 2024 6:50 pmHej, dzięki, u mnie też właśnie tak jest i nie wiem gdzie jeszcze mam problem... A dziś dopiero mam chwile by usiąść do tego jak coś wymyślę to wrzucę tunowtech wrote: ↑Thu May 09, 2024 8:10 pm Hejka, fajny projekt ale mam tez jeden problem, mianowicie program który wgrałem na esp32 dziala , wyswietla na wyswietlaczu tekst tylko po : nie wyswietla temperatury, w monitorze szeregowym normalnie odczytuje tylko na wyswietlaczu sie nie wyswietla temperatura
Code: Select all
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
#include <TFT_eSPI.h>
#define TFT_WIDTH 240
#define TFT_HEIGHT 320
const char* ssid = "xxxx"; // Nazwa WiFi
const char* password = "xxxx"; // Hasło WiFi
const char* host1 = "svrxxxxx.supla.org";
const int httpsPort = 443;
const String url = "/direct/xxxx/read?format=json"; // Dodaj parametr format=json
#define LED_PIN 33
TFT_eSPI tft = TFT_eSPI();
void setup() {
Serial.begin(115200); // Ustawienie prędkości portu szeregowego
tft.begin();
tft.setRotation(1);
tft.fillScreen(TFT_WHITE);
pinMode(LED_PIN, OUTPUT);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println("\nConnected to WiFi");
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
WiFiClientSecure client;
client.setInsecure(); // Zaufanie do dowolnego certyfikatu SSL (tylko do celów testowych)
Serial.print("Connecting to ");
Serial.println(host1);
if (!client.connect(host1, httpsPort)) {
Serial.println("Connection failed!");
delay(1000);
return;
}
// Tworzymy żądanie HTTP GET z dodanym nagłówkiem Accept: application/json
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host1 + "\r\n" +
"Accept: application/json\r\n" + // Dodaj nagłówek Accept: application/json
"Connection: close\r\n\r\n");
// Oczekujemy na odpowiedź z serwera
unsigned long timeout = millis();
while (client.connected() && millis() - timeout < 5000) {
if (client.available()) {
String line = client.readStringUntil('\n');
Serial.println(line); // Wyświetl linię odpowiedzi HTTP w monitorze szeregowym
if (line == "\r") {
break;
}
}
}
// Odczytujemy pozostałą część odpowiedzi (payload)
String payload;
while (client.available()) {
payload += client.readString();
}
client.stop();
Serial.println("Received payload:");
Serial.println(payload);
const size_t capacity = 2000; // Zwiększono rozmiar bufora
DynamicJsonDocument doc(capacity);
// Parsujemy tylko część JSON z odpowiedzi
int jsonStartIndex = payload.indexOf('{');
if (jsonStartIndex != -1) {
String jsonString = payload.substring(jsonStartIndex);
Serial.println("Extracted JSON:");
Serial.println(jsonString); // Debug: Wyświetl wyodrębniony JSON
DeserializationError error = deserializeJson(doc, jsonString);
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
return;
}
// Pokaż całą strukturę JSON
serializeJsonPretty(doc, Serial);
Serial.println();
// Pobrane dane z JSON - spróbujmy znaleźć odpowiedni klucz
float temperature = doc["temperature"];
Serial.print("Temperature found: ");
Serial.println(temperature);
digitalWrite(LED_PIN, HIGH);
tft.fillScreen(TFT_WHITE);
tft.setCursor(0, 0);
tft.setTextSize(2);
tft.setTextColor(TFT_BLACK);
tft.println("Supla Data:");
tft.println("-----------------");
tft.print("Temperature 1: ");
tft.println(temperature);
delay(500);
digitalWrite(LED_PIN, LOW);
} else {
Serial.println("JSON not found in the payload");
}
} else {
Serial.println("WiFi Disconnected");
delay(1000);
}
}
-
- Posts: 1970
- Joined: Sun Feb 17, 2019 6:56 am
- Location: Osielsko
Tak zapytam ten kod działa poprawnie ?? Chętnie też bym się pobawił takim wyświetlaczem.BlueInsi wrote: ↑Wed May 15, 2024 7:51 pmBlueInsi wrote: ↑Wed May 15, 2024 6:50 pmHej, dzięki, u mnie też właśnie tak jest i nie wiem gdzie jeszcze mam problem... A dziś dopiero mam chwile by usiąść do tego jak coś wymyślę to wrzucę tunowtech wrote: ↑Thu May 09, 2024 8:10 pm Hejka, fajny projekt ale mam tez jeden problem, mianowicie program który wgrałem na esp32 dziala , wyswietla na wyswietlaczu tekst tylko po : nie wyswietla temperatury, w monitorze szeregowym normalnie odczytuje tylko na wyswietlaczu sie nie wyswietla temperaturaCode: Select all
#include <Arduino.h> #include <WiFi.h> #include <WiFiClientSecure.h> #include <ArduinoJson.h> #include <TFT_eSPI.h> #define TFT_WIDTH 240 #define TFT_HEIGHT 320 const char* ssid = "xxxx"; // Nazwa WiFi const char* password = "xxxx"; // Hasło WiFi const char* host1 = "svrxxxxx.supla.org"; const int httpsPort = 443; const String url = "/direct/xxxx/read?format=json"; // Dodaj parametr format=json #define LED_PIN 33 TFT_eSPI tft = TFT_eSPI(); void setup() { Serial.begin(115200); // Ustawienie prędkości portu szeregowego tft.begin(); tft.setRotation(1); tft.fillScreen(TFT_WHITE); pinMode(LED_PIN, OUTPUT); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.print("Connecting to WiFi .."); while (WiFi.status() != WL_CONNECTED) { Serial.print('.'); delay(1000); } Serial.println("\nConnected to WiFi"); } void loop() { if (WiFi.status() == WL_CONNECTED) { WiFiClientSecure client; client.setInsecure(); // Zaufanie do dowolnego certyfikatu SSL (tylko do celów testowych) Serial.print("Connecting to "); Serial.println(host1); if (!client.connect(host1, httpsPort)) { Serial.println("Connection failed!"); delay(1000); return; } // Tworzymy żądanie HTTP GET z dodanym nagłówkiem Accept: application/json client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host1 + "\r\n" + "Accept: application/json\r\n" + // Dodaj nagłówek Accept: application/json "Connection: close\r\n\r\n"); // Oczekujemy na odpowiedź z serwera unsigned long timeout = millis(); while (client.connected() && millis() - timeout < 5000) { if (client.available()) { String line = client.readStringUntil('\n'); Serial.println(line); // Wyświetl linię odpowiedzi HTTP w monitorze szeregowym if (line == "\r") { break; } } } // Odczytujemy pozostałą część odpowiedzi (payload) String payload; while (client.available()) { payload += client.readString(); } client.stop(); Serial.println("Received payload:"); Serial.println(payload); const size_t capacity = 2000; // Zwiększono rozmiar bufora DynamicJsonDocument doc(capacity); // Parsujemy tylko część JSON z odpowiedzi int jsonStartIndex = payload.indexOf('{'); if (jsonStartIndex != -1) { String jsonString = payload.substring(jsonStartIndex); Serial.println("Extracted JSON:"); Serial.println(jsonString); // Debug: Wyświetl wyodrębniony JSON DeserializationError error = deserializeJson(doc, jsonString); if (error) { Serial.print("deserializeJson() failed: "); Serial.println(error.c_str()); return; } // Pokaż całą strukturę JSON serializeJsonPretty(doc, Serial); Serial.println(); // Pobrane dane z JSON - spróbujmy znaleźć odpowiedni klucz float temperature = doc["temperature"]; Serial.print("Temperature found: "); Serial.println(temperature); digitalWrite(LED_PIN, HIGH); tft.fillScreen(TFT_WHITE); tft.setCursor(0, 0); tft.setTextSize(2); tft.setTextColor(TFT_BLACK); tft.println("Supla Data:"); tft.println("-----------------"); tft.print("Temperature 1: "); tft.println(temperature); delay(500); digitalWrite(LED_PIN, LOW); } else { Serial.println("JSON not found in the payload"); } } else { Serial.println("WiFi Disconnected"); delay(1000); } }
https://pietras-81.aqi.eco/
-
- Posts: 21
- Joined: Wed Dec 13, 2023 1:08 pm
Tak zapytam ten kod działa poprawnie ?? Chętnie też bym się pobawił takim wyświetlaczem.
Obecnie pozmieniałem trochę, wyświetlam 8 wartości z linków bezpośrednim oraz przełączam ekrany na datę i godzinę, zwierając GPIO do masy...
Pobaw się na tym kodzie, tu trochę poprawek i odchudziłem go.. jak coś wymyślisz fajnego to pisz sam się bawię
Code: Select all
#include <Arduino.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
#include <TFT_eSPI.h>
#include <time.h>
#define TFT_WIDTH 240
#define TFT_HEIGHT 320
#define LED_PIN 33
#define GPIO_BUTTON 27 // Pin do przycisku
const char* ssid = "Nazwa WiFi";
const char* password = "hasło do WiFi";
const char* host1 = "svrXXX.supla.org";
const int httpsPort = 443;
const String urls[] = {
"/direct/1141/abc12345/read?format=json", //1
"/direct/1142/abc12345/read?format=json", //2
"/direct/1143/abc12345/read?format=json", //3
"/direct/1144/abc12345/read?format=json", //4
"/direct/1145/abc12345/read?format=json", //5
"/direct/1146/abc12345/read?format=json", //6
"/direct/1147/abc12345/read?format=json", //7
"/direct/1148/abc12345/read?format=json" //8
};
float values[8] = {0}; // Tablica na wartości (temperatury i ciśnienie)
TFT_eSPI tft = TFT_eSPI();
int screen = 0; // 0 = ekrany wartości, 1 = czas i data
bool buttonPressed = false;
void setup() {
Serial.begin(115200);
tft.begin();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
pinMode(LED_PIN, OUTPUT);
pinMode(GPIO_BUTTON, INPUT_PULLUP); // Wewnętrzny pull-up
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Łączenie z WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println("\nPołączono z WiFi");
configTime(0, 0, "pool.ntp.org", "time.nist.gov");
}
void loop() {
// Sprawdź, czy przycisk został wciśnięty
if (digitalRead(GPIO_BUTTON) == LOW) {
if (!buttonPressed) {
screen = (screen + 1) % 2; // Przełączaj między ekranami 0 i 1
tft.fillScreen(TFT_BLACK);
buttonPressed = true;
}
} else {
buttonPressed = false;
}
if (WiFi.status() == WL_CONNECTED) {
if (screen == 0) {
for (int i = 0; i < 8; i++) {
WiFiClientSecure client;
client.setInsecure();
const char* url = urls[i].c_str();
Serial.print("Łączenie z ");
Serial.println(host1);
if (!client.connect(host1, httpsPort)) {
Serial.println("Połączenie nieudane!");
delay(1000);
return;
}
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host1 + "\r\n" +
"Accept: application/json\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.connected() && millis() - timeout < 5000) {
if (client.available()) {
String line = client.readStringUntil('\n');
Serial.println(line);
if (line == "\r") {
break;
}
}
}
String payload;
while (client.available()) {
payload += client.readString();
}
client.stop();
Serial.println("Otrzymano dane:");
Serial.println(payload);
const size_t capacity = 1024;
DynamicJsonDocument doc(capacity);
int jsonStartIndex = payload.indexOf('{');
if (jsonStartIndex != -1) {
String jsonString = payload.substring(jsonStartIndex);
Serial.println("Wyodrębniony JSON:");
Serial.println(jsonString);
DeserializationError error = deserializeJson(doc, jsonString);
if (error) {
Serial.print("deserializeJson() nie powiodło się: ");
Serial.println(error.c_str());
return;
}
serializeJsonPretty(doc, Serial);
Serial.println();
// Odczytanie wartości, zależnie od indeksu
if (i == 5) {
values[i] = doc["pressure"];
Serial.print("Znaleziono wartość ciśnienia: ");
} else {
values[i] = doc["temperature"];
Serial.print("Znaleziono wartość temperatury: ");
}
Serial.println(values[i], 4); // Wypisz wartość z dokładnością do 4 miejsc po przecinku
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
} else {
Serial.println("Nie znaleziono JSON w danych");
}
}
// Wyczyść obszary, w których będą wyświetlane wartości
tft.fillRect(0, 20, TFT_WIDTH, 160, TFT_BLACK);
tft.setTextSize(2);
tft.setTextColor(TFT_WHITE);
for (int i = 0; i < 8; i++) {
String text;
if (i == 5) {
text = "Cisnienie: " + String(values[i], 2) + " hPa";
Serial.print("Wyświetlanie ciśnienia na TFT: ");
Serial.println(text);
} else {
text = "Temp " + String(i + 1) + ": " + String(values[i], 2) + " C";
Serial.print("Wyświetlanie temperatury na TFT: ");
Serial.println(text);
}
int16_t textWidth = tft.textWidth(text, 2);
int16_t x = (TFT_WIDTH - textWidth) / 2;
int16_t y = 20 + i * 20; // Odstęp między wierszami 20 pikseli
tft.setCursor(x, y);
tft.println(text);
}
} else {
updateDateTime();
}
} else {
Serial.println("WiFi rozłączone");
delay(1000);
}
}
void updateDateTime() {
time_t now = time(nullptr);
struct tm* timeinfo = localtime(&now);
tft.setTextSize(3);
tft.setTextColor(TFT_WHITE);
char timeString[12];
strftime(timeString, sizeof(timeString), "%H:%M:%S", timeinfo);
String timeText = "Czas: " + String(timeString);
char dateString[11];
strftime(dateString, sizeof(dateString), "%d-%m-%Y", timeinfo);
String dateText = "Data: " + String(dateString);
int16_t timeWidth = tft.textWidth(timeText, 4);
int16_t dateWidth = tft.textWidth(dateText, 4);
int16_t timeX = (TFT_WIDTH - timeWidth) / 2;
int16_t dateX = (TFT_WIDTH - dateWidth) / 2;
int16_t timeY = (TFT_HEIGHT - 48) / 2;
int16_t dateY = timeY + 32;
tft.fillScreen(TFT_BLACK);
tft.setCursor(timeX, timeY);
tft.println(timeText);
tft.setCursor(dateX, dateY);
tft.println(dateText);
}
-
- Posts: 1970
- Joined: Sun Feb 17, 2019 6:56 am
- Location: Osielsko
Dzięki już zamówiłem sobie wyświetlacz a zapytam kod jest pod wemosa czy esp 32 nie ukrywam ze ja tylko potrafie wgrac dlatego zadaję durne pytania.BlueInsi wrote: ↑Tue May 21, 2024 4:35 pmTak zapytam ten kod działa poprawnie ?? Chętnie też bym się pobawił takim wyświetlaczem.
Obecnie pozmieniałem trochę, wyświetlam 8 wartości z linków bezpośrednim oraz przełączam ekrany na datę i godzinę, zwierając GPIO do masy...
Pobaw się na tym kodzie, tu trochę poprawek i odchudziłem go.. jak coś wymyślisz fajnego to pisz sam się bawię
Code: Select all
#include <Arduino.h> #include <WiFi.h> #include <WiFiClientSecure.h> #include <ArduinoJson.h> #include <TFT_eSPI.h> #include <time.h> #define TFT_WIDTH 240 #define TFT_HEIGHT 320 #define LED_PIN 33 #define GPIO_BUTTON 27 // Pin do przycisku const char* ssid = "Nazwa WiFi"; const char* password = "hasło do WiFi"; const char* host1 = "svrXXX.supla.org"; const int httpsPort = 443; const String urls[] = { "/direct/1141/abc12345/read?format=json", //1 "/direct/1142/abc12345/read?format=json", //2 "/direct/1143/abc12345/read?format=json", //3 "/direct/1144/abc12345/read?format=json", //4 "/direct/1145/abc12345/read?format=json", //5 "/direct/1146/abc12345/read?format=json", //6 "/direct/1147/abc12345/read?format=json", //7 "/direct/1148/abc12345/read?format=json" //8 }; float values[8] = {0}; // Tablica na wartości (temperatury i ciśnienie) TFT_eSPI tft = TFT_eSPI(); int screen = 0; // 0 = ekrany wartości, 1 = czas i data bool buttonPressed = false; void setup() { Serial.begin(115200); tft.begin(); tft.setRotation(1); tft.fillScreen(TFT_BLACK); pinMode(LED_PIN, OUTPUT); pinMode(GPIO_BUTTON, INPUT_PULLUP); // Wewnętrzny pull-up WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.print("Łączenie z WiFi .."); while (WiFi.status() != WL_CONNECTED) { Serial.print('.'); delay(1000); } Serial.println("\nPołączono z WiFi"); configTime(0, 0, "pool.ntp.org", "time.nist.gov"); } void loop() { // Sprawdź, czy przycisk został wciśnięty if (digitalRead(GPIO_BUTTON) == LOW) { if (!buttonPressed) { screen = (screen + 1) % 2; // Przełączaj między ekranami 0 i 1 tft.fillScreen(TFT_BLACK); buttonPressed = true; } } else { buttonPressed = false; } if (WiFi.status() == WL_CONNECTED) { if (screen == 0) { for (int i = 0; i < 8; i++) { WiFiClientSecure client; client.setInsecure(); const char* url = urls[i].c_str(); Serial.print("Łączenie z "); Serial.println(host1); if (!client.connect(host1, httpsPort)) { Serial.println("Połączenie nieudane!"); delay(1000); return; } client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host1 + "\r\n" + "Accept: application/json\r\n" + "Connection: close\r\n\r\n"); unsigned long timeout = millis(); while (client.connected() && millis() - timeout < 5000) { if (client.available()) { String line = client.readStringUntil('\n'); Serial.println(line); if (line == "\r") { break; } } } String payload; while (client.available()) { payload += client.readString(); } client.stop(); Serial.println("Otrzymano dane:"); Serial.println(payload); const size_t capacity = 1024; DynamicJsonDocument doc(capacity); int jsonStartIndex = payload.indexOf('{'); if (jsonStartIndex != -1) { String jsonString = payload.substring(jsonStartIndex); Serial.println("Wyodrębniony JSON:"); Serial.println(jsonString); DeserializationError error = deserializeJson(doc, jsonString); if (error) { Serial.print("deserializeJson() nie powiodło się: "); Serial.println(error.c_str()); return; } serializeJsonPretty(doc, Serial); Serial.println(); // Odczytanie wartości, zależnie od indeksu if (i == 5) { values[i] = doc["pressure"]; Serial.print("Znaleziono wartość ciśnienia: "); } else { values[i] = doc["temperature"]; Serial.print("Znaleziono wartość temperatury: "); } Serial.println(values[i], 4); // Wypisz wartość z dokładnością do 4 miejsc po przecinku digitalWrite(LED_PIN, HIGH); delay(500); digitalWrite(LED_PIN, LOW); } else { Serial.println("Nie znaleziono JSON w danych"); } } // Wyczyść obszary, w których będą wyświetlane wartości tft.fillRect(0, 20, TFT_WIDTH, 160, TFT_BLACK); tft.setTextSize(2); tft.setTextColor(TFT_WHITE); for (int i = 0; i < 8; i++) { String text; if (i == 5) { text = "Cisnienie: " + String(values[i], 2) + " hPa"; Serial.print("Wyświetlanie ciśnienia na TFT: "); Serial.println(text); } else { text = "Temp " + String(i + 1) + ": " + String(values[i], 2) + " C"; Serial.print("Wyświetlanie temperatury na TFT: "); Serial.println(text); } int16_t textWidth = tft.textWidth(text, 2); int16_t x = (TFT_WIDTH - textWidth) / 2; int16_t y = 20 + i * 20; // Odstęp między wierszami 20 pikseli tft.setCursor(x, y); tft.println(text); } } else { updateDateTime(); } } else { Serial.println("WiFi rozłączone"); delay(1000); } } void updateDateTime() { time_t now = time(nullptr); struct tm* timeinfo = localtime(&now); tft.setTextSize(3); tft.setTextColor(TFT_WHITE); char timeString[12]; strftime(timeString, sizeof(timeString), "%H:%M:%S", timeinfo); String timeText = "Czas: " + String(timeString); char dateString[11]; strftime(dateString, sizeof(dateString), "%d-%m-%Y", timeinfo); String dateText = "Data: " + String(dateString); int16_t timeWidth = tft.textWidth(timeText, 4); int16_t dateWidth = tft.textWidth(dateText, 4); int16_t timeX = (TFT_WIDTH - timeWidth) / 2; int16_t dateX = (TFT_WIDTH - dateWidth) / 2; int16_t timeY = (TFT_HEIGHT - 48) / 2; int16_t dateY = timeY + 32; tft.fillScreen(TFT_BLACK); tft.setCursor(timeX, timeY); tft.println(timeText); tft.setCursor(dateX, dateY); tft.println(dateText); }
https://pietras-81.aqi.eco/
-
- Posts: 1970
- Joined: Sun Feb 17, 2019 6:56 am
- Location: Osielsko
-
- Posts: 21
- Joined: Wed Dec 13, 2023 1:08 pm
Nie, Esp32 mini D1 ale to bez różnicy jakiego użyjesz. Piny definiujesz w bibliotece bądź wpisujesz takie jak masz w bibliotece tylko musisz „odkomentować” odpowiednią opcję. Podpinasz normalnie pod odpowiednie piny wyświetlacza i esp