Используя Python для чтения данных, полученных nodeMCU через последовательный порт USB, консоль данных отображает повторяющиеся данные

1
7

Я настроил свой nodeMCU на получение данных координат x, y, z. У меня есть code Python, настроенный на чтение данных через последовательный порт. Когда я использую ArduinoIDE и отслеживаю полученные данные, данные точны. Когда я делаю то же самое с помощью расширения последовательного монитора VScode, все, что я вижу, — это повторяющиеся данные. То же самое, когда я прохожу через code.

Для проверки я обновил code на MCU, чтобы вывести счетчик, который должен увеличиваться на 1 каждый цикл цикла. Проверил монитор. Arduino отображает ожидаемое приращение, в то время как code py и расширение на VScode показывают первые захваченные данные и повторяют их.

Я не понимаю, почему данные повторяются. Пожалуйста, помогите.

Система MacOS

Arduino - NodeMCU

code python

Монитор Arduino

Журнал Python

Я попытался создать инкрементный счетчик и вывести из nodeMCU вместо полученных данных. Что я пытался войти в python.

ArduinoIDE - монитор отобразил правильный инкремент Журнал Python - отобразил одни данные при повторе.

Я попробовал добавить задержки с обеих сторон, чтобы посмотреть, изменятся ли данные. Но это не помогло Я попробовал очистить последовательный порт с обеих сторон по одному, затем оба, чтобы проверить, изменится ли записанный результат. Добавил буфер для serial.read(). не сработало Связал readline(), чтобы посмотреть, изменится ли что-нибудь. ничего не вышло.

Все попытки зарегистрировали одни данные при повторе на стороне codeа Python.

#include <SX127x.h>
#include <SPI.h>

const int8_t nssPin = 15;
const int8_t resetPin = 16;
const int8_t DIO0 = 5; // Not used
const int8_t txenPin = -1; // Not used
const int8_t rxenPin = -1; // Not used


SX127x LoRa;

void setup() {
  Serial.begin(38400);
  while (!Serial);

  Serial.println("LoRa Receiver Initialized");
  Serial.flush();

  if (!LoRa.begin(nssPin, resetPin, DIO0, txenPin, rxenPin)) {
    Serial.println("LoRa Error");
    while (1);
  }
  
  LoRa.setFrequency(433E6);
  LoRa.setSpreadingFactor(7);
  LoRa.setBandwidth(125000);
  LoRa.setCodeRate(5);

  LoRa.setHeaderType(SX127X_HEADER_EXPLICIT);
  LoRa.setPreambleLength(12);
  LoRa.setPayloadLength(255);
  LoRa.setCrcEnable(true);
  LoRa.setSyncWord(0x34);
}

void loop() {
  // Request for receiving new LoRa packet
  LoRa.request();
  // Wait for incoming LoRa packet
  LoRa.wait();

  if (LoRa.available()) {
    uint8_t msgLen = LoRa.available();
    char message[msgLen + 1];
    LoRa.read(message, msgLen);
    message[msgLen] = '\0'; // Null-terminate the string
   
    String originalData = message;
    // Split the original data by the comma separator to isolate the date/time and sensor values
    int commaIndex = originalData.indexOf(',');
    String datetime = originalData.substring(0, commaIndex); // Extract the datetime part
    String sensorValues = originalData.substring(commaIndex + 1); // Extract the sensor values part

    // Split the datetime into date and time components
    String date = datetime.substring(0, 10);  // "2024-08-20"
    String time = datetime.substring(11, 16); // "14:41"

    // Reformat the date and time
    date.replace("-", "");    // Remove the dashes in the date, result: "20240820"
    time.replace(":", "");    // Remove the colon in the time, result: "1441"
    
    // Combine date and time with a 'T' between them
    String formattedDatetime = date + "T" + time; // Result: "20240820T1441"

    // Create the final formatted string
    String dataToSend = formattedDatetime + "," + sensorValues;

    Serial.println(dataToSend);

  }
}
import serial
from datetime import datetime
import time


# Function to connect to the serial port
def connect_serial(port, baudrate, retries=5, delay=2):
    while retries > 0:
        try:
            ser = serial.Serial(port, baudrate)
            return ser
        except serial.SerialException as e:
            print(f"Could not open serial port: {e}")
            retries -= 1
            time.sleep(delay)
    raise Exception("Failed to connect to the serial port after several attempts.")


# Set up the serial connection (adjust the port and baud rate to match your setup)
try:
    ser = connect_serial(
        "/dev/tty.usbserial-1120", 38400
    )  # Replace with the correct port name
except Exception as e:
    print(e)
    exit(1)

print("Running...")
try:
    while True:
        if ser.in_waiting > 0:
            print(ser.in_waiting)
            # Read available data from the serial port
            incoming_data = ser.readline().decode("utf-8")
            print(incoming_data)

except KeyboardInterrupt:
    print("Exiting...")
except Exception as e:
    print(f"An error occurred: {e}")
finally:
    print("closing:::::")
    cur.close()
    conn.close()
    ser.close()
20240820T1733,9.88,-5.14,86.90
20240820T1733,10.27,-5.53,88.88
20240820T1733,9.48,-5.14,88.48
20240820T1733,9.88,-5.14,89.27
20240820T1733,9.88,-4.74,88.48
20240820T1733,9.88,-4.74,88.88
20240820T1733,9.88,-4.74,88.48
20240820T1733,10.27,-5.14,88.88
20240820T1733,9.88,-4.74,88.48
20240820T1733,10.27,-5.53,88.48
20240820T1733,9.88,-4.74,88.88
20240820T1733,9.48,-4.74,88.48
20240820T1735,9.88,-5.53,88.88
20240820T1735,9.88,-5.53,88.88
20240820T1735,9.88,-5.53,88.88
20240820T1735,9.88,-5.53,88.88
20240820T1735,9.88,-5.53,88.88
20240820T1735,9.88,-5.53,88.88
20240820T1735,9.88,-5.53,88.88
20240820T1735,9.88,-5.53,88.88
Куприян
Вопрос задан23 августа 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.