Я создаю беспроводной датчик ppg в качестве модуля для своего старшего инженерного проекта, но изо всех сил пытаюсь добиться адекватной скорости передачи данных через Bluetooth. Здесь вы можете видеть, что я пытаюсь сохранить 10 секунд данных в буфере (с частотой дискретизации 125 Гц). Затем я распечатываю каждый из них через Bluetooth на свое мобильное устройство.
Характеристики Bluetooth чипа По оценкам, скорость передачи данных составляет около 2 Мбит/с, и, несмотря на это, простая передача всех 1250 целых чисел занимает почти 4 минуты.
Как можно ускорить время печати так, чтобы моя скорость передачи данных составила 125 Гц, и мне не нужно сидеть и ждать по 4 минуты каждые 10 секунд поступления данных?
Я бы предпочел, чтобы данные печатались в режиме реального времени, но при этом пытался выполнение этого без сбора в буфере вызывало пропуски в сигнале. По крайней мере, с буфером, который у меня сейчас есть, 10 секунд непрерывны, но целью является печать сразу после чтения с моего датчика. У меня уже есть настройка приложения для iOS, которая анализирует данные на 10-секундные фрагменты и передает их в мою нейронную сеть, поэтому нет необходимости отправлять их 10-секундными фрагментами.
#include
#include
#include "MAX30105.h"
MAX30105 particleSensor;
BLEUart bleuart; // Add BLE UART service
void setup()
{
Serial.begin(230400);
Serial.println("Initializing...");
// Start I2C
Wire.begin();
// Initialize sensor
if (!particleSensor.begin(Wire, I2C_SPEED_FAST))
{
Serial.println("ERROR: MAX30102 not found.");
while (1);
}
Serial.println("MAX30105 initialized.");
// Configure sensor
particleSensor.setup(0x1F, 8, 2, 3200, 69, 4096); // Configure with specific settings
Bluefruit.begin();
Bluefruit.setTxPower(4);
Bluefruit.Periph.setConnInterval(9, 16);
// Initialize BLE UART service
bleuart.begin();
// Start advertising
startAdv();
}
void startAdv(void)
{
Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit.Advertising.addTxPower();
Bluefruit.Advertising.addService(bleuart); // Include BLE UART service
Bluefruit.Advertising.addName();
Bluefruit.Advertising.restartOnDisconnect(true);
Bluefruit.Advertising.setInterval(32, 244);
Bluefruit.Advertising.setFastTimeout(30);
Bluefruit.Advertising.start(0);
}
void loop() {
static unsigned long lastSample = 0;
unsigned long currentTime = micros();
static unsigned int numSamples = 0;
static unsigned long last1250 = 0;
// Buffer for 1250 compressed values
static uint16_t dataBuffer[1250] = {0}; // Using uint16_t since I'm only storing the middle 5 digits
if (currentTime - lastSample >= 8000) {
// Get sensor data
uint32_t irValue = particleSensor.getIR();
// Compress the value
uint16_t compressedValue = (irValue % 100000) / 10; // Keep only the middle 5 digits
Serial.println(compressedValue);
// Store the compressed value in the buffer
if (numSamples < 1250) {
dataBuffer[numSamples] = compressedValue;
numSamples++;
}
lastSample = currentTime;
}
if (numSamples >= 1250) {
// Print elapsed time for 1250 samples to Serial
Serial.print("Starting Bluetooth Transfer (1250 samples collected), Time: ");
Serial.println(micros() - last1250);
last1250 = micros();
// Transmit the buffer data
for (int i = 0; i < 1250; i++) {
bleuart.println(dataBuffer);
}
Serial.println("Bluetooth Transfer Complete");
// Reset counters
numSamples = 0;
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... sy-nrf5284
Передача данных с фиксированной скоростью по Bluetooth с низким энергопотреблением с помощью крошечного nRF52840 ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Создайте Bluetooth-сервер BLE GATT с низким энергопотреблением с помощью .NET C#
Anonymous » » в форуме C# - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-