Каталог
|
ARDUINO. Сопряжение MEGA2560 с GSM-модулем.2013-02-06 Все статьи →Игорь Дядюра, pingchuk [at] gmail точка com Выбирая для дачной сигнализации подходящий контроллер, который смог бы обеспечить подключение достаточного количества цифровых и аналоговых датчиков, управляемых программно реле, нескольких шин с цифровыми термометрами, многострочного дисплея – вряд ли нужно экономить сотню гривен, обрезая возможности (в том числе для последующего развития и наращивания). Лучше использовать оснащенный «по полной» контроллер MEGA2560: линий ввода/вывода этого контроллера должно хватить для самой функционально и интерфейсно насыщенной сигнализации. Для обеспечения основной функции: собственно «сигнализации», т.е. информирования устройством своего хозяина о нештатной ситуации (или предоставления информации о состоянии объекта по запросу) прибору требуется телекоммуникационная компонента, в качестве которой для контроллеров ARDUINO идеально подходит GSM-шилд или GSM-модуль. Опубликованная библиотека GSM_Shield, которая сопровождает GSM-модуль, не самым лучшим образом подходит для MEGA2560: она предполагает использование программно-эмулируемого последовательного интерфейса через библиотеку SoftwareSerial, хотя у MEGA2560 аппаратных последовательных портов – в избытке (четыре!). При использовании в качестве контроллера мощной платы MEGA2560 - нет никакого смысла эмулировать программно последовательный порт, занимать место в памяти программ и тратить ресурсы процессора и два цифровых вывода. В связи с перечисленными выше соображениями, библиотека GSM_Shield была подвергнута некоторой модификации. Везде по тексту имя SoftwareSerial заменено на Serial1, попутно из библиотеки удалены все дебаги и работа с DTMF (и так «заремленая» в библиотеке). Однако, конечно же, с ходу часть методов библиотеки не заработала, пришлось потратить вечер на отладку. В итоге обнаружилось, что при передаче модулю целочисленных параметров в оригинальной библиотеке используется конструкция SoftwareSerial.write (int). Просмотрев описания используемых модулем AT-команд, можно убедиться, что модулю эти параметры нужны в «человеческом виде», т.е. параметр «10» надо передать не одним байтом с кодом «10» (x0a), а двумя байтами, численно равными кодам символов «1» (x31) и «0» (x30). Можно, конечно же, посимвольно перекодировать параметр и передавать его несколькими последовательными конструкциями (например, в цикле) Sеrial1.write (int). Но лучше использовать стандартную конструкцию Sеrial1.print (int), которая сама позаботится о перекодировке в «человечески-понятную» последовательность. После выполнения полной замены write на print – библиотека заработала нормально, во всяком случае протестированы: отправка и прием СМС, исходящий и входящий звонки, прием звонка и отбой (hang up). Модифицированную библиотеку можно скачать по ссылке.
Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Пока нет отзывов на эту статью.
|