Почему последовательное устройство не отправляет правильный начальный код?
Не могу сделать какое-либо чтение от PMS5003, подключенного к ESP32.
При попытке отладить эту проблему у меня есть очень минимальная настройка. Только PMS5003 подключен к ESP32 и использует следующий код.
#include <Arduino.h>
#define PMS_DEBUG
#include <PMSerial.h>
SerialPM pms(PMSx003,Serial2)
void setup() {
Serial.begin(9600);
Serial2.begin(9600);
pms.init();
}
void loop() {
pms.read();
Serial.println(pms.pm25);
Serial.println(pms.status);
}
pms25
всегда возвращает 0
. Когда PMS5003 правильно подключен к ESP32, статус
всегда возвращает "Неправильный запуск сообщения".
Почему устройство посылает неправильный стартовый код и какие шаги я могу предпринять для его отладки?
Я пробовал подключаться к различным последовательным контактам, в том числе следуя последовательному примеру программного обеспечения ESP32, предоставленному библиотекой PMSerial. Во всех случаях это просто выглядит так, как будто датчик PMS5003 ничего не передает - действительно, никакие вентиляторы не включаются, и от устройства вообще нет никаких признаков жизни. Однако я новичок и не знаю достаточно, чтобы сказать, является ли это проблемой с устройством, библиотекой или чем-то, что я сделал.
Очень благодарен за предложения, как это отладить.
Правка
пример последовательных данных
0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0xC0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x6D, 0x0, 0xE0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x97, 0x0, 0x0, 0x0, 0xF8,
0x0, 0x0, 0x0, 0x0, 0xA, 0x0, 0x0, 0x1, 0x0, 0xB0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xF0, 0x0, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0xBB, 0x1, 0x0, 0x5F, 0x0,
@Andy Harvey, 👍1
Обсуждение0
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Как выбрать альтернативные контакты I2C на ESP32?
- Драйверы для чипа последовательного порта CH9102X
- Как преобразовать форматированный оператор print в строковую переменную?
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi
- Питание esp32cam от аккумулятора
- Контакты RX и TX на esp32
- ESP32: отключить детектор отключения питания
Вы уверены, что устройство работает со скоростью 9600 бод?, @chrisl
Было бы полезно, если бы вы знали, какую библиотеку используете. Я нашел вот это https://github.com/avaldebe/PMserial. Автор приводит несколько примеров. Каждый из них проверяет состояние pms с помощью "if (pms)` после "read". и используйте данные только в том случае, если это правда. Так что, возможно, датчик постоянно считывается, но требуется некоторое время, чтобы генерировать новые данные. Поэтому вы должны проверить, являются ли данные действительными., @Peter Paul Kiefer
Похоже, датчик сигнализирует о том, что данные верны, отправив 0x42 в качестве начального байта. Я нашел проект Arduino, который использует только соединение seirial, без дополнительного драйвера, и они используют данные только в том случае, если получен этот 0x42. Вот ссылка: https://how2electronics.com/interfacing-pms5003-air-quality-sensor-arduino/, @Peter Paul Kiefer
спасибо @PeterPaulKiefer! `pms "никогда не является истинным, потому что начальный байт "0x42" никогда не получен. Я добавил выше пример данных, которые я получаю. Я дважды проверил все свои связи. Поскольку начальный байт не получен, следует ли мне предполагать, что с датчиком возникла проблема? Или есть другие возможные причины?, @Andy Harvey
спасибо @chrisl, в справочнике указана скорость передачи данных по умолчанию 9600 мбит / с. добавлены некоторые ссылки выше, @Andy Harvey
Можете ли вы показать нам, как вы подключили его к ESP32?, @Majenko
Показанные вами байты содержат множество последовательностей последовательных битов. Пожалуйста, дважды проверьте свои соединения и снизьте скорость. У вас случайно нет осциллографа? Если да, проверьте линию и проверьте скорость., @the busybee
Извините за поздний ответ. Меня не уведомили, возможно, из-за того ! за Этим Именем?? Возможно (как упоминалось в других комментариях) скорость передачи данных установлена не по умолчанию. Если у вас есть доступ к oci, вы можете это проверить. В качестве альтернативы вы можете попробовать некоторые общие скорости передачи данных. Еще один хороший подход-добавить изображение вашей настройки и схемы. Затем у вас есть несколько отзывов, это также форма устранения проблем. Существуют некоторые правила, упомянутые в документации датчиков. Вы обращали на это внимание. (например, не подключайте СБРОС, если он не используется)., @Peter Paul Kiefer
спасибо всем за эти предложения. приношу извинения за медленный ответ, дела стали очень напряженными! Мне удалось позаимствовать несколько запасных компонентов для тестирования моего проекта. Оказывается, была неисправность в кабеле, который я использовал для подключения датчика PMS5003. Заменил кабель, все работает. Простое исправление, но я очень зол на себя за то, что не проверил это раньше!, @Andy Harvey