Взаимодействие A9G с Arduino для тестирования AT-команд

Я пытаюсь подключиться к плате A9G Pudding GSM через Arduino. Я намерен использовать встроенный чип UART для упрощения преобразования TTL-UART между ПК и A9G.

Я инициировал программный последовательный экземпляр и использую его для передачи данных в/из A9G и Arduino.

Вот мой код. Однако, все, что я получаю, это тарабарщина. Я проверил свои соединения, ссылка, кажется, существует, но кодировка не совпадает. Я общаюсь с A9G на 115200, а мой эмулируемый серийный номер — на 9600.

Может ли это быть проблемой?

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
  Serial.begin(9600); // Мониторинг скорости передачи данных
  mySerial.begin(57600); // Установить обнаруженную скорость передачи данных

  Serial.println("A9G Module Communication Test");
  
  // Отправить AT-команду с возвратом каретки и переводом строки
  mySerial.print("AT\r\n");
  delay(1000); // Ждать ответа
}
void loop() {
  // Проверьте, доступны ли данные из модуля A9G
  if (mySerial.available()) {
    // Считываем данные из модуля A9G
    while (mySerial.available()) {
      char c = mySerial.read();
      Serial.write(c); // Отправляем его в последовательный монитор
    }
  }

  // Проверьте, доступны ли данные из последовательного монитора
  if (Serial.available()) {
    // Считываем данные из последовательного монитора
    while (Serial.available()) {
      char c = Serial.read();
      mySerial.write(c); // Отправляем его в модуль A9G
    }
  }
}

Вот вывод на последовательном мониторе.

Вывод последовательной консоли

, 👍0

Обсуждение

Введите «AT» и нажмите «Отправить» на последовательном мониторе. Что вы получите?, @hcheung

Попробуйте использовать mySerial.begin(115200); так как это скорость передачи данных по умолчанию для A9G., @Lee-xp

пожалуйста, не пишите заглавными буквами... это означает КРИК, что считается невежливым... используйте кнопку редактирования, чтобы исправить заголовок, @jsotola

пожалуйста, не публикуйте изображения текста... публикуйте вместо этого текст... отформатируйте как код для удобства чтения, @jsotola


1 ответ


-1

Вы можете редактировать свой код следующим образом.

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
  Serial.begin(9600); // Контролируем скорость передачи данных для соответствия A9G
  mySerial.begin(115200); // Установить скорость передачи данных A9G

  Serial.println("A9G Module Communication Test");
  
  // Отправить AT-команду с возвратом каретки и переводом строки
  mySerial.print("AT\r\n");
  delay(1000); // Ждать ответа
}

void loop() {
  // Проверьте, доступны ли данные из модуля A9G
  if (mySerial.available()) {
    // Считываем данные из модуля A9G
    while (mySerial.available()) {
      char c = mySerial.read();
      Serial.write(c); // Отправляем его в последовательный монитор
    }
  }

  // Проверьте, доступны ли данные из последовательного монитора
  if (Serial.available()) {
    // Считываем данные из последовательного монитора
    while (Serial.available()) {
      char c = Serial.read();
      mySerial.write(c); // Отправляем его в модуль A9G
    }
  }
}
,

почему? что изменилось?, @Juraj

Скорость последовательной передачи данных у меня изменилась с 57600 до 115200., @tepalia

и почему это правильное значение? пожалуйста, напишите ответ без эскиза, если изменена только скорость передачи данных., @Juraj

Последовательный монитор показывает мусорное значение. Вот почему я подумал, что определенная скорость передачи данных для A9G может быть неправильной., @tepalia

но это должно быть в вашем ответе. а не копия скетча. https://arduino.stackexchange.com/help/how-to-answer, @Juraj