ESP-NOW

mertthin

Üye
Katılım
21 Ekim 2022
Mesajlar
10
Merhaba,
Bir esp32 nin flash adresinden diğer esp32nin flashına bir jpeg uzantılı bir dosya atmak istiyorum internette araştırdım ama bulamadım.
Espler arasında dosya aktarımını ya ftp yada http ile yapıyorlar. Ben esp now ile yapmak istiyorum. Esp now ile yapılanlar hep string veya sinyal haberleşmesi.
Yardımcı olursanız çok sevinirim.
 
Jpg dosyayı binary olarak okuyup bir değişkene aktarın.
Karşı tarafa bu değişkeni gönderin. Alıcı tarafta binary olarak bir dosya açıp değişken içeriğini bu dosyaya yazın.
 
Jpg dosyayı binary olarak okuyup bir değişkene aktarın.
Karşı tarafa bu değişkeni gönderin. Alıcı tarafta binary olarak bir dosya açıp değişken içeriğini bu dosyaya yazın.
Cevabınız için çok teşekkür ederim.
Dediğinizi düşündüm fakat binary datayı nasıl jpg uznatısına dönüştüreceğimi bulamadım herhangi bir öneriniz var mı .?
 
Dosyanın uzantısının jpg, bmp, txt vb olması önemli değildir. Dosya byte dizisinden oluşur. Flash bellekte dediğinize göre SPIFFS kullandığınızı varsayıyorum. Dosyanın Bytelarını okuyacaksınız. Şimdi bu byte dizisini String'e çevirme işi var. Bunun için her byte 2 karakter olacak şekilde (byteın hexadecimal gösterimi, 00->FF) bir string oluşturabilirsiniz. Bu String'i gönderip karşı tarafta işlemin tersini yapabililirsiniz. Dosya adı, uzantısı herhangi birşey olabilir. Fark etmez.

Diğer bir seçenek de Base64 encoding kullanmaktır.

Dosya büyüklüğü RAM açısından sorun olabilir. O durumda stream sıkıştırma yöntemleri var. Ya da parça parça göndereceksiniz.
 
Ama byte dizisi halinde gönderebilmeniz gerekir, stringe gerek olmadan. Baktınız mı esp_now fonksiyonlarına.
 
Dosyanın uzantısının jpg, bmp, txt vb olması önemli değildir. Dosya byte dizisinden oluşur. Flash bellekte dediğinize göre SPIFFS kullandığınızı varsayıyorum. Dosyanın Bytelarını okuyacaksınız. Şimdi bu byte dizisini String'e çevirme işi var. Bunun için her byte 2 karakter olacak şekilde (byteın hexadecimal gösterimi, 00->FF) bir string oluşturabilirsiniz. Bu String'i gönderip karşı tarafta işlemin tersini yapabililirsiniz. Dosya adı, uzantısı herhangi birşey olabilir. Fark etmez.

Diğer bir seçenek de Base64 encoding kullanmaktır.

Dosya büyüklüğü RAM açısından sorun olabilir. O durumda stream sıkıştırma yöntemleri var. Ya da parça parça göndereceksiniz.
güncel bir cihaz ile çekilmiş bir fotoğraf olduğunu varsayalım.
5-6mb altında olmayacaktır dosya boyutu.

en az 5120 byte olacaktır.

ben bmp formatında bir png'den dönüştürülmüş dosyayı flash'da saklıyordum 4 byte yer tutuyordu
 
Bir soruda ben sorayım. Dosya uzantısı dosya verisinden bağımsız ise; dosya adı, uzantısı, oluşturma tarihi gibi bilgiler nerede tutuluyor?
 
Konular biraz birbirine girdi sanırım. Kısaca açıklamaya çalışayım.

1- Bir yerden diğerine dosya transferi yaparken dosyanın uzantısı, formatı vs önemli değildir, her dosya için yöntem aynıdır. Dosyanın baytlarını okursunuz ve transfer edersiniz demek istemiştim. Dosyanın uzantısı, adı vs daha üst seviye bir katmandaki bir bilgidir.

2- BMP'ye çevirmek bir resim dosyasının boyutunu küçültmez. Aksine oldukça büyütür. BMP, yani bitmap dosyaları ham dosyalardır. Her bir pixel için 3 byte veri saklar. R,G ve B için birer byte (yani 256 seçenek). Bu sayede 24 bitlik bir renk skalası (16.7 milyon renk) elde edilir. Bu da megapixel başına 3MB veri demektir. Güncel bir makina 15 megapixel olsa BMP formatında 45 MB veri demektir. O yüzden BMP pek kullanılmaz. Tek faydası hesaplama (sıkıştırma/açma) yapmadan okuma yazma ve üzerinde kolay görüntü işlemedir. PNG ve JPG ise sıkıştırma kullanan formatlardır. Dosya boyu çok daha küçüktür. Sıkıştırma kalitesine göre dosya boyu değişir. PNG dosyalarında ayrıca transparanlık vb gibi özellikler de tanımlanabilir. @Ahmet, dolayısıyla bir JPG dosyayı BMP'ye çevirerek küçültmüş olma ihtimalin yok. Bir yanlışlık var o işte.

3- Dosya adı, oluşturma tarihi vb bilgiler dosyanın içinde değil saklanan ortamdaki dosya sistemi içerisinde tutuluyor. FAT32, NTFS vb isimlerle bildiğimiz dosya sistemlerinin işi bunları yönetmek. Ayrıca bildiğiniz gibi dosyanın disk üzerindeki yeri (ya da parçalanmışsa yerleri) vb de dosya sistemi içerisinde turuluyor. İşletim sistemi tüm bilgiyi buradan alıyor. Silinen bir dosya da aslında dosya sistemi altındaki tablodan kaydın silinmesi. Bu sayede gerekirse geri kurtarmak mümkün oluyor.

4- Bazı resim dosyalarının içerisinde resimle ilgili metadata dediğimiz çekim zamanı, çekim yeri, çekim ayarları, çeken makina vb bilgiler de bulunabiliyor. Bu yukarıdaki konudan bağımsız. O da dosya içeriğinin bir parçası.
 
Son düzenleme:
@ozkarah abi resimi 128x64 siyah beyaz oled de gösteriyordum firma logosu.

farklı renkler yok,
ölçü olarak küçük.
 
Dosyanın uzantısının jpg, bmp, txt vb olması önemli değildir. Dosya byte dizisinden oluşur. Flash bellekte dediğinize göre SPIFFS kullandığınızı varsayıyorum. Dosyanın Bytelarını okuyacaksınız. Şimdi bu byte dizisini String'e çevirme işi var. Bunun için her byte 2 karakter olacak şekilde (byteın hexadecimal gösterimi, 00->FF) bir string oluşturabilirsiniz. Bu String'i gönderip karşı tarafta işlemin tersini yapabililirsiniz. Dosya adı, uzantısı herhangi birşey olabilir. Fark etmez.

Diğer bir seçenek de Base64 encoding kullanmaktır.

Dosya büyüklüğü RAM açısından sorun olabilir. O durumda stream sıkıştırma yöntemleri var. Ya da parça parça göndereceksiniz.
Dosyanın uzantısının jpg, bmp, txt vb olması önemli değildir. Dosya byte dizisinden oluşur. Flash bellekte dediğinize göre SPIFFS kullandığınızı varsayıyorum. Dosyanın Bytelarını okuyacaksınız. Şimdi bu byte dizisini String'e çevirme işi var. Bunun için her byte 2 karakter olacak şekilde (byteın hexadecimal gösterimi, 00->FF) bir string oluşturabilirsiniz. Bu String'i gönderip karşı tarafta işlemin tersini yapabililirsiniz. Dosya adı, uzantısı herhangi birşey olabilir. Fark etmez.

Diğer bir seçenek de Base64 encoding kullanmaktır.

Dosya büyüklüğü RAM açısından sorun olabilir. O durumda stream sıkıştırma yöntemleri var. Ya da parça parça göndereceksiniz.
Hocam kıymetli cevaplarınız için çok teşekkür ederim.
dosya boyutu 600kb
pythonda base64 kullanarak dosyayı byte byte ayırdım şimdi bunu diğer esp32 de tekrar dosyaya dönüştürme işim kaldı fakat C dilinde bir türlü nasıl yapacağımı bulamadım.
Encryption Decryption filan düşündüm ama çok karıştı ve kaynak bulamadım.
 
güncel bir cihaz ile çekilmiş bir fotoğraf olduğunu varsayalım.
5-6mb altında olmayacaktır dosya boyutu.

en az 5120 byte olacaktır.

ben bmp formatında bir png'den dönüştürülmüş dosyayı flash'da saklıyordum 4 byte yer tutuyordu
Cevabnız için teşekkür ederim.
hocam peki resim değil de video olsaydı yine bitmap kullanılabilir miydi veya farklı birşey mi olacaktı ?
 
Ben sizin istediğiniz şeyi pek anlayamadım.

