Когда поддерживаешь какие либо продукты очень долго (> 5..10лет. Представляете.. и такое бывает), то вдруг узнаешь, что:
Фреймвоки умирают или трансформируется принципиально (GXT например). А коду то на пол ляма строк..
Предыдушая версия не поддерживается, СИБ требует переходит на новую (дырки обнаружены). А в новой вылезают неожиданные баги или приходилось заклаываться на внутренние особенности, а они уже другие.
Иногда оказывается что старое ПО, написанное без фреймворков поддерживать гораздо проще чем... Я не топлю за "не используем фремворки". Просто позиция "адвоката дьявола" :)
Единственная причина использовать интерфейсный класс (java) - это множественная имплементация. IMHO. Остальное дает только геморой и бессмысленное время, потраченное на нажатие на клавиатуре. В 90% случаев.
На что то сложно - да. А не на 2*2. У меня глаза болят от выделения совсем мелкого функционала (10 строк например) в функцию.
Когда она вызвается в одном месте.
Сложно отделима от основной логики (= куча аргументов) и внятно придумать причину почему часть логики отделить нужно - невозможно. (ну кроме странного довода "так количество строк в этом файле будет поменьше")
Тут вопрос не о "нужно не нужно" а о грани разумности в этом "нужно".
Лично я, когда мне такой кусок (сложный) нужно оттестировать, его отдельно тестирую и отлаживаю и copy/paste в нужно место. Когда это действительно нужно оттестировать. НО один раз и все.
Видел жесть в реализации джуна. Которому видимо сказали, что нужно все @Test обкладывать. Так он действительно ВСЕ обкладывал тестами. Каждую функцию класса (java) делал с возможность вызова отдельно и писал на нее тест. "Заставть дурака богу молится.." Код этих тестов был больше прикладного. А как изюминка.. в целом (как программа в комплексе) это все равно нифига не работало.
Бесить разгребать старый код (лет 15 ему). Когда из 3х(!) файлов C++ (.cpp,.hpp) получается 10 строк java (просто сформировать байтовый массив вида тип(1байт)+длина(2байта)+значение из 4-х аргументов). Догадываешься, что тот кто это писал начитался учебных материалов по полиморфизму, "правильной" организации иерахии объектов и.. И создал все это для формирования (один раз!) блока с фиксированым (!) набором. И глаза вытекают все это разбирать что бы понять а что и как хотел.
А уж боль с кучей абстракций, слоев данных, и все это разбросано по куче функцикций и файлов для ОДНОКРАТНОГО вызова - это вырви глаз типично. Потому что джун начитался гуру, которые советуют что длинна тела функции не должна быть более 20-30 строк, а в отдельном файле не должно быть более 100 строк и все нужно оформлять через абстракции и слои данных. И все это размером в 10Кбайт и 5 файлов схлопыветеся (переписывается) в 200 строк линейного обозримого кода в одной функции. Не знаю уж как обяснить что не нужно писать "функциональные вызовы" типа calcXmultipyY() { return X*Y; } вызываемые только один раз. Есть какая то разумная граница принципа выделения в отдельный вызов, а не просто "потому что". что бы про это "гуру" ни говорили.
Именно с мышой (датчиком типа ADNS2610) - иллюзия что точно. Мозг корректирует движение руки и курсора на экране. Попробуйте квадрат курсором обвести на экране и посмотрите куда вернется физическая мышь. Проц внутри мыши не заточне на это (точной корреляцией координат)
Я с ADNS2610 как то много экспериментировал. Кстати, у ADNS2610 есть возможность с камеры изображение получить (18x18 пикселей). Как раз для этих целей и пробовал. Малый размер в пикселях - не требуется больших вычислительный мощьностей. Очень дешево.
Вот только в документации не было сказано про скорость. В результате програмку под STM32F103 написал, отладил и.. Вот коммент из исходников (результаты тестов)
"шум" механической системы из раскрученного до очень высоких оборотов гироскопа и "шум" гироскопа внутри микросхемы (пьезоэлектрические вроде бы в основном) прост не сопоставимы. Я пробовал интегрировать сигнал XYZ с микросхемы. Была наивная мысль (типа я первый так сделаю) совместить металлоискатель (сингнал с него) с координатой. Что бы получить красивую двухмерную картинку. Не работает так.
ну если вдруг окажется, что 10 дней мало.. ну тогда добавлю и логику управления GPS и доработаю саму плату GPS. Если было нужно оптимизировать "по правильному", то ESP32 как основной модуль - это не правильно. Нужно ставить что то работающее на 1-5Мгц и жрущее мизер. Желательно в режиме сна с пробуждением от аналогово датчика движения. А остальные компоненты пробуждать по мере необходимости. И тонкая настройка GSM.
SIM800L в виде модуля с той минимальной обвязкой что есть - то же не айс. И вместо neo-6m нужно брать более дорогой вариант и оптимизировать и режим работы (отключая когда не нужно) и режимы настройки (там можно единицы mA выгадать)
В общем по честному, с серьезной экономией по току потребления - это другие компоненты и куча времени на отладку "в поле".
А к основному аккуму машины не подключал и даже не планирую.
Как то прилетел из отпуска в -40 в тропической одежде. А штатная сигналка с GPS (другая машинв) высосала весь штатный аккум в 0 за 20 дней. Вот весело было на морозе в легкой одежде плясать вокруг на стоянке аэропорта.. Так что, и производителеи сигнализаций экономят на компонетах и разработке. Вполне можно потребление было сократить до средних 1-5мA в дежурном режиме (грубо прикидывал). Но нет же.. всякие StarLine по 30-50mA тянут на 12V
А с эвакуаторами проще - просто ты не успеваешь добежать до увозимой машины
Были преценденты.
Машину увезли просто из за "какой то большой член МВД" должен был приехать и на всякий случай убрали машины, припаркованные без нарушений на штрафстоянку. Как же.. член же большой. Да еще из МВД.
Машина уехала на штраф стоянку. Но хотя бы понятно было на какую и что именно на нее. А не угнали. И понятно куда заносить квитацию о штрафе (какой район города).
Это же все молчком делается. Угон то ладно. А официальный "угон" без оповещения - это всегда нервы.
До нас глушилки GPS не дошли... Сибирь. Если что долетит, то сразу мегатонное. А так, все работает даже не под лобовым. Кординаты показывает точно.
Холодный старт до 3х минут, потребление питания - караул!
Ну у всех GPS приемников холодный старт длинный. 3 минуты это еще ничо. и 15..20 искать может. А питание... ну зато дешев. Дешевле 500 руб сложно найти готвый модуль. У меня валяется старый GPS модуль (не помню даже чего. 15 лет ему). так однако 100mA берет
И точно li-po падение напряжения при разряде не показывают ?
Если Вы про lifepo4, то он очень "плох" для анализа остатка зарядя по напряжению. С 3.6 до 3.2 падает за 1 день. Потом 7-8 дней 3.2. А если меньше 3.2 - то напряжение падает на глазах (за 1 день) и BMS на 2.5 выключает. Т.е. если 3.15 то значит остаток < 10..15% Смотрю по SMS от..
А если про li-po, то у него график разряда вроде бы вообще близок к линейному и остаток заряда по напряжению хорошо коррелируется. Но li-po 100% в not attended желеку ставить не стал бы. Это же просто опасно.
Сингалиция классическая это окрыть/закрыть машину (+прочеее). Из за своей штатности она только от шпаны. Да и не охота лезть встраивать.
у меня валяются ТРИ (!) GPS/GSM трекера. Два типа ST-901. В одном оказалось что нет акукмулятора внутри (не припаян) и хотя есть провод ACC, но он на него не реагирирует. В другом вроде бы все норма. Но SMS разбивает на две части и время в GMT+8 (китайское). И это не меняется настройками. 3-й какой то российский, но... SMS режим убогий (ничего толком не посылает) и заточне на гвоздями прибитый API к определенному сайту производитля. Т.е. опять же не то.
И валяются два иммобилайзера FALCON C10. Только один удалось запустить нормально. Какой то время обходился миксом FALCON C10+ST-901+датчик удара+генератор длинного импулься на NE555. В общем, то что сейчас можно купить - это какой то мусор собранный в подвале в Китае.
Все все что мне нужно:
Найти машину на парковке
Уведомление об ударе/погрузке на эвакуатор.
Вдруг я забыл документы/права в которых лежит токен.
Да же не сложно. Вместо одного резистора на плате (его видно прямо рядом с ръемом антенны) сделать ключ на полевике и...
Но я решил не заморачиваться. Ну будет на 30% меньше потреблять. Но нужно придумывать логику работы спящего режима для GPS. Да же не реализовывать. а придумывать и потом проверять в жизни. Когда засыпать. Когда просываться.
И так из за стольких моментов пришлось туда сюда таскать (из машины домой). Именно их за логики работы. А не программных ошибок. Когда думаешь умозрительно, что "оно наверное так нужно". А по результату эксплуатации понимаешь "не.. по другому будет удобнее".
не знаю. Зимой, через пол года, и узнаю. Я вот в начале апреля только закончил. В морозилке не проверял. Но, с учетом общего тока, который модуль тянут из батареи, возможно, просто куска вспененного пенопропилена сверху в коробку окажется достаточно
Другие модули подключаются и настраиваются по мере необходимости.
Пробовал снимать питание с neo-6m. Не вариант. Слишком долго ищет после включения и батарейки (там скорее всего ионистор) хватает максимум на 30 минут для сохранения данных. А при холодном старте минут 20 спутники ищет. А режимы экономи а либо не работают (программный режим экономии) либо принципиально снижения потребления не дают (упрощенная схемотехника с постоянным питанием активной антены). режим сна SIM800L вообще ничего не дает. подозреваю что у меня SIM800L и neo-6m подделки. Но возится и искать другие варианты не хочу. 10 дней автонома меня вполне устривают. Этой машиной я чаще чем раз в 10 дней пользуюсь. Подзаряжается.
Хотя авторизация по ble... дальность тестировали?
Берет BLE метку (зеленая на фото с озона) и BLE на телефоне на растоянии метров 6-7 (в квартире). В машине не замерял. Обычно, когда заводишь то сидишь на водительском месте :)
Варианты меток смотрел разные (включая даже потрощение датчика давления на колесах). Но BLE - самый просто вариант. Цель была сделать без всякой экзотики. На самых распространеных компонентах которые можно просто купить и которые всегда будут.
Ну и плюс, что режим BLE можно а андройде "включить". А телефон всегда с собой и bluetoot на нем всегда включен (смарт браслет ношу). Т.е по сути и метку можно не таскать, как физически одельной включенной железкой.
Конечно BLE это не крипто защита (статические данные в ответе на скан). Но так и не роллс ройс фантом защитить же..
Готовые "кейс герметичный" на озон. Один из вариантов идеально подошел под 4 аккума формата 32700 Прям как под них сделан. И чуть места осталось под все остальное.
LiFePO4 гораздо лучше себя ведет в мороз чем Li-ion. А найти что то по быстрому за разумные деньги (включая BMS) это только LiFePO4 и Li-ion. Все сделано из готовых плат (включая BMS и DC-DC для зарядки от 12V), которые можно купить сразу на озоне или в магазине.
Я из динозавров. Я еще помню законы (не в России), фактически запрещающие криптографию. Валяются первые демо Java карты (с конфиреренции, организованной Gemplus 2000 год) где 3DES16 обрезана аппаратно в соответствии с французскими законами того времени. И преследование авторов RSA. И принты на футблоках с алгоритмом RSA.
К теме прямого отношения не имеет, но.. еще слышал (лично) как человек (испанец) делился своми воспоминаниями как он в 60-е годы зарабатывал на том что контрабандой возил в Испанию порнуху. Тогда порнография (невинная, по современным меркам) была в Испании уголовно наказуема (не верится.. но так было).
Так что с ужасом думаю, что история может двигаться по кругу. И строгую криптографию могут запретить для частных лиц и сделать ее использование уголовкой. И найденую на компе фотку с голой женщиной - 5 лет турьма.
За то не узко в памяти и по ресурсам не жмет нигде :) А обвзяка у него минимальна. Но как ни странно модули в розницу стоят столькож или дороже чем готовая демо плата. А есть еще ESP32-S3 модули. Лежит. Не игрался еще с ней. Но IDF та же на них подходит.
кодировка. Поскольку не предполагал использованеи кириллицы, то не стал заморачиваться в "голым" форматом SMS (хотя ничего особо сложного нет, но зачем) и возложил это на SIM800L (режим "AT+CMGF=1"). В этом режиме SIM800L выдает либо ASCII текст либо hex дамп UTF-16, сам занимаясь переводом в текст. Да еще длинные сообщения склеивает. Что при использовании PDU "голого формата" пришлось бы поддерживать "руками"
Аа.. про это. Ну так это просто конечный автомат с состояниями. Ассинхронность.. ну так FreeRTOS из ESP-IDF. Команды в Tx шлет одна задача FreeRTOS, а поток из Rx (точнене из буффера, обеспечиваемого ESP-IDF) читает и обрабатывае другая задача FreeRTOS, выставляя состояния (типа пришел RING, получена SMS, получен ответ на такую то команду). Что читается (контекст) определяется либо по данным либо по признаку чего ждать. типа
3.5V вроде бы еще не полный разряд Li-ion. Но SIM800L уже работате не стабильно. Да и КПД линейного стабилизатора ESP32 получается так себе. И со штатным 1117 в ESP32 2.3V+1.2+0.1 = 3.6V на батарее - уже ESP32 не работате (уходит в перерезагрузку на грани 2.2..2.3V). Так что однозначно Li-ion 1S не самый удачный вариант. Хоть конечно работать и будет как то.
Когда поддерживаешь какие либо продукты очень долго (> 5..10лет. Представляете.. и такое бывает), то вдруг узнаешь, что:
Фреймвоки умирают или трансформируется принципиально (GXT например). А коду то на пол ляма строк..
Предыдушая версия не поддерживается, СИБ требует переходит на новую (дырки обнаружены). А в новой вылезают неожиданные баги или приходилось заклаываться на внутренние особенности, а они уже другие.
Иногда оказывается что старое ПО, написанное без фреймворков поддерживать гораздо проще чем...
Я не топлю за "не используем фремворки".
Просто позиция "адвоката дьявола" :)
Единственная причина использовать интерфейсный класс (java) - это множественная имплементация. IMHO.
Остальное дает только геморой и бессмысленное время, потраченное на нажатие на клавиатуре.
В 90% случаев.
На что то сложно - да. А не на 2*2.
У меня глаза болят от выделения совсем мелкого функционала (10 строк например) в функцию.
Когда она вызвается в одном месте.
Сложно отделима от основной логики (= куча аргументов) и внятно придумать причину почему часть логики отделить нужно - невозможно. (ну кроме странного довода "так количество строк в этом файле будет поменьше")
Тут вопрос не о "нужно не нужно" а о грани разумности в этом "нужно".
Лично я, когда мне такой кусок (сложный) нужно оттестировать, его отдельно тестирую и отлаживаю и copy/paste в нужно место. Когда это действительно нужно оттестировать. НО один раз и все.
Видел жесть в реализации джуна. Которому видимо сказали, что нужно все @Test обкладывать.
Так он действительно ВСЕ обкладывал тестами. Каждую функцию класса (java) делал с возможность вызова отдельно и писал на нее тест. "Заставть дурака богу молится.."
Код этих тестов был больше прикладного. А как изюминка.. в целом (как программа в комплексе) это все равно нифига не работало.
Бесить разгребать старый код (лет 15 ему). Когда из 3х(!) файлов C++ (.cpp,.hpp) получается 10 строк java (просто сформировать байтовый массив вида тип(1байт)+длина(2байта)+значение из 4-х аргументов).
Догадываешься, что тот кто это писал начитался учебных материалов по полиморфизму, "правильной" организации иерахии объектов и.. И создал все это для формирования (один раз!) блока с фиксированым (!) набором.
И глаза вытекают все это разбирать что бы понять а что и как хотел.
А уж боль с кучей абстракций, слоев данных, и все это разбросано по куче функцикций и файлов для ОДНОКРАТНОГО вызова - это вырви глаз типично. Потому что джун начитался гуру, которые советуют что длинна тела функции не должна быть более 20-30 строк, а в отдельном файле не должно быть более 100 строк и все нужно оформлять через абстракции и слои данных.
И все это размером в 10Кбайт и 5 файлов схлопыветеся (переписывается) в 200 строк линейного обозримого кода в одной функции. Не знаю уж как обяснить что не нужно писать "функциональные вызовы" типа calcXmultipyY() { return X*Y; } вызываемые только один раз. Есть какая то разумная граница принципа выделения в отдельный вызов, а не просто "потому что".
что бы про это "гуру" ни говорили.
просто поделился болью. не более.
Именно с мышой (датчиком типа ADNS2610) - иллюзия что точно. Мозг корректирует движение руки и курсора на экране.
Попробуйте квадрат курсором обвести на экране и посмотрите куда вернется физическая мышь.
Проц внутри мыши не заточне на это (точной корреляцией координат)
Я с ADNS2610 как то много экспериментировал. Кстати, у ADNS2610 есть возможность с камеры изображение получить (18x18 пикселей). Как раз для этих целей и пробовал. Малый размер в пикселях - не требуется больших вычислительный мощьностей. Очень дешево.
Вот только в документации не было сказано про скорость. В результате програмку под STM32F103 написал, отладил и..
Вот коммент из исходников (результаты тестов)
{code:cpp}
// Time per 18x18 image scan:
// 0.214s 1008..1012 lostCnt(ADNS2610_delay = 110us, CLK_halfDelay = 8)
// 0.214s 691..701 lostCnt (ADNS2610_delay = 100us, CLK_halfDelay = 20)
// 0.214s 517..520 lostCnt (ADNS2610_delay = 100us, CLK_halfDelay = 30)
// 0.214s 377..380 lostCnt (ADNS2610_delay = 150us, CLK_halfDelay = 30)
// 0.214s 52..54 lostCnt (ADNS2610_delay = 100us, CLK_halfDelay = 100)
// 0.214s 39..41 lostCnt (ADNS2610_delay = 120us, CLK_halfDelay = 100)
// 0.218s 0..1 lostCnt (ADNS2610_delay = 200us, CLK_halfDelay = 100)
// Time per 18x1 image scan: 0.012 sec
uint8_t *ADNS2610_getImage(uint32_t sz, int *lost) {
if(sz > sizeof(imageBuffer)) sz = sizeof(imageBuffer);
ANDS2610_setRegister(0x08, 0x2A);
uint32_t n = 0;
int lostCnt = 0;
for(int i = 0; i < 10000; i++) {
uint8_t b = ANDS2610_getRegister(0x08);
if((b & 0x40) == 0) {
lostCnt++;
continue;
}
imageBuffer[n++] = b & 0xBF;
if(n == sz) {
lost = lostCnt; return (uint8_t)(&imageBuffer[0]);
}
}
return NULL;
}
{code}
Оказалось слишком медлено выдача изображения.
"шум" механической системы из раскрученного до очень высоких оборотов гироскопа
и "шум" гироскопа внутри микросхемы (пьезоэлектрические вроде бы в основном) прост не сопоставимы.
Я пробовал интегрировать сигнал XYZ с микросхемы.
Была наивная мысль (типа я первый так сделаю) совместить металлоискатель (сингнал с него) с координатой. Что бы получить красивую двухмерную картинку.
Не работает так.
ну если вдруг окажется, что 10 дней мало.. ну тогда добавлю и логику управления GPS и доработаю саму плату GPS.
Если было нужно оптимизировать "по правильному", то ESP32 как основной модуль - это не правильно. Нужно ставить что то работающее на 1-5Мгц и жрущее мизер. Желательно в режиме сна с пробуждением от аналогово датчика движения. А остальные компоненты пробуждать по мере необходимости. И тонкая настройка GSM.
SIM800L в виде модуля с той минимальной обвязкой что есть - то же не айс.
И вместо neo-6m нужно брать более дорогой вариант и оптимизировать и режим работы (отключая когда не нужно) и режимы настройки (там можно единицы mA выгадать)
В общем по честному, с серьезной экономией по току потребления - это другие компоненты и куча времени на отладку "в поле".
А к основному аккуму машины не подключал и даже не планирую.
Как то прилетел из отпуска в -40 в тропической одежде. А штатная сигналка с GPS (другая машинв) высосала весь штатный аккум в 0 за 20 дней. Вот весело было на морозе в легкой одежде плясать вокруг на стоянке аэропорта..
Так что, и производителеи сигнализаций экономят на компонетах и разработке.
Вполне можно потребление было сократить до средних 1-5мA в дежурном режиме (грубо прикидывал). Но нет же.. всякие StarLine по 30-50mA тянут на 12V
Были преценденты.
Машину увезли просто из за "какой то большой член МВД" должен был приехать и на всякий случай убрали машины, припаркованные без нарушений на штрафстоянку. Как же.. член же большой. Да еще из МВД.
Машина уехала на штраф стоянку. Но хотя бы понятно было на какую и что именно на нее. А не угнали. И понятно куда заносить квитацию о штрафе (какой район города).
Это же все молчком делается.
Угон то ладно. А официальный "угон" без оповещения - это всегда нервы.
До нас глушилки GPS не дошли... Сибирь. Если что долетит, то сразу мегатонное.
А так, все работает даже не под лобовым. Кординаты показывает точно.
Ну у всех GPS приемников холодный старт длинный. 3 минуты это еще ничо. и 15..20 искать может.
А питание... ну зато дешев. Дешевле 500 руб сложно найти готвый модуль.
У меня валяется старый GPS модуль (не помню даже чего. 15 лет ему). так однако 100mA берет
Если Вы про lifepo4, то он очень "плох" для анализа остатка зарядя по напряжению.
С 3.6 до 3.2 падает за 1 день. Потом 7-8 дней 3.2. А если меньше 3.2 - то напряжение падает на глазах (за 1 день) и BMS на 2.5 выключает. Т.е. если 3.15 то значит остаток < 10..15%
Смотрю по SMS от..
А если про li-po, то у него график разряда вроде бы вообще близок к линейному и остаток заряда по напряжению хорошо коррелируется.
Но li-po 100% в not attended желеку ставить не стал бы. Это же просто опасно.
Сингалиция классическая это окрыть/закрыть машину (+прочеее). Из за своей штатности она только от шпаны. Да и не охота лезть встраивать.
у меня валяются ТРИ (!) GPS/GSM трекера. Два типа ST-901.
В одном оказалось что нет акукмулятора внутри (не припаян) и хотя есть провод ACC, но он на него не реагирирует. В другом вроде бы все норма. Но SMS разбивает на две части и время в GMT+8 (китайское). И это не меняется настройками.
3-й какой то российский, но... SMS режим убогий (ничего толком не посылает) и заточне на гвоздями прибитый API к определенному сайту производитля. Т.е. опять же не то.
И валяются два иммобилайзера FALCON C10. Только один удалось запустить нормально.
Какой то время обходился миксом FALCON C10+ST-901+датчик удара+генератор длинного импулься на NE555.
В общем, то что сейчас можно купить - это какой то мусор собранный в подвале в Китае.
Все все что мне нужно:
Найти машину на парковке
Уведомление об ударе/погрузке на эвакуатор.
Вдруг я забыл документы/права в которых лежит токен.
да собственно все.
Да же не сложно. Вместо одного резистора на плате (его видно прямо рядом с ръемом антенны) сделать ключ на полевике и...
Но я решил не заморачиваться. Ну будет на 30% меньше потреблять. Но нужно придумывать логику работы спящего режима для GPS.
Да же не реализовывать. а придумывать и потом проверять в жизни. Когда засыпать. Когда просываться.
И так из за стольких моментов пришлось туда сюда таскать (из машины домой). Именно их за логики работы. А не программных ошибок. Когда думаешь умозрительно, что "оно наверное так нужно". А по результату эксплуатации понимаешь "не.. по другому будет удобнее".
не знаю. Зимой, через пол года, и узнаю. Я вот в начале апреля только закончил. В морозилке не проверял.
Но, с учетом общего тока, который модуль тянут из батареи, возможно, просто куска вспененного пенопропилена сверху в коробку окажется достаточно
Пробовал снимать питание с neo-6m. Не вариант. Слишком долго ищет после включения и батарейки (там скорее всего ионистор) хватает максимум на 30 минут для сохранения данных. А при холодном старте минут 20 спутники ищет. А режимы экономи а либо не работают (программный режим экономии) либо принципиально снижения потребления не дают (упрощенная схемотехника с постоянным питанием активной антены).
режим сна SIM800L вообще ничего не дает.
подозреваю что у меня SIM800L и neo-6m подделки. Но возится и искать другие варианты не хочу. 10 дней автонома меня вполне устривают. Этой машиной я чаще чем раз в 10 дней пользуюсь. Подзаряжается.
Берет BLE метку (зеленая на фото с озона) и BLE на телефоне на растоянии метров 6-7 (в квартире). В машине не замерял. Обычно, когда заводишь то сидишь на водительском месте :)
Варианты меток смотрел разные (включая даже потрощение датчика давления на колесах). Но BLE - самый просто вариант. Цель была сделать без всякой экзотики. На самых распространеных компонентах которые можно просто купить и которые всегда будут.
Ну и плюс, что режим BLE можно а андройде "включить". А телефон всегда с собой и bluetoot на нем всегда включен (смарт браслет ношу). Т.е по сути и метку можно не таскать, как физически одельной включенной железкой.
Конечно BLE это не крипто защита (статические данные в ответе на скан). Но так и не роллс ройс фантом защитить же..
Готовые "кейс герметичный" на озон. Один из вариантов идеально подошел под 4 аккума формата 32700
Прям как под них сделан. И чуть места осталось под все остальное.
LiFePO4 гораздо лучше себя ведет в мороз чем Li-ion.
А найти что то по быстрому за разумные деньги (включая BMS) это только LiFePO4 и Li-ion.
Все сделано из готовых плат (включая BMS и DC-DC для зарядки от 12V), которые можно купить сразу на озоне или в магазине.
Я из динозавров. Я еще помню законы (не в России), фактически запрещающие криптографию.
Валяются первые демо Java карты (с конфиреренции, организованной Gemplus 2000 год) где 3DES16 обрезана аппаратно в соответствии с французскими законами того времени. И преследование авторов RSA. И принты на футблоках с алгоритмом RSA.
К теме прямого отношения не имеет, но.. еще слышал (лично) как человек (испанец) делился своми воспоминаниями как он в 60-е годы зарабатывал на том что контрабандой возил в Испанию порнуху. Тогда порнография (невинная, по современным меркам) была в Испании уголовно наказуема (не верится.. но так было).
Так что с ужасом думаю, что история может двигаться по кругу. И строгую криптографию могут запретить для частных лиц и сделать ее использование уголовкой. И найденую на компе фотку с голой женщиной - 5 лет турьма.
Тенденция настораживает просто.
За то не узко в памяти и по ресурсам не жмет нигде :)
А обвзяка у него минимальна. Но как ни странно модули в розницу стоят столькож или дороже чем готовая демо плата.
А есть еще ESP32-S3 модули. Лежит. Не игрался еще с ней. Но IDF та же на них подходит.
кодировка.
Поскольку не предполагал использованеи кириллицы, то не стал заморачиваться в "голым" форматом SMS (хотя ничего особо сложного нет, но зачем) и возложил это на SIM800L (режим "AT+CMGF=1"). В этом режиме SIM800L выдает либо ASCII текст либо hex дамп UTF-16, сам занимаясь переводом в текст. Да еще длинные сообщения склеивает. Что при использовании PDU "голого формата" пришлось бы поддерживать "руками"
Аа.. про это. Ну так это просто конечный автомат с состояниями.
Ассинхронность.. ну так FreeRTOS из ESP-IDF.
Команды в Tx шлет одна задача FreeRTOS, а поток из Rx (точнене из буффера, обеспечиваемого ESP-IDF) читает и обрабатывае другая задача FreeRTOS, выставляя состояния (типа пришел RING, получена SMS, получен ответ на такую то команду). Что читается (контекст) определяется либо по данным либо по признаку чего ждать.
типа
3.5V вроде бы еще не полный разряд Li-ion. Но SIM800L уже работате не стабильно. Да и КПД линейного стабилизатора ESP32 получается так себе. И со штатным 1117 в ESP32 2.3V+1.2+0.1 = 3.6V на батарее - уже ESP32 не работате (уходит в перерезагрузку на грани 2.2..2.3V).
Так что однозначно Li-ion 1S не самый удачный вариант. Хоть конечно работать и будет как то.
Что имете в виду под "в асинхронном режиме"?