У людей, занимающихся спортом, частым спутником на пробежках или заездах является смартфон с различными приложениями. С велосипедом проще, можно закрепить смартфон, к примеру, на руль и смотреть выдаваемые с датчиков данные. А что делать, если ты бежишь или едешь на лыжах? Можно закрепить смарт на руку, для этого есть специальные чехлы (в том числе поворотные). Но это неудобно и порой громоздко. К тому же русский витязь прямо не ходит.
В интернете есть различные статьи, в которых энтузиасты делают свои смарт-часы. Самостоятельно изготавливают или печатают корпус. Делают начинку. Но на алиэкспрессе много уже готовых устройств. Например, как на фото ниже. Если верить описанию, то прям супер устройство: измеряет пульс, давление, калории и еще чего-нибудь.
Откроем и посмотрим, что внутри.
Мозгом данного браслета является чип PHY6202 от производителя из Поднебесной Fengjia Microelectronics. Внутри у него Cortex-M0 и стандартный набор периферии. Память: 512кБ Flash, 138кБ SRAM и 128кБ ROM. В ROM содержится стек BLE и UART загрузчик, т.к. программируется чип через UART. Китайские товарищи заботливо вывели для UART контакты. Для перехода в режим UART bootloader нужно вывод TM подтянуть к высокому уровню и сбросить чип.
Утилиты и SDK для PHY6202 (а также для его старшего брата PHY6212) можно найти тут.
Непосредственно для программирования чипа предусмотрена утилита PhyPlusKit. В документации есть список команд: стирание, запись и др. Подробности в документе PHY62XX_UART_FlashWrite_Protocol по ссылке выше (на китайском). Честно говоря, список команд описан не полный. PhyPlusKit использует еще одну команду rdreg (чтение любого регистра).
Приступим. Разбираем, припаиваем нужные контакты к UART-USB переходнику и вперед.
SDK содержит много примеров. Сама по себе она, на мой взгляд, кривовата и сыровата. Приходится иногда править исходники, т.к. они не рассчитаны на только «внешнее» использование. Вот функция замера уровня батареи из Battery Service. Зачем она там вообще непонятно.
Не SDK, а один сплошной пример.
Распиновка браслета такая:
Дисплей стандартный (на алиэкспрессе их полно) на 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 можно без проблем переделать во что угодно.
Ссылки:
В интернете есть различные статьи, в которых энтузиасты делают свои смарт-часы. Самостоятельно изготавливают или печатают корпус. Делают начинку. Но на алиэкспрессе много уже готовых устройств. Например, как на фото ниже. Если верить описанию, то прям супер устройство: измеряет пульс, давление, калории и еще чего-нибудь.
Откроем и посмотрим, что внутри.
А на самом деле
А на самом деле в браслете используются нанотехнологии. Он может измерять пульс и давление даже дистанционно на любом объекте. Помигают два зеленых светодиода и функция Random() выдает значение. Но, в общем, мне и не нужно, так как пульсометр у меня уже есть.
Мозгом данного браслета является чип PHY6202 от производителя из Поднебесной Fengjia Microelectronics. Внутри у него Cortex-M0 и стандартный набор периферии. Память: 512кБ Flash, 138кБ SRAM и 128кБ ROM. В ROM содержится стек BLE и UART загрузчик, т.к. программируется чип через UART. Китайские товарищи заботливо вывели для UART контакты. Для перехода в режим UART bootloader нужно вывод TM подтянуть к высокому уровню и сбросить чип.
Утилиты и SDK для PHY6202 (а также для его старшего брата PHY6212) можно найти тут.
Непосредственно для программирования чипа предусмотрена утилита 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 |
Сенсорная кнопка сделана на чипе Tontec TTP233D-HA6.
Акселерометр неизвестный, но сканирование шины I2C показало, что он использует регистры как у всех ST акселерометров. Больше всего он похож на LIS2DH12. Вроде все управляющие регистры соответствуют.
Чтобы вывести свою информацию на браслет, нам нужен свой BLE-сервис для передачи данных. Что-то вроде SPP. Дополнительно можно добавить Battery Service и обновление прошивки через BLE.
За основу проекта возьмем пример прошивки для обновления OTA и переделаем под свои нужды. Добавим сервис для батарейки. Для передачи данных можно использовать пример реализации кастомного сервиса из SDK. Он использует один сервис FF01 и в нем одну характеристику FF02.
Спойлер
Все примеры из SDK при инициализации для всех GPIO выводов делают подтяжку к 0, для снижения потребления. Но есть один нюанс. С дисплея и акселерометра питание не снимается, даже когда процессор спит или выключен. И если в акселерометре выполнена подтяжка линий к питанию, то получится через этот pull-up и последующий pull-down (а он равен 100 кОм) будет просто так течь ток с десяток микроампер. Так на практике и оказалось. Изначально с родной прошивкой браслет в выключенном состоянии потреблял около 40 мкА, а если убрать «лишние» pull-down, то можно получить 15 мкА (столько по даташиту кушает спящий дисплей).
К работающим сервисам прикручиваем:
- обработку прерываний по сенсорной кнопке. Помимо включения экрана и включения/выключения самого браслета, сделаем распознавание однократного и двойного нажатия с передачей команды через нашу FF02 характеристику.
- вывод данных полученных со смартфона через ту же характеристику на дисплей.
- короткое включение вибромоторчика для привлечения внимания.
- используя акселерометр, включение экрана при резком взмахе рукой (настроить сложновато, т.к. при беге и так машешь руками).
Хорошо, браслет готов. Проверку делаем через nRFConnect, она позволяет и читать, и писать значения характеристик. На экране пульс, время, дистанция и еще один таймер (например, для вывода времени отставания или опережения графика, т.е. своеобразный pacemaker, но это только со своего приложения можно получить).
Надо теперь где-то взять данные, чтобы их передать. Я на данный момент пользуюсь приложением Strava, хотя она мне нравится все меньше. Пожалуй, самый простой способ получить от нее время пробежки и расстояние (правда, с округлением до 100 м) из уведомлений в статусбаре. Для этого надо написать приложение с сервисом для прослушивания уведомлений. Особого труда это не составляет. А вот пульс будем читать напрямую с BLE или ANT+ пояса. Ну а поскольку у нас есть уведомления от браслета о нажатии кнопок, то надо куда-нибудь их использовать. Например, можно, отправляя сообщения через BroadCastReceiver, ставить Страву на паузу и снова запускать. А лучше когда-нибудь сделать свою Страву with bells and whistles. Приложение требует прав для доступа к местоположению (это нужно для работы с BLE) и прав на доступ к уведомлениям.
Осталось проверить в деле. К сожалению зима закончилась еще в феврале, поэтому цикл из картинки в начале статьи уже завершился. Но можно и пробежаться. Акселерометр частенько включает экран без надобности, может быть его стоит выключить совсем. А сенсорная кнопка может среагировать на каплю, упавшую со лба.
А напоследок хорошая новость. Браслет уже с завода поддерживает обновление OTA через приложение PhyApp (лежит там же где и SDK, изначально на китайском языке). Поэтому, имея уже готовую прошивку, даже разбирать браслет не требуется. Прошивай и пользуйся. Для этого нужно установить приложение, положить в «корень» телефона прошивку (HEX, а не HEXF, т.к. последний содержит bootloader, который у нас уже есть с завода), подключиться к браслету и через кнопку OTA залить прошивку в браслет. После прошивки браслет будет выключен, для включения нужно подержать кнопку 2 сек.
В целом часы и браслеты на PHY62 можно без проблем переделать во что угодно.
Ссылки:
- исходники и APK android-приложения (писалось под Android 8.1, под 9кой вроде работает, под другими не проверял);
- HEX файл прошивки через BLE, и HEXF — для прошивки через UART (исходники мне не жалко, но нужно понять, что по лицензионному соглашению я могу выложить, а что нет, кто в этом спец пишите) + переведенное на английский язык приложение PhyApp для прошивки OTA.
- браслет покупался тут, но гарантировать, что начинка будет аналогичная, я не могу, т.к. много одинаковых по виду, но с разным чипом. Есть вроде варианты с экраном побольше, в которых тоже стоят PHY6202. А вообще бывают часы/браслеты с разными чипами (Phy+, Telink, и даже nRF).