Go Down

Topic: [RISOLTO] ESP32-CAM + Arduino Uno (e rilevazione movimento) (Read 2095 times) previous topic - next topic

Federico66

I pin della U2UXD sono il 16 e il 17. Solo che il 16 c'è sui pin esterni mentre il 17 andrebbe tirato fuori dal modulino ESP32 interno.
Attenzione, il 17 sembra che sia usato dalla PSRAM (guarda schema allegato), quindi forse non è il caso di toccarlo :)


Federico
"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

Federico66

AGGIORNAMENTO

Sono riuscito ad utilizzare la EspSoftwareSerial con le release 1.0.1 e 1.0.2 di ESP32, applicando una piccola modifica nel file "SoftwareSerial.h".

Riesco a comunicare tra ESP32-CAM e Arduino, ma, come previsto, appena configuro la CameraWebServer con la SoftwareSerial, va in errore in fase di reboot e non riconosce la camera.
Ho provato con tutte le combinazioni dei pin liberi niente.

In definitiva, per il momento, abbandono l'idea iniziale della seriale software :(

Federico
"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

zoomx

Evidentemente la SoftwareSerial usa qualcosa che è utilizzata anche dalla camera. Se non è un pin mi sa che è qualche timer o l'interrupt interferisce con altro.
Se non devi usare comandi complessi ma semplici potresti rilevare semplicemente lo stato di un pin.

Federico66

Se non devi usare comandi complessi ma semplici potresti rilevare semplicemente lo stato di un pin.
Ma no, è solo uno esercizio fine a se stesso; comunque quello era il prossimo passo :)


Grazie
Federico
"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

zoomx

A me invece è venuto il sospetto che la USB2 del portatile non fornisca corrente suffciente e i disturbi che ho notato siano dovuti a quello. O anche a quello.

daysleeper

Se è stupido ma funziona allora non è stupido.

Federico66

#21
Jul 30, 2019, 05:48 pm Last Edit: Jul 30, 2019, 05:48 pm by Federico66
Non capisco perché bisogna specificare i pin visto che è hardware ma potrebbe essere che la serial2 si può definire su porte hardware diverse.
Non soddisfatto ho chiesto nel forum ESP32 e, tralasciando il suo sproloquio sul SoftwareSerial, un certo VladTheImpaler conferma che su ESP32 è possibile usare qualunque pin libero per la trasmissione seriale, basta mapparlo.

Quindi ho provato:
Code: [Select]

#define RXD2 16
#define TXD2 14
//...
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
//...
Serial2.println(WiFi.localIP());

e funziona, non benissimo, nel senso che bisogna stare attenti ad avviare prima ESP e poi Arduino, ma funziona :)

Ho fatto una modifica a CameraWebServer per fargli inviare ad Arduino, su richiesta, l'ip del server, allego il risultato :)

Naturalmente se si usa la SD, non ci sono più pin liberi oltre il 16, ma gli ho chiesto conferma, vista la sua disponibilità  ::)  ::)  ::)

In aggiunta, lui dice che la "camera" usa il timer1, quindi la SoftwareSerial dovrebbe usare il 2, ma questo per me è già più complicato da verificare ed eventualmente modificare :(

Federico
"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

zoomx

Il tizio dice che la seriale hardware si può rimappare in altri pin, cosa possibile in alcune MCU recenti. Ma è sempre quella hardware quindi non ci dovrebbero essere conflitti di Timer.



Federico66

Il tizio dice che la seriale hardware si può rimappare in altri pin, cosa possibile in alcune MCU recenti. non a è sempre quella hardware quindi non ci dovrebbero essere conflitti di Timer.
Lui dice che c'è conflitto timer con la seriale software.

F
"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

Maurotec

La seriale software impegna per troppo tempo la CPU all'interno di una routine di interrupt e questo significa togliere la risorsa CPU ad altre parti del programma, ad esempio un timer hardware che genera una IRQ, prima che possa essere eseguita la (ISR) routine di interruzione legata al timer deve terminare quella legata alla soft serial.

Questo accade sempre in tutte le CPU a meno di rendere interrompibile una ISR (Interrupt Service Request) da parte di eventi come le IRQ ma poi gestirle è un inferno senza supporto hardware (gestione priorità).

Ecco perché il tizio è critico nei confronti della soft serial, specie quando a quanto pare questa CPU ha 3 seriali hardware.

PS: IRQ (Interrupt Request) a cui segue un salto all'indirizzo della ISR.

Ciao.

Federico66

Ecco perché il tizio è critico nei confronti della soft serial, specie quando a quanto pare questa CPU ha 3 seriali hardware.
Vero che ESP32 ha 3 seriali hardware, ma non sapevo che si potessero mappare su qualunque pin  :(

Federico
"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

zoomx

Neanche io. Alcune MCU (forse tutte quelle moderne, non so) hanno la possibilità di rimappare le periferiche su diversi pin se non tutti, non sapevo che l'ESP32 appartenesse a questo gruppo.

Federico66

A me invece è venuto il sospetto che la USB2 del portatile non fornisca corrente suffciente e i disturbi che ho notato siano dovuti a quello. O anche a quello.
..ma sai che ho lo stesso dubbio!
Io uso un FTDI USB to TTL con CP2102, alimentando ESP a 3.3V

Dopo aver caricato il codice, spessissimo non trova la camera!
Ho cercato in giro e ho trovato questo, nei forum qualcuno suggeriva di aggiungere un condensatore da 100uf tra 3V3 e GND.

Se ne trovo uno, provo

Federico
"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

Federico66

OBIETTIVO RAGGIUNTO.. o quasi  :)

Illuminante è stata la lettura di questo documento

In sintesi, è possibile settare la SD in "1-line mode", ed in questa modalità i pin 4, 12 e 13 non vengono utilizzati, quindi posso usare uno dei pin come TX per la Serial2.

Riepilogando:
- su Arduino uso SoftwareSerial per una seconda seriale, attraverso la quale invio comandi a ESP32-CAM
- su ESP32-CAM ho configurato la SD card in modalità "1-line" e una seconda seriale hardware (16, 13), per ricevere comandi da Arduino

fatto questo, da Arduino riesco a:
- ottenere l'ip del server http attivo su ESP
- gestire il flash su ESP
- scattare foto, che vengono salvate sulla SD presente su ESP

ovvero tutto quello che avevo ipotizzato :)

Ma visto che mi piacciono le sfide, su ESP ho modificato il server http aggiungendo gli handler per il flash e la macchina fotografica, quindi via browser si possono scattare le foto.

Chiaramente sono molto soddisfatto, resta qualche problema hardware, ma credo sia dovuto all'alimentazione della ESP32-CAM (avvii difficoltosi, reset a sorpresa).
Farò qualche ulteriore test, cambiando cavo e porta usb.

Federico

"La logica vi porterà da A a B. L'immaginazione vi porterà dappertutto." A. Einstein

zoomx

Io arrivata l'estate ho messo un po' da parte questo modulo (e tutti gli altri).
Complimenti!
Alle spiegazioni. Credevo che l'ESP32 accedesse alla SD in SPI ma da quello che scrivi (e se avessi letto quello che hai letto tu) avrei dedotto che l'accesso usa SDIO, un protocollo più veloce che è praticamente uno standard nei dispositivi che usano le SD, SPI lo usano solo le MCU con poche linee di I/O, Arduino appunto.
Non mi ricordo se il LED sia attivabile dall'interfaccia web di esempio.

Go Up