Обновлено: Как Превратить Планшетный Usb-Сканер В Сетевой Сканер С Памятью С Помощью Raspberry Pi. Видеолекция И Текст

Поскольку публикаций о Raspberry Pi сегодня очень много, вставлю свои пять копеек.

На днях я выложил на Youtube лекцию, демонстрирующую, как сделать устройство для сканирования с сетевым диском от Raspberry Pi и USB-сканером, используя SANE, Samba и WiringPi, немного зная электротехнику и bash. Все продемонстрированное используется в реальной жизни, хотя и в немного адаптированном виде.

Приглашаю желающих посмотреть.

и покритиковать здесь в комментариях и карме.

:) Лекция длилась почти 2 часа, так что, наверное, лучше смотреть прямо на Youtube; В описании к видео есть оглавление.

Под видео будет текстовая расшифровка в сокращенном виде (специально для Хабра).

Приятного просмотра или чтения.

:)



Описание проблемы и концепция решения

Начнем с исходных данных.

У нас есть обычный сканер (в моем случае Canon CanoScan LiDE 120), который подключается к USB-порту компьютера и может сканировать на компьютер.

Но, например, появляется второй компьютер, и когда возникает общая необходимость сканирования, неудобно каждый раз переключать сканер между компьютерами.

Что делать? Да, сейчас есть сетевые МФУ, но для нас это почему-то не вариант. Для решения проблемы нам по сути нужно выделить для сканера отдельное место, организовать сетевой диск, подключить к нему все компьютеры нашей домашней сети и научить сканер сканировать на этот самый сетевой диск.

В процессе сканирования пользователь будет находиться рядом со сканером, нажимать кнопки и менять сканируемые листы; ему не придется каждый раз бежать к компьютеру, чтобы дать команду на сканирование.

А потом, когда все необходимое будет отсканировано, он подойдет к своему компьютеру, скопирует или перенесет отсканированные файлы с сетевого диска к себе и продолжит с ними работать.

Итак, выбираем место для размещения сканера, подключаем к нему кабель от роутера нашей локальной сети (можно и WiFi, но оставим это как вариант), устанавливаем розетку для питания 220В — и что дальше? Теоретически сканер необходимо подключить к компьютеру.

Но покупать и устанавливать для этих целей отдельный компьютер дорого и не оправдано.

Ну, ему понадобится клавиатура и мышь с монитором, им тоже нужно место.

В то же время у нас нет ничего особенного; сканируем в основном один формат (А4).

Итак, давайте посмотрим на что-то более портативное.

В нашем проекте мы используем одноплатный компьютер Raspberry Pi 2 Model B. Хоть он и не новый и не особо мощный, но его мощности вполне достаточно для нашей задачи, он не потребляет много энергии, а GPIO пригодится.

Тем, кто сразу захочет все повторить с помощью существующего сканера, рекомендую сначала зайти на Сайт проекта SANE , перейдите к списку поддерживаемых устройств и убедитесь, что конкретная модель сканера правильно поддерживается проектом.

В противном случае усилия и, возможно, деньги могут пойти насмарку.

Более того, возможно, вам стоит организовать машину (виртуальную или реальную) с Debian 10 (точнее, актуальной на момент тестирования версией, из которой Raspberry Pi Foundation сделала операционную систему) и вменяемой из коробки и проверить работу с помощью утилиты scanimage; Если все в порядке, то с малиной наверняка получится.



Вспомогательные предметы первой необходимости

Что касается питания малины и сканера, то в демо-проекте я использую обычное зарядное устройство MicroUSB на два ампера.

Но, если малина рассчитана на круглосуточную работу, то использовать ее не рекомендую.

Это не их задача, и не факт, что конкретное зарядное устройство не выйдет из строя, если будет длительное время в режиме 24/7 подавать не такой уж и малый ток.

Лучше не экономить и взять либо фирменный блок питания, либо приспособить другой, подходящий для такой работы.

Также не рекомендую подключать сканер длинным USB-кабелем или неизвестного происхождения.

