R307 Fingerprint Module - не могу получить Found ID если он больше 162
- Войдите на сайт для отправки комментариев
Ситуевина такая, есть выше упомянутый модуль, есть библиотека честно скачанная отседова - https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library есть программка для работы с модулем SFGDemo.exe далее используя программу записываю в память модуля несколько сканов отпечатков и присваиваю им определенные ID учитывая данные из pdf на модуль, а именно Storage capacity - 1000, номера давал 0, 10, 150, 180, 999 далее этой же програмой проверяю записи - все замечательно на палец записанный под 999 программа и выдает Found ID=999, на остальные соответственно их же номера...
А вот дальше начинаются приколы!!!
Загружаю в ардуинку пример из библиотеки fingerprint начинаю проверять пальцы и на пальцы с номерами выше 150 реакции ни какой нет. Ок!!! Дописываю в скетч пару строк в функцию getFingerprintID, чтобы не просто вываливалась, а писала по какой ошибке вывалилась и в итоге на моменте fingerFastSearch на пальцы с ID выше 162 (установленно чисто эксперементальным путем) выпадает в Did not find a match, т.е. типа этот палец не зарегистрирован... Но программа SFGDemo.exe спокойно получает ID этих пальцев!!! И 180 и 999, а вот скетч по какой то причине нет. И вот очень бы хотелось понять по какой??? Пробовал сам поковырятся в библиотеке, но уровня знаний для этого не хватает...
Может кто то уже копал данный вопрос??? Подскажите где и как снять это ограничение....
162 это как раз число из даташита. Там написано Storage capacity 162/930. Надо читать вникать, что это за два числа. Разные режимы, разные модели датчиков?
162 это как раз число из даташита. Там написано Storage capacity 162/930. Надо читать вникать, что это за два числа. Разные режимы, разные модели датчиков?
Я конечно извиняюсь, но в моем даташите именно на мой модуль R307 написано Storage capacity 1000. Плюс программа SFGDemo - находит ID и 180 и 250 и 999.... И еще она же определяет параметры устройства Hardware Information где рисует Finger Database: 1000
Возможно это и не оно, а возможно в устаревших библиотеках написаных для старых модулей где то ограничено обращение всего к 162 ячейкам памяти (потому как не было больше), но где я увы это сам не найду (((
Ищет оно функцией fingerFastSearch. В ней есть GET_CMD_PACKET(FINGERPRINT_HISPEEDSEARCH, 0x01, 0x00, 0x00, 0x00, 0xA3);
A3 - уже чего-то напоминает. Дальше в даташите искать эту команду FINGERPRINT_HISPEEDSEARCH (0x1B) и её параметры. Или на шару попытаться увеличить последний. Вдруг прокатит :)
В файле библиотеки Adafruit_Fingerprint.cpp нашел следующее:
uint8_t Adafruit_Fingerprint::fingerFastSearch(void) {
// high speed search of slot #1 starting at page 0x0000 and page #0x00A3
GET_CMD_PACKET(FINGERPRINT_HISPEEDSEARCH, 0x01, 0x00, 0x00, 0x00, 0xА3);
fingerID = 0xFFFF;
confidence = 0xFFFF;
fingerID = packet.data[1];
fingerID <<= 8;
fingerID |= packet.data[2];
confidence = packet.data[3];
confidence <<= 8;
confidence |= packet.data[4];
return packet.data[0];
}
И вот тут явно указан размер 0х00А3 = 163
Подскажите как его заменить на 1000=0х03Е8??? Простое редактирование данного файла у меня ни чего не дало...
З.Ы. пока занимался изысканиями что то уже написали ))) На шару не прокатило (((
- А почему у меня Запорожец больше 120 км,ч не разгоняется?
- У него на спидомере больше нет.
- Поставил спидометр от самолета - все равно не разгоняется. А самолет - разгоняется, проверил. Как заменить спидометр, чтобы можно было разогнать до 600?
Это к тому, что прежде, чем пытаться менять каките-то цифры, неплохо бы выяснить, откуда эти цифры взялись.
Спасибо за анекдот и развернутый, содержательный ответ...
Это к тому, что прежде, чем пытаться менять каките-то цифры, неплохо бы выяснить, откуда эти цифры взялись.
Я свое предположение в меру опять таки моих знаний высказал...
Возможно это и не оно, а возможно в устаревших библиотеках написаных для старых модулей где то ограничено обращение всего к 162 ячейкам памяти (потому как не было больше), но где я увы это сам не найду (((
И вот тут явно указан размер 0х00А3 = 163
Подскажите как его заменить на 1000=0х03Е8??? Простое редактирование данного файла у меня ни чего не дало...
Adafruit - очень ответственные разработчики, и если они дали ограничения, то точно не с дурма. Возможно это ограничения низшей ардуинки, а может все еще хуже. Сомневаюсь, что кто-то будет лопатить библиотеку, но у Вас есть шанс стать гуру в этом вопросе...
Сравнивайте даташиты. Тот, что у Вас есть и тот что у Адафрутов вместе с библиотекой лежит. Ищите разницу в характеристиках устройств, в командах. Как видите, готового решения здесь не нашлось.
Adafruit - очень ответственные разработчики, и если они дали ограничения, то точно не с дурма. Возможно это ограничения низшей ардуинки, а может все еще хуже. Сомневаюсь, что кто-то будет лопатить библиотеку, но у Вас есть шанс стать гуру в этом вопросе...
Ни в коем разе не притендую на конкуренцию с Adafruit, печалит только, что библиотека написана для модуля ZFM-20, который 2010 года рождения, а за окном уже поди 2019 (((
Adafruit - очень ответственные разработчики, и если они дали ограничения, то точно не с дурма.
Я вас умоляю. Всякое у них в либах встречается. Issues почитайте на гитхабе.
Я свое предположение в меру опять таки моих знаний высказал...
Путь решения Вашей задачи я вижу так:
1. Достоверно выяснить, с чем связаны ограничения.
2. Опираясь на п.1, сделать вывод, возможно ли увеличение количества ячеек памяти.
3. Если в п.2 выяснится, что "возможно", опираясь на п.1, расширить допустимый диапазон.
4. Если выяснится, что "невозможно", проанализировать ситуацию с точки зрения: придумать способ, как довольствоваться этим , либо выяснить, что нужно заменить в "железе", что бы стало "возможно".
1. Достоверно выяснить, с чем связаны ограничения.
2. .
3. .
4. .
У кого? Где?? Как??? Я именно за этим и обратился на профильный форум в ветку "Песочница. Раздел для начинающих".
Опять таки исключительно на своих умозаключениях вижу только одну причину - библиотека написана для модуля ZFM-20, 2010 года рождения у которого объем памяти был ограничен 163 ячейками (именно для этого модуля находим даташит в самой библиотеке). Далее учитывая то, что ни в одном из процессов ведущих к получению ID ардуинка не учавствует все обрабатывает сам модуль ардуинка лишь посылает запросы на определенное действие, а модуль сам сканирует, проверяет сравнивает и выдает результат и при использовании софта SFGDemo, заметим Demo т.е. явно с урезанным функционалом, модуль выдает любое значение ID включительно до 999, плюс скетч примера из библиотеки при старте выдает полное количество записанных в модуле ID включая и те у которых значение больше 162 - делаем вывод, что косяк исключительно в библиотеке, анализом которой я и пытаюсь заниматься в данное время. А учитывая, что я и програмирование это как сапожник и выпечка - анализ может затянуться на неопределенное время, вот я и обратился за помощью на профильный форум в ветку "Песочница. Раздел для начинающих". Но увы оказалось, что до меня ни кто не озадачивался этой проблеммой всех вполне устраивает использование модуля менее чем на 20% его возможностей... Буду пробовать связаться с разработчиками библиотеки, правда пока не представляю как...
Сдаётся мне, что 0xA3 - это контрольная сумма, которую вы пытаетесь принять за лимит по ячейкам.
Сдаётся мне, что 0xA3 - это контрольная сумма, которую вы пытаетесь принять за лимит по ячейкам.
В библиотеке по этому поводу вот что написано -
// high speed search of slot #1 starting at page 0x0000 and page #0x00A3
Вы поймите, что всех не 20% возможностей устраивают, а никому этот датчик нафиг не сдался! Вот у скольких читателей форума он вобще есть в наличии? Даже если бы кто-то с ним и сталкивался, то с большой вероятностью в хоббийных целях. Ну и кому дома 1000 значений нужны? Так что не удивительно, что никто модфикацией библиотеки не занимался. Это первое.
И второе. Вы ни на дачик, ни на даташит, который у Вас якобы есть ссылок до сих пор не дали. Вдруг у кого-то избыток времени и любопыства обнаружится? Но я бы особо не надеялся. Ждите, что авторы библиотеки дойдут и до Вашего issue.
Ну вот вас я уже заинтересовал, причем настоль, что даже мое обращение к разработчикам библиотеки нашли )))
Датчик - https://ru.aliexpress.com/item/R307-Optical-fingerprint-reader-module-sensor/32815391770.html?spm=a2g0s.9042311.0.0.6c8433edKWyDak
Даташит на него - https://www.dropbox.com/sh/orprmb3bgb6lqb6/AAAeXeZKAgvy0T7qvTUSr4Eva/User%20Manual%20for%20Fingerprint%20Module/R307%20fingerprint%20module%20user%20manual.pdf?dl=0
Кому нужен??? Да кому угодно, учитывая стоимость готовых СКУД систем сделать свой СКУД куда привлекательней чем купить. Если говорить о не большой фирме с количеством сотрудников более 50 (любой супермаркет), то 163 ячейки - ниочем!!! На одного сотрудника нужно как минимум две. Судя по обращениям к разработчикам библиотеки людей еще и возможность переноса базы данных очень интересует, чтобы допустим при приеме на работу раз отсканировав палец в отделе кадров ты в дальнейшем мог проходить через любую проходную фирмы или попадать в любое помещение закрытое от посторонних. В общем применеие данного модуля довольно востребовано...
И на решение проблеммы разработчиками библиотеки я расчитываю увы где то на 2%, не больше, потому как почитав обращения адресованные им ранее нашел ответ повторяющийся с завидным постоянством - "Обратитесь к разработчикам модуля, пускай они вам помогут"...
Кому нужен??? Да кому угодно...
Если говорить о не большой фирме с количеством сотрудников более 50 (любой супермаркет), то 163 ячейки - ниочем!!!
И, к слову сказать, ни разу не DIY. Для DIY 163 ячейки - хватит за глаза.
Похоже, Вы делаете серьезный (и дорогой) коммерческий проект. Ну так такие делают не на свободно распространяемых библиотеках. Тут - дэйташит, а еще - руки и голову. Если своих не хватает - можно обратиться за платной помощью. А в разделе для начинающих это обсуждать IMHO бессмысленно.
Ну наконец то... А то я все ни как не пойму посыл ваших сообщений. Теперь все стало на свои места, если вопрос уровня выше чем - "Как помигать светодиодом на 13 выходе?", то дорога в кассу...
Почему в кассу? Написано же: "Тут - дэйташит, а еще - руки и голову". Пока что Ваша тема никому неинтересна, что видно из хода обсуждения. И никто не будет в ней ковыряться просто чтобы сделать Вам удовольствие.
В файле библиотеки Adafruit_Fingerprint.cpp нашел следующее:
uint8_t Adafruit_Fingerprint::fingerFastSearch(void) {
// high speed search of slot #1 starting at page 0x0000 and page #0x00A3
GET_CMD_PACKET(FINGERPRINT_HISPEEDSEARCH, 0x01, 0x00, 0x00, 0x00, 0xА3);
И вот тут явно указан размер 0х00А3 = 163
Подскажите как его заменить на 1000=0х03Е8??? Простое редактирование данного файла у меня ни чего не дало...
По даташитам разницы в командах не вижу. Стартовый адрес и количество в команде двухбайтные. Очень похоже что:
GET_CMD_PACKET(FINGERPRINT_HISPEEDSEARCH, 0x01, 0x00, 0x00, 0x00, 0xА3); - стартовый адрес
GET_CMD_PACKET(FINGERPRINT_HISPEEDSEARCH, 0x01, 0x00, 0x00, 0x00, 0xА3); - количество проверяемых адресов
Т.е. попробовать что-то типа:
GET_CMD_PACKET(FINGERPRINT_HISPEEDSEARCH, 0x01, 0x00, 0x00, 0x03, 0xE8);
Есть правда нюанс, что в даташите описана команда с кодом 04H (Search the finger library), а про код 1BH (Search the library fastly), который адафрукты используют, только написано, что такой есть. Но, скорее всего, остальные параметры команды одинаковые должны быть.
Спасибо за идею...
Попробовал подкоректировать библиотеку, увы упорно не видит ID больше 162...
Дело дошло до того, что многострадальный скетч перестал компилироваться ))) Буду искать почему, что то сломал но не пойму где...
Всем спасибо... ОТДЕЛЬНОЕ СПАСИБО kalapanga!!!! Вы на 100% правы.
Заработало? Офигеть! Ну и ладушки.