Сканер штрих и QR-кодов: подключение и режимы работы
Используйте сканер баркодов для считывания штрихкодов и QR-кодов. Автоматизируйте складской учёт или притворитесь кассиром супермаркета, чтобы пропикать все товары!
Режим виртуальной USB-клавиатуры
Сканер штрихкодов работает напрямую с компьютером без всяких приложений: он притворяется типовой USB-клавиатурой и выдаёт считанные данные в виде строки текста. Именно такой режим работы задан по умолчанию.
Режим работы через COM-порт
Barcode сканер общается с управляющей платой по протоколу UART. В зависимости от управляющей платформы выберите вариант подключения.
HardwareSerial
На управляющей плате Iskra JS и Arduino платах с микроконтроллером ATmega32U4 / ATSAMD21G18 , интерфейс UART выведен на контактные пины, а данные по USB переедаются через виртуальный COM-порт. Это даёт возможность одновременно подключить Barcode-модуль к аппаратному UART и выполнять отладку по USB.
Список поддерживаемых плат:
Схема подключения
При подключении к платам формата Arduino R3 удобно использовать Troyka Shield.
Исходный код
В качестве примера все сканированные штрихкоды выведем в консоль.
// serial-порт к которому подключён Barcode-модуль #define BARCODE_SERIAL Serial1 void setup() { // открываем последовательный порт для мониторинга действий в программе // и передаём скорость 9600 бод Serial.begin(9600); // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе while (!Serial) { } Serial.println("Serial init OK"); // открываем Serial-соединение с Barcode-модулем на скорости 9600 бод BARCODE_SERIAL.begin(9600); // печатаем строку Serial.println("Barcode init is OK"); // печатаем строку Serial.print("Init is OK on speed 9600"); } void loop() { // если приходят данные из Barcode-модуля - отправим их в порт компьютера if (BARCODE_SERIAL.available()) { Serial.write(BARCODE_SERIAL.read()); } // если приходят данные из компьютера - отправим их в Barcode-модуль if (Serial.available()) { BARCODE_SERIAL.write(Serial.read()); } }
SoftwareSerial
На управляющих платформах Arduino с микроконтроллером ATmega328 / ATmega2560 , интерфейс UART выведен на контактные пины платы и он же используется для отладки по USB. Это означает невозможность использовать одновременно прошивку/отладку по USB и общение с Barcode-модулем. Решение проблемы — программный UART. Подключите пины TX и RX Barcode модуля к другим контактам управляющей платы и используйте библиотеку SoftwareSerial.
Схема подключения
Для примера подключим управляющие пины сканера TX и RX — на 10 и 11 контакты управляющей платы.
При подключении удобно использовать Troyka Shield.
Исходный код
В качестве примера все сканированные штрихкоды выведем в консоль.
// библиотека для работы программного Serial #include // создаём объект для работы с программным Serial // и назначаем ему пины RX и TX SoftwareSerial mySerial(10, 11); // serial-порт к которому подключён Barcode-модуль #define BARCODE_SERIAL mySerial void setup() { // открываем последовательный порт для мониторинга действий в программе // и передаём скорость 9600 бод Serial.begin(9600); // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе while (!Serial) { } Serial.print("Serial init OK"); // открываем Serial-соединение с Barcode-модулем на скорости 9600 бод BARCODE_SERIAL.begin(9600); // печатаем строку Serial.println("Barcode init is OK"); // печатаем строку Serial.print("GPS init is OK on speed 9600"); } void loop() { // если приходят данные из Barcode-модуля - отправим их в порт компьютера if (BARCODE_SERIAL.available()) { Serial.write(BARCODE_SERIAL.read()); } // если приходят данные из компьютера - отправим их в Barcode-модуль if (Serial.available()) { BARCODE_SERIAL.write(Serial.read()); } }
HardwareSerial Mega
На платформах форм-фактора Arduino Mega 2560 интерфейс UART выведен на контактные пины платы и он же используется для отладки по USB. Это означает невозможность использовать одновременно прошивку/отладку по USB и общение с Barcode-модулем.
Но на платах такого форм-фактора есть ещё дополнительно три аппаратных UART:
Serial1: пины 19(RX1) и 18(TX1);
Serial2: пины 17(RX2) и 16(TX2);
Serial3: пины 15(RX3) и 14(TX3).
Список поддерживаемых плат:
Arduino.ru
Делаю я один проект который принимает сигналы с подключённой к компьютеру USB клавиатуры.
За основу взял код для кейлоггера от амперки. Использую плату Arduino PRO Mini 5V 16MHz ATMEGA328.
Проблема в том что часто коды распознаются неверно и в монитеоре порта я виже не те символы что нажимал.
С чем это может быть связано?
#include #include #include #include // библиотека для работы с протоколом USB #include // библиотека для работы с Serial-портом #include // PID 8 бит идентификатор // ADDR 7 бит адрес устройства // Endpoint 4 бита номер конечной точки // CRC 5 бит контрольная сумма // итого 3 байта #define IN_SIZE 3 // PID 8 бит идентификатор // DATA 64 бита данные // CRC 16 бит контрольная сумма // итого 11 байт #define USB_BUFSIZE 11 // количество принятых пакетов хранимых в памяти // должно быть четным и соблюдаться условие // (IN_SIZE + USB_BUFSIZE)*FIFO_BUF_SIZE < 255 #define FIFO_BUF_SIZE 10 // RX буфер: 3 байта запроса IN + 11 байт данных DATAx unsigned char usbRxBuf[USB_BUFSIZE]; unsigned char FIFOBuf[(IN_SIZE+USB_BUFSIZE)*FIFO_BUF_SIZE]; // номер текущей записываемой пары IN-DATA (0-FIFO_BUF) unsigned char CurWritePos = 0; // номер текущей прочитываемой пары IN-DATA (0-FIFO_BUF) unsigned char CurReadPos = 0; // массив символов для декодирования скан-кодов при не нажатой клавиши Shift unsigned char masskey[] = "abcdefghijklmnopqrstuvwxyz1234567890-=[]\\X;'`,./"; // массив символов для декодирования скан-кодов при зажатой клавиши Shift unsigned char masskeyShift[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+<>|X:\"~<>?"; void setup() < // открываем последовательный порт Serial.begin(115200); // настраиваем прерывание usbInit(); // печатаем о готовности устройства Serial.print("UART init complet"); // разрешаем прерывания sei(); >void loop() < // если сработало прерывание // то переменная CurWritePos изменит своё значение if (CurWritePos != CurReadPos) < // вызываем функцию printResult printResult(FIFOBuf + CurReadPos*(USB_BUFSIZE+IN_SIZE) + IN_SIZE, USB_BUFSIZE); CurReadPos++; if (CurReadPos >= FIFO_BUF_SIZE) < CurReadPos = 0; >> > void printResult(uchar *datakey, uchar len) < bool shift = 0; // если во время очередного нажатия на клавишу // была нажата кнопка Shift if ((*(datakey + 1) == 0x2) || (*(datakey + 1) == 0x20)) shift = 1; else shift = 0; // если 4 или 3 байт из массива данных пришёл не нулевой // значит нажата одна из клавиш if (*(datakey + 4) != 0) < // вызываем функцию печати 2-го символа printKey(*(datakey + 4), shift); >else if (*(datakey + 3) != 0) < // вызываем функцию печати 1-го символа printKey(*(datakey + 3), shift); >> void printKey(uchar key, bool shift) < // если нажата одна из клавиш английского алфавита if (key >= 0x4 && key else < // если нет декодируем скан-коды как строчные буквы Serial.write(masskey[key-4]); >> else if (key == 0x28) < // если пришел скан-код клавиши Enter Serial.print("\r\n"); >else if (key == 0x2B) < // если пришел скан-код клавиши Tab Serial.print("\t"); >else if (key == 0x2C) < // если пришел скан-код клавиши Space Serial.print(" "); >else if (key >= 0x2d && key else < // если пришёл скан-код которого мы не знаем // печатаем его без декодирования printHex(key); >>
- Войдите на сайт для отправки комментариев
Arduino и метеодатчик BME280/BMP280
BME280 – высокоточный метеодатчик, измеряющий такие параметры микроклимата как температура, влажность и атмосферное давление. В зависимости от модуля может подключаться к I2C и SPI шинами микроконтроллера и работать от 3-5V, если на плате есть стабилизатор, или 3V, если его нет.
На обратной стороне платы не просто так написано BME280/BMP280 – BMP является урезанной версией BME, в которой нет влажности. Как их различить, если недобросовестный китаец не поставил галочку? По корпусу датчика:
В наборе GyverKIT первых партий (все наборы 2021 года) шёл BME280 версии I2C 5V, но старт продаж набора совпал с мировым кризисом микросхем, из за которого датчик стал сильно дефицитным и китайцы начали хитрить. В наборах GyverKIT 000, 001 и 002 партий можно встретить:
- Рабочий BME280
- Рабочий BMP280
- Нерабочий BMP280
В партии 003 у нас рабочий BMP280. Для влажности используется другой датчик.
Мы приносим свои извинения за эту ситуацию, вы можете запросить возврат средств за модуль у магазина Giant4.
Подключение
Модуль подключается на шину I2C и питание, как и любой другой модуль такого типа:
Библиотеки
- Adafruit BME280 (для работы также нужна Adafruit Sensor) – самая известная библиотека для работы с BME280. Очень тяжёлая, часть настроек доступна только при ручном редактировании библиотеки.
- GyverBME280 – наша библиотека, более удобная и лёгкая. Также поддерживает датчики BMP280
В примерах на этом сайте мы будем использовать GyverBME280. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию GyverBME280. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
Примеры
Первым делом стоит удостовериться в работоспособности датчика и узнать его адрес, он может быть 0x77 и 0x76 . Загружаем следующий код:
#include void setup() < Serial.begin(9600); Serial.println("Start scan"); >void loop() < for (uint8_t i = 1; i < 128; i++) < Wire.beginTransmission(i); if (!Wire.endTransmission()) Serial.println(i, HEX); >Serial.println(". "); delay(5000); >
Открываем монитор порта:
- Если вывелось только Start scan и ничего больше – датчик бракованный и не будет работать
- Если это рабочий BMP/BME – получим вывод такого вида:
Значит датчик ответил по адресу 0x76. Может ответить по 0x77.
- Если вывод имеет вид
Значит Ардуино не находит датчиков на линии. Либо датчик подключен неправильно, либо бракованный.
Далее откроем базовый пример из библиотеки, который опрашивает значения с датчика. В begin() можно передать адрес, который мы узнали из предыдущего скетча-сканера (не забываем префикс 0x). Загружаем и открываем порт:
#include GyverBME280 bme; void setup() < Serial.begin(9600); Serial.println("Start"); // запуск датчика и проверка на работоспособность if (!bme.begin(0x76)) Serial.println("Error!"); >void loop() < // температура Serial.print("Temperature: "); Serial.println(bme.readTemperature()); // влажность Serial.print("Humidity: "); Serial.println(bme.readHumidity()); // давление Serial.print("Pressure: "); Serial.println(bme.readPressure()); Serial.println(); delay(1000); >
- Если выведется только слово Start – датчик бракованный и из-за этого программа зависла
- Если выведется Error! – датчик бракованный или адрес не соответствует, вернись к предыдущему пункту
- Корректно выводятся все три параметра
Start
Temperature: 24.78
Humidity: 41.69
Pressure: 99701.28
Датчик рабочий, и это BME280
- Выводится температура и давление, влажность – 0
Start
Temperature: 24.78
Humidity: 0
Pressure: 99701.28
Датчик рабочий, и это BMP280, т.е. без влажности.
Что такое Arduino: первые шаги в электронике
Что можно сделать на Ардуино и зачем это нужно? Разбираемся с популярной и дружелюбной платформой, которая позволяет быстро создавать умные электронные устройства своими руками.
Самодостаточная начинка
Arduino — это небольшая управляющая плата с собственным процессором и памятью. Помимо них на плате есть пара десятков контактов, к которым можно подключать всевозможные компоненты: светодиоды, датчики, моторы, чайники, роутеры, магнитные дверные замки и вообще всё, что работает от электричества.
В процессор Ардуино можно загрузить программу, которая будет управлять всеми этими устройствами по заданному алгоритму. Таким образом можно создать бесконечное количество уникальных классных гаджетов, сделанных своими руками и по собственной задумке.
Чтобы понять общую идею, взгляните на иллюстрацию. Она не отражает и миллионной доли всех возможностей, но всё же даёт первичное представление.
Простота и доступность
Платформа Arduino приобрела бешеную популярность благодаря простоте и дружелюбности. Даже полный ноль в программировании и схемотехнике может освоить основы работы с Ардуино за пару часов. Этому способствуют тысячи публикаций, учебников, заметок в интернете и отличная серия видеоуроков по Arduino на русском языке.
Программы для Ардуино пишутся на обычном C++, дополненным простыми и понятными функциями для управления вводом-выводом на контактах. Если вы уже знаете C++, Arduino станет дверью в новый мир, где программы не ограничены рамками компьютера, а взаимодействуют с окружающим миром и влияют на него. Если же вы новичок в программировании — не проблема, вы с лёгкостью научитесь, это просто.
Для удобной работы с платами Ардуино существует бесплатная официальная среда программирования Arduino IDE, работающая под Windows, Mac OS и Linux. С помощью неё загрузка новой программы в контроллер становится делом одного клика, только лишь подключите плату к компьютеру через USB. Хотя для более пытливых умов возможна работа и через Visual Studio, Eclipse, другие IDE или командную строку, а новичкам подойдёт визуальная среда программирования XOD IDE.
Вам не понадобится паяльник. Полноценные устройства можно собирать, используя специальную макетную доску, перемычки и провода абсолютно без пайки. Прототипирование ещё не было таким быстрым и простым, поэтому ардуинки быстро прижились в школах и кружках робототехники.
Принцип бутерброда
Ещё одной отличительной особенностью Arduino является наличие плат расширения под названием Shield. Эти «шилды» ставятся поверх ардуинки подобно слоям бутерброда и дают ей новые дополнительные возможности. Например, существуют платы расширения для подключения к локальной сети и интернету (Ethernet Shield), для управления мощными моторами (Motor Shield), для получения координат и времени со спутников GPS (приёмник GPS/ГЛОНАСС) и многие другие.
В итоге
Arduino — это сердце конструктора, в котором нет конечного, строго определённого набора деталей, и нет ограничений в разнообразии того, что вы можете из него собрать. Всё ограничено лишь вашей фантазией. Это новый мир, убойное хобби и отличный подарок. Свыше 10 миллионов людей в мире уже поняли это.
Взгляните лишь на несколько примеров того, что можно сделать на Ардуино. Ведь это грандиозно!
Картонный бот-очаровашка
Робот-паук
Генератор мыльных пузырей
Светодиодный куб
Графический эквалайзер
Система полива дачного участка
С чего начать
Вам понадобится сама плата. Например, Arduino Uno — самая популярная модель в настоящий момент. Для начала экспериментов её хватит с головой. Хотя если брать «на вырост», можно рассмотреть более мощную Arduino Mega 2560.
Также вам понадобится USB-кабель, макетная доска, перемычки, резисторы, транзисторы… и ещё десяток подручных вещей. Чтобы не утомлять себя поисками необходимого, возьмите всё, что потребуется, в виде одного из готовых наборов. Например, в наборах «Матрёшка Y» или «Матрёшка Z» мы собрали всё, что нужно для комфортного старта.