Não é um dia sem esportes - 2: reprogramando uma pulseira chinesa

Para as pessoas envolvidas no esporte, um companheiro frequente de corrida ou corrida é um smartphone com vários aplicativos. Com uma bicicleta, é mais fácil, você pode consertar um smartphone, por exemplo, no volante e assistir aos dados dos sensores. Mas e se você estiver correndo ou esquiando? Você pode consertar o smart na sua mão, pois existem capas especiais (incluindo as giratórias). Mas isso é inconveniente e às vezes complicado. Além disso, o herói russo não vai diretamente.

Existem vários artigos na Internet nos quais os entusiastas fazem seus relógios inteligentes. Caixa fabricada ou impressa. Faça o recheio. Mas existem muitos dispositivos prontos no aliexpress. Por exemplo, como na foto abaixo. Se você acredita na descrição, é um super dispositivo direto: mede a frequência cardíaca, a pressão, as calorias e outras coisas.


Vamos abrir e ver o que está dentro.



E de fato
. . Random() . , , , .


O cérebro dessa pulseira é um chip PHY6202 de um fabricante da Microelectronics Middle Kingdom Fengjia. No interior, possui um Cortex-M0 e um conjunto padrão de periféricos. Memória: Flash de 512kB, SRAM de 138kB e ROM de 128kB. A ROM contém uma pilha BLE e um gerenciador de inicialização UART, como chip programável através do UART. Os camaradas chineses trouxeram cuidadosamente contatos para o UART. Para alternar para o modo UART, o carregador de inicialização precisa elevar a saída da TM para um nível alto e redefinir o chip.

Os utilitários e SDKs do PHY6202 (assim como do irmão mais velho dele, PHY6212) podem ser encontrados aqui .

O utilitário de programação de chips PhyPlusKit é fornecido diretamente. A documentação possui uma lista de comandos: apagar, gravar etc. Detalhes no documento PHY62XX_UART_FlashWrite_Protocol no link acima (em chinês). Honestamente, a lista de comandos não está completa. O PhyPlusKit usa outro comando rdreg (leia qualquer registro).

Vamos começar. Desmontamos, soldamos os contatos necessários ao adaptador UART-USB e pronto .

O SDK contém muitos exemplos. Em si, na minha opinião, é torto e úmido. Às vezes você tem que editar a fonte, porque eles não foram projetados apenas para uso “externo”. Aqui está a função de medição do nível da bateria do Battery Service. Por que ela está lá incompreensível?

static uint8 battMeasure( void )
{
  uint8 percent;
  percent = 95;
  return percent;
} 

Não é um SDK, mas um exemplo sólido.
A pinagem da pulseira é:
1) acelerômetroSDA P32
SCL P33
2) LCDSDA P25
SCL P31
RS P00
Reset P01
CS P02
LED P34
3)P03
4)P20
5) USB Vin ( USB)P15
6) VbatP14/AIO3
7) Green LED ( )P23
A tela é padrão (cheia no aliexpress) no ST7735 com uma resolução de 80 * 160. Desenvolvido por SPI. Existem bibliotecas prontas para isso, mas é melhor criar sua própria versão leve, para o tamanho da fonte e seus próprios caracteres. A tela é colorida, mas isso não é muito relevante na rua, pois baixo contraste (lembrou-se tristemente dos monitores transflectivos dos telefones Siemens). Sim, e vidro colorido. Usaremos a cor branca para exibir o texto, é melhor visualizado.

O botão de toque é fabricado em um chip Tontec TTP233D-HA6.

O acelerômetro é desconhecido, mas a varredura do barramento I2C mostrou que ele usa registros como todos os acelerômetros ST. Acima de tudo, é semelhante ao LIS2DH12. Parece que todos os registros de controle correspondem.

Para exibir nossas informações na pulseira, precisamos do nosso próprio serviço BLE para transferência de dados. Algo como o SPP . Além disso, você pode adicionar o Serviço de bateria e atualização de firmware via BLE.

