Example #1
0
    def __init__(self, name="esp32-fmpt", led=None):
        self.timer = Timer(-1)
        self.led = led
        self.irq_busy = False
        self.buzz = NOTIFYER(25, 13)
        self.i = 0
        self._is_connected = False
        self.alert_level = 0
        self._ble = bluetooth.BLE()
        self._ble.active(True)
        self._ble.irq(handler=self._irq)
        ((self._appear, self._manufact, self._model, self._firm),
         (self._alert_handle, )) = self._ble.gatts_register_services(
             (_DEV_INF_SERV_SERVICE, _IMMEDIATE_ALERT_SERVICE))
        self._connections = set()
        self._payload = advertising_payload(
            name=name,
            services=[_IMMEDIATE_ALERT_SERV_UUID],
            appearance=_ADV_APPEARANCE_GENERIC_KEYRING)
        # print(len(self._payload))
        # First 30 seconds (fast connection) Advertising Interval 20 ms to 30 ms
        print('Advertising in fast connection mode for 30 seconds...')
        self._advertise(interval_us=30000)
        self._ble.gatts_write(
            self._appear, struct.pack("h", _ADV_APPEARANCE_GENERIC_KEYRING))
        self._ble.gatts_write(self._manufact,
                              bytes('Espressif Incorporated', 'utf8'))
        self._ble.gatts_write(self._model, bytes(_MODEL_NUMBER, 'utf8'))
        self._ble.gatts_write(self._firm, bytes(_FIRMWARE_REV, 'utf8'))

        # Timeout 30 s
        self.start_adv_fast_timeout()
Example #2
0
 def __init__(self, ble, name="esp32-voltmeter"):
     self.ads_dev = MY_ADS(ADS1115, i2c)
     self.init_ads()
     self.ads_timer = Timer(-1)
     self.irq_busy = False
     self.min_volt = None
     self.typ_volt = None
     self.max_volt = None
     self.ads_dev.ads.conversion_start(7, channel1=self.ads_dev.channel)
     self.i = 0
     self._ble = bluetooth.BLE()
     self._ble.active(True)
     self._ble.irq(handler=self._irq)
     ((self._appear, self._manufact, self._model, self._firm), (self._volt_h,)) = self._ble.gatts_register_services(
         (_DEV_INF_SERV_SERVICE, _ADS_SERV_SERVICE))
     self._connections = set()
     self._payload = advertising_payload(
         name=name, services=[
             _ENV_SERV_UUID], appearance=_ADV_APPEARANCE_HID_DIGITAL_PEN
     )
     self._advertise(interval_us=30000)
     self._ble.gatts_write(self._appear, struct.pack(
         "h", _ADV_APPEARANCE_HID_DIGITAL_PEN))
     self._ble.gatts_write(self._manufact, bytes('Espressif Incorporated',
                                                 'utf8'))
     self._ble.gatts_write(self._model, bytes(_MODEL_NUMBER, 'utf8'))
     self._ble.gatts_write(self._firm, bytes(_FIRMWARE_REV, 'utf8'))
     volt_sample = (self.ads_dev.ads.raw_to_v(
         self.ads_dev.ads.alert_read()))
     volt_bin = int(volt_sample / (2**(-6)))
     self._ble.gatts_write(self._volt_h, struct.pack(
         "H", volt_bin))
Example #3
0
 def __init__(self, ble, name='mpy-temp'):
     self._ble = ble
     self._ble.active(True)
     self._ble.irq(handler=self._irq)
     ((self._handle,),) = self._ble.gatts_register_services((_ENV_SENSE_SERVICE,))
     self._connections = set()
     self._payload = advertising_payload(name=name, services=[_ENV_SENSE_UUID], appearance=_ADV_APPEARANCE_GENERIC_THERMOMETER)
     self._advertise()
 def __init__(self, ble, name="ESP32"):
     self._ble = ble
     self._ble.active(True)
     self._ble.irq(self._irq)
     ((self._handle_tx, self._handle_rx),) = self._ble.gatts_register_services((_LED_SERVICE,))
     self._connections = set()
     self._write_callback = None
     self._payload = advertising_payload(name=name, services=[_LED_UUID])
     self._advertise()
