Ответ от модуля SIM800l прерывается
У меня есть модуль sim800l, подключенный к аппаратному UART Rpi pico
/*
SIM800 RPi Pico
5v *External 2A 5v supply*
GND GND
VDD 3v3
TXD GP1
RXD GP0
*/
void setup()
{
Serial.begin(115200);
while (!Serial)
;
Serial1.begin(9600);
Serial.print("Initializing");
delay(1000);
Serial.print(".");
delay(1000);
Serial.print(".");
delay(1000);
Serial.println(".");
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
Serial1.println("AT"); // Как только тест рукопожатия будет успешным, он вернется к OK
updateSerial();
delay(3000);
Serial1.println("ATI"); //Возвращает имя модуля и версию.
updateSerial();
delay(3000);
Serial1.println("AT+CCID"); //Прочитайте информацию о SIM-карте, чтобы убедиться, что SIM-карта подключена
updateSerial();
delay(3000);
Serial1.println("AT+COPS?"); //Проверяем, к какой сети вы подключены
updateSerial();
delay(3000);
Serial1.println("AT+COPS=?"); //Возвращает список операторов, присутствующих в сети.
updateSerial();
delay(3000);
}
void loop()
{
updateSerial();
}
void updateSerial()
{
delay(200);
while (Serial.available())
{
Serial1.write(Serial.read());//Пересылаем полученный Serial на программный последовательный порт
}
while (Serial1.available())
{
Serial.write(Serial1.read());//Пересылаем то, что ПО Serial получило на Serial Port
}
}
ответ терминала
AT
OK
ATI
SIM800 R14.18
OK
AT+CCID
XXXXXXXXXXXXXXXXXXXX
AT+COPS?
+COPS: 0,0,"Vodaa TelAT+COPS=?
+COPS: (2,"Vodaa Telecom","Ver
Насколько мне известно, SIM800L всегда заканчивает свой ответ знаком "ОК". но есть некоторые команды, которые обрываются и не заканчиваются на OK. например, AT+CDID и AT+COPS. Не знаю проблема в пико или в сим800л. Sim800l, похоже, работает нормально, поэтому я подозреваю, что это связано с пико, но если это так, это может быть проблема с внутренними библиотеками, которые мне не по силам. Чтобы поддержать эту теорию, количество символов, которые вырезаются, составляет около 20 символов, поэтому, возможно, это параметр, который мне нужно настроить
@DrakeJest, 👍-1
Обсуждение1 ответ
У меня ушло довольно много времени, но после прочтения документации по pico
Размер приемного FIFO также можно изменить с 32 по умолчанию. байт с помощью вызова setFIFOSize перед вызовом begin()
Serial1.setFIFOSize(128); Serial1.begin(baud);
установка гораздо большего значения, например 256, решает проблему
- В чем разница между библиотеками Software Serial? Какая из них совместима с Arduino Nano?
- Как использовать Serial.setTimeout()
- Аппаратная последовательная библиотека Arduino с поддержкой управления потоком rts/cts
- Отправить структуру через Serial
- Передавать данные структуры во внешнюю структуру через serial?
- Мост I2C-UART в виде прорыва или в корпусе DIP
- Может ли Arduino Leonardo одновременно использовать USB-порт и последовательные контакты RX TX?
- Последовательная связь между несколькими устройствами (или ардуино)
подсказка:
всегда заканчивает свой ответ "ОК"
... в ответе больше, чем ОК... подсчитайте количество фактически полученных символов, @jsotolaскорость 115200 бод медленная. между байтами есть промежутки, поэтому while (Serial1.available()) может закончиться до того, как будет прочитан полный ответ., @Juraj
@jsotola извините, я не понимаю .. Я посчитал, сколько команд serial1.read() pe. AT=9 символов, ATI=27, AT+CCID=31, AT+COPS? = 31, AT+COPS=? это 9, после чего следует длинная пауза, а затем снова 31. похоже, что 31 - это предел,, @DrakeJest
@Juraj Я не думаю, что смогу подняться выше этого, я пытался исследовать этот конец, думая, что это проблема скорости передачи данных, согласно [этой теме](https://arduinoprosto.ru/q/36039/sim800l- change-default-baud-rate) 115200 — максимально возможное значение, @DrakeJest
Я не предлагал более высокую скорость передачи, но правильное чтение ввода, @Juraj