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:
SSID;Kennwort;
#key;25f3a4d752xxxxxxxxxxxxxxxxxx;
#TIMEZONE;2;
- 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:
//===================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:
//#define PCM5102 //ESP32 external DAC PCM5102,MAX98357A,Cjmcu
VS1053 audio(VS1053_CS, VS1053_DCS, VS1053_DREQ, VSPI, SPI_MOSI, SPI_MISO, SPI_SCK);
//VS1053 audio(VS1053_CS, VS1053_DCS, VS1053_DREQ);
Hier haben wir zum einen Änderungen in der library ..libraries\TFT_eSPI-master\User_Setup.h:
Der Display-Chip wird ausgewählt:
// 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)
// ###### 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
Hier wird die Auflösung eingestellt:
//===============================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
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
Fehlt noch der Encoder:
Er wird aktiviert und konfiguriert in der Settings.h:
#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
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.
#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)
Gehäusestudien und Fehldrucke:
Innereien:
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