Я новичок в Arduino, и у меня возникли некоторые проблемы. У меня есть GPS-модуль 16E TTL, подключенный к контактам RX и TX на моей плате NodeMCU ESP32, и у меня есть простой скетч Arduino, который я написал для вывода данных на последовательный монитор.
String data = "";
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
data = Serial.read();
Serial.print(data);
delay(500);
}
Я получаю данные GPS только в последовательном мониторе, пока я удерживаю кнопку RST на плате, а в противном случае вывод «-1» каждый цикл.
Я попытался найти проблему, но, похоже, не нашел решения, и я попытался выяснить, как использовать серийный номер в деталях, но, по общему признанию, я запутался. Я ожидал, что данные будут просто печататься в каждом цикле.
Вы используете Serial
как для вывода отладочных сообщений, так и для связи с GPS.
Контакты RX и TX, к которым вы подключили GPS, являются тем же последовательным портом, к которому подключается последовательный чип USB. Каждый раз, когда вы что-то пишете Serial
, оно идет и на USB-порт, и на GPS. Таким образом, когда вы читаете что-либо с GPS, вы немедленно записываете это в него.
Вы можете использовать последовательный порт только для одной цели за раз. Поскольку он подключен к последовательному чипу USB, лучше всего использовать второй последовательный порт для GPS.
Например:
#define RX1_PIN 9
#define TX1_PIN 10
String data = "";
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial1.begin(9600, SERIAL_8N1, RX1_PIN, TX1_PIN);
}
void loop() {
data = Serial1.read();
Serial.print(data);
delay(500);
}
Вы должны установить RX_1PIN и TX1_PIN на любые удобные для вас номера контактов; просто убедитесь, что эти контакты доступны на вашей доске и не используются для чего-то еще.
Рад, что у вас все заработало!
Большое спасибо, теперь я использую разные контакты, и он работает так, как я ожидал, я обязательно буду помнить о USB-подключении в будущем.