Diperbarui: Cara membuat jaringan pemindai tablet USB dengan memori menggunakan Raspberry Pi. Video kuliah dan teks

Sejak publikasi tentang Raspberry Pi mengalir masuk hari ini, saya akan memasukkan lima sen saya. Beberapa hari yang lalu saya memposting kuliah di Youtube dengan demonstrasi bagaimana membuat perangkat untuk memindai dengan drive jaringan dari Raspberry Pi dan pemindai USB menggunakan SANE, Samba dan WiringPi, memiliki sedikit tukang listrik dan bash. Semua yang ditunjukkan digunakan dalam kehidupan nyata, meskipun dalam bentuk yang disesuaikan. Saya mengundang mereka yang tertarik untuk melihat ... yah, dan mengkritik di sini di komentar dan karma. :)



Ceramahnya hampir 2 jam, jadi mungkin lebih baik nonton langsung di Youtube; ada daftar isi di deskripsi video. Di bawah video akan ada transkrip teks dalam bentuk singkatan (khusus untuk Habr).



Selamat melihat atau membaca. :)







Deskripsi masalah dan konsep solusinya



Mari kita mulai dengan data awal. Kami memiliki pemindai biasa (dalam kasus saya Canon CanoScan LiDE 120) yang terhubung ke port USB komputer dan dapat memindai ke komputer. Tetapi di sini, misalnya, komputer kedua muncul, dan dengan kebutuhan umum untuk pemindaian, berpindah pemindai antar komputer setiap saat tidak nyaman. Apa yang harus dilakukan? Ya, sekarang ada MFP jaringan, tetapi untuk beberapa alasan ini bukan pilihan bagi kami.



Untuk mengatasi masalah ini, pada dasarnya kita perlu melengkapi tempat terpisah untuk pemindai, mengatur drive jaringan, menghubungkan semua komputer di jaringan rumah kita, dan mengajari pemindai untuk memindai ke drive jaringan yang sama ini. Pengguna dalam proses pemindaian akan berada di dekat pemindai, menekan tombol dan mengganti lembar yang dipindai; ia tidak perlu menjalankan komputer setiap kali memberikan perintah untuk memindai. Dan kemudian, ketika semua yang dia butuhkan dipindai, dia akan pergi ke komputernya, menyalin atau mentransfer file yang dipindai dari drive jaringan ke dirinya sendiri dan akan terus mengerjakannya.



Jadi, kami memilih tempat untuk menempatkan pemindai, kami membawa kabel ke sana dari router jaringan lokal kami (WiFi juga dimungkinkan, tetapi kami akan membiarkan ini sebagai opsional), kami memasang stopkontak untuk catu daya 220V - dan apa selanjutnya?



Secara teori, pemindai harus terhubung ke komputer. Tetapi membeli dan memasang komputer terpisah untuk tujuan ini mahal dan tidak dibenarkan. Ya, dia akan membutuhkan keyboard dan mouse dengan monitor, mereka juga membutuhkan ruang. Pada saat yang sama, kami tidak memiliki sesuatu yang istimewa, kami hanya memindai satu format (A4). Jadi mari kita lihat sesuatu yang lebih portabel.



Dalam proyek kami, kami menggunakan komputer papan tunggal Raspberry Pi 2 Model B. Meskipun tidak baru dan tidak terlalu bertenaga, tenaganya cukup bagi kami untuk tugas tersebut, tidak benar-benar mengkonsumsi energi, nah, GPIO akan berguna.



Bagi yang langsung ingin mengulang semuanya atas dasar scanner yang ada, saya anjurkan agar Anda terlebih dahulu masuk ke website proyek SANE, buka daftar perangkat yang didukung dan pastikan bahwa model pemindai tertentu cukup didukung oleh proyek tersebut. Jika tidak, upaya dan, mungkin, uang bisa terbang ke dalam pipa. Selain itu, mungkin bermanfaat untuk mengatur mesin (virtual atau nyata) dengan Debian 10 (lebih tepatnya, pada saat memeriksa versi dari mana Raspberry Pi Foundation membuat sistem operasi) dan keluar dari kotak dan memeriksa pekerjaan menggunakan utilitas scanimage; jika semuanya normal, maka mungkin akan berfungsi pada raspberry.



Auxiliary Diperlukan



Sedangkan untuk catu daya raspberry dan pemindai, dalam proyek demo saya menggunakan pengisi daya MicroUSB dua amp biasa. Tetapi, jika raspberry seharusnya bekerja sepanjang waktu, maka saya tidak menyarankan untuk menggunakannya. Ini bukan tugas mereka, dan bukan fakta bahwa pengisian daya tertentu tidak akan gagal jika tidak memberikan arus sekecil itu untuk waktu yang lama dalam mode 24/7. Lebih baik tidak menghemat uang dan mengambil salah satu unit catu daya berpemilik, atau menyesuaikan unit lain yang cocok untuk pekerjaan semacam itu.

