Hey everyone!
I’m building an app for my college project.
I need to send data via Bluetooth every 2 milliseconds (500 [Hz]) or so, and save that data.
So far I have everything running and performing well, the ESP32 (the microcontroller I use to send the data with) sends everything in 2 milliseconds ±.
There is a problem with one thing: The data isn’t being saved at 500 [Hz] speed.
When I completely remove the Bluetooth from the blocks, I can get 500 [Hz] rate of data saving.
But when I use Bluetooth, the speed is reduced to 100 [Hz], 5 times slower!
I checked the time difference between the beginning of the timer, and the end and I see only 3~4 milliseconds of delay (which is not optimal, but tolerable, I can live with 250 [Hz]).
Can someone help me to understand, why I got much lower saving rate then I’m supposed to get?
We would need to see your Blocks Aviel but you certainly can’t get an App to receive and save streamed data so fast on an Android device like a smartphone.
Question: Why do you need to save data every 2 milliseconds? Let’s say that is achieved - you have then got 150000 rows/items of data in five minutes!
In an ideal world, all the file appending would be done via a single append block. There is so much going on in the Clock1 Timer Block and that is where the delay is.
You haven’t explained why the data needs to be processed so fast. There does not appear to be any data processed that would warrant it. Closer to 0.5 seconds would be more realistic if the plotting is live.
1)Set the data send time interval on the bluetooth device to 1 second (1000 milliseconds) and set the App Clock 1 Timer to 800 milliseconds. When everything is working, those values can be tweaked-down (trial and error) but the App time interval must be about 20% faster than the bluetooth device.
We do not know what device you are using so can’t give advice on it’s script other than to say you must ensure the End Of Data flag used by the script is known by the App.
Thanks for the reply!
I checked as you suggested, and I found that the ESP32 (the micro controller I use to send the data) is working well if I send data every 30 milliseconds, so I packed all the data that I need to send to one string, and now I read it in the appinventor every 10 milliseconds.
I have another question: Is there a way to keep the saved data directly to the phone’s SD card?
Because currently I can only save it to the phone’s internal memory.
If you hover your mouse over any block before selecting it to be used, a description of what it does is displayed in tooltip format. So, do that with the Save File Block and it describes how to save files where you need them.
One point to watch out for - Android’s SD drive is, by default, a virtual drive built into the phone, and that’s not the same as a removable SD Card.