On an impulse I had picked up a Nano ESP32 board a couple of months ago, thinking it would be great do try some simple device control stuff from my smartphone over Bluetooth. But I'm an iPhone user. Did I make a mistake?
If not a mistake then what are iOS users' favorite phone/tablet apps to use for serial data comms over Bluetooth and why?
Thanks all!
(it is only one board so if there are better options for me, it's OK, just say so)
Do any of these apps allow creating a simple set of button controls for a device (without an excess of nerdy data that I won't need after I'm done learning) so that I don't have to become an iOS Developer to have some semblance of an app for the device I'm controlling?
unfortunately not... you would have to look into ready made remote controls - I've seen some for typical robots (eg AVA BLE Remote on the App Store) but that might not meet your needs.
Hey @J-M-L et al, finally getting around to porting my stuff to BLE. Thanks for the pointers!
FYI...
The Bluefruit Connect app for iPhone seems handy for confirming that the example sketches actually work, sees UUIDs and "hello world" messages, but doesn't seem to do much else. Nothing that allows two-way comms? Maybe I am missing something obvious.
nRF Connect is all that and more, and allows two-way comms with the sketches. But, well, it's fiddly. I mean, it's great for proof of concept for sketches but as a UI, entering characters or codes and so on by hand is just not very convenient. I was hoping for something I could operate with gloves on.
AVA BLE Remote, the one that I thought seemed promising, doesn't show anything at all in its Bluetooth connection screen. I'm assuming it is locked down to just Bluno and Romeo boards?
MIT App Inventor looks like a disaster. I haven't even tried.
EDIT: Honorable mentions to LightBlue, which like nRF Connect allows some two-way comms, displays data nicely, and allows easily re-sending the last five pieces of data you've sent. But that data is volatile and lost when the app restarts.
Do I need to carry an Android phone just to use as a dedicated remote control??
Do I really need to become an Apple iPhone dev?? And enroll in the dev program so I don't have to re-deploy the app every effing week? Sheesh...
Near-term I'm thinking when I'm done experimenting with BLE stuff I started, maybe getting outside the box and adjusting my approach a bit to use WiFi. One simple page with the HTML buttons I need to control what needs to be controlled. P2P or setting it up the ESP32 as DHCP server could be yet another rabbit hole... but at least it's a rabbit hole that's closer to being in my old sysdamin/networking wheelhouse.
Hopefully by the end of the year my finances will improve and I can pick up a used Mini M2 for iPhone development.
I'm curious by the way, when fiddling around with BLE, I connect from one of the aforementioned apps, write some data, whatever, and if I disconnect, I have to reboot the ESP32 to be able to reconnect.
Normal?
Am I missing something??
I seem to recall others having similar experiences...
For the record, the behavior is exhibited even when just using the example code in ESP32 BLE Arduino -> BLE_write, totally unadulterated.
Compile and upload, MyESP32 appears listed in LightBlue or nRF Connect, I can write a few values, poke around, whatever, then when I back out back to the list of peripherals, MyESP32 is grey or gone, and I can't reconnect to it until I reboot the device (Nano ESP32).
It's getting late here but tomorrow I'll put one of these apps on an Android phone I have here and see if it does the same thing.
FYI @J-M-L , same results on Android, just using the BLE_Write example right out of the IDE as-is.
Looks like when the app disconnects, the BLE library doesn't know to resume or restart advertising. I'm guessing I'm gonna have to figure out how to trap for a disconnect event (is there even such a thing?) and circle back to pAdvertising->start();.
Or, give up on the native library and try the ArduinoBLE library or whatever.
I found one case where someone using that library still wound up putting the advertisement into loop(). Really??