Quanti metodi di convertire e semplificare un file per trasmetterlo esistono?

vorrei sapere quante soluzioni esistono per convertire un qualsiasi file in binario per trasmetterlo poi con arduino e un programma che trasmette bit per bit, conosco base64, funziona, ma cercavo qualcosa che mi converte direttamente in binario e che si possa semplificare, come fanno i dispositivi wi-fi e altro, a condividere un file? oltre base64 quanti encoder esistono?
interessa ridurre i tempi e che poi si possa ricreare il file alla ricezione

Ma se arduino può trasmettere un byte come dimensione minima, non puoi velocizzare in alcun modo. Ho dato un occhiata su wiki cosa significa base64 "6 bit di codifica", funzionerebbe con arduino se effettivamente puoi trasmettere solo 6 bit, ma ho il dubbio che il minimo sia un byte. Per cui non velocizza niente.

Comunque non velocizzerebbe nulla
Trasmetterebbe 2 parole da 6 bit ogni byte da 8

Quindi 8 bit diventano 12
Oltretutto da impacchettare a gruppi di 8, perché a sua volta la seriale trasmette singoli byte inframmezzati da bit di start e stop
Insomma velocizzare non è per nulla facile

Non senza compressione
E comprimere con un Arduino è poco facile

no ho fatto in modo che arduino gestisce il flusso trasmettendo i bit che riceve attraverso un programma in python via seriale, e trasmette i bit attraverso radio e toni in un sistema che ho fatto, per quanti riguarda mandarmi messaggi in ascii tra 2 arduini nessun problema, per invece i file la memoria e limitata e il limite di un bit e 64, massima variabile

ma traverso python gli manda bit per bit senza riempire il micro, il micro lo manda, e poi ne riceve subito un altro quando ha finito

ieri ho provato a mandare un pdf a 5 bit al secondo, non finiva piú, ho guardato la conversione in binario che ho fatto, ed il calcolo portava a 4 ore, quindi convertire in binario un pdf meglio di no, dopo era una prova casuale, magari si può fare di meglio, ma possibile che su python esista solo base64 che comunque usa ascii quindi tot caratteri per tot bit, non ce un qualcosa che du python mi da modo di caricare un file da fare encode e anche decode alla ricezione, di solito il wi-fi e tante altre comunicazioni, bluetooth, infrarossi cosa usano? per semplificare e scomporre il file? pensavo huffman se si scrive cosi, ma come faccio a trasformare qualsiasi file in binario con python e poi ricostruirlo?

esatto, converte in ascii, ed un carattere corrisponde a tot bit, quindi si rischia che aumenta il flusso al posto di semplificare, ma online ho trovato solo quello

@gabe_matteo : hai semplicemente sbagliato piattaforma e stai usando un microcontrollore NON per i scopi per cui è nato.

Fossi in te ripenserei al tutto e mi sposterei su Raspberry PI ... poi fai tu ... :roll_eyes:

Guglielmo

Ho seguito in parte l'altra discussione e come diceva JML di là non ti è chiaro il concetto che ogni file è già in binario senza bisogno di nessuna conversione.
Puoi aprire un file qualsiasi (testo, immagine, pdf), leggere un byte alla volta (o un bit alla volta) e trasmetterlo. Dall'altra parte ricevi i dati, li metti nell'ordine corretto e rivomponi il file.
Le varie codifiche tipo base64 rischiano di aumentare la quantità di dati da trasmettere.
Non sono molto ferrato in materia, ma per ridurre i tempi credo tu possa solo:

  • aumentare la velocità di trasmissione
  • comprimere il file

Su Arduino UNO ? ? ? Scordatelo ... qualsiasi algoritmo di compressione minimamente decente richiede molta più memoria di quanta ce ne sia su un ATmega ...

Guglielmo

Non ho mai approfondito l'argomento, mi fido senza problemi.
Il mio era un discorso più generico circa la problematica di @gabe_matteo (impiegare meno tempo per trasmettere).

ma come faccio a prendere i binari ad ogni modo? io ora ho usato un sito online, ma è possibile per qualsiasi file farlo?

dopo base64 aumenta infatti non voglio usarlo, ma non credo che tutti vanno ad aumentare e basta, e ci saranno quelli che anche semplificano o scompongono tipo pacchetti

ma io parlo di computer, quindi limiti non ce sono, arduino fa da tramite e basta, e che ho scritto un programma per trasmettere messaggi, volevo implementare anche con invio di file, ci sono riuscito a farci stare un pdf su arduino, ma 4 ore comunque di invio, e dovevo fare a mano 50 e passa array di byte, perché anche gli array ha un limite, quindi improponibile

Ma perché usare arduino come tramite... Sento "odore" di "problema xy"

Se non ho capito male quello che hai fatto nell'altra discussione, tu prendi i bit del file e li converti nel corrispettivo codice ascii '0' o '1'. Poi invii '0' e '1' come byte e dall'altra parte li "riporti" a bit per ricomporre il byte originale...
E' un po' macchinoso...

In ogni caso, a te basta aprire il file originale, leggere un byte alla volta e per ogni byte inviare i singoli bit. In questo caso, quello che invii sono 0 e 1 come bit e non '0' e '1' come byte.
Non sono molto bravo con le spiegazioni... magari qualcuno degli altri mi aiuta a spiegare meglio il concetto...

an?

attenzione che scrivi byte con bit, sono due cose diverse

a meno che non abbia capito male io quello che vuoi intendere

ma la domanda è, come facio prende un file *.x e trasformalo in "01010101000" in bit?

Binario, esadecimale, ascii sono solo rappresentazioni diverse della stessa informazione.

dipende da che punti di vista, perché un 01 binario corrisponde ad un 49 in ascii a 8 bit, 49 è un byte "110001" <<<< byte con dei bit in hex 0x31 un byte

io voglio che, ripropongo la domanda, un file *.x (x sta qualsiasi estensione esistente in questo pianeta)

diventi una stringa di bit

quindi:

test.mp3 corrisponde a 0101011101011

quindi aver notizia di cose, grazie per la info, ma come faccio appunto a prendere i bit che compongono questo file per poi trasmetterlo?

ho fatto una prova con un sito, e ci vuole un eternità

quindi un encode che prende sti file e li semplifica o li manda a pacchetti esiste?

come faccio a prendere informazione di un file in bit? la teoria a livello pratico non risolve il problema, non so se mi spiego purtroppo, quindi, come lo scompongo?

Con una file.available() controlli che il file non sia ancora finito
Con una file.read() leggi un byte
Con una bitshift() leggi un bit per volta

Ma io temo che sia veramente un problema x-y

Che poi xy mi ha fatto venire in mente cose...

Trasmettere un file via seriale è lento, puoi provare quello che ti pare ma il limite hardware è sempre il baud rate che imposti.
Poi ci aggiungi il sistema che hai ideato, hai calcolato la velocità di trasmissione massima che riesci ad ottenere?

Ammesso che sia superiore a quella della seriale (dubito) e che quindi non sia un ulteriore collo di bottiglia, per ottenere una trasmissione seriale affidabile, starei al massimo su un baud rate di 250.000/500.000 bps (Bit Per Second).

Con un file da 1Mbyte ovvero 1.048.576 byte hai bisogno di 1.048.576 ÷ ( 500000 ÷ 8) secondi ovvero 16,77 secondi.
Di meglio puoi fare solo comprimendo il file, ma un mp3 è già compresso e con un algoritmo molto efficiente.

Ma serve di sapere chi trasmette, chi riceve, da che parte sta l'iniziativa dell'operazione

Io queste cose non le ho ben chiare, lo OP me le spiega per cortesia?