Нужен совет по оптимизации чтения последовательных байтов
Я считываю некоторые последовательные данные устройства и публикую значения в MQTT. Для этого используется ESP8266.
В настоящее время я запрашиваю последовательное устройство, отправляя команду и анализируя все значения байтов по отдельности, как это сделать лучше?
разбор каждого байта выполняется следующим образом:
float Heat = (float)data[38];
sprintf(mqtt_topic, "%s/%s", mqtt_topic_base, "Temp"); mqtt_client.publish(mqtt_topic, String(Temp).c_str());
float Power = (float)data[39];
......
..... and etc...
@Vaikis2006, 👍0
1 ответ
Лучший ответ:
▲ 1
В принципе можно использовать свой способ, но простое улучшение состоит в том, чтобы изменить магические числа (38, 39) на константы или определить:
const int offset_heat = 38;
…
float Heat = (float)data[offset_heat];
или определение:
#define OFFSET_HEAT 38
…
float Heat = (float)data[OFFSET_HEAT];
Если все значения последовательны, вы можете оставить переменную для чтения значений:
int offset = 38; // Обычно начинается с 0, если вы читаете значения с самого начала
float heat = (float) readByte(&offset);
…
int readByte(uint8_t* offset)
{
int value = data[*offset];
(*offset)++;
return value;
}
Это увеличивает смещение после считывания значения.
Некоторые замечания:
- Принято не использовать заглавные буквы для локальных переменных (поэтому замените Heat на Heat)
- Вы не используете переменную Heat в
sprintf
, возможно, это сделано намеренно.
,
@Michel Keijzers
Смотрите также:
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
- ESP8266 не подключается к Wi-Fi
- AT-команда не отвечает на последовательный монитор
- Разница между этими двумя платами NodeMCU?
извините, в sprintf я не изменил этот пример, ошибка с моей стороны :), @Vaikis2006
Нет проблем, для решения это не меняется, @Michel Keijzers