Задать вопрос
@flexpc

Квадраты в мониторе порта?

Использую плату arduino nano, вместе с модулем sim800l. Вот такой скетч:
#include <SoftwareSerial.h>

SoftwareSerial SIM800(2, 3);

void setup()
{
  begin(9600);
  sendATCommand("AT+COPS?", true);
}

void loop()
{

}

String sendATCommand(String cmd, bool waiting) {
  String _resp = "";                                                
  SIM800.println(cmd);                        
  if (waiting) {                                
    _resp = waitResponse();                     
    // Если Echo Mode выключен (ATE0), то эти 3 строки можно закомментировать
    if (_resp.startsWith(cmd)) { 
      _resp = _resp.substring(_resp.indexOf("\r", cmd.length()) + 2);
    }
    Serial.println(_resp);                   
  }
  return _resp;                    
}

String waitResponse() {                       
  String _resp = "";                         
  long _timeout = millis() + 10000;            
  while (!SIM800.available() && millis() < _timeout)  {}; 
  if (SIM800.available()) {                  
    _resp = SIM800.readString();          
  }
  else {                                      
    Serial.println("Timeout...");              
  }
  return _resp;                               
}

bool begin(int baud)
{
  Serial.begin(115200);
  SIM800.begin(baud);
}

Получаю вот такой вывод: 64a5f5f66af5f332964514.png
Вопрос, откуда взялся квадрат в начале? Из-за него не выполняется if на 22 строчке. Как решить проблему?
Важные моменты

  • Скорость стоит правильная, всё как и должно быть
  • Я пробовал прошивать нанку со старым бутлоадером
  • Наверно стоит отметить, что этот квадратик вылезает не всегда. В 50% случаях, он не появляется при первом запуске после прошивки
  • Я выполнил код несколько раз и периодически появлялись странные выводы.
    ��$4�8��
    
    +COPS: 0
    
    OK
    
    AT+COPS?
    
    +COPS: 0
    
    OK
    
    AT+COPS?
    
    +COPS: 0
    
    OK
    AT+COPS?
    
    +COPS: 0
    
    OK
    
    AT+COPS?
    
    +COPS: 0
    
    OK
    
    AT+COPS?
    
    +COPS: 0
    
    OK
    
    AT+COPS?
    
    +COPS: 0

  • Мой провод, лежит прям на sim800l, возможно он дает наводки, и из-за этого происходит всё это, к тому же рядом мультиметр которые меряет потребление платы, он тоже может давать наводки. Хотя я в этом очень сильно сомневаюсь
    фото
    64a5fa8a0d702648937281.jpeg

  • Кириллических символов, там нет (скорее всего)
  • Двоичных данных там тоже быть не должно (тоже скорее всего, я хз как проверить)


Спасибо!
  • Вопрос задан
  • 712 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
milssky
@milssky
Координатор племени фиолетовых обезьянок
В коде ардуины скорость порта стоит 9600, в терминале -- 115200. От этого все проблемы.
Ответ написан
@Wan-Derer
Зобанели на Хабре, волки́ ;((
Возможно, дело в softwareserial, м.б. у него не всё хорошо с таймингами. Кстати, его скорость тоже лучше задать явно.
М.б. плохой контакт с SIM, может сам SIM глючит (они очень капризные по отношению к питанию, например). Может это какие-то остатки в буфере (его стоит очищать перед приёмом сообщения).
Попробуй вместо startsWith() использовать indexOf(), тогда мусор в начале сообщения не будет влиять.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы