cotestatnt / Arduino-Google-API

GNU Lesser General Public License v2.1
20 stars 3 forks source link

problemi di compilazione con PlatformIO #3

Open sgrizzi opened 2 years ago

sgrizzi commented 2 years ago

Buongiorno! e' molto insolito poter scrivere in italiano su github, ma una volta tanto mi fa anche piacere!! Se comunque serve passare all'inglese... fammi/fatemi sapere.

Stavo cercando disperatamente qualcosa che mi consentisse di accedere a google drive da un ESP32 ed ho trovato questa libreria che mi sembra "spot-on". Ho cercato di compilare il tutto usando PlatformIO, partendo da un primo esempio "AuthorizeOnly", e sono quesi riuscito... ma mi esce questo errore:

src/main.cpp:78:44: error: 'class FSWebServer' has no member named 'getRequest'; did you mean 'handleRequest'?
   WebServerClass* webRequest = myWebServer.getRequest();
                                            ^~~~~~~~~~
                                            handleRequest

in effetti, anche cercando "a mano", non trovo il metodo getRequest in FSWebServer. Ho provato con l'esempio "GoogleDrive" e trovo esattamente lo stesso errore (oltre ad un altro). Puoi darmi qualche suggerimento su come risolvere il problema? Non penso sia relativo a PlatformIO ma non si sa mai... Grazie!

sgrizzi commented 2 years ago

credo di aver risolto il problema "forzando" il caricamento dell'ultima versione della libreria in questo modo

lib_deps = 
    bblanchon/ArduinoJson@^6.19.4
;   cotestatnt/esp-fs-webserver@^1.0.6
    https://github.com/cotestatnt/esp-fs-webserver.git

per default, PlatformIO trova solo la versione 1.0.6. Mi ha segnalato anche un errore -che ho corretto- alla linea 144 di GoogleGmail.cpp payload += Base64::encode(tempsStr); "base64" e' scritto minuscolo.

Compila tutto, ma genera uno strano errore at linking time.

