CrowPanel Advance 7.0 Update: Änderungen in den Versionen 1.2 und 1.3

In meinem ursprünglichen Artikel zum CrowPanel Advance 7.0 Display hatte ich bemängelt, dass die Hintergrundbeleuchtung nicht per PWM regelbar ist. Dadurch war das Display nicht für meine Wetterstation geeigent, obwohl ich das Konzept mit den erweiterbaren Modulen sehr interessant finde. Elecrow hat auf das Feedback reagiert und mit den Hardware-Revisionen 1.2 und 1.3 wurden dieses Problem gelöst. Was sich konkret geändert hat und ob das Display jetzt für meine Wetterstation geeignet ist, zeige ich euch in diesem Update-Artikel.

Der Aufbau der neuen CrowPanel Advance Displays

Die Hardware ist bei beiden Displays grundsätzlich identisch. Die zentrale Komponente bildet wieder ein ESP32-S3 in Form eines ESP32-S3-WROOM-1-N16R8 Moduls und ein 7 Zoll IPS Display. Dem Mikrocontroller stehen 512KB SRAM, 8MB PSRAM und 16MB Flash-Speicher zur Verfügung. Auch bei diesen Modellen werden von den 36 GPIO-Pins drei Pins für das Octal SPI PSRAM verwendet. Das folgende Diagramm veranschaulicht, wie die verbleibenden 33 GPIO-Pins mit den restlichen Komponenten des Displays verbunden sind.

Vergleicht man dieses Diagramm mit der Version 1.0 des Displays, erkennt man auf den ersten Blick keinen großen Unterschied. Tatsächlich hat Elecrow im Grunde auch nur eine Komponente verändert, und zwar den I/O-Expander. Im alten Display wurden einige Signale durch einen PCA9557 8-Bit I/O-Expander gesteuert. Dieses Bauteil steuert 8 Ein-/Ausgänge und wird über den I2C Bus gesteuert. In den neuen Displays wird das jetzt von einem STC8H1K28 Mikrocontroller erledigt. Es handelt sich dabei um einen 8051-kompatiblen Mikrocontroller, der auch über den I2C Bus angesteuert wird und im im Slave-Modus läuft. Dadurch ist die Steuerung deutlich flexibler geworden. Die Helligkeit des Displays wird jetzt beispielsweise über die PWM Peripherie des STC8H1K28 gesteuert. 

Auch ein Blick auf das Board, in diesem Fall Version 1.2, zeigt, das das alte und die neuen Displays beinahe identisch sind.

CrowPanel Advance 7“ HMI ESP32-S3 AI-Powered IPS Touch Screen

Noch weniger Unterschiede gibt es zwischen der Version 1.2 und 1.3 des Displays. Die Hardware der beiden Displays ist im Grunde identisch. Sie unterscheiden sich lediglich durch die Firmware des STC8H1K28. Die Version 1.2 kann die Helligkeit lediglich in 6 Stufen steuern während die Version 1.3 jetzt 246 Stufen bietet. Da es mit den üblichen Mitteln nicht möglich ist, diese Firmware zu ändern, musste Elecrow wohl eine neue Version des Displays produzieren.

Demo Applikation mit ESP-IDF und LVGL

Um die neue Steuerung der Helligkeit auszuprobieren, habe ich eine kleine Applikation geschrieben, mit der man die Uhr stellen und die Helligkeit regeln kann. Das Layout der Applikation habe ich mit mit EEZ-Studio erstellt, da ich mit der Preisgestaltung von SquareLine Studio nicht einverstanden bin und EEZ-Studio eine vollwertige Alternative ist - mit dem Unterschied, dass es Open Source Software ist.

EEZ-Studio Demo Applikation

Um die Helligkeit steuern oder den Buzzer einschalten zu können, habe ich einen Treiber zur Ansteuerung des STC8H1K28 geschrieben. Der Code dafür ist sehr überschaubar und sendet nur bestimmte Werte an das I2C Gerät, das die Adresse 0x30 hat:

#include "stc8h1k28.h"
#include "driver/gpio.h"
#include "esp_log.h"
#include "esp_check.h"
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"

static const char *TAG = "STC8H1K28";


esp_err_t stc8h1k28_init(i2c_master_bus_handle_t bus_handle, stc8h1k28_handle_t *extender_handle, const i2c_device_config_t *config) {
    ESP_RETURN_ON_FALSE(bus_handle && extender_handle && config, ESP_ERR_INVALID_ARG, TAG, "Invalid arguments");

    stc8h1k28_dev_t *dev = calloc(1, sizeof(stc8h1k28_dev_t));
    ESP_RETURN_ON_FALSE(dev, ESP_ERR_NO_MEM, TAG, "Memory allocation failed");

    // Initialize I2C device
    ESP_RETURN_ON_ERROR(
        i2c_master_bus_add_device(bus_handle, config, &dev->i2c_dev),
        TAG, "Failed to add I2C device");

    *extender_handle = dev;
    ESP_LOGI(TAG, "stc8h1k28 initialized successfully");
    return ESP_OK;
}

void stc8h1k28_deinit(stc8h1k28_handle_t dev) {
    if (dev) {
        if (dev->i2c_dev) {
            i2c_master_bus_rm_device(dev->i2c_dev);
        }
        free(dev);
    }
}

esp_err_t stc8h1k28_set_brightness(stc8h1k28_handle_t dev, uint8_t brightness) {

    ESP_RETURN_ON_ERROR(
        i2c_master_transmit(dev->i2c_dev, &brightness, 1, -1),
        TAG, "Failed to set time");
    return ESP_OK;
}

esp_err_t stc8h1k28_buzzer_on(stc8h1k28_handle_t dev) {

    uint8_t value = 246;
    ESP_RETURN_ON_ERROR(
        i2c_master_transmit(dev->i2c_dev, &value, 1, -1),
        TAG, "Failed to set time");
    return ESP_OK;
}

esp_err_t stc8h1k28_buzzer_off(stc8h1k28_handle_t dev) {

    uint8_t value = 247;
    ESP_RETURN_ON_ERROR(
        i2c_master_transmit(dev->i2c_dev, &value, 1, -1),
        TAG, "Failed to set time");
    return ESP_OK;
}


Elecrow bietet auf ihrer Wiki Seite und auf GitHub sehr viele Informationen zu den Displays. Auch mein Code für die Version 1.3 des Displays ist auf GitHub verfügbar.

Damit wäre die neueste Version des Displays also gut für die Wetterstation geeignet, da die Regelung der Hintergrundbeleuchtung der einzige Kritikpunkt an der Version 1.0 (und auch 1.2) war. Derzeit migriere ich das Layout der Wetterstation von SquareLine Studio nach EEZ-Studio, und sobald das fertig ist, werde ich den Code für das Elecrow Display anpassen.

Konversation wird geladen