Skocz do zawartości

Pomocna odpowiedź

@99teki no niestety - większość bibliotek działa tylko z githuba bo arduinowscy paczkodzieje przespali jeden etap rozwoju, a np. IRremote czy AsyncHTTPSClient raczej nie ma szans jak ktoś nie zrobi działającego forka 😞

(edytowany)

- proszę o podanie żródła biblioteki BMP280.

- znalazłem jakieś biblioteki dla BMP280 ale dalej mam 

"exit status 1

Compilation error: no matching function for call to 'BMP280::BMP280(uint8_t&)'

"

moduł thermo.cpp , line 47

Edytowano przez 99teki

Na razie 99.9 % działa na zwykłym devkicie i na xiao s3 (docelowe moduły). 80% działa na zdalnym czujniku, ale to kwestia dopasowania do C3 i Lolin Lite.

Nie udało mi sie uruchomić komunikacji z esp8266, ale chyba to oleję: różnica ceny najtańszego modułu 8266 i 32C3 jest z gatunku pomijalnych...

 

No, bliżej końca softu - na razie leży tylko współpraca z TalkBackiem na Androidzie, ale on się gubi jeśli usuwa się kontener div zawierający zogniskowany element (button). Do dogrania.

Kodu na razie nie wrzucam, ale taka ciekawostka do wykorzystania w ESPAsyncWebServer. Często bowiem zachodzi potrzeba przekazania do przeglądarki jakiegoś tekstu w JSONie, Funkcja robi to eskejpując wszystkie podejrzane znaczki i dodając przy okazji cudzysłów na początku i na końcu:

static void jsonstr(AsyncResponseStream *stream, const char *txt)
{
    uint8_t znak;
    uint16_t znak16;
    stream->printf("\"");
    while (znak=*txt++) {
        if (znak == '"' || znak=='\'') {
            stream->printf("\\%c",znak);
            continue;
        }
        if (znak == '\n') {
            stream->printf("\\n");
            continue;
        }
        if (znak == '\\') {
            stream->printf("\\\\");
            continue;
        }
        if (znak >= 0x20 && znak <=0x7e) {
            stream->printf("%c",znak);
            continue;
        }
        if (!(znak & 0x80)) {
            stream->printf("\\u%04x",znak);
            continue;
        }
        int n;
        if ((znak & 0xe0) == 0xc0) n=1;
        else if ((znak & 0xf0) == 0xf0) n=2;
        else break;
        znak16 = znak & 0x1f;
        while (n--) {
            znak=*txt;
            if ((znak & 0xc0) != 0x80) break;
            znak16 = (znak16 << 6) | (znak & 0x3f);
            txt++;
        }
        stream->printf("\\u%04x",znak16);
    }
    stream->printf("\"");
}

Przykładowe wykorzystanie:

Chcemy otrzymać coś takiego:

{"idx":numerek,"content":treść}

Funkcja która zwraca to do przeglądarki może wyglądać tak:

static void handleGetCostam(AsyncWebServerRequest *request) {
    AsyncResponseStream *response = request->beginResponseStream("application/json");
    int jakis_indeks = 17;
    const char *jakis_tekst="To jest \"Jakiś tytuł\"\nze specjalnymi znakami \\"; 
    response->printf("{\"idx\":%d, \"content\":", jakis_indeks);
    jsonstr(response, jakis_tekst);
    response->printf("}");
    request->send(response);
}

Oczywiście można tu użyć jakichś zmiennych pobieranych np. z bazy danych, czujników lub preferencji!

No i tak jak swego czasu napisałem - urządzenie ma się zmieścić na płytce stykowej 170 dziur:

pogo1_ok..thumb.jpg.0c59d371fc76a31cda82612d9ccb6ff0.jpg

Urządzenie  oprócz obowiązkowych ESP32 i dekodera I2S zawiera czujnik BMP280 i odbiornik podczerwieni. Dla wygody przycisk reset został umieszczony na płytce, ale w gotowym urządzeniu musi znajdować się gdzieś w dostępnym miejscu na obudowie, a w jego miejsce można podłączyć wtyk dla zewnętrznego DHT22 lub DS18B20.

Oczywiście, można w prosty sposób podłączyć zegarek z eepromem:

pogo2_ok.thumb.jpg.6b0f71913949d7b6b2c5721d889e6919.jpg

Otwory w płytce są łatwo dostępne, wystarczą cztery męsko-żeńskie przewody. W gotowej konstrukcji zegarem powinien być umieszczony tak, aby można było wymienić baterię bez konieczności rozbierania całego urządzenia.

Oczywiście płytka stykowa to nie jest najlepsze rozwiązanie - chciałem tylko pokazać że można to wykonać prawie bez lutowania (trzeba wlutować piny do S3, wzmacniacza i czujnika BMP oraz podlutować jakieś przewody do padów na module S3 potrzebne do podłączenia resetu). Ukońćzenie kursu lutowania na Forbocie powinno wystarczyć 🙂

