kameas

kameas

На Пикабу
4231 рейтинг 27 подписчиков 0 подписок 2 поста 1 в горячем
Награды:
5 лет на Пикабу
4064

Мини GPRS принтер для печати заказа в столовую

Всем привет, мы с коллегой расскажем вам как мы мучились 4 месяца сделали своими руками принтер, который печатает то что вы от него хотите, без лишних проводов (только питание)

Небольшая предыстория (и зачем это вообще нужно)

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


Как это работало:

- Ребята пишут заказ на бумажке с подписью
- Андрей собирает бумажки и относит их в столовую с деньгами
- Через 30 минут возвращается и забирает заказ
- Ребята располагаются на кухне в офисе и дружно обедают


Итого 4 итерации, 2 из которых - поход в столовую.

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

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

Позднее Олегом было предложено сделать «штуку которая будет печатать заказ в столовой», Андрей поделился со мной этой идеей, в дальнейшем мы пришли к выводу что нужна нам все-таки не штука, а принтер, желательно с мобильным интернетом, т.к. в столовой не было wifi (безумие).


Непосредственно сам процесс начался с прототипирования, все необходимое было закуплено за один раз на али, а именно:
- Принтер JP-QR701-TTL

- Arduino uno 328

- GSM/GPRS модуль sim800l + дополнительная антенна для него


И мое скромное вложение:

- Блок питания от монитора (14в 2а)

- Понижающие DC-DC модули

- Конденсаторы и прочая мелочь

Немного поясню по выбору железа:

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

- Миллионы раз в процессе разработки мы пожалели о том что выбрали Arduino, но в последствии лично для меня это превратилось в челлендж "впихнуть не впихуемое", ибо памяти очень не хватало

- GSM модуль взяли самый дешевый и распространенный — чем востребованнее железка, тем больше топиков и готовых проектов с ней


Примеров реализации sim800 + принтер + Arduino в сети не оказалось, но не смотря на это - руками мы написали лишь ~20% кода для проекта, в остальном - использовали библиотеки где все уже было сделано за нас.

Общение с модулем sim800l происходит с помощью AT-команд через Serial-port, в ответ, если все в порядке - отвечает OK, если нет - ERROR, использовали мы документацию которая гуглится по названию SIM800HL_Hardware_Design_V2.01 (есть много разных, но эта на мой взгляд самая полная)


Модуль крайне привередлив к питанию, ему необходимо 3.5 - 4.4в, иначе работать будет не стабильно, или может вообще выключится, предварительно написав предупреждение.

(картинка с сайта codius.ru)


Для получения данных из всемирной, пока еще не заблокированной сети - есть несколько способов:

- HTTP соединение

- TCP соедниение


Мы будем использовать второй вариант, т.к. библиотека которую мы используем работает именно по этому принципу (ее пришлось немного доработать, об этом в части про спаривание принтера и модуля)


С модулем можно общаться напрямую через Serial-порт компьютера, используя программатор, но у нас есть ардуино, и мы использовали скетч для отладки что бы немного с ним пообщаться (идет в комплекте с библиотекой, появляется в Examples Arduino IDE).

Шаг первый: получить данные с api.


С момента подключения питания до успешного получения данных прошло 2 часа (но потом мы потерли скетч и примерно 2 дня пытались повторить то что мы сделали).


Сложности с sim800l которыми мы столкнулись, перед тем как у нас это получилось:

- Недостаточное питание: подавали 3.3в вместо 3.5, модуль обманчиво мигал, но сеть не находил

- Пришлось настраивать прокси, т.к. модуль не может в ssl (или может, уже позже мы нашли документацию SIM800 Series_SSL_Application Note_V1.00), и большинство адресов вообще не открывалось

- Мегафон ни в какую не хотел открывать адрес api, даже через прокси, сменили оператора - все заработало

Принтер JP-QR701-TTL - самая распространенная модель, цифры/буквы в названии могут быть другие, главное что бы был TTL а не RS232, иначе придется подключать схему MAX3232 для конвертирования RS232 -> TTL. когда мы распечатали тестовую страницу (нужно зажать на нем кнопку и подать питание) то в начале мы получили половину страницы, где нет кириллицы.


Дело как и в случае с GSM-модулем было в питании, подавали мы меньше 5в, ему же требуется 5-9в, увеличили напряжение - все заработало, но кириллицы не появилось.