Ortada bir dosya var ve bunu başka bir cihaza kopyalamak istiyorsunuz, bunu da ESP Now ile yapmak mı istiyorsunuz yoksa bir video akışını gerçek zamanlı olarak transfer etmek mi istiyorsunuz ?
 
Ben sizin istediğiniz şeyi pek anlayamadım.

Ortada bir dosya var ve bunu başka bir cihaza kopyalamak istiyorsunuz, bunu da ESP Now ile yapmak mı istiyorsunuz yoksa bir video akışını gerçek zamanlı olarak transfer etmek mi istiyorsunuz ?
Bir dosyayı esp32den espnow ile başka bir espye atmak istiyorum.
Bunun içinde dosyayı byte byte bölüp byteları gönderip, gönderdiğim cihazda bu byteları dosyaya geri çevirmek amacım.
 
jpg, bmp, video vs konusuna neden takıldınız o zaman bu kadar? Yazdığınız gibi göndermeniz gereken dosyanın içindeki baytlar. Dosyanın ne dosyası olduğu önemli değil.

Dosyanın ne dosyası olduğu şu açıdan önemli: eğer txt ya da sıkıştırılmamış bir veri formatı içeren bir dosya gönderecekseniz bunu sıkıştırıp gönderebilirsiniz, hız açısından. Ama henüz o noktaya uzaksınız. Önce basit bir dosyayı göndermeye çalışın bakalım.

Diğer bir sorum:
ESP32/ESP8266 dosya sistemi kullanmaz, flash belleğinde normal şartlarda dosyalar olmaz. Bunun için özel metotlar var. Dosya flashda nasıl duruyor? Siz nasıl erişiyorsunuz? SPIFFS mi kullanılıyor?
 
jpg, bmp, video vs konusuna neden takıldınız o zaman bu kadar? Yazdığınız gibi göndermeniz gereken dosyanın içindeki baytlar. Dosyanın ne dosyası olduğu önemli değil.

Dosyanın ne dosyası olduğu şu açıdan önemli: eğer txt ya da sıkıştırılmamış bir veri formatı içeren bir dosya gönderecekseniz bunu sıkıştırıp gönderebilirsiniz, hız açısından. Ama henüz o noktaya uzaksınız. Önce basit bir dosyayı göndermeye çalışın bakalım.

Diğer bir sorum:
ESP32/ESP8266 dosya sistemi kullanmaz, flash belleğinde normal şartlarda dosyalar olmaz. Bunun için özel metotlar var. Dosya flashda nasıl duruyor? Siz nasıl erişiyorsunuz? SPIFFS mi kullanılıyor?
spiffs ve littlefs kullanıyorum. Aslında esp32ye bağlı bir sd kart modülü kullanacağım. Dosyaların bytlerını alıp bir txt dosyasına aktarıp ordan okuyarak asıl dosyayı decode edip o dosyayı sd karta yazdırmak şeklinde düşündüm.

C diline pek hakim değilim asıl hakim olduğum python. Dosyaları pythonda rahat bir şekilde encode decode yapabiliyorum, ama ESP32 C kullandığı için bir türlü decode kısmını yapamıyorum. İnternette araştırdığımda da pek birşey bulamadım.
Bir dosyayı decode yapmak çok kolay bir şey ve ben mi anlayamıyorum bilemedim.
Önerebileceğiniz bir kaynak varsa çok teşekkür ederim.
 
ESP Now küçük veri paketlerinin gönderilmesi için tasarlanmış bir protokol. Maksimum 250 byte civarında paketlere izin veriyor. Sensör verisi, komut vb iletişim için çok kullanışlı ancak sizin senrayoda doğru seçim mi siz karar verin.

Paket büyüklüğü 250 bayt dedik. Dolayısıyla sizin veriyi bölüp diğer tarafta birleştirecek bir katman yazmanıza ihtiyaç olacaktır. Arada paket kaybı olursa dosya kullanılmaz hale gelir. Bu sebeple bir de acknowledgement (onaylama) mekanizması lazım. Alıcı her başarılı paketten sonra göndericiye mesaj göndermeli. Bu yapılabilir tabi, ancak C bilmediğinize göre geliştirmek biraz zahmetli olabilir.

Bir tarafta Access Point açsanız, diğeri ona bağlansa, bir Async Web Server çalıştırıp, HTTP protokolü ile dosyayı upload ya da download yapsanız çok daha kolay olur.
 

Çevrimiçi personel

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,821
Mesajlar
99,360
Üyeler
2,476
Son üye
mrmandos

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top