Это уже из более чем полугодового опыта эксплуатации; сюрприз может случиться в самый неподходящий момент. Что касается «дисковой» памяти, то малина, как известно, использует карты MicroSD. Десятая ОС Raspberry Pi помещается на карту объемом 4 ГБ.

Но у нас там всё равно будет приличное количество установленного ПО плюс сетевая папка для сканирований.

Итак, мы сосредоточимся как минимум на 8; В проекте использовано 16. Также для первичной записи образа ОС вам понадобится компьютер с кардридером, к которому можно подключить карту.

Я использовал адаптер для устройства чтения карт SD, встроенного в ноутбук.

Нам также нужно тело.

Здесь есть много вариантов.

В показанном варианте я использовал неоригинальный корпус увеличенной толщины; это позволило смонтировать на верхней крышке предусмотренную конструкцией схему из двух кнопок и светодиода (об этом позже), а высоты корпуса хватило для кнопок, малинки и BLS разъемов для подключения к GPIO булавки.

Этот корпус изготовлен из плексигласа.

Вот так выглядит собранная схема, но без малины:

Обновлено: Как превратить планшетный USB-сканер в сетевой сканер с памятью с помощью Raspberry Pi. Видеолекция и текст

Сейчас использую этот корпус для отладки и демонстрации, а в боевом варианте малина встроена в специальный электрощиток вместе с блоком питания и используется одновременно для другой задачи, а схема смонтирована в отдельном небольшом корпус, который подключается к малине четырехжильным плоским телефонным кабелем.

Еще одна проблема малины — нагрев процессора.

Если вы планируете работать круглосуточно, обклеиваем небольшой радиатор чем-то подходящим, проводящим тепло.



Подготовка карты памяти

Приступим к подготовке карты памяти.

Недавно Raspberry Pi Foundation не только переименовала Raspbian в Raspberry Pi OS, но и выпустила программу под названием Raspberry Pi Imager для Windows, macOS и Ubuntu. Загрузите эту программу, установите ее на свой компьютер и запустите.

Первое, что делаем в окне программы – Выбираем ОС.

Там есть много вариантов.

По умолчанию предлагается ОС Raspberry Pi (32-битная), но в комплекте идет рабочий стол, а на двоих рабочий стол так себе.

Поэтому заходим в ОС Raspberry Pi (другая) и выбираем там вариант lite; нам вряд ли понадобится что-то кроме командной строки.

Далее устанавливаем и выбираем карту памяти и записываем на нее образ.

Этот процесс показан на видео по адресу 00:12:15 .



Начальная настройка

Можно вставить карту памяти в малинку и приступить к настройке.

Для этого, кроме блока питания, сети с интернетом и сканера, нам потребуется подключить USB-клавиатуру и монитор кабелем HDMI (для малины четвертого поколения используется MicroHDMI).

Питание подключаем в последнюю очередь.

И помним о безопасности при работе с открытыми токопроводящими деталями, особенно если малины нет в корпусе, а питание сомнительно с точки зрения электрического контакта с напряжением 220В.

Включаем, загружаемся, авторизуемся под логином pi по умолчанию и паролем raspberry. Процесс настройки в видео происходит так: 00:18:43 .

Прежде всего, обязательно проработайте обновление sudo apt и обновление sudo apt. На момент записи видео репозиторий предлагал обновить 30 пакетов, хотя образ карты памяти я записывал непосредственно перед первоначальной настройкой.

Судя по всему, он не компилируется при каждом обновлении репозитория.

Далее при желании решаем проблему с квадратиками в консоли вместо русских букв.

Вызовите sudo dpkg-reconfigure console-setup и просмотрите меню.

Установите (или оставьте) следующие параметры:

  • Кодировка для использования на консоли — UTF-8.
  • Поддерживаемый набор символов — угадайте оптимальный набор символов.

  • Размер шрифта - 8x16
Перезагружаемся первый раз.

Делаем это обычным способом, через перезагрузку sudo. Снова авторизуемся, запускаем sudo raspi-config и приступаем к первоначальной настройке параметров.

