Уже отвечал выше.
миллис считает по 1 мс, соответственно быстрее 1 КГц на нем не получить
да и те рваные,так что только на таймере делать задержку
Ну т.е. примерно 200к данных.
Мне кажется, SD - не лучшее решение, когда нужна высокая скорость записи. А тем более - если нужно гарантированное время, в течение которого эта запись осуществится. ФС, да еще и допускающая фрагментацию, дает очень большой разброс в продолжительности процесса записи.
Я бы посоветовал что-то вроде ESP-PSRAM64 - микросхема емкостью 8 Мбайт, подключаемая по SPI.
Работать с ней намного проще, чем с SD, поместится на нее до 4 млн двухбайтовых записей, чего, судя по всему, Вам вполне достаточно. Но самое главное - цикл записи или чтения имеет гарантированную продолжительность, не подверженную разбросу. И, кстати, этот вид памяти не подвержен износу, что характерно для flash-памяти, используемой в SD.
и нажатием кнопки слить все данные в SQL, а вот с базой можно делать всё что хочешь
У меня модуль esp32 16MB, spiffs на ней. Я не знаю, как по другому использовать эту память.
Я советую, если есть возможность, на первом этапе использовать проводной COM порт. Со скоростью 115200 не должно быть проблем ни на передающей ни на приемной стороне. Если передавать байтами, по 2 байта на отсчет, то для 5КГц хватит. Когда определитесь с алгоритмом обработки и опробуете его для разных скоростей и т.д. тогда посчитаете точнее, какая реально нужна скорость при прямой передаче, или какой буфер записывать и как часто его передавать и т.д.
У Вас какая цель, решить задачу или использовать конкретный вид памяти?
кстати есть модули с PSRAM но поскромнее, а себе заказывал с дисплеем 4.3", залитый тестовый скетч показывает 66 fps via SPI
Доброго времени суток!
Все попытки получать сначала сохранять данные, а потом передавать не дали желаемого результата.
Не знаю, как правильно сделать, создавать новую тему или лучше продолжить здесь.
Надо так:
- из приложения (с телефона или компьютера) отсылаю команду на сбор данных,
- когда данных достаточно из приложения останавливаю сбор данных.
Чтобы так сделать, наверное, нужно использовать FreeRTOS. Для меня это совсем космос.
Нашел пример c BLE Service
[ESP32:Примеры/Android-приложение, коммуницирующее через BLE: управление выходными контактами и показ данных, считанных датчиком / Онлайн справочник - wikihandbk.com]
Пытаюсь сделать, чтобы по команде из приложения (1), ESP32 возвращала данные.
Пожалуйста, помогите.
#include <BLEServer.h>
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#define SERVICE_UUID "C6FBDD3C-7123-4C9E-86AB-005F1A7EDA01"
#define CHARACTERISTIC_UUID_RX "B88E098B-E464-4B54-B827-79EB2B150A9F"
#define CHARACTERISTIC_UUID_TX "D769FACF-A4DA-47BA-9253-65359EE480FB"
BLECharacteristic *pCharacteristic;
bool deviceConnected = false;
// функции обратного вызова, которые будут запускаться при подключении и отключении BLE-клиента от BLE-сервера:
class MyServerCallbacks: public BLEServerCallbacks
{
void onConnect(BLEServer* pServer)
{
deviceConnected = true;
};
void onDisconnect(BLEServer* pServer)
{
deviceConnected = false;
}
};
// функция обратного вызова, которая будет запускаться при получении нового значения от Android-приложения:
class MyCallbacks: public BLECharacteristicCallbacks
{
void onWrite(BLECharacteristic *pCharacteristic)
{ std::int rxValue = pCharacteristic->getValue();
if(rxValue == 1)
{
for (i=0; i<1024; i++)
{
// задаем новое значение для характеристики:
pCharacteristic->setValue(AnalogRead(34));
// отправляем значение Android-приложению:
pCharacteristic->notify();
delaymicroseconds(200);
}
}
}
};
void setup() {
// создаем BLE-устройство:
BLEDevice::init("ACC_BT");
// создаем BLE-сервер:
BLEServer *pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
// Создаем BLE-сервис:
BLEService *pService = pServer->createService(SERVICE_UUID);
// Создаем BLE-характеристику:
pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_TX,BLECharacteristic::PROPERTY_NOTIFY);
pCharacteristic->addDescriptor(new BLE2902());
BLECharacteristic *pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_RX,BLECharacteristic::PROPERTY_WRITE);
pCharacteristic->setCallbacks(new MyCallbacks());
// Запускаем сервис:
pService->start();
// Начинаем рассылку оповещений:
pServer->getAdvertising()->start();
}
void loop()
{};
Код вставлен не верно. Обрамлять нужно тем, что расположено на кнопке «ё» на клавиатуре компьютера.
Спасибо! Туплю после праздников.