Como base para o projeto, pegamos um exemplo de firmware para atualizar o OTA e o refazemos de acordo com nossas necessidades. Adicione um serviço para a bateria. Para transferir dados, você pode usar um exemplo de implementação de um serviço personalizado do SDK. Utiliza um serviço FF01 e nele uma característica FF02.

Spoiler
SDK GPIO 0, . . , . , pull-up pull-down ( 100 ) . . 40 , «» pull-down, 15 ( ).

Prendemos os serviços de trabalho:

  1. interromper o manuseio pelo botão de toque. Além de ligar a tela e ligar / desligar a pulseira, faremos reconhecimento de toque único e duplo com a transmissão de um comando através de nossa característica FF02.
  2. saída de dados recebidos de um smartphone pela mesma característica da tela.
  3. breve inclusão de um vibromotor para chamar a atenção.
  4. usando o acelerômetro, ligando a tela com um aceno agudo da mão (é difícil de configurar, porque quando você corre, agita as mãos).

Ok, a pulseira está pronta. Verificamos através do nRFConnect, que permite ler e escrever os valores das características. Na tela, o pulso, o tempo, a distância e outro temporizador (por exemplo, para exibir o intervalo de tempo ou exibir o gráfico, ou seja, uma espécie de marca-passo, mas isso só pode ser obtido com a sua aplicação).


Agora precisamos levar os dados para algum lugar para transmiti-los. Atualmente, uso o aplicativo Strava, embora goste cada vez menos. Talvez a maneira mais fácil de obter tempo de corrida dela e a distância (embora com arredondamento para 100 m) das notificações na barra de status. Para fazer isso, você precisa escrever um aplicativo com um serviço para ouvir notificações. Isto não é difícil. Mas leremos o pulso diretamente do cinto BLE ou ANT +. Bem, como temos notificações do bracelete sobre pressionar os botões, precisamos usá-los em algum lugar. Por exemplo, você pode, enviando mensagens através do BroadCastReceiver, pausar o Strava e reiniciá-lo. E é melhor um dia fazer seu Strava com sinos e assobios. O aplicativo requer direitos para acessar o local (isso é necessário para trabalhar com o BLE) e direitos para acessar notificações.

Resta verificar o caso. Infelizmente, o inverno terminou em fevereiro, então o ciclo da imagem no início do artigo já terminou. Mas você pode dar uma corrida. O acelerômetro geralmente liga a tela desnecessariamente, talvez deva ser completamente desligado. Um botão de toque pode reagir a uma queda que caiu da testa.




E, finalmente, as boas notícias. A pulseira já de fábrica suporta a atualização do OTA por meio do aplicativo PhyApp (ela fica no mesmo local que o SDK, originalmente em chinês). Portanto, com um firmware pronto, não é necessário desmontar a pulseira. Flash e uso. Para fazer isso, você precisa instalar o aplicativo, colocar o firmware na “raiz” do telefone (HEX, não HEXF, pois o último contém o gerenciador de inicialização que já temos de fábrica), conectar à pulseira e usar o botão OTA para carregar o firmware na pulseira. Depois de piscar, o bracelete será desligado. Para ligá-lo, mantenha o botão pressionado por 2 segundos.

Em geral, relógios e pulseiras no PHY62 podem ser facilmente convertidos em qualquer coisa.

Referências:

  1. códigos-fonte e APK de um aplicativo Android (foi escrito no Android 8.1, parece funcionar com menos de 9 anos, não foi verificado com outros);
  2. Arquivo de firmware HEX via BLE e HEXF - para firmware via UART (não me importo com a fonte, mas preciso entender que posso carregá-lo mediante contrato de licença e quem não escreve neste especial) + aplicativo de firmware PhyApp para firmware OTA.
  3. Comprei uma pulseira aqui , mas não posso garantir que o recheio será o mesmo, porque muito parecido na aparência, mas com um chip diferente. Existem tipos de opções com uma tela maior, que também possui o PHY6202. Em geral, existem relógios / pulseiras com chips diferentes (Phy +, Telink e até nRF).


PS Em geral, parece que o SDK para PHY62 foi criado com base no SDK da Texas Instruments para seus chips BLE.

All Articles