Gostaria de criar um dispositivo que obtenha a hora local de um telefone ou laptop via BLE. Meu fluxo de interação ideal seria:
pressione um botão "tempo definido" no dispositivo para começar a anunciar
abra as configurações de Bluetooth ou o painel de controle no telefone / computador, encontre o dispositivo e toque para conectar-se a ele
o dispositivo usa o serviço de horário atual para solicitar o horário do telefone, desconecta e interrompe a publicidade
O escopo total da interação é apenas para obter a hora local sem a necessidade de ajuste manual e sem adicionar conectividade mais complexa, como o WiFi, para usar o NTP.
Esse fluxo de interação é possível com o BLE? Um periférico, por si só, pode ler a partir do serviço de horário atual a partir da central? Caso contrário, um aplicativo complementar no telefone precisa gravar na característica atual do serviço de hora no periférico?
Qual é a precisão desejada? Deseja que ele seja usado como um relógio geral que mostra a hora ou você tem algum outro aplicativo que requer um relógio preciso?
Além da pergunta de Bence, você já pensou em usar um sinal de relógio de rádio em vez de sincronizar o BLE com um dispositivo? Muitos dispositivos de consumo (como relógios digitais) usam isso para obter uma leitura precisa do tempo.
Sim, dentro de um segundo é bom. A mesma precisão que você esperaria de qualquer outro eletrodoméstico com um relógio neles.
Além disso, observei os sistemas de rádio relógio da LF, mas os receptores não estão integrados em nenhum µC que eu conheço e não encontrei nenhum receptor discreto nem em busca casual, você conhece algum?
Como você não pretende se comunicar com o dispositivo parceiro, acho que a precisão do tempo definido é adequada para você em um intervalo de precisão de alguns segundos. Se você quiser ser mais preciso, precisará levar muito mais em consideração (atrasos, latência, protocolos de nível inferior e similares).
Em geral, o BLE é um protocolo de comunicação, você pode acessar todas as funcionalidades fornecidas pelo dispositivo final. Portanto, se você tiver um computador / telefone que permita solicitações de NTP, poderá fazer uma solicitação de NTP pelo BLE. Isso certamente requer algum tipo de configuração ou programa adicional.
Você pode usar a solicitação e a resposta da verificação para entregar o tempo durante o processo de publicidade. Obviamente, para fazer isso, você teria que fornecer uma contrapartida mínima do BLE. A vantagem seria que você nem precisa fazer um emparelhamento completo. É claro que isso requer um certo acesso ao comportamento do BLE em ambos os lados, o que você provavelmente não possui em um smartphone, se estiver aproveitando um Pi ou alguma outra instância mais controlável que possa funcionar.
Se você não tem vergonha de fazer root em um Android, também pode usar o Cheepsync , onde eles fizeram exatamente isso. Aqui está no Github.
Você já viu o Web Bluetooth ? Isso pode ser usado para gravar no dispositivo sem a necessidade de um aplicativo cliente nativo apenas para definir o horário.
Há suporte no Chrome na maioria das plataformas e outros navegadores estão adicionando suporte .
Estou trabalhando em um dispositivo que usa o Bluetooth da Web para definir os detalhes do wifi (o dispositivo é um relógio que usará o NTP para permanecer preciso e oferecer suporte a outros recursos)
Esse fluxo de interação é possível com o BLE?
Um periférico, por si só, pode ler a partir do serviço de horário atual a partir da central?
Somente se a central estiver executando um Serviço de Horário Atual.
Caso contrário, um aplicativo complementar no telefone precisa gravar na característica atual do serviço de hora no periférico?
Depende se a central já está executando um Serviço de Horário Atual. Por exemplo, o iOS tem um incorporado que grava na característica de tempo atual no periférico a cada minuto.
Se não houver um serviço de horário atual incorporado, você poderá adicionar um ou fornecer o horário atual de outra maneira (por exemplo, aplicativo genérico e protocolo personalizado, ou site e Web Bluetooth ).