Неверные символы в последовательном мониторе при подключении через USB 3.0

Я протестировал DHT11 + Arduino Uno с помощью очень простого примера-скетча. Плата Arduino была подключена к USB 3.0, и иногда я видел неправильные символы в последовательном мониторе, например, «Humidit?: _7%» вместо «Humidity: 37%». Этот странный эффект исчезал, когда я подключал плату к USB 2.0. Скорость передачи данных в коде всегда была такой же, как скорость передачи данных в настройках терминала.

Когда я увеличиваю скорость передачи данных, я вижу меньше плохих символов, но они не исчезают, пока Arduino подключен к USB 3.0.

Операционная система Ubuntu 20, это был первый раз, когда я подключил плату к USB 3.0. Это нормально?

Набросок:

/**
 * DHT11 Sensor Reader
 * This sketch reads temperature and humidity data from the DHT11 sensor and prints the values to the serial port.
 * It also handles potential error states that might occur during reading.
 *
 * Author: Dhruba Saha
 * Version: 2.1.0
 * License: MIT
 */

// Include the DHT11 library for interfacing with the sensor.
#include <DHT11.h>

// Create an instance of the DHT11 class.
// - For Arduino: Connect the sensor to Digital I/O Pin 2.
// - For ESP32: Connect the sensor to pin GPIO2 or P2.
// - For ESP8266: Connect the sensor to GPIO2 or D4.
DHT11 dht11(4);

void setup() {
  // Initialize serial communication to allow debugging and data readout.
  // Using a baud rate of 9600 bps.
  Serial.begin(9600);

  // Uncomment the line below to set a custom delay between sensor readings (in milliseconds).
  // dht11.setDelay(1500); // Set this to the desired delay. Default is 500ms.
}

void loop() {
  int temperature = 0;
  int humidity = 0;

  // Attempt to read the temperature and humidity values from the DHT11 sensor.
  int result = dht11.readTemperatureHumidity(temperature, humidity);

  // Check the results of the readings.
  // If the reading is successful, print the temperature and humidity values.
  // If there are errors, print the appropriate error messages.
  if (result == 0) {
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.print(" °C\tHumidity: ");
    Serial.print(humidity);
    Serial.println(" %");
  } else {
    // Print error message based on the error code.
    Serial.println(DHT11::getErrorString(result));
  }
}

, 👍1

Обсуждение

Вы используете внутренний последовательный приемопередатчик UNO, верно?, @timemage

@timemage Думаю, да, на данный момент я не знаю вариантов общения, кроме как по умолчанию, @Mik

Это действительно похоже на плохой кабель или плохой порт USB на ПК. Сам Arduino не знает разницы, 2.0 это или 3.0. Когда вы меняете с 2.0 на 3.0, вы используете тот же кабель, просто в другом порту на ПК?, @Delta_G

@Delta_G да, я использую тот же кабель. USB 3.0 находится на плате расширения PCI-E, но другие устройства (донглы BT и WiFi, флэш-карты) работают правильно с этим кабелем, этим портом и его соседями. Гораздо лучше, чем со встроенными портами 2.0 материнской платы., @Mik

Я все еще думаю, что проблема будет где-то на стороне ПК., @Delta_G


1 ответ


-1

Пожалуйста, проверьте, нет ли несоответствия скорости передачи данных. Я имею в виду, что вы определили serial.begin(9600) в своем коде. Откройте последовательный монитор, выбрав ту же скорость передачи данных. Если проблема не в этом, проверьте кабель. Если у вас другая операционная система, например Windows, проверьте также и всю настройку с ней.

,