Модуль SIM800L просто повторяет данные, отправленные через последовательный порт.

У меня есть Teensy 2.0 с простым AltSoftSerial, как показано на изображении:

Код с последовательной связью

Как видите, когда я отправляю команду (или любой другой ввод через последовательный порт), модуль SIM800L отправляет мне тот же ввод. Пробовал поменять местами провода TX и RX на модуле (на случай, если я их неправильно подключил), но тогда ничего не возвращает. Когда я подключаю провода TX и RX напрямую друг к другу, я получаю тот же результат, как если бы они были подключены к модулю.

Подключается все таким образом - компьютер подключается через USB к Teensy, SIM800L и Teensy подключаются через программный последовательный порт (RX к TX и TX к RX), модуль SIM800L питается от внешнего аккумулятора (он требуется определенное напряжение между 3v4 и 4v4).

Модуль неисправен или проводка неправильная? Почему модуль не обменивается данными, а просто возвращает то, что я ему отправил?


РЕДАКТИРОВАТЬ 1:

Я не особо ищу ошибки в коде, код скорее всего правильный. Я думаю, что проблема, вероятно, где-то в модуле SIM800L.

Модуль не должен просто повторять то, что получил, он должен воспроизвести что-то вроде «ОК» или другие ответы.

, 👍0

Обсуждение

Кажется, он делает то, что вы ему сказали, @James Waldby - jwpat7

Вероятно, вы могли бы многому научиться, просмотрев существующий код этого или подобных модулей — например, тестовый эскиз Adafruit FONA. Также имейте в виду умеренно экстремальные требования к мощности., @Chris Stratton

Отправьте команду ATE0, чтобы отключить эхо., @Flanker

Было ли когда-нибудь решение этой проблемы? У нас тут точно такая же проблема. Мы пытались это сделать с несколькими платами, измеряли напряжения на оскопе и т. д. Мы удалили процессор и отправляем команды прямо из последовательного редактора Docklight. Команда получена, и ответ такой же, как и отправленный. Мы отправляем такие команды, как AT+E<CR>, как предписывает руководство по командам AT. Мы прочитали несколько статей других авторов и это единственный форум, который нам удалось найти, где проблема точно обозначена. Спасибо за любую помощь, которую каждый может прописать. Серийный, @Steigz


2 ответа


1

Вы просите его повторить отправленные вами данные. Он работает ТАК, КАК вы хотели, чтобы он работал в вашей программе.

Вы попросили его посмотреть, отправлено ли что-нибудь, и если отправлено, то распечатать. Вот что он делает.

,

Я так не думаю.. Это было бы так, только если бы провода TX и RX были физически соединены. Когда вы используете .write() на одном последовательном конце, вы можете получить его с помощью .read() только на другом конце провода, а не на том же самом. Или я что-то упускаю?, @Patrik Šimunič

Ну, я вижу, что ваш код делает то, что он должен делать. Что вы вообще хотите, чтобы он делал? Опишите его подробно., @Dat Ha

Ну, мне нужно, чтобы teensy просто получал команду от компьютера и пересылал ее на sim800l, а когда sim800l посылает ответ, teensy должен пересылать его на компьютер. Вот и все, просто пересылка данных с одного последовательного порта на другой и наоборот., @Patrik Šimunič


-2

Последовательное USB-подключение такое же, как контакты TX и RX на Arduino. Вам нужно подключить sim800 к другому последовательному порту с помощью SoftwareSerialport, см. примеры здесь: https://www.arduino.cc/en/Tutorial/SoftwareSerialExample

,

Это справедливо для обычного Arduino на базе ATmega328p, например, Uno, **но этот вопрос явно о Teensy 2.0**. Как и Arduino Leonardo, Teensy 2.0 использует ATmega32u4, где USB напрямую подключается к главному процессору, а аппаратный UART не участвует в потоке программы/отладки и поэтому остается доступным для других целей. Большинство более поздних плат на базе ARM, включая семейство Teensy, также обладают этим свойством. Кроме того, даже если бы вопрос был об Uno, скетч *уже* использует программное последовательное решение (хотя и излишне, учитывая предыдущее)., @Chris Stratton