Selain itu, saya tidak menyarankan menghubungkan pemindai dengan kabel USB dengan panjang atau asal apa pun. Ini berasal dari lebih dari enam bulan pengalaman operasi; kejutan bisa terjadi pada saat yang paling tidak tepat.



Adapun memori "disk" - dalam raspberry, seperti yang Anda tahu, kartu microSD digunakan. Raspberry Pi OS kesepuluh cocok untuk 4 kartu pertunjukan. Tetapi kami masih memiliki perangkat lunak yang dapat diinstal yang layak di sana, ditambah folder jaringan untuk pemindaian. Jadi kami fokus pada setidaknya 8; 16 digunakan dalam proyek. Selain itu, untuk perekaman awal gambar OS, Anda memerlukan komputer dengan pembaca kartu, tempat kartu dapat dihubungkan. Saya menggunakan adaptor untuk pembaca kartu SD yang terpasang di laptop.



Kami juga membutuhkan tubuh. Ada banyak pilihan. Dalam varian yang ditampilkan, saya menggunakan casing non-orisinal dengan ketebalan yang ditingkatkan; ini memungkinkan untuk memasang sirkuit dua tombol dan LED yang disediakan oleh proyek di penutup atas (lebih lanjut tentang ini nanti), dan tinggi casing cukup untuk tombol, dan konektor raspberry, dan BLS untuk menghubungkan ke pin GPIO. Tubuh ini terbuat dari plexiglass. Ini adalah tampilannya dengan sirkuit yang dirakit, tetapi tanpa raspberry:







Sekarang saya menggunakan kasing ini untuk debugging dan demonstrasi, dan dalam versi tempur raspberry dipasang di panel listrik khusus bersama dengan catu daya dan digunakan pada saat yang sama untuk tugas lain, dan sirkuit dipasang dalam wadah kecil terpisah, yang terhubung ke raspberry dengan kabel telepon datar empat inti.



Masalah lain dengan raspberry adalah memanaskan intinya. Jika Anda berencana untuk bekerja sepanjang waktu, kami merekatkan radiator kecil dengan penghantar panas yang sesuai.



Mempersiapkan kartu memori



Mari mulai menyiapkan kartu memori. Baru-baru ini, Raspberry Pi Foundation tidak hanya mengganti nama Raspbian menjadi Raspberry Pi OS, tetapi juga merilis program bernama Raspberry Pi Imager untuk Windows, macOS, dan Ubuntu. Unduh program ini, instal di komputer Anda dan jalankan.



Pertama-tama, di jendela program, kami akan membuat Pilih OS. Ada banyak pilihan. Secara default, Raspberry Pi OS (32-bit) ditawarkan, tetapi dengan desktop, dan untuk dua, desktop biasa saja. Oleh karena itu, kami pergi ke Raspberry Pi OS (lainnya) dan di sana kami memilih opsi lite; kita hampir tidak membutuhkan apapun selain baris perintah. Kemudian kami meletakkan dan memilih kartu memori dan menulis gambar di atasnya. Proses ini ditunjukkan dalam video pada 00:12:15 .



Pengaturan awal



Anda dapat meletakkan kartu memori di raspberry dan pergi ke pengaturannya. Untuk melakukan ini, selain daya, jaringan dengan Internet dan pemindai, kita perlu menghubungkan keyboard USB dan monitor dengan kabel HDMI (untuk raspberry generasi keempat, ada MicroHDMI). Kami menghubungkan catu daya terakhir. Dan ingat tentang keselamatan saat bekerja dengan bagian konduktif terbuka, terutama jika raspberry tidak ada dalam casing, dan catu daya dipertanyakan dalam hal kontak listrik dengan 220V.



Nyalakan, boot, masuk dengan login pi default dan kata sandi raspberry. Proses penyiapan dalam video dimulai pada 00:18:43 .



Pertama-tama, pastikan untuk mengerjakan pembaruan sudo apt dan peningkatan sudo apt. Pada saat merekam video, repositori menawarkan untuk memperbarui 30 paket, meskipun saya merekam gambar kartu memori sebelum pengaturan awal. Rupanya, itu tidak dikumpulkan setiap kali repositori diperbarui.



Selanjutnya, jika diinginkan, kami memecahkan masalah kotak di konsol, bukan huruf Rusia. Kami memanggil sudo dpkg-reconfigure console-setup dan membuka menu. Kami menetapkan (atau meninggalkan) parameter berikut:



  • Pengkodean untuk digunakan di konsol - UTF-8
  • Set karakter untuk mendukung - Tebak kumpulan karakter optimal
  • Ukuran font - 8x16




