Sonntag, 6. August 2023

Meteo, Wetterstation mit Radio

 

Ich möchte wieder ein neues Softwarepaket vorstellen. Den Hinweis bekam ich wieder von Siegfried (Siegfried55), der mich auch beim Aufbau unterstützte, wofür ich mich sehr bedanke!

Advanced ESP32 Internet Weather Station with 5 day Forecast

Es handelt sich erst mal um eine sehr aufwändige und vielseitige Wetterstation. Nebenbei kann sie per Schreibfaul Library Internetradio empfangen und unterstützt viele bekannte AM/FM Bausteine mit I2C, Medienwiedergabe von SD-Card und eine Diashow. Eine Vielzahl von Sensoren kann dazugebaut werden, und bestimmt kann sie noch viel mehr was ich noch nicht herausgefunden habe. Denn das Dumme ist: es gibt keine richtige Dokumentation. Man muss sich also durch den Quellcode wühlen um seine gewünschte Hardware zu konfigurieren. Der russische Entwickler ist zwar hilfsbereit, die Kommunikation gestaltet sich aber als nicht so einfach. Dafür ist das Paket mit mehr als 30 Teilprogrammen sehr strukturiert und logisch aufgebaut. Etwas Hilfe findet man in den Aufbaubildern im Ordner ...meteo\!faq_schemes.

Mein Bericht kann das Handbuch nicht ersetzen. Ich kann lediglich zeigen wie ich meine Komponenten eingebunden habe und damit helfen ein Gefühl für die Software zu bekommen.

Erst mal grundsätzliches. Als Entwicklungsumgebung eignet sich die Arduino IDE 1.8.19 mit dem ESP32-Core 2.0.4, da Bilder und Konfigurationsdateien im Spiffs abgelegt werden und dieses mit den IDE 2.x-Versionen nicht so gut gehandhabt werden kann. Bei einem Kompilerabbruch mit ctime-Error muss die Stoffregen-Library auf min. Version 1.6.1 aktualisiert werden (Die Fehlersuche beschäftige mich mehrere Tage!). Als Dateisystem wählt man bei einem 4MB Board Huge APP. Dabei kann man seine WLAN-Daten gleich in die Textdatei data/wifi eintragen:

Code:
SSID;Kennwort;
 
oder WLAN per AP-Mode konfigurieren unter der etwas seltsamen IP 192.168.11.11. Diese musste ich im Handy erst als vertrauenswürdig zulassen:

Nach dem ersten Hochladen kann man das Spiffs über das Webinterface pflegen, braucht also nicht mehr dringend den ESP32 Sketch Data Upload der IDE. Ebenso kann man die Datei ..data/config.txt bereits vorbereiten. Hier ist der OpenWeather API-Key einzutragen:
 
Code:
#key;25f3a4d752xxxxxxxxxxxxxxxxxx;
 
und die Zeitzone:

Code:
#TIMEZONE;2;
 
Mein Beispiel orientiert sich an folgender Hardware:

- der Sketch soll an meine ESP32 Platine angepasst sein ohne dass etwas an der Platine umgelötet werden muss


- demzufolge wird als Audio-Baustein ein VS1053 eingesetzt

- zur Bedienung gibt es nicht viele Möglichkeiten. Ein Taster, wobei dieser auch ein Sensor sein darf, auf gpio13 / touch04, oder ein Drehencoder. In meinem Fall also die Encoder-Lösung.

- das Display sollte aufgrund der vielen Informationen nicht zu klein ausfallen. Ich verwendete zuerst ein 3,5" RPI-Display aus meinem Bestand. Da dieses aber vermutlich wegen eines Defektes ein Problem mit Flackern und zu wenig Kontrast hatte disponierte ich um auf ein 3,5" SPI-Display. Aus Platzgründen bekam es eine abgewinkelte Stiftleiste:




Beginnen wir mit dem VS1053:

Im Programmteil settings_audio.h wird der VS1053 aktiviert und konfiguriert. Passend zu meiner Platine sieht das so aus:

Code:
//===================VS1053b======VS1053b===VS1053b=====================
#define vs1053
#ifdef vs1053
//#define SD_CS          5
#define SPI_MOSI      23
#define SPI_MISO      19
#define SPI_SCK       18
#define VS1053_CS     5 //12  xcs
#define VS1053_DCS    32 // 13 xdcs
#define VS1053_DREQ   4 // 36
//xreset=EN
#endif //vs1053
//----------------------------------------------

 der I2S-DAC wird deaktiviert:

 

Code:
//#define PCM5102 //ESP32 external DAC PCM5102,MAX98357A,Cjmcu
 
in dem library-Paket ist die Schreibfaul vs1053_ext.h nicht enthalten. Damit die aktuellste Version (im Moment 6.5.23) verwendet werden kann muss in der Meteo.ino die Klassendeklaration (heißt das so?) geändert werden. Die Originalzeile ist auskommentiert:

Code:
VS1053 audio(VS1053_CS, VS1053_DCS, VS1053_DREQ, VSPI, SPI_MOSI, SPI_MISO, SPI_SCK);
//VS1053 audio(VS1053_CS, VS1053_DCS, VS1053_DREQ);
 
Weiter geht es mit dem Display:

Hier haben wir zum einen Änderungen in der library ..libraries\TFT_eSPI-master\User_Setup.h:

Der Display-Chip wird ausgewählt:

