Hirdetés

Új hozzászólás Aktív témák

  • cog777

    senior tag

    válasz Istv@n #22799 üzenetére

    "A freertos takokból meg lehet egyáltalán hívni egy "sima" függvényt?"
    Hello, persze. Szerintem probald ki elorol felepiteni a programot, nem mindent atmasolva. Sok a hibalehetoseg es igy nehez segiteni.

    A setup-ban latom a Wifi csatlakozast, az jol mukodik, ido beallitas stb.
    Az MQTT, adatbazis kapcsolodas, szenzorok kezelesehez hozzarendelhetsz egy-egy orokke mukodo FreeRTOS feladatot. Ezekbol nem kell kilepni, mert futhatnak folyamatosan.

    Itt van egy FreeRTOS pelda, probald eloszor ki, ket feladatot futtatva:

    Ha ez mukodik, akkor elkezdheted megirni a programodat, pl MQTT. A kliensnek itt a library-ja, letoltod es megnezed az mqtt_basic peldat.
    Latod hogy meg kell hivni a loop-ot:

    if (!client.connected()) {
    reconnect();
    }
    client.loop();

    Szoval az egesz MQTT kezelest beleteheted egy FreeRTOS task-ba. Tehat:

    void mqtt_task(void *param)
    {
    EthernetClient ethClient;
    PubSubClient client(ethClient);

    while(1)
    {
    if (!client.connected()) {
    reconnect();
    }
    client.loop();
    }
    }

    Szenzor feladatnak is keszithetsz sajat feladatot, es elindithatod akar a masik CPU magra is teheted.

    Az adatokat megoszthatod atomic-al a szenzor es az MQTT feladatok kozott:
    std::atomic<float> homerseklet;

    Komolyabb kommunikaciot a feladatok kozott queue-val szoktak (xQueueCreate-ra keress ra).

    Tovabba erdemes a feladatokat kulon .cpp es .h fajlokba tenni, igy szetvalasztva logikailag a programot.

    Most ennyi idom van, esetleg irhatnal par szot mire kell az MQTT es az adatbazis?
    FreeRTOS programozasnal figyelj a stack beallitasra. Erdemes lepesrol lepesre felepiteni es tesztelni a programot mert nagyon nehez megtalalni a hibat ha egybol mindent beleteszel. Asszem debuggolni lehet ha eredeti Arduino ESP32-t vasarolsz.

Új hozzászólás Aktív témák