Найти в Дзене
Обо всём и ни о чём

Как я мучился с GSM-модулем А6. Часть вторая.

В предыдущей статье я рассказывал про передачу СМС на кириллице с помощью GSM-модуля А6 и дал таблицу соответствия букв кириллицы и кода в шестнадцатеричной форме. В настоящей статье я хочу поведать о некоторых тонкостях взаимодействия GSM-модуля с модулем Arduino-nano.

В предыдущей статье я рассказывал про передачу СМС на кириллице с помощью GSM-модуля А6 и дал таблицу соответствия букв кириллицы и кода в шестнадцатеричной форме. В настоящей статье я хочу поведать о некоторых тонкостях взаимодействия GSM-модуля с модулем Arduino-nano. На данный момент имеется опыт работы только с этим модулем Arduino, но думаю другие модули Arduino (Uno, Mega) будут взаимодействовать с GSM-модулем также.

GSM-модуль А6 и модуль Arduino
GSM-модуль А6 и модуль Arduino

Связь GSM-модуля с arduino реализована с помощью программного UARTа, для реализации которого в скетче подключается библиотека SoftwareSerial.h, такая библиотека есть в свободном доступе в интернете и её не проблема скачать. UART на борту Arduino используется для связи в компьютером. Устройство, которое я проектирую, должно автоматически запоминать номер телефона, с которого звонят.

Функция автоматического определения номера в GSM-модуле есть и она включается с помощью команды AT+CLIP=1. Если эта функция включена, при звонке модуль по UART передаёт номер телефона, с которого звонят, в следующем виде: +CLIP: "+7XXXXXXXXXX",145,"",,"",0 .

Стандартная скорость GSM-модуля - 115200, логический высокий уровень соответствует напряжению 3 В, в то время как на Arduino - 5 В. При таких условиях возникают (не при каждом включении) ошибки передачи данных. В частности, номер телефона выглядит следующим образом: +7XXbXXXXXXX - т. е. вместо одного символа цифры принимается символ буквы. Ошибка возникала при связи не только с Arduino, но и с компьютером посредством эмулятора COM-порта. Единственный выход в такой ситуации, который мне видится, - снижение скорости обмена данными и согласование уровней сигналов.

Скорость GSM-модуля изменяется с помощью команды AT+IPR=ХХХХХ, значения скорости модуля могут отличаться от стандартных значений скорости COM-порта. При правильной работе модуль в ответ отправит ОК и установит другую скорость.

Скорость установить может не получиться с первого раза из-за ошибок при передаче данных, в этом случае не следует ограничиваться "одной попыткой". Я задавал скорость 14400. Согласование уровней сигнала - здесь всё решается не в плоскости программирования, а в плоскости схемотехники!

Согласование уровней сигнала бывает как одностороннее, так и двухстороннее. Одностороннее согласование предполагает передачу данных в одну сторону от передающего устройства к приёмному по одному проводу, двухстороннее - в две стороны по одному проводу. Схемотехнически двухстороннее согласование сложнее.

В интернете можно найти множество схем узлов согласования уровней сигнала, также возможно купить готовые модули согласования на AliExpress. Для согласования уровней сигнала в UART узлы для двухстороннего согласования излишние, достаточно двух узлов для одностороннего согласования.

Если есть другие предложения как устранить ошибки при передаче данных, пишите в комментариях, я с удовольствием рассмотрю.