ble_temperature.py

# Este trabalho está licenciado sob a licença MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Todos os direitos reservados.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Exemplo de sensor de temperatura BLE.

import time
from hts221 import HTS221
from board import LED
from machine import Pin, I2C
from ubluepy import Service, Characteristic, UUID, Peripheral, constants


def event_handler(id, handle, data):
    global periph, service, notif_enabled

    if id == constants.EVT_GAP_CONNECTED:
        # indica 'connected'
        LED(1).on()
    elif id == constants.EVT_GAP_DISCONNECTED:
        # indica 'disconnected'
        LED(1).off()
        # reinicia o advertising
        periph.advertise(device_name="Temperature Sensor", services=[service])
    elif id == constants.EVT_GATTS_WRITE:
        # a escrita nesta Characteristic é para o CCCD
        if int(data[0]) == 1:
            notif_enabled = True
        else:
            notif_enabled = False


# começa com o LED(1) desligado
LED(1).off()

notif_enabled = False
uuid_service = UUID("0x181A")  # Serviço Environmental Sensing
uuid_temp = UUID("0x2A6E")  # Characteristic de temperatura

service = Service(uuid_service)
temp_props = Characteristic.PROP_READ | Characteristic.PROP_NOTIFY
temp_attrs = Characteristic.ATTR_CCCD
temp_char = Characteristic(uuid_temp, props=temp_props, attrs=temp_attrs)
service.addCharacteristic(temp_char)

periph = Peripheral()
periph.addService(service)
periph.setConnectionHandler(event_handler)
periph.advertise(device_name="Temperature Sensor", services=[service])

bus = I2C(1, scl=Pin(15), sda=Pin(14))
try:
    hts = HTS221(bus)
except OSError:
    from hs3003 import HS3003

    hts = HS3003(bus)

while True:
    if notif_enabled:
        temp = int(hts.temperature() * 100)
        temp_char.write(bytearray([temp & 0xFF, temp >> 8]))
    time.sleep_ms(100)

results matching ""

    No results matching ""