duminică, 22 februarie 2026

O simpla statie meteo cu display OLED

Va salut ! Actualizez blogul cu o simpla "statie meteo" (denumire cam pompoasa...), creata cu un Wemos D1 mini (da, am multe montaje cu aceasta mica bijuterie !) si un display OLED SH1106. Datele meteo sunt furnizate de OpenWeather. Necesita imbunatatiri (ora automata vara/iarna), dar este un punct de plecare pentru cine vrea sa experimenteze. Succes !! 

 




 


//cu date meteo de la OpenWeather


#include "Arduino.h"
#include <ESP8266WiFi.h>
#include <WiFiManager.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <ArduinoJson.h>
#include <SH1106Wire.h>
#include <ESP8266HTTPClient.h> // Definirea pinilor pentru display OLED #define OLED_SDA D2 #define OLED_SCL D1 // Inițializarea display-ului OLED SH1106Wire display(0x3c, OLED_SDA, OLED_SCL); // Definirea serverului NTP și offset-ului de timp WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "pool.ntp.org", 7200, 60000); const char* ssid = "your_ssid"; // Introduceti numele retelei WiFi const char* password = "your_psw"; // Introduceti parola retelei WiFi const char* zileleSaptamanii[] = {"Duminica", "Luni", "Marti", "Miercuri", "Joi", "Vineri", "Sambata"}; const String apiKey = "6d34f8b43ddcbe0377b78a29108d2196"; //creati-va propriu apiKey !!! const String city = "Ploiesti"; // setati-va locatia !!! String temperatura = ""; String stareVreme = ""; String formatTime(int hh, int mm, int ss) { String timeStr = ""; if (hh < 10) timeStr += "0"; timeStr += String(hh) + ":"; if (mm < 10) timeStr += "0"; timeStr += String(mm) + ":"; if (ss < 10) timeStr += "0"; timeStr += String(ss); return timeStr; } void setup() { Serial.begin(115200); // Conectare la WiFi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Se conecteaza la WiFi..."); } Serial.println("Conectat la WiFi"); timeClient.begin(); display.init(); display.flipScreenVertically(); display.setFont(ArialMT_Plain_10); } void obtineVremea() { WiFiClient client; HTTPClient http; String url = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "&appid=" + apiKey + "&units=metric&lang=ro"; http.begin(client, url); int httpCode = http.GET(); if (httpCode > 0) { String payload = http.getString(); DynamicJsonDocument doc(1024); deserializeJson(doc, payload); temperatura = String(doc["main"]["temp"].as(), 1) + " °C"; stareVreme = doc["weather"][0]["description"].as(); } http.end(); } void loop() { timeClient.update(); int hh = timeClient.getHours(); int mm = timeClient.getMinutes(); int ss = timeClient.getSeconds(); int zi = timeClient.getDay(); String currentTime = formatTime(hh, mm, ss); obtineVremea(); display.clear(); display.setTextAlignment(TEXT_ALIGN_CENTER); display.setFont(ArialMT_Plain_10); display.drawString(64, 0, zileleSaptamanii[zi]); display.setFont(ArialMT_Plain_24); display.drawString(64, 10, currentTime); display.setFont(ArialMT_Plain_16); display.drawString(64, 35, temperatura); display.setFont(ArialMT_Plain_10); display.drawString(64, 50, stareVreme); display.setFont(ArialMT_Plain_16); display.display(); delay(1000); }

Niciun comentariu:

Trimiteți un comentariu