質問編集履歴

2

プログラムの説明追加

2023/05/26 10:38

投稿

AGLAAGLA
AGLAAGLA

スコア54

test CHANGED
@@ -1 +1 @@
1
- Android端末 BLE受信 一度だけしかできない[java]
1
+ Android端末 BLE受信 同じ値を受信し続まう問題[java]
test CHANGED
@@ -5,6 +5,12 @@
5
5
  10秒後、数字は1個増加しますが、また次の数字も10秒間に何度も受信しています。
6
6
 
7
7
  現在原因分からず、質問させていただきます。
8
+ 送信側はコメントに掲載しています。
9
+
10
+ 現時点で、一度もonCharacteristicChangedが実行できていないのが問題なのかなと
11
+ 個人的に考えています...
12
+
13
+
8
14
 
9
15
 
10
16
  # 前提条件

1

プログラムの改変

2023/05/26 10:34

投稿

AGLAAGLA
AGLAAGLA

スコア54

test CHANGED
File without changes
test CHANGED
@@ -1,8 +1,10 @@
1
1
  ご覧いただきありがとうございます。
2
- ラズパイ3からandroid(google pixel 6)に数値を増加させながら送るシステムを作っています。
2
+ ラズパイ3からandroid(google pixel 6)に数値を10秒おきに増加させ、10秒おきにその数値を送るシステムを作っています。
3
+ 同じ数値は一度のみしか送りません。
3
- しかし、現在android側の受信で、最初0だけ受信後、それ以降受信できない現象が起こっています。
4
+ しかし、現在android側の受信で、同じ数字が10秒間に何度も受信が確認できています。
4
-
5
- もう一度実行ると次の値がけ取れるのですが、続け受け取れな理由が現在分からず、質問させていただきます。
5
+ 10秒後、数字は1個増加しまが、また次の数字も10秒間に何度も信しています。
6
+
7
+ 現在原因分からず、質問させていただきます。
6
8
 
7
9
 
8
10
  # 前提条件
@@ -69,13 +71,6 @@
69
71
 
70
72
  if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) {
71
73
 
72
- // TODO: Consider calling
73
- // ActivityCompat#requestPermissions
74
- // here to request the missing permissions, and then overriding
75
- // public void onRequestPermissionsResult(int requestCode, String[] permissions,
76
- // int[] grantResults)
77
- // to handle the case where the user grants the permission. See the documentation
78
- // for ActivityCompat#requestPermissions for more details.
79
74
  return;
80
75
  }
81
76
  Log.d(TAG, "222");
@@ -97,26 +92,12 @@
97
92
  if (String.valueOf(device).equals("B8:27:EB:F1:9C:71")) { // 指定されたMACアドレスと比較 研究室用
98
93
  //if (String.valueOf(device).equals("B8:27:EB:98:26:06")) { // 指定されたMACアドレスと比較 家用
99
94
  if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
100
- // TODO: Consider calling
101
- // ActivityCompat#requestPermissions
102
- // here to request the missing permissions, and then overriding
103
- // public void onRequestPermissionsResult(int requestCode, String[] permissions,
104
- // int[] grantResults)
105
- // to handle the case where the user grants the permission. See the documentation
106
- // for ActivityCompat#requestPermissions for more details.
107
95
  return;
108
96
  }
109
97
  Log.d(TAG, device.getName());
110
98
  Log.d(TAG, "find!!!");
111
99
  if (ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
112
100
  Log.d(TAG, "許可がないよ1");
113
- // TODO: Consider calling
114
- // ActivityCompat#requestPermissions
115
- // here to request the missing permissions, and then overriding
116
- // public void onRequestPermissionsResult(int requestCode, String[] permissions,
117
- // int[] grantResults)
118
- // to handle the case where the user grants the permission. See the documentation
119
- // for ActivityCompat#requestPermissions for more details.
120
101
  return;
121
102
  }
122
103
  Log.d(TAG, "333");
@@ -169,6 +150,10 @@
169
150
  }
170
151
  if ((properties & BluetoothGattCharacteristic.PROPERTY_NOTIFY) != 0) {
171
152
  gatt.setCharacteristicNotification(characteristic, true);
153
+ BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
154
+ descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
155
+ gatt.writeDescriptor(descriptor);
156
+
172
157
  }
173
158
  }
174
159
  }
@@ -185,11 +170,21 @@
185
170
  if (data != null && data.length > 0) {
186
171
  String textData = new String(data, Charset.forName("UTF-8"));
187
172
  Log.i(TAG, "Received data: " + textData);
188
-
189
- }
173
+ }
174
+ gatt.readCharacteristic(characteristic);
175
+
190
176
  }
191
177
  };
178
+ @Override
179
+ public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
180
+ Log.d(TAG, "Characteristic Changed: " + characteristic.getUuid().toString());
181
+ byte[] data = characteristic.getValue();
182
+ if (data != null && data.length > 0) {
183
+ String textData = new String(data, Charset.forName("UTF-8"));
184
+ Log.i(TAG, "Received data: " + textData);
185
+ }
186
+ }
192
- };
187
+ };
193
188
  }
194
189
 
195
190
 
@@ -198,21 +193,28 @@
198
193
 
199
194
  上記のコードを実行すると、以下のようなログが出ます。
200
195
  ```
201
- 111
202
- 222
203
- isLeEnabled(): ON
204
- find!!
205
- 333
206
- 444
207
- 555
208
- 666
209
- onConnectionUpdated() - Device=B8:27:EB:F1:9C:71 interval=6 latency=0 timeout=500 status=0
210
- 1111111
211
- 777
212
- 888
213
- 999
214
- 101010
215
- Received data: 0
196
+ Received data: 0
216
- onConnectionUpdated() - Device=B8:27:EB:F1:9C:71 interval=36 latency=0 timeout=500 status=0
217
- A resource failed to call close.
197
+ Received data: 0
198
+ Received data: 0
199
+ Received data: 0
200
+ Received data: 0
201
+ Received data: 0
202
+ Received data: 0
203
+ Received data: 0
204
+ Received data: 0
205
+ Received data: 0
206
+ Received data: 0
207
+ Received data: 0
208
+ Received data: 1
209
+ Received data: 1
210
+ Received data: 1
211
+ Received data: 1
212
+ Received data: 1
213
+ Received data: 1
214
+ Received data: 1
215
+ Received data: 1
216
+ Received data: 1
217
+ Received data: 1
218
+ Received data: 1
219
+ Received data: 1
218
220
  ```