Example #5
0
 def __init__(self, ble, name="PenduloSensor"):
     self._ble = ble
     self._ble.active(True)
     self._ble.irq(self._irq)
     ((self._handle,),) = self._ble.gatts_register_services((_PENDULO_SERVICE,))
     self._connections = set()
     self._payload = advertising_payload(name=name, services=[_PENDULO_UUID])
     self.status = Pin(2,Pin.OUT)
     self._advertise()
Example #6
0
 def __init__(self, ble, name="HCR"):
     self._ble = ble
     self._ble.active(True)
     self._ble.irq(self._irq)
     ((self._handle, ), ) = self._ble.gatts_register_services(
         (_REMOTE_SERVICE, ))
     self._connections = set()
     self._payload = advertising_payload(name=name, services=[_REMOTE_UUID])
     self._advertise()
Example #7
0
 def __init__(self, ble, name="MicroPy"):
     self._ble = ble
     self._ble.active(True)
     self._ble.irq(self._irq)
     ((self._csc_msr_handle,
       self._csc_ftr_handle), ) = self._ble.gatts_register_services(PROFILE)
     self._connections = set()
     self._write_callback = None
     self._payload = advertising_payload(name=name, services=[CSC_UUID])
     self._advertise()
Example #8
0
 def __init__(self, rx_cb, central_name="mpy-uart"):
     self._ble = bluetooth.BLE()
     self._ble.active(True)
     self._ble.irq(self._irq)
     ((self._handle_tx, self._handle_rx),) = self._ble.gatts_register_services((_UART_SERVICE,))
     self._connections = set()
     self._rx_cb = rx_cb
     self._payload = advertising_payload(name=central_name, services=[_ADV_APPEARANCE_GENERIC_COMPUTER])
     # Optionally add services=[_UART_UUID], but this is likely to make the payload too large.
     # self._payload = advertising_payload(name=central_name, services=[_UART_UUID])
     self._advertise()
Example #9
0
 def __init__(self, ble, name='Nodemcu'):
     self._ble = ble
     self._ble.active(True)
     self._ble.irq(self._irq)
     ((self._handle,),) = self._ble.gatts_register_services((_ENV_SENSE_SERVICE,))
     self._connections = set()
     time.sleep_ms(500)
     self._payload = advertising_payload(
         name=name, services=[_ENV_SENSE_UUID], appearance=_ADV_APPEARANCE_GENERIC_AMBIENT_LIGHT
     )
     self._sd_adv = None
     self._advertise()
Example #10
0
 def __init__(self, ble, name='mpy-uart', rxbuf=100):
     self._ble = ble
     self._ble.active(True)
     self._ble.irq(handler=self._irq)
     ((self._tx_handle, self._rx_handle,),) = self._ble.gatts_register_services((_UART_SERVICE,))
     # Increase the size of the rx buffer.
     self._ble.gatts_write(self._rx_handle, bytes(rxbuf))
     self._connections = set()
     self._rx_buffer = bytearray()
     self._handler = None
     self._payload = advertising_payload(name=name, appearance=_ADV_APPEARANCE_GENERIC_COMPUTER)
     self._advertise()
Example #11
0
 def __init__(self, ble, name="mpy-coffee"):
     self._ble = ble
     self._ble.active(True)
     print('bt activated')
     self._ble.irq(self._irq)
     ((self._weight_handle,), (self._battery_handle,),) = self._ble.gatts_register_services(
         (_AUTOMATION_IO_SERVICE, _BATTERY_SERVICE)
     )
     self._connections = set()
     self._payload = advertising_payload(
         name=name, services=[_AUTOMATION_IO_UUID, _BATTERY_UUID], appearance=_ADV_APPEARANCE_GENERIC_WEIGHT_SCALE,
     )
     self._advertise()
Example #12
0
 def __init__(self, ble, name='mpy-uart', rxbuf=100):
     self._ble = ble
     self._ble.active(True)
     self._ble.irq(handler=self._irq)
     ((self._tx_handle, self._rx_handle,),) = self._ble.gatts_register_services((_UART_SERVICE,))
     # Increase the size of the rx buffer and enable append mode.
     self._ble.gatts_set_buffer(self._rx_handle, rxbuf, True)
     self._connections = set()
     self._rx_buffer = bytearray()
     self._handler = None
     # Optionally add services=[_UART_UUID], but this is likely to make the payload too large.
     self._payload = advertising_payload(name=name, appearance=_ADV_APPEARANCE_GENERIC_COMPUTER)
     self._advertise()
