SIM800L начинает отправлять мусорные значения в Arduino после случайного интервала
У меня есть модуль SIM800L, подключенный к Arduino Mega Serial3. SIM800L питается от источника питания 4,2 В, и я поставил делитель напряжения между Arduino TX3 и SIM800L RX, так что напряжение в линии остается около 2 В. Линия TX модуля напрямую подключена к Arduino RX3.
Проблема в том, что когда я пытаюсь связаться с модулем, он отвечает нормально, но после некоторых команд AT модуль начинает паниковать и начинает отправлять случайный мусор. Код, который я использую, - это простой последовательный код :
#include<SoftwareSerial.h>
#define mySerial Serial3
//SoftwareSerial mySerial(10, 11);
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(115200);
mySerial.begin(38400);
}
void loop() { // run over and over
if (mySerial.available()) {
Serial.write(mySerial.read());
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
}
Выход : [Это с последовательным монитором, установленным на скорость 115200 бод]
[Значения мусора с последовательным монитором установлены на скорость 9600 бод]
Решения, которые я пробовал до сих пор :
Поместите колпачок 220uF между VCC SIM800L и GND. (танталовый колпачок 470uF уже включен в модуль, но все еще должен быть безопасным)
Пробовал различные скорости передачи данных от 9600 до 115200 (настройка скорости передачи данных на модуле установлена на автоматическую скорость передачи данных), но только 38400 работает надежно.
Попытался вытащить линию RX3 на Arduino с резистором 100k, чтобы он не плавал.
Попытался поставить до 5 секунд задержки между командами AT, данными модулю, но он все равно впадает в панику.
Дело в том, что я заметил, что если мы вводим какую-то неправильную команду, как ATD74xxxxxxxx (который вызывает номер телефона), а не с правильной концовкой, как ATD74xxxxxxxx; модуль делает то же самое, что плюет мусорные значения.
Может ли кто-нибудь помочь мне с тем, что не так с модулем?
@Rutwij M, 👍1
Обсуждение1 ответ
Я считаю, что GSM-модулям требуется ток около 2 А для нескольких операций. Один из них звонит. Предоставляете ли вы текущий запрос?
Я снабжаю его преобразователем 3A, который, в свою очередь, поставляется от настольного источника питания 12 В 10 А. Кроме того, на VCC достаточно емкости, чтобы компенсировать скачки, поэтому я не думаю, что проблема в питании., @Rutwij M
Это также не зависит от операции. Я только что создал цикл, в котором я отправляю команду "ATI", чтобы получить информацию о модуле, и она выполняется 5-10 раз, а затем начинается цикл ошибок. Я также пробовал другой модуль SIM800L того же типа, и он ведет себя так же, поэтому с этим конкретным модулем проблем нет. Еще одна вещь, которую я пытался использовать, - это аналогичный модуль с [SIM900A](http://bit.ly/2hyGldz) и он отлично работает(с питанием 5 В вместо 4,2 В). Я также попытался позвонить по этому номеру с другого телефона, и модуль звонит просто отлично, так что прием звонков не является проблемой., @Rutwij M
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Программы построения последовательных данных
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Очистить существующий массив при получении новой последовательной команды
Кристалл на Arduino может плохо себя вести, @MaNyYaCk
Почему вы ограничиваете Tx Arduino до 2 В, хотя SIM800L использовал 3,7-4,2 В?, @Code Gorilla
Согласно [этому](https://github.com/stephaneAG/SIM800L) уровень Rx модуля меньше 2,8 В, что я тоже подтвердил (запускал его с высоким уровнем напряжения, и он давал ошибки по AT-командам). Я не знаю точной причины, почему это так, но он действительно ведет себя хорошо на более низких уровнях напряжения и странно на более высоких уровнях., @Rutwij M