Tryb konfiguracji - brak sekcji Wi-Fi

User avatar
PatrikCZ
Posts: 6
Joined: Fri Oct 07, 2022 3:11 pm

Post

Napisałem prostą aplikację do pomiaru temperatury i wilgotności za pomocą Si7021 i w trybie konfiguracji sekcja ustawień sieci WiFi nie jest wyświetlana, patrz zdjęcie. Nie mogę zrozumieć, gdzie mogę się mylić :( . Czy ktoś ma jakieś pomysły? Dziękuję za pomoc.
Odczyt danych z czujnika działa poprawnie zgodnie z dziennikiem, dziennik pokazuje również, że brakuje nazwy sieci WiFi i hasła....
ConfigMode.jpg

Code: Select all

#define STATUS_LED_GPIO 2
#define SI7021_DATA_GPIO 14

#include <SuplaDevice.h>

#include <supla/device/status_led.h>
#include <supla/device/supla_ca_cert.h>

#include <supla/storage/littlefs_config.h>

#include <supla/network/esp_wifi.h>
#include <supla/network/esp_web_server.h>
#include <supla/network/html/device_info.h>
#include <supla/network/html/protocol_parameters.h>
#include <supla/network/html/status_led_parameters.h>
#include <supla/network/html/wifi_parameters.h>

#include <SensorSi7021.h>

// This class provides Wi-Fi network connectivity for your device
Supla::ESPWifi wifi;

// This class provides configuration storage (like SSID, password, all
// user defined parameters, etc.). We use LittleFS.
Supla::LittleFsConfig configSupla;

Supla::Device::StatusLed statusLed(STATUS_LED_GPIO, true);

// This class provides web server to handle config mode
Supla::EspWebServer suplaServer;

// Komponenty HTML www (zobrazují se v sekcích podle pořadí vytvoření)
Supla::Html::DeviceInfo htmlDeviceInfo(&SuplaDevice);
Supla::Html::WifiParameters htmlWifi();
Supla::Html::ProtocolParameters htmlProto;
Supla::Html::StatusLedParameters htmlStatusLed(); 

void setup() {
      
    statusLed.setMode(Supla::LED_OFF_WHEN_CONNECTED);
 
    Serial.begin(115200);
    
    new Supla::Sensor::SensorSi7021(SI7021_DATA_GPIO, PIN_A0);

    SuplaDevice.setName("TempStation");
    
    // Configure default Supla CA certificate
    SuplaDevice.setSuplaCACert(suplaCACert);
    SuplaDevice.setSupla3rdPartyCACert(supla3rdCACert);

    SuplaDevice.begin();

}

void loop() {
    SuplaDevice.iterate(); 
}
Lista logów:
Storage initialization
readStorage: 8; Read: [53 55 50 4C 41 1 0 1 ]
Storage: Number of sections 1
Reading section: 0
readStorage: 7; Read: [3 0 0 FF FF FF FF ]
Section type: 3; size: 0
storedCRC 65535, CRC calc 65535
LittleFsConfig: config file size 378
LittleFsConfig: initializing storage from file...
LittleFsConfig: init result 1
Config incomplete: missing Wi-Fi SSID
LAST STATE ADDED: Missing Wi-Fi SSID
Config incomplete: missing Wi-Fi password
LAST STATE ADDED: Missing Wi-Fi password
Security level: Supla CA
RemoteDeviceConfig: Registering field 0x00000001
Channel[0] temperature correction 0.00
Channel[0] humidity correction 0.00
Validating storage state section with current device configuration
Storage state section validation successful
Channel(0) value changed to temp(-275.00), humi(-1.00)
Config incomplete: deviceMode = CONFIG
GUID: 0C3FBE037E80AAC040E830CDD3B0FE38
Device name: TempStation
Device software version: SDK 24.11.04-dev
Initializing network layer
[Wi-Fi] Network AP/hostname: TEMPSTATION-C8C9A36AD9E0
Using Supla protocol version 23
Current status: [5] SuplaDevice initialized
Wi-Fi SSID missing
WiFi: enter config mode with SSID: "TEMPSTATION-C8C9A36AD9E0"
Starting local web server
LAST STATE ADDED: Config mode
Current status: [40] Config mode
Channel(0) value changed to temp(25.60), humi(41.40)
Channel(0) value changed to temp(25.60), humi(41.40)
...
You do not have the required permissions to view the files attached to this post.
User avatar
lukfud
Posts: 2480
Joined: Thu Nov 23, 2017 11:33 pm
Location: Warszawa
Has thanked: 13 times
Been thanked: 11 times

Post

PatrikCZ wrote: Tue Feb 25, 2025 3:00 pm
Zmień kolejność

Code: Select all

#include <supla/network/html/device_info.h>
#include <supla/network/html/wifi_parameters.h>
#include <supla/network/html/protocol_parameters.h>
#include <supla/network/html/status_led_parameters.h>
https://www.facebook.com/groups/supladiy
https://www.facebook.com/groups/suplazamel
https://www.facebook.com/groups/suplaauraton
https://smartnerzeczy.pl
User avatar
PatrikCZ
Posts: 6
Joined: Fri Oct 07, 2022 3:11 pm

Post

Działa! Świetna robota, wielkie dzięki! :)
User avatar
klew
Posts: 13909
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 135 times
Been thanked: 137 times