Потратив несколько часов на поиски "как печатать на русском" мы наткнулись на статью 2013 года (не могу вставить ссылку из-за рекламы на сайте), где человечище с ником zhevak выложил ссылки на файл для прошивки принтера другими кодировками. Ссылки оказались не рабочими, но мы поняли куда рыть, и нашли свежую версию программы которой я делюсь с вами. Просто выбираем нужную - CP866, нажимаем ОК, и ждем ОК от программы, печатаем тестовую страницу - и все, вы восхитительны.


Для общения с принтером использовали библиотеку Adafruit

Шаг второй: отправить полученные данные на печать


Итак, самая интересная часть, имеем:

- Полностью рабочий принтер, печатает то что мы хотим

- Полностью рабочий gprs модуль

Нам нужно их спарить между собой.


Создаем 2 Software Serial для прокидывания команд примерно по такой схеме:
Принтер <= Arduino <=> sim800l


Действуем по этим шагам:

- Получаем данные уже с переносами строк

- Конвертируем данные из UTF-8 в CP866

- Отдаем данные на принтер


И тут мы сталкиваемся с несколькими проблемами:

- Памяти у Arduino не хватит что бы сохранить список заказов который мы получаем с сервера, как вариант - получать и отправлять данные частями, но это приводит нас к следующему:

- Модуль sim800 передает данные не пакетами, мы имеем поток который нужно успеть прочитать, перекодировать и отправить на печать прежде чем он пришлет нам новые данные, и последняя проблема:

- Мы понимаем что количество ненумерованных списков в этой статье почти переваливает за десяток


Решение (второй проблемы) оказалось гениальным и простым - уменьшаем скорость потока данных при инициализации до 300 (хотя в документации сказано что ниже 900 нельзя) и все работает. Пожалуйста не спрашивайте меня как и почему, главное что оно работает.


Несколько вещей которые обязательно нужно сделать для библиотеки GSM-модуля:

- В файле sim800.h который лежит в библиотеке для GSM-модуля смотрим на значения пинов (например SIM800_TX_PIN), тут 2 варианта - меняем их на те что нам нужны, либо просто подключаемся к тем что указаны

- Рядом, в файле gprs.h меняем baudRate = 9600 на baudRate = 300 не могу вспомнить сколько дней у нас ушло на то, что бы понять что данные передаются потоком, и что принтер просто не успевает их напечатать на более высокой скорости


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

Вот так выглядит печать в нормальном виде

Шаг третий: монтаж и сборка


С получением данных и печатью все, далее печать платы для повышающих модулей и подключение блока питания. БП кстати должен выдавать минимум 1.5 - 1.7а, из-за высокого потребления принтера в момент печати.

(шутка про фронтенд и бэкенд)

Изначально корпус решили напечатать на 3d принтере, но около месяца это все оставалось на уровне "надо-бы сделать", тогда я решил сделать корпус из пвх пластика, за идею спасибо @OgnennoeTV,  а за пластик - Юре.

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

Далее были вырезаны детали из пластика и после подгонки - покрашены, хотели предварительно выровнять неровности но мы понимали что тогда это затянется еще на несколько дней (а мы уже очень хотели закончить)

Крепления были куплены в строительном магазине и с боков посажены на клей (потом все-таки поменяли на болты)

В момент сборки, на фото ниже - я представлял себя Робертом Фордом из мира дикого запада, который кряхтит над своим творением.

Предварительно согласовали с девушками из столовой формат печати, получили ОК и окончательно собрали принтер.

С момента выпуска принтера в "продакшн" прошло около месяца, в начале девушки в столовой были крайне удивлены черной коробке которая печатает им заказы, но потом привыкли, и даже выделили ей место.

Весь процесс занял примерно 4 месяца, но мы выделяли время только в выходные, и изредка - после работы.


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

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

Ссылка на скетч который использовали для Arduino: https://github.com/andrew72ru/remote_print

Показать полностью 20
4

Баг при листинге постов через горячие клавиши

При просмотре новостей через горячие клавиши, после подгрузки контента - перестает корректно работать горячая клавиша "D" (следующий пост)


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

Выше есть ошибка от adfoxCode

Версия chome: Версия 62.0.3202.94, стоит adblock и ghostery, первый раз баг был замечен 25.11, примерно в 12 часов по Москве.

Баг плавающий, поймать сложно, но можно, вылезает примерно при каждой 5-10 прогрузке контента.

Показать полностью 2
Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества