<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>BLE read</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<h1>BLE read</h1>
<p>Micro:bitに接続完了後、温度を表示します。</p>
<hr>
<p><button type="button" id="connect">接続</button> <span id="msg"> </span></p>
<p id="dsp"></p>
</body>
</html>
<script>
let bluetoothDevice = null;
const uuid1 = 'e95d6100-251d-470a-a062-fa1922dfa9a8';// 温度サービスUUID
const uuid2 = 'e95d9250-251d-470a-a062-fa1922dfa9a8';// 温度キャラクタリスティックUUID

//接続ボタンの動作
document.getElementById('connect').addEventListener('click', function(e){
  if (document.getElementById('connect').textContent == '接続') {
    // BLEデバイスをスキャンする
    navigator.bluetooth.requestDevice({
    //acceptAllDevices: true,
      filters: [{namePrefix: 'BBC micro:bit'}],optionalServices: [uuid1]})
    // デバイス接続する
    .then(device => { name=device.name; bluetoothDevice = device; return device.gatt.connect(); })
    // サービスを取得する
    .then(server => { return server.getPrimaryService(uuid1); })
      // キャラクタリスティックを取得する
      .then(service => { return service.getCharacteristic(uuid2); })
    // 温度を取得する
    .then(characteristic => {
      characteristic.startNotifications();
      characteristic.addEventListener('characteristicvaluechanged',onTemperatureChanged);
      update(true) ;
    })
    .catch(error => { msg.innerHTML = (error) ;	});
  } else { bluetoothDevice.gatt.disconnect() ; update(false) ; }
})
//温度の取得
function onTemperatureChanged (event) {
  let temperature = event.target.value.getUint8(0, true);
  data = name+' 温度 : ' + temperature ;
  dsp.innerHTML = data ;
}
function update(connected) {
  connect.textContent = connected ? '切断' : '接続'
  msg.innerHTML = connected ? 'BLE connected' : 'BLE disconnected'
//send.disabled = !connected ;
}
</script>