Kami menampilkan bingkai foto digital di Internet
Mungkin banyak, melihat bingkai foto digital, memikirkan apakah mungkin untuk menampilkan informasi mereka sendiri yang bervariasi dari waktu ke waktu? Karena saya telah menjadi pemilik bingkai foto selama beberapa tahun, ide seperti itu muncul di benak saya - bingkai tersebut akan sempurna untuk menampilkan ramalan cuaca dan informasi dari "rumah pintar". Tentang bagaimana menerapkan fungsi tersebut, tanpa mengganggu desain bingkai - baca di bawah kucing.Metode implementasi
Cara termudah untuk mengontrol gambar yang ditampilkan pada bingkai foto digital adalah dengan mengganti gambar yang sudah disiapkan sebelumnya yang disimpan dalam memorinya dengan cara yang diperlukan. Berikut adalah contoh implementasi metode ini. Jelas, metode ini tidak terlalu fleksibel - Anda dapat menampilkan nomor variabel tunggal, dan proses mengubah nomor ini akan sangat lambat.Jadi, asalkan tidak mungkin untuk membongkar bingkai, tetap hanya menggunakan antarmuka memori eksternal - SPI (untuk bekerja dengan SD Card) dan USB. Cukup membuat perangkat yang mensimulasikan drive eksternal, sambungkan ke bingkai - dan itu sendiri akan meminta gambar dari perangkat tersebut. Menggunakan mikrokontroler untuk meniru kartu SD cukup sulit, dan faktor bentuk kartu itu sendiri cukup sulit untuk diulang. Seseorang dapat menggunakan kartu SD WiFi yang sudah jadi, tetapi semua kartu yang saya tahu terlalu mahal (> $ 40, yang dekat dengan biaya bingkai itu sendiri).Menggunakan USB untuk menyelesaikan masalah ini lebih cocok - bukan masalah untuk menemukan mikrokontroler yang produktif dengan dukungan USB; koneksi ke frame dilakukan oleh konektor standar. Apalagi sudah ada publikasi tentang Habrédidedikasikan untuk meniru drive USB menggunakan mikrokontroler stm32. Komentar pada artikel ini membahas kemungkinan mentransfer data yang berubah secara dinamis dengan metode ini. Karena sistem cache data operasi saat membaca file, tidak masuk akal untuk mengubah konten file yang ditiru - OS tidak akan meminta mereka, karena tidak akan dapat mengetahui bahwa mereka telah berubah. Namun, bingkai foto tidak menyimpan file cache (mereka hanya tidak memiliki jumlah RAM yang tepat)! Anda dapat memeriksa ini dengan menghubungkan USB flash drive ke bingkai foto, dengan LED berkedip saat membaca file - itu akan terus berkedip saat membaca file. Karena itu, saya memutuskan untuk menggunakan metode khusus ini.Bagian perangkat lunak
Saya sudah memiliki papan debug STM32F4DISCOVERY, jadi saya memutuskan untuk memeriksa operasi perpustakaan emfat, yang diusulkan dalam artikel di atas. Tidak ada masalah dengan Windows 7, tetapi bingkai foto tidak dapat mendeteksi file pada disk "virtual". Ternyata kemudian, tablet Android juga tidak mendeteksi drive. Komputer Ubuntu lain mendeteksi perangkat USB tetapi tidak dapat memasang drive.Saya harus mengatasi masalahnya lebih dalam. Ternyata, terlepas dari kenyataan bahwa Windows mendeteksi drive dan dapat membaca file dari itu, TestDisk tidak dapat menentukan sistem file di dalamnya:
Secara bertahap, mempelajari hasil data mentah yang disediakan oleh TestDisk, serta menggali kode sumber program ini, saya menyadari bahwa salah satu kriteria yang menentukan TestDisk untuk sistem file yang digunakan adalah ukuran disk. Dalam emfat, ukuran disk yang diemulasi tergantung pada jumlah data di dalamnya. Jadi, jika ada satu atau beberapa file kecil pada disk, maka ukuran disk tidak akan melebihi 16 MB. Pada saat yang sama, FAT32 memberlakukan pembatasan pada ukuran volume minimum - setidaknya 65527 cluster. Mempertimbangkan bahwa dalam "emfat" satu cluster menempati 4096 byte, maka untuk kepatuhan FAT32 ukuran disk harus 65527 * 4096 ~ 268Mb. Pada kenyataannya, ini bukan, yang menyebabkan kesalahan dalam menentukan jenis sistem file. Upaya untuk meningkatkan kapasitas disk dengan meningkatkan volume file yang diemulasi menjadi 400 MB tidak berhasil - mungkin sesuatu yang lain tidak cocok di sana.Jadi saya memutuskan untuk mengulangi "emfat" untuk meniru sistem file FAT16.Pada akhirnya, ini berhasil, dan drive mulai terdeteksi dengan benar oleh semua perangkat:
Perlu dicatat bahwa FAT16 juga memiliki batasan pada ukuran disk - setidaknya 4.087 cluster, yaitu 16 MB dalam kasus ini. Untuk memenuhi kondisi ini, perlu membuat file virtual 20 MB di emfat.Pemeriksaan dengan bingkai foto berjalan dengan baik - bingkai berhasil menampilkan gambar uji yang disimpan dalam memori Flash pengontrol. Langkah selanjutnya adalah menampilkan gambar khusus. Cara termudah untuk mengemulasi file BMP adalah bahwa mereka memiliki struktur yang cukup sederhana, gambar bisa 256-warna, mis. ada satu byte per piksel. Tetapi hanya dalam kasus ini, Anda perlu 480 KB RAM untuk menyimpan gambar berukuran 800 * 600. Mikrokontroler tidak memiliki kapasitas memori seperti itu, yang berarti hanya ada satu opsi yang tersisa - untuk membentuk gambar dengan cepat. Prinsip operasi adalah sebagai berikut - dalam kasus ketika perangkat host meminta data dari file dari drive, emfat memanggil fungsi panggilan balik yang sesuai dengan file ini. Jumlah sektor dari mana data diminta dan penunjuk tempat penulisan data ini ditransfer ke fungsi ini. Mengetahui nomor sektor,Anda dapat menentukan bagian gambar yang diminta dan membentuknya.Selama percobaan, fakta yang tidak menyenangkan ditemukan - Windows dapat meminta data dari sektor yang rusak. Mengapa ini dilakukan tidak jelas, tetapi ini mempersulit pembentukan gambar dengan cepat, karena itu perlu tetapi untuk menghitung nomor sektor - potongan data mana yang sedang diminta saat ini. Masalah lain adalah bahwa baris dalam file BMP pergi dari bawah ke atas, yang selanjutnya memperumit perhitungan posisi.Untuk menampilkan teks, saya menggunakan perpustakaan mcufont . Lebih mudah karena memungkinkan Anda untuk menggunakan font terkompresi, yang secara signifikan mengurangi penggunaan memori Flash. Karena saya menggunakan font yang cukup besar, fitur ini cukup penting.Pustaka ini secara langsung menulis gambar yang dihasilkan ke memori, jadi agar pustaka berfungsi, Anda harus mengalokasikan array terpisah dalam RAM.Saya juga menerapkan rendering gambar dari memori pengontrol. Semua gambar, seperti teks, ditampilkan dalam warna hitam dan putih, karena informasi tentang 8 piksel dapat disimpan dalam satu byte gambar. Untuk mengubah gambar biasa menjadi tampilan yang cocok untuk menghubungkan ke suatu proyek, program Asisten LCD digunakan .Akibatnya, gambar bentuk berikut ini terbentuk pada drive USB yang terhubung:Setelah program diuji pada STM32F4DISCOVERY, saya membuat perangkat itu sendiri, yang merupakan mikrokontroler dengan modul WiFi yang terhubung ke ESP8266. Dari yang cocok, saya hanya memiliki controller STM32F107RCT7.Rangkaian perangkat yang dihasilkan ternyata cukup sederhana: Tetapi karena pembatasan pada ukuran papan - 17x36mm (saya berencana untuk menginstalnya dalam casing jadi) dan ukuran besar dari pengontrol, papan sirkuit yang dicetak bukan yang paling mudah untuk dibuat - sisi ganda, dengan bagian-bagian yang dipasang di kedua sisi. Dalam hal ini, beberapa saluran listrik harus dibuat kawat. Tampilan papan yang dihasilkan (saat debugging dengan modul ESP-01):
Dengan ukuran papan yang ditunjukkan, modul WiFi ESP-03 adalah yang paling cocok. Beginilah tampilan papan yang dihasilkan dengan modul yang sudah terpasang: Dan dari sisi pengontrol: Selama percobaan, ternyata sensitivitas antena keramik tidak cukup - modul hampir tidak terhubung ke router. Setelah menyambungkan sepotong kawat 31 mm ke pin WIFI_ANT, sensitivitasnya meningkat tajam dan menjadi serupa dengan sensitivitas ESP-01. Tempat di mana bingkai foto dipasang secara permanen adalah beberapa meter dari router, dan antena asli modul juga bekerja secara normal, sehingga tidak ada antena tambahan di foto.
Karena ESP8266 cukup panas selama operasi konstan, saya memutuskan untuk menyalakannya hanya selama permintaan informasi. Manajemen daya dapat dilakukan dengan menggunakan output dari modul CH_PD. Mengatur pin ini ke 0 menyebabkan ESP8266 masuk ke mode daya rendah.Untuk membuatnya lebih mudah untuk menguji operasi ESP8266, saya menulis firmware terpisah untuk mikrokontroler yang mengimplementasikan jembatan USB-UART. Melalui modul itulah dikonfigurasi untuk bekerja dengan router, sehingga setelah dihidupkan, ESP8266 secara otomatis terhubung dengannya.Prinsip operasi perangkat yang dihasilkan cukup sederhana - setiap 10 menit controller mencoba meminta data dari server, dan jika berhasil, itu memperbarui data cuaca. Data tentang suhu saat ini dan perkiraan untuk 3 hari sebelumnya diambil dari situs openweathermap.org, informasi tentang suhu di luar dan di dalam balkon diambil dari server majordomo. Pada saat yang sama, bingkai foto meminta gambar setiap 6 detik, sambil menampilkan informasi saat ini. Karena kedua proses dapat terjadi secara bersamaan, DMA digunakan untuk menerima data dari ESP8266.Hasilnya, gambar berikut ini ditampilkan pada bingkai foto: Kode sumber proyek: github.com/iliasam/USB_Photoframe
Source: https://habr.com/ru/post/id384177/
All Articles