Eric Pietrowicz's Build Log

Hey I’m Eric,
I’m a software developer working in the IoT space focusing mostly on BLE, WiFi, and cellular devices.

I’m starting this thread to practice getting a little more comfortable talking about my projects as I try to transition into consulting full time.

1 Like

The first project I’m going to track is a result of this itch I’ve had for a while when prototyping BLE products.

Working on firmware I always wish I had a polished mobile app, while working on mobile I always wish I had a polished peripheral.

I end up in script-land or sending custom payloads using a BLE dev tool like LightBlue.

So, I’m tinkering with a drag & drop “web builder” style BLE controller.

Support some generic components like a slider, color picker, button, graph, etc.

Assign a custom service / characteristic to each component. Characteristics under the same service will be grouped.

Here’s a short demo of it in its current state. I’ll open source everything once it’s in a good spot.

4 Likes

Useful!

1 Like

Cool! I’ve always wanted a simple config-driven phone UI for BLE devices. I’m aware of but haven’t used https://remotexy.com/ and there is https://play.google.com/store/apps/details?id=cloud.blynk but it doesn’t look free. Neither of these get you the experience of building it yourself however!

1 Like

Project update.

I was able to get most of the scaffolding done for how I will store the components and how they’ll interact with the Bluetooth service.

I have been working on implementing the slider component first. In hindsight I probably could’ve started with something a little easier… But, since the slider is able to interface with any characteristic type (read, write & notify) it was a great opportunity to get all of the interactions framed out.

I’m storing the global “component state” in the browser’s local storage. Your configuration will persist across refreshes. In the future it might be nice to have the option to import / export a file that contains your component configuration.

I had a hard time getting read, write, and notify to work together on the same component, but I think I found a workable solution. It will definitely need more testing.

I was worried that I would need the user to specify the data size (i.e. 8bit, 16bit, 32bit, etc.), but I think I found a way to guess at it on the fly. I would like to limit the necessary configuration upfront.

There’s a couple of really useful Web Bluetooth features that are hidden behind an “experimental features” flag in Chrome. I’m really trying hard to avoid using them. Fingers crossed they are widely released at some point.

Anyway, here’s the latest demo video of the slider working with my nRF52 Feather. In this case the slider is driving the built-in Neopixel LED brightness.

Next steps… more components!

1 Like