Я настроил свой 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