Code:
// Only define one driver, the other ones must be commented out
//#define ILI9341_DRIVER       // Generic driver for common displays
//#define ILI9341_2_DRIVER     // Alternative ILI9341 driver, see https://github.com/Bodmer/TFT_eSPI/issues/1172
//#define ST7735_DRIVER      // Define additional parameters below for this display
//#define ILI9163_DRIVER     // Define additional parameters below for this display
//#define S6D02A1_DRIVER
//#define RPI_ILI9486_DRIVER // 20MHz maximum SPI
//#define HX8357D_DRIVER
//#define ILI9481_DRIVER
//#define ILI9486_DRIVER
#define ILI9488_DRIVER     // WARNING: Do not connect ILI9488 display SDO to MISO if other devices share the SPI bus (TFT SDO does NOT tristate when CS is high)
 
und die Pin definiert:

Code:
// ###### EDIT THE PIN NUMBERS IN THE LINES FOLLOWING TO SUIT YOUR ESP32 SETUP   ######

// For ESP32 Dev board (only tested with ILI9341 display)
// The hardware SPI can be mapped to any pins

#define TFT_MISO 19
#define TFT_MOSI 23
#define TFT_SCLK 18
#define TFT_CS   15  // Chip select control pin
#define TFT_DC   2  // Data Command control pin
//#define TFT_RST   4  // Reset pin (could connect to RST pin)
#define TFT_RST  -1  // Set TFT_RST to -1 if display RESET is c
onnected to ESP32 board RST
 
Weiter geht es in der Settings.h in Meteo:

Hier wird die Auflösung eingestellt:

Code:
//===============================TFT======================================
//выбрать разрешение дисплея / to choose resolution of the display
//настройки дисплея в(display settings in) User_Setup_Select.h и \User_Setups\Setup_XX.h
//=====================================================================
//#define tft_320_240 //Setup1_ILI9341
//    или OR
#define tft_480_320  //Setup20_ILI9488 (8266) Setup21_ILI9488 (esp32) Setup13_ILI9481_Parallel
//#define tft_400_300 //epd 4.2" GxEPD2_420

//#define  two_tft   //2xtft_320_240 or 2xtft_480_320
//#define lcd_display  //1602 or 2004
//#define no_tft //OFF  all display
 
bei Bedarf wird der Bildschirm gedreht:
  
Code:
const uint8_t rotation = 3; //1,3 3-SD сверху/3-SD top (not EPD) tft_320_240 or tft_480_320
//#define tft_no_invert     //если цвета в инверсии раскомментировать/if the colors in the inversion are uncomment
 
Das Backlight kann in der Settings_sensor.h tageszeitabhängig gesteuert werden.

Fehlt noch der Encoder:

Er wird aktiviert und konfiguriert in der Settings.h:

Code:
#define encoder // ESP8266 GyverEncoder если есть энкодер раскомм=ть

#if defined (encoder)
#ifdef ESP32
#define CLK 25//32
#define DT  26//33
#define SW  27 //кнопка
#endif
#ifdef ESP8266
#define CLK D1
#define DT  D2
#define SW  D4 //кнопка
#endif //ESP8266
#define TYPE 1 // 0 или 1 (полушаговый энкодер или полношаговый) более подробно смотри в GyverEncoder.h
 
Ein kurzer Druck auf den Encoder schaltet auf den nächsten screen.

Das Radioteil wird eingeschaltet indem man den Encoder kurz gedrückt hält bis in der linken oberen Ecke des Bildschirms "www" erscheint.

Durch Drehen des Encoders wird die Sendernummer in der playlist vorgewählt und durch Druck bestätigt. Die playlist wird im Data Ordner (bzw. Spiffs) in der Datei i_stat.txt editiert.

Drehen des Encoders während er gedrückt wird ändert die Lautstärke. Ein einfacher Tastendruck schaltet wieder auf die Wetterstation und das Radio verstummt.

Sensoren

Es können die üblichen Sensoren für Temperatur, Luftdruck oder Luftfeuchtigkeit angebaut werden (Eindraht oder I2C). Zuständig ist der Programmteil Settings_sensor.h.  Ein externer Sensor über ein RF Modul 433 MHz / NRF 24 ist zwar möglich, in den Ausgabemasken ist aber kein Feld dafür vorgesehen. Die Ausgabe beschränkt sich also auf einen Alarm, falls ein solcher definiert ist.

Ich entschied mich für einen digitalen Temperatur- und Luftfeuchtesensor AM2301 / DHT21. An den Sensoreingängen des ESP32 gpio12, 14 und 36 verursachte dieser eine Bootschleife. Auf RX2 entsprechend gpio16 funktioniert der Sensor aber.
 
 
Code:
#define pin_dht 16   //room   выьрать ниже DHTTYPE (DHT 11 or DHT 22 or DHT 21)
#ifdef pin_dht
//#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
#define DHTTYPE DHT21   // DHT 21 (AM2301)
 
Dann kommen wir zu den Bildern:

Gehäusestudien und Fehldrucke:


Innereien:



das Display:

der angebaute Sensor:

Auf der anderen Seite der Lautsprecher:

Der Radio-Screen:

Wetter- und Uhrenscreens. In den kleinen eingerahmten Fenstern Temperatur und Luftfeuchte vom Sensor:

 
Die aktuellen Druckdateien:


.zip   meteo-wetterstation.zip (Größe: 486,55 KB / Downloads: 7)

Ich habe noch weitere Pläne mit dem Sketch. Er soll noch auf ein Pintel-Board gespielt werden, und mit den FM/AM-Bausteinen will ich experimentieren. Neuere Erkenntnisse werde ich in diesem thread zeigen.

Ironie des Schicksals: Eine Wetterstation war auch der Wunsch meiner Frau. Ich konnte mit der Meteo-Station aber nicht punkten. Ein Fertiggerät aus dem Kaufhaus mit größerem Bildschirm und funktionierendem Außensensor ist im Moment so ab 12 Euro zu bekommen. Natürlich ohne WLAN und sonstigen Radiofunktionalitäten und damit für mich persönlich reizlos.







 

Keine Kommentare:

Kommentar veröffentlichen