Ciao, avrei la necessità di fare comunicare tra loro un esp32 e Arduino nano. L'obiettivo è far leggere ad Arduino delle impostazioni dettate da esp del tipo "la luce 1 è stata accesa con una luminosità di 180"; non mi interessa la comunicazione inversa da Arduino a esp. Avevo pensato alla comunicazione seriale collegando il solo pin tx ad rx ma poi ho letto che esisterebbe la possibilità di sfruttare la comunicazione i2c.
Secondo voi qualè la migliore per il mio scopo? Mi stavo informando con la comunicazione i2c e mi sembra abbastanza complessa realizzarla...
TX-RX é piú semplice Non serve un adattatore di livello.
Ciao Uwe
Trasmetto dal esp32 tramite seriale ad Arduino la seguente stringa "led1 on 255" che corrisponde al numero del dispositivo, lo stato e la luminosità. Come potrei fare per far si che Arduino legga questa stringa tramite seriale e mi commuta i dispositivi collegati a lui?
Tanto per cominciare le trasmissioni tra MCU NON sono fatte per essere lette da "umani", quindi via tutte quelle cose inutili: 'led' 'on' e così via. La sintassi da usare deve essere la più semplice possibile, tipo: numero che identifica il led, un separatore (es. ','), il valore del pwm (0..255).
Nel tuo esempio "led1 on 255" diventa "1,255" seguito da 0x0D (che è il CR) ... molto più breve da trasmettere, molto più semplice da trattare ... leggi carattere a carattere la string fino al 0x0D, cerchi il separatore e dividi il numero del LED ed il valore da assegnargli.
Ah ... puoi si collegare il TX del ESP al RX di Arduino, ma NON viceversa; devi adattare il livello (basta una resistenza ed un diodo) del TX di Arduino (5V) al RX del ESP (3.3V).
Guglielmo
Come faccio a scrivere ad esempio 2,1,255 ricevuti tramite seriale su 3 variabili distinte per essere utilizzate come valori nello sketch del tipo a=2, b=1, c=255? Sto provando con il serialread ma non funziona
Devi creare un unica stringa che contiene tutto "2,1,255\r" (il \r equivale al carattere 0x0D che è il carriage return e che, solitamente, si utilizza per identificare il fine riga) e trasmetterla; dall'altro lato, la ricevi, cerchi i separatori dei vari elementi (la virgola), separi i vari elementi e li assegni alle varie variabili.
Ti consiglio di studiarti molto bene le funzioni che si trovano in <string.h> e che ti permettono di fare, abbastanza semplicemente, tutto questo.
Però comincia prima a fare delle semplici prove tra du Arduino, impara come si trasmettono e si ricevono più caratteri, studia bene la classe Serial e tutti i suoi metodi, poi con le funzioni che trovi in <string.h> vai avanti riconoscendo le varie parti e separandole e, piano piano, arrivi a capire bene come si lavora con le stringhe (array di caratteri in 'C').
Guglielmo
Ho scritto un codice del genere dove invio, tramite seriale, ad esempio "a1234q" e vorrei salvare i numeri 1234 in una variabile int da utilizzare in altre parti utilizzerei le lettere iniziali e finali per determinare alcuni stati al posto dei numeri. È da affinare ma cosa ne pensate? È "pesante" da gestire per il nano? Il serialprint serve solo per capire come lavora il codice.
char c;
int n;
void setup() {
Serial.begin(9600);
}
void loop() {
if(Serial.available()) {
do {
if(Serial.available()) {
c = Serial.read();
if(c=='a'){
n=Serial.parseInt();
}}
} while(c != 'q');
Serial.println(n);
}n =0;
}