Передача данных с фиксированной скоростью по Bluetooth с низким энергопотреблением с помощью крошечного nRF52840C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Передача данных с фиксированной скоростью по Bluetooth с низким энергопотреблением с помощью крошечного nRF52840

Сообщение Anonymous »

Я создаю беспроводной датчик 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»