Post

Include'y nie mają tu nic do rzeczy.

Problem jest tu:

Code: Select all

Supla::Html::DeviceInfo htmlDeviceInfo(&SuplaDevice); 
Supla::Html::WifiParameters htmlWifi(); 
Supla::Html::ProtocolParameters htmlProto;
Supla::Html::StatusLedParameters htmlStatusLed(); 
Pierwsza linia tworzy statyczny obiekt DeviceInfo - tutaj problem może być ze wskaźnikiem na SuplaDevice. W momencie tworzenia DeviceInfo, klasa SuplaDevice może nie być utworzona (oba obiekty są tworzone statycznie, a przy statycznych obiektach, nie ma gwarancji kolejności tworzenia obiektów).

Drugi problem to druga i czewarta linijka - to nie jest tworznie obiektów WifiParameters ani StatusLedParameters, tylko deklaracja nowych metod, zwarcających te obiekty. Kompiluje się to, bo ich nigdzie nie używasz, ale obiekty nie powstają ;P

Takie obiekty możesz stworzyć tak:

Code: Select all

Supla::Html::WifiParameters htmlWifi;  // bez nawiasów
Supla::Html::WifiParameters htmlWifi{};  // z klamrami
Najprościej wyrzuć te linie i dodaj obiekty w metodzie setup() przy pomocy operatora new.

Poprawię przykłady w bibliotece, bo tam są one tworzone jako obiekty statyczne, co może czasem nie zadziałać (z uwagi na ten problem z inicjalizacją obiektów statycznych).
Najlepsze suple dla Twojego domu :mrgreen:
User avatar
PatrikCZ
Posts: 6
Joined: Fri Oct 07, 2022 3:11 pm

Post

Miałem wątpliwości, czy kolejność wstawiania plików nagłówkowych include może rozwiązać problem. Ponieważ jednak eksperymentowałem z kolejnością tworzenia obiektów (wifi, suplaServer, configSupla), aplikacja po kompilacji nadal działała (co potwierdza Twoje wyjaśnienie o losowej kolejności przy tworzeniu obiektów statycznych).

Podczas pisania linii

Code: Select all

Supla::Html::WifiParameters htmlWifi(); 
Supla::Html::StatusLedParameters htmlStatusLed();
zakładałem, że obiekty htmlWifi i htmlStatusLed zostały utworzone (nawiasy interpretowałem jako wywołanie domyślnego konstruktora), dzięki za wyjaśnienie.

Spróbowałem ponownie edytować kod zgodnie ze zaktualizowanym przykładem (https://github.com/SUPLA/supla-device/b ... rement.ino) i aplikacja działa poprawnie.

Jeszcze raz dzięki!

Return to “Pomoc”