- PVSM.RU - https://www.pvsm.ru -
У людей, занимающихся спортом, частым спутником на пробежках или заездах является смартфон с различными приложениями. С велосипедом проще, можно закрепить смартфон, к примеру, на руль и смотреть выдаваемые с датчиков данные. А что делать, если ты бежишь или едешь на лыжах? Можно закрепить смарт на руку, для этого есть специальные чехлы (в том числе поворотные). Но это неудобно и порой громоздко. К тому же русский витязь прямо не ходит.

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

Откроем и посмотрим, что внутри.



данного браслета является чип PHY6202 от производителя из Поднебесной Fengjia Microelectronics. Внутри у него Cortex-M0 и стандартный набор периферии. Память: 512кБ Flash, 138кБ SRAM и 128кБ ROM. В ROM содержится стек BLE и UART загрузчик, т.к. программируется чип через UART. Китайские товарищи заботливо вывели для UART контакты. Для перехода в режим UART bootloader нужно вывод TM подтянуть к высокому уровню и сбросить чип.
Утилиты и SDK для PHY6202 (а также для его старшего брата PHY6212) можно найти тут [3].
Непосредственно для программирования чипа предусмотрена утилита PhyPlusKit. В документации есть список команд: стирание, запись и др. Подробности в документе PHY62XX_UART_FlashWrite_Protocol по ссылке выше (на китайском). Честно говоря, список команд описан не полный. PhyPlusKit использует еще одну команду rdreg (чтение любого регистра).
Приступим. Разбираем, припаиваем нужные контакты к UART-USB переходнику и вперед.
SDK содержит много примеров. Сама по себе она, на мой взгляд, кривовата и сыровата. Приходится иногда править исходники, т.к. они не рассчитаны на только «внешнее» использование. Вот функция замера уровня батареи из Battery Service. Зачем она там вообще непонятно.
static uint8 battMeasure( void )
{
uint8 percent;
percent = 95;
return percent;
}
Не SDK, а один сплошной пример.
Распиновка браслета такая:
| 1) акселерометр | SDA P32 SCL P33 |
| 2) LCD | SDA P25 SCL P31 RS P00 Reset P01 CS P02 LED P34 |
| 3) сенсорная кнопка | P03 |
| 4) вибромоторчик | P20 |
| 5) USB Vin (индикация подключения к USB) | P15 |
| 6) Vbat | P14/AIO3 |
| 7) Green LED (вдруг помигать захочется) | P23 |
Дисплей стандартный (на алиэкспрессе их полно) на ST7735 с разрешением 80*160. Работает по SPI. Под него есть готовые библиотеки, но лучше сделать свою лайт-версию, под свой размер шрифта и свои символы. Дисплей цветной, но это на улице не сильно актуально, т.к. контрастность невысокая (с грустью вспомнил трансфлективные дисплеи от сименсовских телефонов). Да и стекло тонированное. Будем для отображения текста использовать белый цвет, его видно лучше всего.
Сенсорная кнопка сделана на чипе Tontec TTP233D-HA6.
Акселерометр неизвестный, но сканирование шины I2C показало, что он использует регистры как у всех ST акселерометров. Больше всего он похож на LIS2DH12. Вроде все управляющие регистры соответствуют.
Чтобы вывести свою информацию на браслет, нам нужен свой BLE-сервис для передачи данных. Что-то вроде SPP. Дополнительно можно добавить Battery Service и обновление прошивки через BLE.
За основу проекта возьмем пример прошивки для обновления OTA и переделаем под свои нужды. Добавим сервис для батарейки. Для передачи данных можно использовать пример реализации кастомного сервиса из SDK. Он использует один сервис FF01 и в нем одну характеристику FF02.
К работающим сервисам прикручиваем:
Хорошо, браслет готов. Проверку делаем через nRFConnect, она позволяет и читать, и писать значения характеристик. На экране пульс, время, дистанция и еще один таймер (например, для вывода времени отставания или опережения графика, т.е. своеобразный pacemaker, но это только со своего приложения можно получить).

Надо теперь где-то взять данные, чтобы их передать. Я на данный момент пользуюсь приложением Strava, хотя она мне нравится все меньше. Пожалуй, самый простой способ получить от нее время пробежки и расстояние (правда, с округлением до 100 м) из уведомлений в статусбаре. Для этого надо написать приложение с сервисом для прослушивания уведомлений. Особого труда это не составляет. А вот пульс будем читать напрямую с BLE или ANT+ пояса. Ну а поскольку у нас есть уведомления от браслета о нажатии кнопок, то надо куда-нибудь их использовать. Например, можно, отправляя сообщения через BroadCastReceiver, ставить Страву на паузу и снова запускать. А лучше когда-нибудь сделать свою Страву with bells and whistles. Приложение требует прав для доступа к местоположению (это нужно для работы с BLE) и прав на доступ к уведомлениям.
Осталось проверить в деле. К сожалению зима закончилась еще в феврале, поэтому цикл из картинки в начале статьи уже завершился. Но можно и пробежаться. Акселерометр частенько включает экран без надобности, может быть его стоит выключить совсем. А сенсорная кнопка может среагировать на каплю, упавшую со лба.



А напоследок хорошая новость. Браслет уже с завода поддерживает обновление OTA через приложение PhyApp (лежит там же где и SDK, изначально на китайском языке). Поэтому, имея уже готовую прошивку, даже разбирать браслет не требуется. Прошивай и пользуйся. Для этого нужно установить приложение, положить в «корень» телефона прошивку (HEX, а не HEXF, т.к. последний содержит bootloader, который у нас уже есть с завода), подключиться к браслету и через кнопку OTA залить прошивку в браслет. После прошивки браслет будет выключен, для включения нужно подержать кнопку 2 сек.
В целом часы и браслеты на PHY62 можно без проблем переделать во что угодно.
Ссылки:
Автор: greyfox13
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/gadzhety/352607
Ссылки в тексте:
[1] есть: https://habr.com/ru/post/493384/
[2] Мозгом: http://www.braintools.ru
[3] тут: http://wiki.phyplusinc.com/doku.php
[4] исходники: https://github.com/greyfox13/StravaNotifier
[5] HEX файл: https://github.com/greyfox13/Phy6202Wrist
[6] тут: https://www.aliexpress.com/item/33034606922.html
[7] Источник: https://habr.com/ru/post/499774/?utm_source=habrahabr&utm_medium=rss&utm_campaign=499774
Нажмите здесь для печати.