Example #13
0
    def __init__(self, ble, name='m5stack-speaker'):
        self._ble = ble
        self._ble.active(True)
        self._ble.irq(handler=self._irq)

        ((self._handle_audio, ),
         ) = self._ble.gatts_register_services(SERVICES)

        self._connections = set()
        self._payload = advertising_payload(name=name,
                                            services=[_DEVICE_UUID],
                                            appearance=_ADV_APPEARANCE_AUDIO)
        self._advertise()
Example #14
0
    def __init__(self,
                 ble,
                 speed_sensor_pin,
                 cadence_sensor_pin=None,
                 name="cheapensor",
                 debug=False):
        self._ble = ble
        self._ble.active(True)
        self._ble.irq(handler=self._irq)
        self._CSC_FEATURES = _CSC_FEATURE_WHEEL_REV_DATA
        if cadence_sensor_pin:
            self._CSC_FEATURES = _CSC_FEATURE_WHEEL_REV_DATA | _CSC_FEATURE_CRANK_REV_DATA
        ((
            self._handle_feature,
            self._handle_measurement,
        ), ) = self._ble.gatts_register_services((_CSC_SERVICE, ))
        self._connections = set()
        self._payload = advertising_payload(
            name=name,
            services=[_CSC_SERVICE_UUID],
            appearance=_ADV_APPEARANCE_CYCLING_SPEED_CADENCE_SENSOR)
        # Write the feature
        self._ble.gatts_write(self._handle_feature,
                              struct.pack("<h", self._CSC_FEATURES))
        self._advertise()

        self._cumulative_wheel_revolutions = 0
        self._last_wheel_event_time = 0
        self._cumulative_crank_revolutions = 0
        self._last_crank_event_time = 0

        self._debug = debug

        # IR Speed Sensor
        self.speed_sensor = Pin(speed_sensor_pin, Pin.IN)
        self.speed_sensor.irq(trigger=Pin.IRQ_RISING,
                              handler=self.speed_sensor_irq)
        if cadence_sensor_pin:
            self.cadence_sensor = Pin(cadence_sensor_pin, Pin.IN)
            self.cadence_sensor.irq(trigger=Pin.IRQ_RISING,
                                    handler=self.cadence_sensor_irq)

        # Use a timer to periodically send out data.
        self.enable_transmit = False
        timer3 = Timer(3)
        timer3.init(period=1000,
                    mode=Timer.PERIODIC,
                    callback=self.arm_measurement)

        if debug:
            print("Initialised CSC sensor")
Example #15
0
 def __init__(self, name, config):
     self._config = config
     self._ble = bluetooth.BLE()
     self._ble.active(True)
     self._ble.irq(handler=self._irq)
     services = self.constructUUIDList()
     ((self._variables), ) = self._ble.gatts_register_services(services)
     self._connections = set()
     self._handler = None
     #...
     # Optionally add services=[_UART_UUID], but this is likely to make the payload too large.
     self._payload = advertising_payload(
         name=name, appearance=_ADV_APPEARANCE_GENERIC_COMPUTER)
     self._advertise()
Example #16
0
 def __init__(self, opc, name="ybb", rxbuf=1024):
     Consumer.__init__(self)
     self._ble = BLE()
     self._ble.active(True)
     self._ble.irq(self._irq)
     self._ble.config(gap_name = name[:16])
     ((self._tx_handle, self._rx_handle),) = self._ble.gatts_register_services((_UART_SERVICE,))
     # Increase the size of the rx buffer and enable append mode.
     self._ble.gatts_set_buffer(self._rx_handle, rxbuf, True)
     self._connections = {}
     self._rx_buffer = bytearray()
     self._opc = opc
     # Optionally add services=[_UART_UUID], but this is likely to make the payload too large.
     self._payload = advertising_payload(name=name[:16], appearance=_ADV_APPEARANCE_GENERIC_COMPUTER)
     self._advertise()
