Page 1 of 1

Sending data from mobile device to micropython device over bluetooth

Posted: Fri Dec 25, 2020 10:48 pm
by digitalblur
Hi,

I am trying to understand the options for sending data to a micropython device over bluetooth from a mobile device. I want to send configuration data to this device from a mobile phone. I have the UART example working but is this the only option or is there another non-UART option?

Thanks in advance

Re: Sending data from mobile device to micropython device over bluetooth

Posted: Sun Dec 27, 2020 3:23 pm
by hcet14
What's your device? Does it got bluetooth?

Re: Sending data from mobile device to micropython device over bluetooth

Posted: Sun Dec 27, 2020 6:39 pm
by digitalblur
Yes Im using the dfrobot beetle esp32 here: https://www.dfrobot.com/product-1798.html

Bluetooth Protocols supported: BR/EDR/BLE standard of Bluetooth v4.2.

Is sending data over UART the only option? I only see an example for UART.

thanks

Re: Sending data from mobile device to micropython device over bluetooth

Posted: Sun Dec 27, 2020 8:18 pm
by hcet14
What do you want to do? Establish a wirelesss connection between ESP and your mobile? And then, what is the ESP supposed to do?

Re: Sending data from mobile device to micropython device over bluetooth

Posted: Sun Dec 27, 2020 8:54 pm
by digitalblur
I want to use my mobile to configure the software I have installed on the ESP device. For example, change wifi settings, change sleep time configuration, enable/disable software features, etc...

Is Bluetooth UART the only option? I have UART working to send data but I was told there is a non Bluetooth UART option for sending data to the device but I don't see any examples alternative to UART using micropython.

Re: Sending data from mobile device to micropython device over bluetooth

Posted: Mon Dec 28, 2020 1:29 am
by mattyt
Take a look at L2Cap; it's a way to perform connection-oriented transfers with BLE. It's worth noting that L2Cap is specified as the transfer protocol for BLE Object Transfer Service and, as such, is a key protocol in the BLE stack.

The problem you'll have is that this is a very recent addition to MicroPython, not particularly well documented (though the main methods are covered) and with no examples yet. However, it's an active area of development and I can help with some basic examples. Damien presented an overview at a recent Melbourne MicroPython Meetup but, unfortunately, we couldn't organise a recording of it at the time. He did mention he could repeat the session and record it, particularly if there's demand...

Briefly, L2Cap provides a bi-directional communication channel between two BLE devices. The channel is intended to be initiated and signalled by using standard GATT characteristics - for example in OTS a file can be requested using OLCP and OACP characteristics to select and operate on a file object.

I'm also not sure how solid the ESP32 L2Cap implementation is - we're using the STM32 WB55 and the Pyboard D. That said, the ESP32 was next on the list for support if it's not already there...

So, it's not yet a mature solution on MicroPython but probably the right one for sending data between two BLE devices.

Re: Sending data from mobile device to micropython device over bluetooth

Posted: Tue Dec 29, 2020 4:09 am
by digitalblur
Thanks mattyt, I think this makes sense. Since it uses Bluetooth standards a generic Bluetooth app such as nRF Connect should be able to utilize the L2Cap feature and send/receive data to the device, correct?

Im not super fluent with Bluetooth functionality but I am interested in trying to do this the right way. I am working on a prototype and this is one of the last pieces I need in order to do user testing. I am in contact with an app developer to build an app and Im trying to figure out what is the best way to move forward on this. Like I mentioned I have Bluetooth UART working for what I need but Im not sure if there are downsides to using this method (UART vs ?).

If you or someone else is able to provide a simple example for sending/receiving data using L2Cap I would definitely be interested in implementing this functionality.

thanks

Re: Sending data from mobile device to micropython device over bluetooth

Posted: Tue Dec 29, 2020 10:55 am
by Tupps
From an App Developers perspective, BLE is the easiest option for communicating with a device. An app developer has the APIs and the control to talk to the device. Using other protocols are difficult on to implement.

One other thing to look at is Web BLE which is a Chrome (as in browser) feature instead of building custom Apps. This will make your configure tool available to Windows/Mac/Linux via Chrome (although Linux isn't 100% on all versions) and Android. The only downside I have seen with WebBLE is that the some older versions of chrome setup a low MTU (think under 50 characters) which is a PITA for SSID passwords (which can be 63 character long). However this seems to have been fixed in the later builds on Android Chrome.

Only downside is the Web BLE isn't officially supported on iOS (there are a few options).

Re: Sending data from mobile device to micropython device over bluetooth

Posted: Mon Jan 11, 2021 12:14 am
by jimmo
digitalblur wrote:
Fri Dec 25, 2020 10:48 pm
I want to send configuration data to this device from a mobile phone. I have the UART example working but is this the only option or is there another non-UART option?
If you want to send configuration data then I suspect a UART (or L2CAP) are overkill. You can define a characteristic that you can read/write your configuration data from/to.

I've seen people do this with packed binary data, or json blobs, etc.

If your configuration is really huge (like kilobytes) then you could split it over multiple characteristics (or perhaps then look at something like l2cap or uart).

Re: Sending data from mobile device to micropython device over bluetooth

Posted: Sat Jan 30, 2021 6:41 am
by digitalblur
jimmo wrote:
Mon Jan 11, 2021 12:14 am

If you want to send configuration data then I suspect a UART (or L2CAP) are overkill. You can define a characteristic that you can read/write your configuration data from/to.

I've seen people do this with packed binary data, or json blobs, etc.

If your configuration is really huge (like kilobytes) then you could split it over multiple characteristics (or perhaps then look at something like l2cap or uart).
Thanks jimmo, this is an option I would like to explore but I could not find any examples of how to write to a characteristic with micropython, only read examples. Are there any examples someone can point me to?