Aplicação que conecta dispositivos mobile no coletor de dados da GalileoSky
Esse projeto foi desenvolvido com as seguintes tecnologias:
- React Native
- Expo
- EAS
- BLE PLX (Bluetooth Low Energy)
A demanda surgiu como uma ideia de desenvolver uma aplicação nativa de identificação de agentes via BLE (Bluetooth Low-Energy). Dessa forma, o usuário com o aplicativo instalado no seu celular Android conseguirá se conectar via BLE com dispositivos GATT, sendo estes responsáveis por enviar pacotes de dados ao celular e apresentá-los em uma interface. A priori, a aplicação deve se conectar com dispositivos da Galileosky.
- Versão BETA da aplicação: Link
- Documentação Galileosky sobre BLE: Link
- Documentação protocolo Galileosky: Link
- Github lib React-Native-BLE-plx: Link
- Documentação lib React-Native-BLE-plx: Link
O Layout pode ser encontrado no Figma por meio do seguinte Link
- Versão da documentação: 5 (Lollipop)
- Versão Android testada: 7.1.1 (Nougat) e 13 (Android 13)
- Versão API: 25 e 33
- Versão Expo: 49
- Versão react-Native: 72
- Firmware Galileosky: 38
Utilizando Expo
npx create-expo-app -t expo-template-blank-typescript expo-ble-darwin
npx expo install react-native-ble-plx @config-plugins/react-native-ble-plx
npx expo install expo-device react-native-base64
Instalando o EAS para build
npx npm install eas-cli
npx expo install expo-dev-client
Adicionar o seguinte plugin no arquivo app.json
"plugins": [
[
"@config-plugins/react-native-ble-plx",
{
"isBackgroundEnabled": true,
"modes": [
"peripheral",
"central"
],
"bluetoothAlwaysPermission": "Allow $(PRODUCT_NAME) to connect to bluetooth devices"
}
],
],
Adicionar o seguinte snippet no arquivo eas.json
{
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal"
},
"production": {}
}
}
Gerar as pastas nativas Android e IOS e validar os plugins. Dessa forma, as permissões são inseridas no AndroidManifest.xml e info.plist.
npx expo prebuild
Gerar uma versão de build de desenvolvimento para ser usada em emuladores ou dispositivos físicos. Retorna o QRCode para leitura.
npx expo run:android
ou
npx expo run:ios
Gerar um servidor de desenvolvimento para ser baixado em dispositivos físicos. Assim é possível rodar a build de desenvolvimento gerada e ler o QRCode.
eas build --profile development --platform android
ou
eas build --profile development --platform ios
- Características e UUID
Serviço (Retorna da conexão BLE): 0000a441-0000-1000-8000-00805f9b34fb
SPS ou Read (Documentação): 0783b03e-8535-b5a0-7140-a304d2495cb7
Server_TX ou Notify (Documentação): 0783b03e-8535-b5a0-7140-a304d2495cb8
Server_RX ou WriteNoResponse (Documentação): 0783b03e-8535-b5a0-7140-a304d2495cba
Flow_CTRL ou WriteNoResponse_Notify (Documentação): 0783b03e-8535-b5a0-7140-a304d2495cb9
- Formato de mensagem
/****** Formato da mensagem / 250 bytes *******
| Byte nº | Length | Value | Descrição |
-----------------------------------------------
| 1 | 1 | 0x41 | |
| 2 | 1 | 0xA4 | Cabeçalho da |
| 3 | 1 | 0x12 | Mensagem |
| 4 | 1 | 0x21 | |
| ... | ... | | Pacote principal |
| n | 15 | 0x03 | IMEI |
| ... | ... | | Pacote principal |
-----------------------------------------------
- Exemplo de mensagem
Cabeçalho retornando: QaQSIQ==
https://cryptii.com/pipes/base64-to-binary
QaQSIQ==
AR4AAzg2MjM=
MTEwNjEzMTU=
MjQ2EAAAQEI=
K0GYXkKADkMmIMA=
Pacote:
Header BLE: 41 A4 12 21
Header PCT: 01
Length: 1e 00
IMEI: 03 38 36 32 33 31 31 30 36 31 33 31 35 32 34 36
Number of record: 10 00 00
Status device: 40 42 2B
Supply Voltage: 41 98 5e
Battery Voltage: 42 80 0e
Inside temperature: 43 26
CRC: 20 c0
A mensagem é enviada em partes que devem ser juntadas posteriormente