Example #17
0
    def build_mi_sdadv(self, density):
        
        uuid = 0xFE95
        fc = 0x0010
        pid = 0x0002
        fcnt = 0x01
        mac = self._ble.config('mac')
        objid = 0x1007
        objlen = 0x03
        objval = density

        service_data = struct.pack("<3HB",uuid,fc,pid,fcnt)+mac+struct.pack("<H2BH",objid,objlen,0,objval)
        print("Service Data:",service_data)
        
        return advertising_payload(service_data=service_data)
 def __init__(self, ble, name="covid19"):
     self._ble = ble
     self._ble.active(True)
     self._ble.irq(handler=self._irq)
     ((self._handle, ), ) = self._ble.gatts_register_services(
         (_ENV_SENSE_SERVICE, ))
     self._connections = set()
     #        name = "covid" + ubinascii.hexlify(b'~\xd8\xc6\x00').decode('utf-8')
     name = "covid" + str(urandom.getrandbits(30))
     self.name = name
     self._payload = advertising_payload(
         name=name,
         services=[_ENV_SENSE_UUID],
         appearance=_ADV_APPEARANCE_GENERIC_THERMOMETER)
     self._advertise()
Example #19
0
    def __init__(self, ble, name="ESP32"):
        self._ble = ble
        self._ble.active(True)
        self._ble.irq(self._irq)

        ((self._handle_io, ), ) = self._ble.gatts_register_services(
            (_MIDI_SERVICE, ))

        # Default setting is to clobber the characteristic value with the latest
        # This enables buffering of MIDI messages sent in rapid succession
        self._ble.gatts_set_buffer(self._handle_io, 32, True)

        self._connections = set()
        self._write_callback = None
        self._payload = advertising_payload(name=name, services=[_MIDI_UUID])
        self._advertise()
 def __init__(self, ble, name="mpy-temp"):
     self._ble = ble
     self._load_secrets()
     self._ble.irq(self._irq)
     self._ble.config(bond=True)
     self._ble.config(le_secure=True)
     self._ble.config(mitm=True)
     self._ble.config(io=_IO_CAPABILITY_DISPLAY_YESNO)
     self._ble.active(True)
     self._ble.config(addr_mode=2)
     ((self._handle,),) = self._ble.gatts_register_services((_ENV_SENSE_SERVICE,))
     self._connections = set()
     self._payload = advertising_payload(
         name=name, services=[_ENV_SENSE_UUID], appearance=_ADV_APPEARANCE_GENERIC_THERMOMETER
     )
     self._advertise()
Example #21
0
    def __init__(self, ble, name='mpy-m5stack'):
        self._ble = ble
        self._ble.active(True)
        self._ble.irq(handler=self._irq)

        (
            (self._handle_accel, self._handle_mag, self._handle_gyro,
             self._handle_temp),
            (self._handle_keys, ),
            (self._handle_display, ),
        ) = self._ble.gatts_register_services(SERVICES)

        self._connections = set()
        self._payload = advertising_payload(name=name,
                                            services=[_DEVICE_UUID],
                                            appearance=_ADV_APPEARANCE_MPU9250)
        self._advertise()
Example #22
0
 def __init__(self, ble, name="ulora"):
     self._ble = ble
     self._ble.active(True)
     self._ble.irq(handler=self._irq)
     ((
         self._handle_tx,
         self._handle_rx,
     ), ) = self._ble.gatts_register_services((_UART_SERVICE, ))
     self._ble.gatts_set_buffer(self._handle_tx, 200, True)
     self._ble.gatts_set_buffer(self._handle_rx, 200, True)
     self._connections = set()
     self._write_callback = None
     self._payload = advertising_payload(
         name=name,
         services=[_UART_UUID],
     )
     self._advertise()