/Users/gabriele/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: .pio/build/esp32doit-devkit-v1/libd1e/libgoogleapp.a(GoogleOAuth2.cpp.o):(.literal._ZNK12GoogleOAuth211gzipInflateERK6String+0x4): undefined reference to `inflateInit2_'
/Users/gabriele/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: .pio/build/esp32doit-devkit-v1/libd1e/libgoogleapp.a(GoogleOAuth2.cpp.o):(.literal._ZNK12GoogleOAuth211gzipInflateERK6String+0x8): undefined reference to `inflate'
/Users/gabriele/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: .pio/build/esp32doit-devkit-v1/libd1e/libgoogleapp.a(GoogleOAuth2.cpp.o):(.literal._ZNK12GoogleOAuth211gzipInflateERK6String+0xc): undefined reference to `inflateEnd'
/Users/gabriele/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: .pio/build/esp32doit-devkit-v1/libd1e/libgoogleapp.a(GoogleOAuth2.cpp.o): in function `GoogleOAuth2::gzipInflate(String const&) const':
/Users/gabriele/Documents/PlatformIO/Projects/Esp32-gdrive/lib/googleapp/GoogleOAuth2.cpp:280: undefined reference to `inflateInit2_'
/Users/gabriele/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: /Users/gabriele/Documents/PlatformIO/Projects/Esp32-gdrive/lib/googleapp/GoogleOAuth2.cpp:303: undefined reference to `inflate'
/Users/gabriele/.platformio/packages/toolchain-xtensa-esp32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld: /Users/gabriele/Documents/PlatformIO/Projects/Esp32-gdrive/lib/googleapp/GoogleOAuth2.cpp:312: undefined reference to `inflateEnd'

qualche suggerimento?

sgrizzi commented 2 years ago

risolto anche il problema di linking, "forzando" sempre l'accesso all'ultima versione

lib_deps = 
    bblanchon/ArduinoJson@^6.19.4
    https://github.com/cotestatnt/esp-fs-webserver.git
    https://github.com/cotestatnt/Arduino-Google-API.git

Adesso riesco a vedere la main page generata (ma devo ancora capire come muovermi...) Scusate il "rumore" generato. Saluti, Gabriele

cotestatnt commented 2 years ago

Ciao Gabriele! Figurati non farti problemi.. se hai bisogno chiedi pure. Per il cosa fare ora che hai risolto la compialzione, hai provato a dare un'occhiata ai due video?

Per quanto riguarda Platform.io fa diventare matto anche a me... credo dipenda dal fatto che compili le librerie in modo leggermente diverso dall'IDE Arduino e se ci sono alcune librerie già installate si creano problemi di compatibilità.

In merito alla soluzione che hai adottato, credo che non sia tanto una questione di versioni, quanto del fatto che specificando le dipendenze in questo modo, platformio ne compila una copia locale nella cartella del sorgente e questo risolve alla base problemi di compatibilità con quanto già installato.

Ad ogni modo tieni presente che la libreria è ancora molto "work in progress" (da qui il motivo dell'Italiano nelle issues) quindi potrebbbero esserci in futuro degli aggiornamenti che richiedono la modifica dello sketch. Per quanto possibile, cercherò comunque di introdurre modifiche retro-compatibili o che comunque richiedano modifiche minime.

sgrizzi commented 2 years ago

Ciao Tolentino, grazie per avermi indicato i tuoi due video – decisamente essenziali per non ripartire from scratch! Grazie mille!

Ho inizialmente utilizzato l’accesso a google drive per memorizzare delle immagini catturate da una esp32-cam triggerata da un pir.

Cercavo qualcosa che mi consentisse di accedere a Gdrive (o Dropbox) ed ho trovato un esempio che sono riuscito a far funzionare, ma non mi soddisfa completamente perche’ non mi consente un accesso flessibile a Gdrive.

Dopo molto cercare ho trovato la tua libreria e mi sembra davvero “spot on” !!!

Il mio “final aim” sarebbe quello non solo di scrivere su Gdrive, ma anche di leggere un file – per esempio un .bin per fare un aggiornamento sw in-field. L’esp32 legge un file in gdrive: se la versione e’ piu’ nuova di quella installata scarica il file .bin e si aggiorna.

Un passetto alla volta….

PlatformIO - ogni tanto (spesso) fa impazzire, ma mi sembra piu’ strutturato di Arduino come IDE. E’ meno di “bocca buona”… Comunque, dopo un po’ di lotta, ho compilato il tuo esempio “AuthorizationOnly” con questo file ini:

[env:esp32doit-devkit-v1]

platform = espressif32 board = esp32doit-devkit-v1 framework = arduino upload_speed = 921600 monitor_speed = 115200 upload_port = /dev/cu.SLAB_USBtoUART monitor_port = /dev/cu.SLAB_USBtoUART board_build.partitions = partitions.csv

lib_deps =                 bblanchon/ArduinoJson@^6.19.4                 https://github.com/cotestatnt/esp-fs-webserver.git                 https://github.com/cotestatnt/Arduino-Google-API.git

(uso un Mac come si vede dalle porte; ho anche usato delle partizioni diverse ma solo per mia comodita’  - il codice compila senza problemi anche con le partizioni di default)

Intanto grazie mille!

Ciao, Gabriele

cotestatnt commented 2 years ago

Buongiorno. Se vuoi fare l'upload di immagini su Drive, allora ti consiglio di approfondire l'esempio GoogleDrive_ESP32_Task.ino perché a seconda delle condizioni della rete l'upload può richiedere anche 3/4 secondi per essere completato ed in questo caso avresti il micro impegnato e non potrebbe fare altro. Usando un task FreeRTOS come invece si risolve questo inconveniente in modo brillante.

Se vuoi ho anche questo esempio più completo in quest'altra mia libreria ESP32-CAM-PIR.ino proprio per un modulo ESP32-CAM dove all'attivarsi di un ingresso viene catturata una o più immagini che saranno poi inviate via Telegram una dopo l'altra (il principio di funzionamento è assolutamente identico a eseguire l'upload su Drive).

sgrizzi commented 2 years ago

Buonasera Tolentino, stavo facendo qualche prova per ottenere le autorizzazioni di accesso a GoogleDrive ma ho ricevuto la segnalazione che il mio "free trial" e' esaurito e per continuare mi chiedono ca.70$/mese!?! Un po' tanto per impratichirmi e per fare quello che mi interessa. Ma funziona proprio cosi? Che tu sappia non ci sono account "amateur" o per attivita' non industriali?

Onestamente per "scrivere" su Gdrive uso una Goggle-webapp triggerata da esp32 e che pensa lei a fare tutto, apre un folder se non c'e' e memorizza il file inviato da esp32. Funziona ma non e' un gran che. Posso inviare una immagine VGA compressa jpeg, per esempio, (ca.50K) ma se l'immagine ha dimensioni maggiori, es. SVGA, gia' non riesce a leggere i dati inviati.

Il secondo problema, ben piu' rilevante per me, e' "leggere" da Gdrive: sia cercare un file per verificare se esiste, e poi leggerlo in qualche modo (binario, base64, o altro....). Il file da leggere e' fra 1 e 2 Mb. E' possibile fare qualcosa del genere con la tua libreria?

cotestatnt commented 2 years ago

Scusa per la risposta tardiva, mi era sfuggito questo messaggio.

Mi sembra molto strano perché il pricing delle API utilizzate è a consumo. Ad esempio questi sono i limiti previsti per l'API Drive https://developers.google.com/drive/api/guides/limits

Non è che nel progetto hai attivo qualche altro servizio a pagamento?

Prova a crearne uno nuovo partendo da zero ed aggiungendo solo lo stretto necessario come nel primo video.

sgrizzi commented 2 years ago

Mah, non so cosa dire. Non ho altri servizi attivi ed ho solo seguito le indicazioni fornite da Google quando ho cercato di entrare nella developer console. Nel frattempo ho comunque trovato una soluzione alternativa su un server Aruba, a cui posso accedere in modo mooooolto piu’ semplice. Avrei preferito la funzionalita’ di Gdrive ma per il momento va bene questa soluzione. Comunque prima o poi riprovo con Gdrive. Grazie per il supporto!

Mi sembra molto strano perché il pricing delle API utilizzate è a consumo. Ad esempio questi sono i limiti previsti per l'API Drive https://developers.google.com/drive/api/guides/limits

Non è che nel progetto hai attivo qualche altro servizio a pagamento?

Prova a crearne uno nuovo partendo da zero ed aggiungendo solo lo stretto necessario come nel primo video.

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>