Понимание таблицы данных датчика газа HCHO
У меня есть газовый датчик, спецификация которого прилагается:
DS-HCHO
Теперь он говорит, что требуется связь UART (P2P), где он (модуль) ожидает фрейма данных перед отправкой фрейма данных на хост, который мне нужен.
Все, что я знаю, это то, что я могу отправить стартовый бит в I2C, но что мне делать дальше? Кроме того, если у меня есть несколько датчиков, как мне подключить их к ESP-32?
@Raj, 👍0
Обсуждение1 ответ
Лучший ответ:
Во-первых, вам необходимо обмениваться данными по UART, не I2C. Это означает использование Serial или какого-либо подобного объекта (в ESP32 вы можете определить свой собственный на любых контактах, которые хотите). Однако в техническом описании отсутствует одна важная часть информации: скорость передачи данных, поэтому вам придется угадать это и попробовать различные стандартные скорости передачи данных, пока не найдете ту, которая работает.
Тогда вы должны отправить инструкцию "Дайте мне данные". Затем модуль отвечает данными.
Например (не проверено):
HardwareSerial mySerial(1);
#define PIN_RX 21
#define PIN_TX 22
void setup() {
Serial.begin(115200);
mySerial.begin(9600, SERIAL_8N1, PIN_RX, PIN_TX); // Это тот, который вам нужно угадать, так как DS опускает его...
}
void setup() {
// Раз в секунду отправляем запрос на получение данных
static uint32_t ts = millis();
if (millis() - ts > 1000) { // Раз в секунду
ts = millis();
// "Дайте мне данные"
mySerial.print("\x42\x4d\x01\x00\x00\x00\x90");
}
// Когда поступило 10 или более байтов, предположим, что они введены правильно
// обрамляем и печатаем их. На самом деле он должен читать по одному байту за раз и
// ищем правильную последовательность запуска 0x42 0x4d 0x08 и только чтение
// оттуда, но это будет сервер для демонстрационных целей.
if (mySerial.available() >= 10) { // Ожидается, что будет возвращено 10 байт
uint8_t packet[10];
mySerial.readBytes(packet, 10);
Serial.print("ID: ");
Serial.println(packet[3]);
Serial.print("UNIT: ");
Serial.println(packet[4]);
Serial.print("VH: ");
Serial.println(packet[5]);
Serial.print("DHH: ");
Serial.println(packet[6]);
Serial.print("DLL: ");
Serial.println(packet[7]);
Serial.print("LRCH: ");
Serial.println(packet[8]);
Serial.print("LRCL: ");
Serial.println(packet[9]);
}
}
Спасибо. Ну очень помогло., @Raj
- Несколько датчиков I2C с одинаковым адресом
- Проблемы с подключением I2C на ESP8266 — 12F, какие контакты использовать?
- Мост I2C-UART в виде прорыва или в корпусе DIP
- Лазерный датчик ToF (VL53L0X) не работает
- MAX30100 не работает
- Последовательная связь между несколькими устройствами (или ардуино)
- I2C связь между Arduino Uno и Nodemcu32-s (ESP32)
- Когда дело доходит до связи UART-RS485, в чем разница между модулем "MAX485" и модулем "HW-0519"?
UART используется для связи типа rs232... это не I2C, @jsotola
В техническом описании сказано, что датчик ожидает байтов перед отправкой, покажите, должен ли я продолжить кодирование. Я не мог получить значения данных., @Raj
Шаг 1: Отправьте правильные байты данных. Шаг 2: Получите данные от модуля. Шаг 3: Прибыль., @Majenko
https://www.arduino.cc/reference/en/language/functions/communication/serial/, @Majenko