Example #23
0
 def __init__(self, ble, name):
     """
     object constructor
     :param ble: instancia de BLE
     :param name: (string) nombre con el que se va a publicitar
     """
     self._ble = ble
     self._ble.active(True)
     self._connections = set()
     self._ble.irq(self._irq)
     ((self._handle, ), ) = self._ble.gatts_register_services(
         (_ENV_SENSE_SERVICE, ))
     self._connections = set()
     self._payload = advertising_payload(
         name=name,
         services=[_ENV_SENSE_UUID],
         appearance=_ADV_APPEARANCE_GENERIC_THERMOMETER)
     self._advertise()
    def build_mi_sdadv(self, density):
        uuid = 0xFE95
        fc = 0x0010
        pid = 0x0002
        fcnt = 0x01
        # 返回设备的MAC地址
        mac = self._ble.config('mac')
        objid = 0x1007
        objlen = 0x03
        objval = density

        # struct.pack 按照格式字符串 fmt 压缩参数 v1, v2, ... 。返回值是参数编码后的字节对象。
        service_data = struct.pack("<3HB", uuid, fc, pid,
                                   fcnt) + mac + struct.pack(
                                       "<H2BH", objid, objlen, 0, objval)
        print("Service Data:", service_data)

        return advertising_payload(service_data=service_data)
Example #25
0
 def __init__(self, ble, name='HEN'):    # HiveEyesNode
     """
     Start BLE & Advertising
     """
     #self._reading = reading  # last_reading from datalogger.storage
     self._ble = ble
     print('Starting BLE')
     self.start()    
     self._ble.irq(handler=self._irq)
     ((self._BS_handle,),(self._WS_handle,),(self._ES_HUM_handle, self._ES_TEMP_handle,), \
         (self._TB_T01_handle, self._TB_T02_handle, self._TB_T03_handle, self._TB_T04_handle, \
          self._TB_T05_handle, self._TB_T06_handle, self._TB_T07_handle, self._TB_T08_handle, \
          self._TB_T09_handle, self._TB_T10_handle,) ,) \
         = self._ble.gatts_register_services(_SERVICES)
     self._connections = set()
     # advertise that we are here and what services we provide
     self._payload = advertising_payload(name=name, services=_ADV_SERVICES, appearance=_ADV_APPEARANCE_GENERIC_WEIGHT_SCALE)
     print('Start advertising')
     self._advertise()
Example #26
0
def _create_advertising_payload():
    return advertising_payload(name='micropython-esp32', services=[UUID(0x180F)], appearance=BATTERY_SERVICE_APPEARANCE)
Example #27
0
        conn_handle, attr_handle = data
        value = ble.gatts_read(attr_handle)
        value = int.from_bytes(value, "little")
        r = value & 0xFF
        g = (value >> 8) & 0xFF
        b = (value >> 16) & 0xFF
        dots[0] = (r, g, b)


# https://docs.micropython.org/en/latest/library/ubluetooth.html#ubluetooth.BLE.gatts_register_services
# No official protocol used, so I need random UUID as a service and
# characteristic
ble_service = (
    bluetooth.UUID("aa4a619f-04ea-43ac-854a-7e49cd1437d9"),
    ((bluetooth.UUID("5cbed0dc-eeb2-4145-a297-a03ccf464563"),
      bluetooth.FLAG_WRITE), ),
)

# Initialize the dotstar (pins used by TinyPICO's builtin one)
spi = SPI(baudrate=50000, sck=Pin(12), mosi=Pin(2), miso=Pin(19))
dots = DotStar(spi, 1, brightness=0.5)  # Just one DotStar, half brightness

# Initialize bluetooth
ble = bluetooth.BLE()
ble.irq(irq)
ble.active(True)
ble.gatts_register_services((ble_service, ))
ble.gap_advertise(100,
                  adv_data=advertising_payload(name="BLE-led",
                                               services=(ble_service[0], )))
Example #28
0
ble = bluetooth.BLE()
ble.active(True)
ble.irq(bt_irq)
ble.config(gap_name='Bosu')

# configure the services that will be advertised
ACCEL_UUID = bluetooth.UUID('7ED5A5BC-8013-4753-B199-0A364D52E5DE')
ACCEL_CHAR = (
    bluetooth.UUID('F477FD95-41F0-4C73-9093-5DA7DC624DF0'),
    bluetooth.FLAG_READ | bluetooth.FLAG_NOTIFY,
)
ACCEL_SERVICE = (
    ACCEL_UUID,
    (ACCEL_CHAR, ),
)
SERVICES = (ACCEL_SERVICE, )

((accel, ), ) = ble.gatts_register_services(SERVICES)

connections = set()

# this advertising payload can't be too long
payload = advertising_payload(name='Bosu Ballers')
ble.gap_advertise(500000, adv_data=payload)

while True:
    for conn in connections:
        xyz = imu.accel.xyz
        ble.gatts_notify(conn, accel, struct.pack('<fff', *xyz))
    time.sleep_ms(100)
Example #29
0
    bluetooth.UUID("9138f9c0-9427-4299-85f3-7aa97b0d0c46"),
    _FLAG_READ | _FLAG_NOTIFY,
)
_UART_RX = (
    bluetooth.UUID("7a47b14d-04c5-440c-b701-c5ed67789dff"),
    _FLAG_WRITE | _FLAG_WRITE_NO_RESPONSE,
)
_UART_SERVICE = (
    _UART_UUID,
    (_UART_TX, _UART_RX),
)

BLE = bluetooth.BLE()
BLE.active(True)
BLE.gatts_register_services((_UART_SERVICE,))
payload = advertising_payload(name="remote", services=[_UART_UUID])


def ble_handler(event: int, data) -> None:
    print("Event: {event}, data: {data}".format(event=event, data=data))


# def init_ble() -> None:
#     ble = bluetooth.BLE()
#     ble.active(True)
#     # ble.irq(ble_handler)
#     ble.gap_connect()


def main() -> None:
    button_pressed = None
Example #30
0
 def __init__(self, name="esp32-DFU", led=None):
     self.timer = Timer(-1)
     self.led = led
     self.irq_busy = False
     self._is_connected = False
     self._image_size = 0
     self._image_type = 0
     self._opcode = 0
     self._resp_opcode = 0x10
     self._opcodes_dict = {'START_DFU': 0x01,
                           'Initialize DFU Parameters': 0x02,
                           'Receive Firmware Image': 0x03,
                           'Validate Firmware': 0x04,
                           'Activate Image and Reset': 0x05,
                           'Reset System': 0x06,
                           'Report Received Image Size': 0x07,
                           'Packet Receipt Notification Request': 0x08,
                           'Response Code': 0x10,
                           'Packet Receipt Notification': 0x11}
     self._opcode_rev = {v: k for k, v in self._opcodes_dict.items()}
     self._response_values = {'Success': 0x01,
                              'Invalid State': 0x02,
                              'Not Supported': 0x03,
                              'Data Size Exceeds Limit': 0x04,
                              'CRC Error': 0x05,
                              'Operation Failed': 0x06}
     self._dfu_image_type_codes = {0x00: 'No Image',
                                   0x01: 'SoftDevice',
                                   0x02: 'Bootloader',
                                   0x03: 'SoftDevice-Bootloader',
                                   0x04: 'Application'}
     self._init_packet_codes = {0x00: 'Receive Init Packet',
                                0x01: 'Init Packet Complete'}
     self._init_packet = 0
     self._name_file_packet = True
     self._filename = b''
     self._total_image_size = 0
     self._received_image_len = 0
     self._n_packet = 0
     self._image_checksum = 0
     self._ble = bluetooth.BLE()
     self._ble.active(True)
     self._ble.config(gap_name='ESP32-DFU')
     self._ble.irq(handler=self._irq)
     ((self._appear, self._manufact, self._model, self._firm),
         (self._dfu_control_point, self._dfu_packet)) = self._ble.gatts_register_services(
         (_DEV_INF_SERV_SERVICE, _DEVICE_FIRMWARE_UPDATE_SERVICE))
     self._connections = set()
     self._payload = advertising_payload(
         name=name, services=[
             _DEV_INF_SERV_UUID], appearance=_ADV_APPEARANCE_GENERIC_KEYRING
     )
     print(len(self._payload))
     # 60 seconds (fast connection) Advertising Interval 20 ms to 30 ms
     print('Advertising in fast connection mode for 60 seconds...')
     self._advertise(interval_us=30000)
     self._ble.gatts_write(self._appear, struct.pack(
         "h", _ADV_APPEARANCE_GENERIC_KEYRING))
     self._ble.gatts_write(self._manufact, bytes('Espressif Incorporated',
                                                 'utf8'))
     self._ble.gatts_write(self._model, bytes(_MODEL_NUMBER, 'utf8'))
     self._ble.gatts_write(self._firm, bytes(_FIRMWARE_REV, 'utf8'))
     self._ble.gatts_set_buffer(self._dfu_packet, 512, True)
     # Timeout 60 s
     self.start_adv_timeout()