В нем мы решаем следующие задачи:

  1. смена пароля по умолчанию (в меню: Параметры системы - Пароль и далее по инструкции)
  2. включение удаленного доступа по SSH (Параметры интерфейса — SSH)
  3. Русская локаль (Параметры локализации - Локаль; я снял галочку с en_GB.UTF-8 UTF-8, установил en_US.UTF-8 UTF-8 и ru_RU.UTF-8 UTF-8, затем выбрал русский язык по умолчанию)
  4. часовой пояс (Параметры локализации - Часовой пояс; выберите там континент, затем город)
  5. расширение файловой системы (Дополнительные параметры – Расширить файловую систему).

После этого выберите Готово.

Программа предложит перезагрузиться, что мы и делаем.

Затем снова авторизуемся (с новым паролем), заходим в sudo raspi-config, выбираем «Параметры локализации», а затем «Клавиатура».

Программа настройки клавиатуры теперь будет писать на русском языке.

В модели клавиатуры по умолчанию выбираем «Обычный ПК со 105-клавишным (инт.) В раскладке сначала выберите «Другое», затем «Русский» и далее вариант (просто «Русский» или что-то более подходящее для существующей клавиатуры).

Далее выберите способ переключения раскладки и другие разные клавиши, если это необходимо.

Все изменится достаточно быстро.

Остается только перейти к Finish в главном меню raspi-config. Больше к этой утилите мы не вернемся.



Установка и настройка дополнительного программного обеспечения, используемого в проекте.

Выполните команду sudo apt install Wiringpi samba sane. Я также добавил в этот список (и в лекцию) mc и показал, как с ним работать, но это вопрос сугубо личных предпочтений, я никому его не навязываю.

Далее (желательно в большинстве случаев) даем малине постоянный IP-адрес.

Думаю, лучше это сделать на роутере, но если это невозможно, то можно задать статические настройки сети, отредактировав /etc/dhcpcd.conf после комментария Пример настройки статического IP. Пакет dhcpcd включен в ОС Raspberry Pi «из коробки»; нет необходимости устанавливать его.

Следующая задача — создать каталог для размещения файлов сканирования.

Я выбрал этот вариант и создал каталог /var/scanned. Этому каталогу нужно дать такие права, чтобы Samba могла с ним работать.

Сейчас конечно самба настраивается.

Заходим в /etc/samba/smb.conf и прописываем там глобальные настройки и раздел с данными для нового сетевого ресурса и путь к созданному нами каталогу.

Это в видео на 00:41:51 .

Но, конечно, специфика сети может давать определенные отличия от приведенных там настроек.

После настройки настоятельно рекомендуется перезагрузить Raspberry и проверить работу сетевого диска с компьютера.

Оттуда в большинстве случаев вам понадобится полный доступ к файлам в каталоге.

Прежде чем перейти к рукоделию и программированию, у нас осталось две задачи – определиться с аппаратной частью и сначала разобраться с параметрами программы сканирования.

Начнем с железной части.

Для этого запустите gpio readall. Малинка покажет нам нумерацию контактов разъема GPIO в столбцах Physical и их назначение в столбцах Name. Для схемы нам понадобятся три порта GPIO и один общий провод (в графе Имя он называется 0v; на разъеме их много, но нам столько не нужно, просто выберем любой из их).

Записываем их названия и номера на разъеме.

Для себя я выбрал GPIO.1 на пин номер 12, GPIO.2 на пин 13 и GPIO.3 на пин 15. Общий провод подключу к пину номер 9.

Обновлено: Как превратить планшетный USB-сканер в сетевой сканер с памятью с помощью Raspberry Pi. Видеолекция и текст

Теперь определимся со сканером, который у нас уже подключен к USB. Давайте сделаем sudo sane-find-scanner. Если сканер не виден этой утилитой, возможно, проблема со сканером, малиной, кабелем или блоком питания; об этом нужно говорить отдельно.

Теперь выполните sudo scanimage –help | less и посмотрим возможности, разрешенные для нашего устройства.

Для себя запишу параметры l, t, x, y, разрешение и формат. Эти параметры перейдут в командную строку программы сканирования.

Первоначальная настройка Raspberry завершена.

Перед сборкой схемы малину необходимо выключить.

