React Native i bluetooth

De wikijoan
Salta a la navegació Salta a la cerca

He provat dos codis.

1. Exemple que funciona però no he aconseguit veure els dispositius que tinc vinculats.

https://github.com/innoveit/react-native-ble-manager
https://www.npmjs.com/package/react-native-ble-manager

recordar: dues pestanyes de la consola
$ echo $PWD
/home/joan/react-native-ble-manager
en les dues pestanyes fem:
$ export PATH=/home/joan/Baixades/jdk-11.0.11+9/bin:$PATH

recordar que necessitem la versió 11 de java:
$ java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)

git clone https://github.com/innoveit/react-native-ble-manager.git
$ cd react-native-ble-manager/
npm i --save react-native-ble-manager
npx react-native link
=====
npx react-native start
npx react-native run-android
=====

Instal·lació des de 0:

npx react-native init prova2
cd prova2

copiar la carpeta example/

canviar a index.js la línia:
import App from './example/App';

npm i --save react-native-ble-manager

a les dues pestanyes:
npx react-native start
npx react-native run-android

També, en el AndroidManifest.xml, donar aquests permisos (el AndroidManifest.xml és dins de src/main/):
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

ja està (també he de fer la instrucció ''echo 999999 | sudo tee...'' per allò que es queda penjat...)

MyESP32

Per utilitzar el mètode write():
// Import/require in the beginning of the file
import { stringToBytes } from "convert-string";
// Convert data to byte array before write/writeWithoutResponse
const data = stringToBytes(yourStringData);
...
            BleManager.write(
              peripheral.id,
              "4fafc201-1fb5-459e-8fcc-c5c9c331914b",
              "BEB5483E-36E1-4688-B7F5-EA07361B26A8",
              data
            )

====
La interfície gràfica la desenvolupo en el prova3
====
exemple4: repàs de react native i del tic-tac-toe

$ find . -name 'index.html' 
./node_modules/@react-native-community/cli-debugger-ui/build/ui/index.html
./node_modules/@react-native-community/cli-server-api/build/index.html
./node_modules/plist/examples/browser/index.html
./node_modules/stream-buffers/coverage/lcov-report/lib/index.html
./node_modules/stream-buffers/coverage/lcov-report/index.html


npm install --save react-native -> crea la carpeta node-modules/, que ja hi era. Si cal l'esborrem i es torna a crear de nou
npx react-native run-android

La meva versió de la Android API és la 29
console.log(Platform.Version);
ACCESS_FINE_LOCATION

Per tal de què funcioni l'aplicació, només he de fer en el fitxer index.js:

//import App from './App';
import App from "./example/App"; 

i funciona bé, però no hi ha manera de què trobi el dispositiu que tinc aparellat.

recordem el que he fet. He creat un projecte react-native de zero (amb init, i comprovar que funciona), i he copiat la carpeta exemple. I en el fitxer index.js he dit que apunti a l'exemple de bluetooth

Al final sí que troba els dispositius . La 'Mi Smart Band 4' sí que la troba, però els auriculars Aeropex (tot i que estan connectats) no hi ha manera que els trobi.
I una cosa important: la localització ha d'estar engegada (important)
I en canvi, en la configuració bluetooth del meu dispositiu, el Aeropex el veig com a connectat, i en canvi el Mi Band no m'apareix. És com una mica inestable.


========
https://blog.bam.tech/developer-news/make-your-first-iot-react-native-application-with-the-bluetooth-low-energy

npm i --save react-native-ble-plx


Finalment la solució:
I went to Settings > Apps and notifications > App permissions > Location Permissions and my app was turned off for some reason. Turning it on resolved the problem.
Aplicacions > Permisos > Permisos > Ubicació > Permet mentre s'utilitza l'aplicació

i si dic 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
vol dir que el GPS també ha d'estar arrencat.


creat per Joan Quintana Compte, juny 2021