0

I'm trying to Connect directly esp32 BLE with mobile without the help of the Bluetooth serial Terminal app. I used Thonny IDE for coding. When I tried to connect directly with mobile here is the pop-up I got.

https://i.sstatic.net/fISYr.jpg

here is the code i used

from machine import Pin, Timer, SoftI2C
from time import sleep_ms
import ubluetooth
from esp32 import raw_temperature
from hdc1080 import HDC1080

class BLE():
    def __init__(self, name):   
        self.name = name
        self.ble = ubluetooth.BLE()
        self.ble.active(True)

        self.led = Pin(2, Pin.OUT)
        self.timer1 = Timer(0)
        self.timer2 = Timer(1)
        
        self.disconnected()
        self.ble.irq(self.ble_irq)
        self.register()
        self.advertiser()

    def connected(self):        
        self.timer1.deinit()
        self.timer2.deinit()

    def disconnected(self):        
        self.timer1.init(period=1000, mode=Timer.PERIODIC, callback=lambda t: self.led(1))
        sleep_ms(200)
        self.timer2.init(period=1000, mode=Timer.PERIODIC, callback=lambda t: self.led(0))   

    def ble_irq(self, event, data):
        if event == 1:
            '''Central disconnected'''
            self.connected()
            self.led(1)
        
        elif event == 2:
            '''Central disconnected'''
            self.advertiser()
            self.disconnected()
        
        elif event == 3:
            '''New message received'''            
            buffer = self.ble.gatts_read(self.rx)
            message = buffer.decode('UTF-8').strip()
            print(message)            
            if message == 'red_led':
                red_led.value(not red_led.value())
                print('red_led', red_led.value())
                ble.send('red_led' + str(red_led.value()))
            if message == 'read_temp':
                print(sensor.read_temperature(True))
                ble.send(str(sensor.read_temperature(True)))
            if message == 'read_hum':
                print(sensor.read_humidity())
                ble.send(str(sensor.read_humidity()))
           
    def register(self):        
        # Nordic UART Service (NUS)
        NUS_UUID = '6E400001-B5A3-F393-E0A9-E50E24DCCA9E'
        RX_UUID = '6E400002-B5A3-F393-E0A9-E50E24DCCA9E'
        TX_UUID = '6E400003-B5A3-F393-E0A9-E50E24DCCA9E'
            
        BLE_NUS = ubluetooth.UUID(NUS_UUID)
        BLE_RX = (ubluetooth.UUID(RX_UUID), ubluetooth.FLAG_WRITE)
        BLE_TX = (ubluetooth.UUID(TX_UUID), ubluetooth.FLAG_NOTIFY)
            
        BLE_UART = (BLE_NUS, (BLE_TX, BLE_RX,))
        SERVICES = (BLE_UART, )
        ((self.tx, self.rx,), ) = self.ble.gatts_register_services(SERVICES)

    def send(self, data):
        self.ble.gatts_notify(0, self.tx, data + '\n')

    def advertiser(self):
        name = bytes(self.name, 'UTF-8')
        self.ble.gap_advertise(100, bytearray('\x02\x01\x02') + bytearray((len(name) + 1, 0x09)) + name)
        
# test
i2c = SoftI2C(scl=Pin(22), sda=Pin(21))
sensor = HDC1080(i2c)
red_led = Pin(2, Pin.OUT)
ble = BLE("ESP32")

I can connect using the Bluetooth Serial Terminal app But My question is How can I connect directly without using Bluetooth serial terminal app

1
  • As your ESP32 device is BLE serial device, then you have no other option but to have application, that knows how to handle Serial communication. Commented Sep 12, 2022 at 14:42

1 Answer 1

1

I believe I saw this piece of code somewhere on the internet as well. Unfortunately this is an outdated code and it won't work with the current version of ubluetooth. This is a quick list of ubluetooth.BLE from MicroPython firmware "esp32-20220618-v1.19.1.bin"

>>> import ubluetooth

>>> dir(ubluetooth.BLE)

['__class__', '__name__', '__bases__', '__dict__', 'active', 'config', 'gap_advertise', 'gap_connect', 'gap_disconnect', 'gap_scan', 'gattc_discover_characteristics', 'gattc_discover_descriptors', 'gattc_discover_services', 'gattc_exchange_mtu', 'gattc_read', 'gattc_write', 'gatts_indicate', 'gatts_notify', 'gatts_read', 'gatts_register_services', 'gatts_set_buffer', 'gatts_write', 'irq']
Sign up to request clarification or add additional context in comments.

1 Comment

This does not provide an answer to the question. Once you have sufficient reputation you will be able to comment on any post; instead, provide answers that don't require clarification from the asker. - From Review

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.