Это, если кто не помнит, делается командой sudoshutdown –h now. Через некоторое время изображение на экране пропадет, а все светодиоды на малине погаснут, кроме светодиода питания.

Это будет означать, что система завершила свою работу, можно отключить питание и приступить к рукоделию.



Схемотехнические решения

GPIO в малине только цифровой (то есть двухуровневый 0 и 1) и может работать в трёх режимах: просто вход (режим вызывается), вход с силовым подтягивающим резистором сопротивлением 50-50 В.

65 кОм (имя вверху) и выход (имя вверху).

Мы будем использовать последние два режима.

Как я писал ранее, нам нужно будет подключить две кнопки (назовем их «Старт» и «Стоп») и светодиод через GPIO. Естественно, что для ограничения тока потребуется последовательно с ним включить ограничительный резистор; Выходной резистор я выбрал номиналом 2,2 кОм и мощностью рассеяния 0,25 Вт; обычно этого достаточно.

Схема подключения выглядит следующим образом:

Обновлено: Как превратить планшетный USB-сканер в сетевой сканер с памятью с помощью Raspberry Pi. Видеолекция и текст

Исходя из использования режима вверх, помните, что при нажатии кнопки со входа GPIO будет считываться значение 0, а при отпускании — считываться 1. Обе наши кнопки нормально открыты, без фиксации.

Я не буду здесь останавливаться на деталях исполнения, тем более, что ранее я показывал фото готового корпуса, где все уже было.

Из соображений безопасности я рекомендую выбирать только кнопки, внешние части которых полностью пластиковые, чтобы не торчали открытые проводящие части.

К контактам GPIO я подключался одноконтактными разъемами BLS, похожими на те, что используются в компьютерных корпусах; Для этой демонстрации я просто взял из проектов Arduino пучок проводов с подходящими разъемами, выбрал четыре разных цвета, откусил ненужные концы, зачистил их и припаял к деталям.

Другой вариант — использовать 40-контактный двухрядный разъем с плоским шлейфом или даже кусок старого IDE-кабеля от жестких дисков или CD-приводов, если он у кого-то остался.

Этот вариант, кстати, подходит и для шкафов стандартной высоты; у них есть слот для вывода наружу такого кабеля.

Ну и ещё помню, что меня мучил тот факт, что на платах Raspberry (как минимум 2 модели B и 3 модели B) не была указана нумерация контактов разъема GPIO. Я исправлю это сейчас; Эти две модели не имеют различий в этом отношении.



Обновлено: Как превратить планшетный USB-сканер в сетевой сканер с памятью с помощью Raspberry Pi. Видеолекция и текст



Реализация программной части

Программная часть реализована (тадам!) в виде двух bash-скриптов — конфига и собственно рабочего скрипта.

Подробное пояснение алгоритма работы на блок-схеме и реализации – в видео на 01:08:30 .

Я не думаю, что здесь есть смысл вдаваться в подробности; исходники скриптов можно скачать Здесь и учитесь в свободное время.

Запуск основного рабочего скрипта прописан в автозагрузке в /etc/rc.local. Единственное, пришлось сначала прописать смену рабочего каталога на каталог со скриптами.

Но ничего страшного здесь нет, дальнейшей работе это не мешает. И, конечно же, не забудьте после команды запуска добавить значок &, иначе возникнут проблемы с загрузкой системы.

Ну а осталось собственно показать вживую сам процесс сканирования, а также подключение по ssh и настройку параметров - как это было у меня.

Вы можете посмотреть это на видео по адресу 01:41:04 .

Как-то так получилось.

В боевом варианте у меня единственное отличие - сканирование на отдельный NAS; соответственно, скрипты были немного изменены.

А так, я думаю, можно даже отправлять сканы куда-нибудь в мессенджер с помощью бота, если только вы захотите разобраться в соответствующем API и сделать что-то подобное с помощью Curl. Есть много вариантов.

Удачи в реализации.

:) Теги: #Сделай сам или Сделай сам #Raspberry Pi #Разработка Raspberry Pi #Настройка Linux #проекты своими руками #bash-скрипты #bash-скрипты

Вместе с данным постом часто просматривают: