Comme le dit le titre. Je me réfère entièrement aux articles suivants. Merci beaucoup. Le code est presque le même, donc si vous le signalez, nous le supprimerons immédiatement.
Changement des valeurs du thermo-hygromètre Bot avec Raspberry Pi https://qiita.com/c60evaporator/items/7c3156a6bbb7c6c59052
Il y avait une partie qui ne fonctionnait pas dans mon environnement, donc je vais mettre le code qui fonctionnait comme un journal privé.
Vous pouvez le vérifier depuis l'application sur votre smartphone.
pi@raspberrypi:~ $ sudo hcitool lescan | grep EB:F6:31:8C:1F:E9
EB:F6:31:8C:1F:E9 (unknown)
EB:F6:31:8C:1F:E9 (unknown)
EB:F6:31:8C:1F:E9 (unknown)
Quelle est cette commande?
NAME
hcitool - configure Bluetooth connections
DESCRIPTION
hcitool is used to configure Bluetooth connections and send some spe-
cial command to Bluetooth devices. If no command is given, or if the
option -h is used, hcitool prints some usage information and exits.
Utilisez bluepy. Reportez-vous à l'URL liée.
pi@raspberrypi:~ $ sudo install libglib2.0-dev
pi@raspberrypi:~ $ pip3 install bluepy
pi@raspberrypi:~ $ cd .local/lib/python3.7/site-packages/bluepy
pi@raspberrypi:~ $ sudo setcap 'cap_net_raw,cap_net_admin+eip' bluepy-helper
switchbot.py
from bluepy import btle
import struct
class SwitchbotScanDelegate(btle.DefaultDelegate):
def __init__(self, macaddr):
btle.DefaultDelegate.__init__(self)
self.sensorValue = None
self.macaddr = macaddr
def handleDiscovery(self, dev, isNewDev, isNewData):
if dev.addr == self.macaddr:
for (adtype, desc, value) in dev.getScanData():
if desc == '16b Service Data':
self._decodeSensorData(value)
def _decodeSensorData(self, valueStr):
valueBinary = bytes.fromhex(valueStr[4:])
batt = valueBinary[2] & 0b01111111
isTemperatureAboveFreezing = valueBinary[4] & 0b10000000
temp = ( valueBinary[3] & 0b00001111 ) / 10 + ( valueBinary[4] & 0b01111111 )
if not isTemperatureAboveFreezing:
temp = -temp
humid = valueBinary[5] & 0b01111111
self.sensorValue = {
'SensorType': 'SwitchBot',
'Temperature': temp,
'Humidity': humid,
'BatteryVoltage': batt
}
main.py
from bluepy import btle
from switchbot import SwitchbotScanDelegate
scanner = btle.Scanner().withDelegate(SwitchbotScanDelegate('eb:f6:31:8c:1f:e9'))
scanner.scan(5.0)
print(scanner.delegate.sensorValue)
pi@raspberrypi:~ $ python3 ./main.py
{'SensorType': 'SwitchBot', 'Temperature': 25.2, 'Humidity': 68, 'BatteryVoltage': 100}