Trasmissione di file immagini tra due arduino

Notevole lavoro

Complimenti

bel lavoro, posso usare il tuo codice riadattandolo alle mie esigenze e fare qualche prova?

Ciao nikolo02,
ti consiglio prima di verificarlo collegando Arduino con una shield SD/uSD.
Certo usalo pure, poi condividi se ci sei riuscito.
Grazie :slight_smile:

Grazie mille, gentilissimo🙃

Ciao @nikolo02 hai news sul tuo progetto cubesat?

Ciao @jampag purtroppo tra lavoro e scuola dove devo scrivere ancora la tesi non ho avuto molto tempo per ragionarci su. ho fatto una prova con serialtransfer ma quando provo a fare il trasferimento non funziona e dal monitor seriale non riesco a leggere nulla.
mentre per il tuo codice mi serve un pochino di aiuto per capirlo e riadattarlo :sweat_smile:.

allego comunque il codice con serialTransfer.

TRASMETTITORE

#include <SPI.h>
#include <SD.h>
#include <SoftwareSerial.h>
#include "SerialTransfer.h"

#define SD_CS 10   // Pin chip select della scheda SD
#define TX_PIN 2   // Pin TX per SoftwareSerial (collegato a RX del ricevente)
#define RX_PIN 3   // Pin RX per SoftwareSerial (collegato a TX del ricevente)

SoftwareSerial softSerial(TX_PIN, RX_PIN);
SerialTransfer myTransfer;
File jpgFile;

void setup() {
    Serial.begin(115200);   // Per debug
    softSerial.begin(9600); // Comunicazione con l'altro Arduino
    myTransfer.begin(softSerial);

    if (!SD.begin(SD_CS)) {
        Serial.println("Errore nella lettura della SD!");
        while (1);
    }
    
    jpgFile = SD.open("immagine.jpg");
    if (!jpgFile) {
        Serial.println("Errore apertura file JPG");
        while (1);
    }

    Serial.println("Inizio trasferimento...");
}

void loop() {
    uint8_t buffer[100];  // Blocchi di 100 byte (SoftwareSerial è più lenta)
    uint16_t bytesRead;

    while (jpgFile.available()) {
        bytesRead = jpgFile.read(buffer, sizeof(buffer));  // Legge i dati dal file
        myTransfer.txObj(buffer, bytesRead);  // Impacchetta i dati
        myTransfer.sendData(bytesRead);
        delay(50);  // Attendere per evitare buffer overflow
    }

    jpgFile.close();
    Serial.println("File trasferito!");
    while (1);  // Stop loop
}

RICEVITORE

#include <SPI.h>
#include <SD.h>
#include <SoftwareSerial.h>
#include "SerialTransfer.h"

#define SD_CS 10   // Pin chip select della scheda SD
#define TX_PIN 2   // Pin TX per SoftwareSerial (collegato a RX del mittente)
#define RX_PIN 3   // Pin RX per SoftwareSerial (collegato a TX del mittente)

SoftwareSerial softSerial(TX_PIN, RX_PIN);
SerialTransfer myTransfer;
File jpgFile;

void setup() {
    Serial.begin(115200);   // Debug
    softSerial.begin(9600); // Comunicazione con il mittente
    myTransfer.begin(softSerial);

    if (!SD.begin(SD_CS)) {
        Serial.println("Errore nella lettura della SD!");
        while (1);
    }
    
    jpgFile = SD.open("ricevuto.jpg", FILE_WRITE);
    if (!jpgFile) {
        Serial.println("Errore creazione file JPG");
        while (1);
    }

    Serial.println("In attesa di dati...");
}

void loop() {
    if (myTransfer.available()) {
        uint8_t buffer[100];
        myTransfer.rxObj(buffer, myTransfer.bytesRead);  // Riceve i dati
        jpgFile.write(buffer, myTransfer.bytesRead);  // Scrive sulla SD
    }
}