Kilka pytań co do wyświetlania wyników w przeglądarce, ile całościowo zajmuje miejsca w pamięci strona ze stylami, js i całą resztą, pisałeś to ręcznie czy korzystałeś z jakiegoś narzędzia do projektowania www, jak z responsywnością i czy działa to jak web app?

 

25 minut temu, _LM_ napisał:

ile całościowo zajmuje miejsca w pamięci strona ze stylami, js i całą resztą

$ ls -l www
razem 48
-rw-rw-r-- 1 ethanak ethanak  2134 sie  6 14:46 calendar.html
-rw-rw-r-- 1 ethanak ethanak  2309 sie  6 14:01 events.html
-rw-rw-r-- 1 ethanak ethanak  1910 lip 24 09:11 favicon.shtml
-rw-rw-r-- 1 ethanak ethanak  2171 lip 25 10:18 index_ap.shtml
-rw-rw-r-- 1 ethanak ethanak  7186 sie  5 18:24 index.shtml
-rw-rw-r-- 1 ethanak ethanak  2771 sie  5 11:32 pogodynka.css
-rw-rw-r-- 1 ethanak ethanak 19083 sie  6 18:09 pogodynka.js

To ląduje we flashu (rozszerzenie shtml jest trochę mylące, nie zwracaj uwagi). Można by było trochę przyoszczędzić ale jakoś nie miałem motywacji 🙂 Zawsze mogę to zgzipować i serwować gzipy, przeglądarka sobie poradzi, tylko za dużo nie oszczędzę. W css siedzi sobie jeszcze coś niepotrzebnego, ale to kilkadziesiąt bajtów do usunięcia.

Pisałem wszystko ręcznie. Działa jak web app (cokolwiek byś miał na myśli), z responsywnością nie ma problemu (to przecież działa na lokalnej sieci).


 

SHTML? Co to jest? Tj: da się wygooglować no ale wolę z pierwszej ręki wiadomości. Web app może źle to napisałem, chodzi o to czy instalowana jest aplikacja w przeglądarce 

4 minuty temu, _LM_ napisał:

czy instalowana jest aplikacja w przeglądarce

Nie, nic nie jest instalowane. Wchodzisz na stronę i jedziesz.

shtml to oryginalnie oznaczenie starej technologii tworzenia dynamicznych stron wyłącznie za pomocą Apacza, bez żadnych php. Użyłem tego rozszerzenia bo edytor traktuje to jako html, a skrypt który automatycznie robi z tego plik w C++ wie, że to nie jest zwykły tekst i nie tworzy automatycznego handlera.

(edytowany)

Dzięki za odp. Jak widzę że cały ten serwis zajmuje około 30kB to wiem że jeszcze sporo mam do nauczenia się. 

Edytowano przez _LM_

Jutro wrzucę kod (jeśli chcesz binarkę to mam dwie wersje, dla zwykłego DevKit i dla Xiao S3, będziesz mógł wypróbować bez szukania bibliotek tylko napisz która potrzebna). Zajrzyj do katalogu www i do server.cpp

(edytowany)

Dzięki, po prostu potrzebuję odniesienia, nie lubię tych htmlów cssów jsów i innych podobnych. Potrzebowałem wiedzieć ile powinna taka strona www zajmować pamięci. Narzędzie którego używam do generowania tworzy kolosy od 100kB w górę. 

Edytowano przez _LM_

No więc taka przedostatnia (chyba) wersja. Działa normalnie, jest jeszcze parę literówek w komunikatach i trochę za dużo pisze po serialu - ale w sumie wersja używalna. Naa XIAO S3 działa z 16-bitowym głosem Mbroli (instrukcja przy następnej okazji).

Biblioteka BMP280 to https://github.com/dvarrel/BMP280.git

A kod (na razie bez zdalnego termometru): Pogotest3.zip

  • Lubię! 1
  • 2 tygodnie później...
(edytowany)

Zewnętrzny termometr chyba ukończony - wygląda tak:

extemp.thumb.jpg.b34b02821ebbe849d34efbd0c749221a.jpg

 

Trochę duży, ale to kwestia zastosowanego akumulatora - w moim przypadku 900mAh. Pewnie można znaleźć mniejszy - no, ale to ma być urządzenie do pokazu i prawdopodobnie do zdemontowania.

Użyłem płytki XIAO ESP32C3 ze względu na wbudowaną ładowarkę. Tzw. "schemat" (a właściwie parę kresek):

extermc3a.thumb.png.920cb240dcfd3bbd6a019681006621eb.png

Zamiast DHT22 można użyć DS18B20 - nie wymaga to żadnych zmian, jedynie po podłączeniu do terminala serial należy odpowiednio ustawić typ czujnika. Wyłącznik nie jest ujęty na schemacie - po prostu odłącza akumulator. Rezystory 0805 po prostu wzięte z szuflady (akurat takie miałem) i wlutowane bezpośrednio na płytce XIAO.

Kod trochę prowizoryczny (raczej do poczytania), ale na oko działający: Pogoext.zip

Edytowano przez ethanak
  • Lubię! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...