Hirdetés

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

  • Janos250

    őstag

    válasz dzz #17345 üzenetére

    Erre mindenki mást javasol.
    Az én véleményem:
    Elsődlegesen a WiFi használata. Szerverre van többféle verzió a neten, mind kicsit más.
    Én nem azokat használom, hanem az alapot, tömören a lényege:
    WiFiServer server(80);
    WiFiClient client ;

    A loopban pedig a lényeg:
    client = server.available();

    if (client.available()) { // if there's bytes to read from the client,
    char c = client.read();

    Természetesen még jönnek hozzá a sallangok, például, hogy vége akkor van, ha két cr/lf jön egymásután.

    client.println(protocolHeader);
    client.println(httpHeader);
    client.print(body01);

    A végén:
    client.stop();

    Ezt így alapszinten használom. Ha valamelyik kész httpserver kezelőt használod, az egyszerűbb, de nekem ez kényelmes, és rugalmas.
    Olyasmi, mint a PHP, hogy írod azt, amit a WEB lapodra akarsz tenni.

    Aztán ott van az OS, a freeRTOS, amire sokan mondják, hogy igazából nem is OS, mert pl. nincsenek benne userek.
    Ezzel az esetek zömében nem kell foglalkozni, nem kell, hogy a user lássa.
    Ha párhuzamosan akarsz taskokat futtatni, akkor vagy a szabványos C++ módon teszed, és az OS eldönti, melyik magra teszi:

    thread szal1(helloWorld1);
    thread szal2(helloWorld2);
    szal1.join();
    szal2.join();

    A join akkor kell, ha be kell várni az adott szál befejezését,

    vagy kreálsz neki külön taskot, például:

    xTaskCreate(
    readTempr,
    "homersekletOlvas",
    5000,
    NULL,
    6,
    &homeroTaskHandle
    );

    Én ezzel például olvasom a hőmérsékleteket mindentől függetlenül a "readTempr" függvénnyel, és belerakom globális változókba, ezért nincs szükség paraméterekre, azaz NULL nullpointer. Itt szokott egy kis gubanc lenni annak, aki először használja, mert ide a paraméterekre (pl töm, struktúra) mutató pointert írunk, de az xTaskCreate void típusú pointert kér, ezért kényszerítéssel voidosítani kell, majd a függvényben ismét kényszeríteni az adott típusra. Ha el akarod dönteni, hogy melyik magra tedd, akkor azt is megadhatod. Én például szeretem az ilyen mellékes dolgokat a 0-ás magra tenni, mert ott fut magas prioritással a WiFi kezelés, az üresjáratokban pedig az én "mellékes" függvényeim, egymástól függetlenül. Például amit az előbb írtam, abban végtelen ciklus van. Beolvassa a hőmérsékleteket, beleteszi globális változóba, vár egy időt, majd újra olvas. Ilyen esetben a wait az nem tényleges várakozás, hanem a többi tasknak adja át a vezérlést. Mivel a hőmérsékletek byte-ban vannak, nem kell semmiféle zárás, hogy ne akkor olvasson az egyik, amikor már az adatok felét átírta a másik, és akkor hülyeséget kapjon, de ha több byte-os az adat, akkor kizárás szükséges..

    Aztán célszerű a rengeteg hardver perifériát kipróbálni.

    Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.

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