Pertama kali kita reboot. Kami melakukan ini dengan cara biasa, melalui sudo reboot. Masuk lagi, jalankan sudo raspi-config dan lanjutkan ke pengaturan awal parameter. Kami melakukan tugas berikut di dalamnya:



  1. ( : System options β€” Password )
  2. SSH (Interface options β€” SSH)
  3. (Localisation options β€” Locale; en_GB.UTF-8 UTF-8, en_US.UTF-8 UTF-8 ru_RU.UTF-8 UTF-8, )
  4. (Localisation options β€” Timezone; , )
  5. (Advanced options β€” Expand filesystem).




Setelah itu pilih Finish. Program akan menawarkan untuk reboot, yang kami lakukan.



Kemudian kita masuk lagi (kali ini dengan kata sandi baru), pergi ke sudo raspi-config, pilih opsi Lokalisasi dan kemudian Keyboard. Program penyiapan keyboard sudah akan menulis dalam bahasa Rusia.



Dalam model keyboard, sebagai standar, kami memilih "PC Biasa dengan 105-tombol (Int.)



Dalam tata letak, pertama pilih" Lainnya ", lalu" Rusia "dan kemudian opsi (hanya" Rusia "atau lebih cocok untuk keyboard yang ada).



Selanjutnya, pilih metode untuk beralih tata letak dan kunci lain yang berbeda, jika Anda mau. Semuanya akan berubah cukup cepat. Itu tetap di menu raspi-config utama untuk menuju ke Selesai. Kami tidak akan kembali ke utilitas ini lagi.



Menginstal dan mengonfigurasi perangkat lunak tambahan yang digunakan oleh proyek





Lakukan sudo untuk menginstal wiringpi samba waras. Saya menambahkan mc ke daftar ini (dan ke kuliah) dan menunjukkan bagaimana bekerja dengannya, tetapi ini adalah masalah preferensi pribadi murni, saya tidak memaksakan pada siapa pun.



Kemudian (sebaiknya dalam banyak kasus) setel alamat IP permanen ke malinka. Saya pikir lebih baik melakukan ini di router, tetapi jika ini tidak memungkinkan, Anda dapat mengatur pengaturan jaringan statis dengan mengedit /etc/dhcpcd.conf setelah komentar Contoh konfigurasi IP statis. Paket dhcpcd disertakan dengan Raspberry Pi OS di luar kotak, Anda tidak perlu menginstalnya.



Tugas selanjutnya adalah membuat direktori untuk menyimpan file pindaian. Saya memilih kasus ini dan membuat direktori / var / scan. Direktori ini perlu diatur izinnya agar samba dapat bekerja dengannya.



Sekarang, tentu saja, kami sedang mengkonfigurasi samba. Kami pergi ke /etc/samba/smb.conf dan mendaftarkan pengaturan global dan bagian dengan data sumber daya jaringan baru dan jalur ke direktori yang kami buat di sana. Video tersebut menunjukkannya pada pukul 00:41:51 . Tetapi, tentu saja, spesifikasi jaringan dapat memberikan perbedaan tertentu dari pengaturan yang diberikan di sana.



Setelah konfigurasi, sangat disarankan untuk mem-boot ulang raspberry dan memeriksa drive jaringan dari komputer. Dari sana, dalam banyak kasus, Anda memerlukan akses penuh ke file di direktori.



Sebelum transisi ke menjahit dan pemrograman, kita memiliki dua tugas tersisa - untuk memutuskan bagian besinya dan pertama-tama mencari tahu parameter untuk program pemindaian.



Mari kita mulai dengan bagian besi. Untuk melakukan ini, jalankan gpio readall. Malinka akan menampilkan penomoran pin pada konektor GPIO di kolom Fisik dan tujuannya di kolom Nama. Untuk rangkaian, kita membutuhkan tiga port GPIO dan satu kabel umum (di kolom Nama, disebut 0v; ada banyak di konektor, tetapi kita tidak perlu terlalu banyak, cukup pilih salah satu dari mereka). Kami menuliskan nama dan nomor mereka pada konektor. Untuk saya sendiri, saya memilih GPIO.1 di pin nomor 12, GPIO.2 di pin 13 dan GPIO.3 di pin 15. Saya akan menghubungkan kabel biasa ke pin nomor 9.



gambar



Sekarang mari kita putuskan pemindai, yang sudah kita sambungkan ke USB. Melakukan sudo sane-find-scanner. Jika pemindai tidak terlihat dengan utilitas ini, mungkin ada masalah dengan pemindai, raspberry, kabel, atau catu daya; ini perlu ditangani secara terpisah. Sekarang lakukan sudo scanimage –help | kurang dan lihat opsi yang diizinkan untuk perangkat kami. Untuk saya sendiri, saya akan menuliskan opsi l, t, x, y, resolusi dan format. Opsi ini akan masuk ke baris perintah program pemindaian.



Ini menyelesaikan penyiapan awal raspberry. Sebelum merakit sirkuit, raspberry harus dimatikan. Ini, jika ada yang tidak ingat, dilakukan dengan perintah sudo shutdown –h now. Setelah beberapa saat, gambar di layar akan hilang, dan semua LED pada raspberry akan mati, kecuali LED daya. Ini berarti bahwa sistem telah selesai bekerja, Anda dapat mematikan daya dan mulai membuat kerajinan tangan.







GPIO dalam raspberry hanya digital (yaitu, dua level 0 dan 1) dan dapat bekerja dalam tiga mode: hanya input (mode dipanggil), input dengan resistor pull-up dengan resistansi 50-65 kilo ohm (dipanggil) dan output (dipanggil). Kami akan menggunakan dua mode terakhir.



Seperti yang saya tulis sebelumnya, kita perlu menghubungkan dua tombol melalui GPIO (sebut saja "Start" dan "Stop") dan sebuah LED. Secara alami, untuk membatasi arus, Anda perlu menghubungkan resistor pembatas secara seri dengannya; Saya memilih resistor keluaran dengan nilai nominal 2,2 kilohm dan daya disipasi 0,25 W; ini biasanya cukup. Diagram koneksi adalah sebagai berikut:







Berdasarkan penggunaan mode naik, ingatlah bahwa ketika tombol ditekan, nilai 0 akan terbaca dari input GPIO, dan saat dilepaskan - 1. Kedua tombol biasanya terbuka, tidak ada fiksasi.



Saya tidak akan memikirkan detail eksekusi di sini, terutama karena saya sebelumnya menunjukkan foto kasing yang sudah selesai, di mana semuanya sudah ada. Untuk alasan keamanan, saya hanya akan merekomendasikan memilih tombol dengan semua bagian luar plastik agar tidak menonjol dengan bagian konduktif yang terbuka. Saya menghubungkan ke pin GPIO dengan konektor BLS satu pin, mirip dengan yang digunakan dalam casing komputer; untuk demo ini, saya hanya mengambil banyak kabel dari proyek Arduino dengan konektor yang sesuai, memilih empat yang multi-warna, menggigit ujung yang tidak perlu, membersihkannya dan disolder ke detail. Pilihan lain adalah menggunakan konektor kabel datar baris ganda 40-pin, atau bahkan sepotong kabel IDE lama dari hard drive atau drive CD, jika ada yang punya. Opsi ini, omong-omong, juga cocok untuk kasing ketinggian standar;mereka memiliki slot untuk loop seperti itu untuk output ke luar.



Nah, dan juga, saya ingat, saya menderita dengan fakta bahwa pada papan raspberry (dalam hal apa pun, 2 model B dan 3 model B) penomoran pin konektor GPIO tidak ditunjukkan. Saya akan memperbaikinya sekarang; kedua model ini tidak memiliki perbedaan dalam hal ini.







Implementasi bagian perangkat lunak





Bagian perangkat lunak diimplementasikan (tadam!) Dalam bentuk dua skrip bash - konfigurasi dan skrip kerja itu sendiri. Penjelasan mendetail tentang algoritme diagram alur dan implementasinya ada dalam video pada pukul 01:08:30 . Menurut saya tidak masuk akal untuk membahas detail di sini; kode sumber skrip dapat diunduh di sini dan dipelajari di waktu luang Anda.



Peluncuran skrip kerja utama ditulis untuk startup di /etc/rc.local. Satu-satunya hal - pertama-tama saya harus mendaftarkan perubahan direktori kerja ke direktori dengan skrip. Tapi tidak ada yang mengerikan di sini, tidak mengganggu pekerjaan selanjutnya. Dan, tentu saja, jangan lupa untuk menambahkan ikon & setelah perintah peluncuran, jika tidak akan ada masalah dengan sistem boot.



Nah, dan kemudian tetap hanya untuk menunjukkan secara langsung proses pemindaian yang sebenarnya, serta koneksi ssh dan menyesuaikan parameter - seperti yang saya alami. Anda bisa menontonnya di video pada 01:41:04 .



Entah bagaimana itu terjadi. Dalam versi pertempuran, perbedaannya, hanya pemindaian pergi ke NAS terpisah, jadi skripnya sedikit berubah. Jadi, menurut saya, scan bahkan dapat dikirim ke messenger dengan bot di suatu tempat, hanya akan ada keinginan untuk memahami API yang sesuai dan melakukan sesuatu seperti itu di curl. Ada banyak pilihan. Selamat mencoba implementasinya. :)



All Articles