Не находит сеть модуль gsm sim800c zhitsoboy.ru

Не находит сеть модуль gsm sim800c

arduinoLab

Подключение GSM модуля на примере SIM800 к Arduino

О правильном подключении GSM модема SIM800L или по чему не работает модем с Arduino.

Особенности SIM800:

  • Четырехдиапазонный GSM/GPRS модуль, 850/900/1800/1900 МГц
  • В зависимости от версии модема, интерфейс USB для обновления программного обеспечения, UART, FM-radio, Bluetooth, PCM
  • Управление AT командами
  • Встроенный стек TCP/IP, UDP/IP, Протоколы HTTP, FTP, Email, PING, MMC
  • Определение местоположения по базовым станциям.
  • Декодирование и формирование DTMF-тонов
  • Воспроизведение аудиофайлов локально и в сторону удаленного абонента

800 серия или что означает буква в конце:

Не только тип корпуса, хотя это основное различие. SIM800A, как и SIM800F, электрически совместим с популярным, но уже снятым с производства SIM900 и предназначен для его замены, SIM800C выполнен в корпусе с возможностью ручного монтажа, LGA монтаж, имеет на борту bluetooth, SIM800L для поверхностного монтажа и имеет на борту FM радио. Программно они полностью совместимы.

Как подключить к Arduino:

Питание:

Диапазон напряжение питания SIM800 (не китайского модуля на SIM800, а модема) составляет от 3,4 до 4,4 В. Рекомендуемое напряжение 4,0 В. Модем рассчитан на батарейное питание от одной Li-Ion банки, напряжение 5 вольт не допустимого, попытки запитать модем от 5 вольт приводит к тому, что модем выключается (уходит в защиту).

Источник питания должен обеспечивать достаточный ток, не менее 2А. Потребляемый ток модема зависит от режима его работы, максимальный пик потребления происходит при включении модуля и соединении с базовой станцией. На вход VBAT настоятельно рекомендуется подключать конденсатор большей емкости с низкий ESR. Потребление электричества не линейное, происходит короткими импульсами, в эти моменты важно не допустить проседания напряжения питания ниже 3,0 В.

В документации на модем, для получения заветных 4,0 вольт, рекомендуют использовать линейный стабилизатор с низким падением напряжения MIC29302 либо более распространенный DC-DC преобразователь LM2596, схема включения выше. Подойдет и MP1584EN, главное напряжение в приделах от 3,4 до 4,4 В и достаточный запас мощности. Плохая идея брать питание от USB, либо выхода 5 вольт ардуино, в этом случаи добиться стабильной работы модема, будет практически не возможно.

Логические уровни и UART:

Как и питание, у модема не стандартный логический уровень 2,8 В, что добавляет веселья. При попытки подключить что либо к 5 или 3,3 вольтовой логике, модем выключается.

Включение модема и PWRKEY:

Например чтобы включить модем, необходимо на ногу PWRKEY модема подать логический 0, тоесть соединить с массой.

В документации предлагают использовать транзисторный ключ, чтобы избежать возможность попадания высокого для модема напряжение 5 вольт на вход.

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

Временные интервалы включения показаны на графике выше, включать модуль ногой PWRKEY следует по прошествии 0,5 секунд после подачи питания на ноги VBAT, а добиться ответа на команды по UART, можно не раньше трех секунд после включения.

Выходы TX и RX также должны быть согласованны, подключение модема к 5 вольтовой ардуино без согласования может вывести его из строя, хотя обычно модем поругавшись на «овервольтаж» выключится.

Один из вариантов согласования из документации, обратите внимание на выход VDD_EXT, на этом выходе модем формирует напряжение 2,8 вольт, предназначенное для периферийных устройств.

Другой вариант, рекомендуемый для 5 вольтовых уровней, конвертировать при помощи транзисторов, схема включения аналогична дешевым китайским конвертерам в виде модулей для ардуино.

Подобным решением можно воспользоваться только при проектировании устройств на SIM800, т.е. не используя готовые китайские модули для ардуино, на которых не озаботились вывести выход VDD_EXT на колодку.

Согласовать уровни можно делителем напряжения на двух резисторах, в этом случаи не понадобятся дополнительные напряжения и выход VDD_EXT, но данный способ увеличивает нагрузку на порт и может не стабильно работать на высоких скоростях UART интерфейса.

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

Разновидности китайских модулей:

Модуль на SIM800C с минимальной обвязкой. Отсутствует конвертер уровней UART интерфейса, фильтры, стабилизатор питания. Самый популярный, дешевый и малогабаритный.

Аналогичный китайский модуль на SIM800L

Этот модуль уже поинтереснее, есть конвертер уровней (на плате два транзистора 2n7002) два включенных последовательно диода, чтобы снизить напряжение питания 5 вольт до положенных модему 4.2 вольта, решение сомнительное но самое дешевое. Выведена нога для антенны встроенного bluetooth. Все еще отсутствуют фильтры в аналоговой части

Существует аналогичный модуль с тойже распиновкой, но за место конвертера уровней, стоит стабилизатор напряжения питания на DC-DC преобразователе MP1584EN. Странное решение.

Этот мало чем отличается от модулей выше, есть конвертер уровней, есть два диода чтобы снизить напряжение питания 5 вольт до положенных модему 4.2 вольта, к сожелению отсутствуют голосовые функции! возможно будет удобней в подключении, есть крепежные отверстия.

Вот, это уже чтото… Линейный стабилизатор напряжения питания MIC29302, конвертер логических уровней, на плате bluetooth антенна и SMA разъем для GSM антенны, Отсутствуют фильтры на аналоговой части.

Shield от Keystudio, вот это то как должно быть, есть возможность использовать внешнее питание и питание от ардуино, линейный стабилизатор питания MIC29302, фильтры в аналоговой части и джек для подключения гарнитуры, ионистор для часов, вывели даже USB. Один недостаток, цена…

Все таки как подключать к Arduino:

А что подключать и к чему? разновидностей модулей десятки, версий ардуино плат тоже. Я не рекомендую использовать плату Arduino UNO, как и любую другую с ATmega328, совместно с библиотекой SoftwareSerial для работы с модемом, возможно данная связка подойдет для проверки работы модема и отладки, но в устройствах стабильной работы добиться практически не возможно.

Модем общается с микроконтроллерам по средствам UART интерфейса, на UNO единственный аппаратный UART отдан для перепрошивки платы и «монитор порта», это принуждает использовать библиотеку SoftwareSerial.h которая не может нормально переварить поток с модема. Правильным решением будет использовать плату с несколькими аппаратными UART интерфейсами, например Arduino Leonardo, Arduino Mega.

В случаи с Arduino Leonardo и аппаратным UART:

Не простой случай с дешевым модулем на SIM800L, тут нужен отдельный стабилизатор напряжения питания на 4,0 В, нужно согласовывать логические уровни с ардуино при помощи резистивного делителя напряжения, ибо по другому согласовать не получится.

Читать еще:  Установка операционных систем на персональных компьютерах

Чуть проще с подобными модулями, где конвертер уровней установлен на плате. Только не забываем дать питание и для конвертера.

Управление модемом:

Общение с модемом происходит при помощи АТ команд, в модем отправляется команда в текстовом виде, а после выполнения команды модем возвращает ответ, самая простая команда «AT» ответ на нее «OK«, служит для проверки соединения с модемом. Список всех доступных команд и возможных ответов можно посмотреть в документации на модем.

Для управления модемом через «монитор порта» в ардуинку нужно залить пример, который транслирует данные из «монитора порта» в UART к которому подключен модем. Убедитесь в правильной скорости UART интерфейса, в настройках модема, скорость порта может отличатся от 9600.

Делаем простейшую сигналку на GSM SIM800L и Аrduino для дачи, гаража

С наступлением дачного сезона возникла необходимость охраны дачного домика. Хотелось сделать простенькую но надежную охранную сигнализацию с передачей сигнала на сотовый телефон. Решено было собрать устройство с передачей тревоги на сотовый телефон на базе электронных плат приобретенных на Алиэкспресс. Как говорится дешево но сердито. Основными элементами данной конструкции являются модуль GSM SIM800L и плата Aрдуино(можно применить любую- Nano ,Uno,Pro Mini и тому подобные).

Устройство на пять тревожных входов для контактных датчиков. К каждому входу можно подключить один или несколько датчиков последовательно соединенных В скетче присвоить каждому охранному шлейфу свое название (например-входная дверь, окно 1, окно 2 и так далее). Охранное устройство работает так: при разрыве электрической цепи первого шлейфа блок сперва дает вызов на первый телефон абонента, следом прекращает звонок и также на №2. №2 нужен в виду того что если вдруг первый абонент не в сети или подсел аккумулятор и прочие неприятности). Если срабатывают шлейфа следующие за первым, тогда происходит отсылка СМС сообщения с названием сработавшего шлейфа, в том же случае на оба номера абонентов.

Перечень инструментов и материалов.
-литий –ионный аккумулятор от старого телефона 3,7В1600мА-1шт
-соединительные провода;
-паяльник;
-тестер;
-прозрачная пластмассовая коробка -1шт;
-плата Arduino Nano -1 шт;
-резисторы 10кОм-7шт;
— макетная плата из фольгированного текстолита;
— выключатель питания-1шт;
-модуль SIM800L -1шт;
-понижающая плата 1-2А -1шт;
-клеммные разъемы.

Шаг первый. Сборка схемы охранного GSM устройства.
Фото схемы.

На макетную плату припаиваем разъемные колодки для GSM модуль SIM800L и модуль Arduino это упрощает монтаж и позволяет при необходимости легко заменять модули. Распаиваем резисторы и остальные соединения. Резисторы от контакта RX модуля SIM800L подключаются к цифровому входу D3 Arduino для согласования по напряжению входов обоих модулей. Входы Arduino D4-D8 подтягиваются через резисторы. Выключатель монтируется в разрыв питания GSM модуля SIM800 и платы Ардуино для постановки на охрану всей системы. Применение аккумулятора, что позволит устройству функционировать два три дня при отсутствии сети 220 В. Преобразователь напряжения в моем случае из напряжения 12 В выдает напряжение 4,2 В и заодно заряжает аккумулятор(можно применить другую плату, например ТР4056 с защитой).

Шаг второй. Программирование устройства.
В СИМ карте должны быть удалены пинкоды и все ненужные функции. Еще предварительно нужно настроить сам модуль SIM800L-в сети есть много видео по этой теме, ничего сложного в этом нет. В скетче указываем ваши номера телефонов, корректируем названия охранных зон, можно установить время контроля системы (если прибор работает нормально через заданное время придет контрольная СМС). Заливаем скетч в Arduino и проверяем работу устройства.

Шаг третий. Проверка работоспособности устройства.

При подаче напряжения питания пока загружаются модуль SIM800L и плата Arduino у вас есть примерно 20 секунд чтобы покинуть охраняемое помещение. На модуле SIM800L светодиод указывает на работу в сети- часто мигает это поиск сети, раз в пять секунд- работа в сети. Когда прибор найдет сеть разорвите соответствующие охранные входы, после этого произойдет дозвон или присылка СМС. Значит прибор работает нормально.

Фото СМС. К этому прибору можно будет включить любые охранные извещатели с выходами в виде контактов, реле от исполнительных устройств, только в соответствие с вашими потребностями и фантазией. В целом мы изготовили несложный, охранный прибор. Такой самодельный сторож можно сделать для организации охраны любых объектов. Чтобы включить прибор сигнализации нужно через выключатель на SIM800 и Аrduino подать 4,2 Вольта. При первого входа пройдет звонок на абонента №1, после переключится на №2. Дополнительный №2 предусмотрен для дублирования. Обрыв шлейфа №2,3,4,5 делает выдачу SMS с конкретным названием нарушенного шлейфа, соответственно на оба телефона. Все платы поместим в любом в подходящем корпусе. В общем я думаю это неплохой интересный приборчик который можно в дальнейшем развить далее-добавить функции GSM розетки, управление по DMTF и многое другое.

Подробнее можно посмотреть в видео

Получайте на почту подборку новых самоделок. Никакого спама, только полезные идеи!

*Заполняя форму вы соглашаетесь на обработку персональных данных

Питание и работа модуля SIM800L

Приветствую. Имеется модуль SIM800L. Для его питания надо подавать 3.7 — 4.4 В. Я его хочу запитать от портативного аккумулятора, соответственно на его выходе имеем 5В. Нужный эффект достигается подключением понижающего преобразователя, на выходе которого имеем 4В. На данном этапе все условия эксплуатации вроде соблюдены. Но при сборке схемы, подключению к Arduino и запуску всего этого, начинает ужасно греться обведенный на фото конденсатор и на ардуно никаких данных не идет, хотя при ошибке по питанию он должен об этом сигнализировать. В чем может быть проблема?

Конденсатор я проверял, он признаки жизни подает. Собираю по приложенной ниже схеме. По совету одного человека также пробовал убирать минус аккумулятора с ардуино и подавать сразу на понижайку, но никакого эффекта это не дало и конденсатор также продолжал греться. Использую Arduino Mega.

Ежели электролит греется — проверь полярность его питания.
А, вообще, чтобы погасить лишние 0.7 — 1.0 В — просто подай питание через кремниевый диод.

Какой-то грустный диод, с падением в 1 вольт.

Падение напряжения зависит от протекаемого тока: чем больше ток — тем больше падение напряжения. Но, думаю, такой модуль потребляет относительно немного.

Он много потребляет только во время передачи данных. Электролит должен сгладить

Читать еще:  0xc00000e9 при загрузке Windows 7

Отвечу для общего развития.

Падение напряж на диоде зависит от прямого протекаемого через диод тока. Только в даташитах есть графики этого падения и режимы работы диода. Так вот, обычно падение напряжения на диодах составляет 0.2. 0.5 вольт при ПОСТОЯННОМ ДЛИТЕЛЬНОМ протекании тока через него. В даташите Iсс.

Хотя да, будет и 2в это когда импульсные режимы, заоблачные, типа на 100..200А в импульсном режиме, при которых гибкие выводы диодов начинают мерцать на тепловизоре.

В данном случае, плата, в прыжке должна жрать 1A, при активном канале GSM или какой нить edge. Так что и падение будет 0.2. 0.5 в зависимости от типа диода.

Не, это слишком просто, не наш метод 🙂

«Запитать схему от портативного аккумулятора 5 вольт»

А ты в курсе,что этот аккумулятор — обычный литиевый акк с нужными тебе 3.7-4,2 вольта с преобразователем на выходе? И,соответственно,нагромождение из двух последовательных преобразоыателей для того напряжения,которое УЖЕ есть,как — то нерационально,мягко говоря? Может,все-таки догадаешься вывести два провода напрямую с аккумулятора?

ЛЮБОЙ обычный бустер,он же повербанк,он же мобильный аккумулятор,состоит из литиевого аккумулятора на 3,7-4,2 вольта и блока,повышающего напряжение до 5 вольт. Таким образом,достаточно вывести напряжение напрямую с лития.

Для блондинок. Открываем корпус и видим либо серебристый прямоугольный плёночный конвертик, от которого идут два провода к плате,либо набор цилиндриков,от которых опять-таки идут два провода к плате. Вот эти два провода нас и интересуют.

Внутри у него стоят литиевые аккумуляторы с напряжением 3,7-4,2в.
Почему надо питать от такой балалайки, которая для этого не предназначена, а не использовать просто литий-ионные или литий-полимерные аккумуляторы?
И зарядник для них копеечный, или плату поставить от 5в заряжать.

«Почему надо питать от такой балалайки»

Ну,видимо,потому что у ТС она,эта балалайка,уже есть,и модуль зарядки в неё уже встроен, а всякие наборчики типа «18650+блок зарядки» нужно еще искать/заказывать.

Тогда нужно балалайку разобрать, доработать и получить разъем с искомыми 3,7-4,2в. А так, я с этим модулем пару месяцев ковырялся, СМС еще ничего, а вот с GPRS как-то нестабильно он работал. В итоге у соседей появился вайфай, и теперь третий год теплица успешно шлет UDP, отображая на сайте свои параметры. А SIM800 валяется в коробке с барахлом. https://pikabu.ru/story/teplitsa_na_arduinomega_chast_7_5071.

Правда вайфай модуль стабильно виснет 1 раз в год). В отличие от этого модуля, который виснул 5 раз в сутки.

Этот модуль изначально рассчитан на питание от литиевой батареи. Вот и подключайте его напрямую к литию. И атмегу ардуинскую тоже подключайте прямо к аккумулятору, она вполне способна и от 3 вольт работать, а уж от 3,7 и подавно. Преобразователи не нужны.

Конденсатор греется, потому что заботливые, но экономные китайцы взяли трехвольтовый конденсатор.

«Засунул обычные 18560 банки в корпус power bank’а «

Ну так а что тебе мешает к этим банкам соединиться напрямую?

Конденсаторы, блядь, НЕ МОГУТ ГРЕТЬСЯ. Ему конец, он коротит.

Эти танталы могут выходить из строя. Меняй! на аналог, но попробовать можешь и без него (если, конечно DC-DC преобразователь проверен и рабочий без пульсаций)

А как вы, извините, конденсатор внутрисхемно прозваниваете?

Я понимаю, когда электролит вменяемой емкости и на линии нет еще чего-то с низким сопротивлением, можно померять сопротивление, увидеть, как оно плавно стартует с килоома и уходит в небеса и успокоится, хотя это не так. Тут-то как? Если он в коротком — и так все понятно, если не в коротком — не значит, что рабочий, может прошивать. В любом случае кондер греется, потому что через него (сюрпрайз, мазафака) течет ток на землю. Через исправный кондер ток на землю не идет)

Постоянный не идёт.

Что значит «прозванивался бы»? С-МЕТР должен показать его номинальную ёмкость. Вы им прозванивали?

Если ещё актуально. DC-DC преобразователь, который вы используете для питания SIM модуля построен на микросхеме MP1584 и для этого модуля при такой нагрузке желательно входное напряжение не ниже 6V. Сам SIM800L при поиске сети потребляет до 2А, поэтому для устойчивой работы связки SIM800L / DC-DC преобразователь на MP1584EN, входное напряжение на последнем нужно повысить, как минимум до 9V-12V и всё заработает, как надо.

«Начинает ужасно греться конденсатор»

Это скорее всего,связано с тем,что в повербанке или понижайке после него (или и там и там)стоит не слишком качественная схема,которая дает кучу ШИМ импульсов вместо постоянного тока на выходе. Конденсатор пытается погасить эту гребенку-и работает с дикой перегрузкой,для которой он явно не предназначен. Повторяю — выведи питание напрямую с аккумуляторов,и забудешь про обе проблемы. Это же импульсное питание не даёт нормально работать GSM модулю,и в итоге у тебя нет нормальной характеристики на его выходе

Питаю sim800l напрямую от 5 вольт и не напрягаюсь

Танталовые конденсаторы — относительно ненадёжны, особенно китайские ) Хотя, судя по маркировке, если у тебя именно такой же конденсатор на плате (с такой же маркировкой) здесь стоит кондёр на 10В-470 мкФ от производителя AVX. AVX вроде нормального качества, но тем не менее, брак иногда бывает, и эти конденсаторы не особо терпят большие пульсации. Как-то столкнулись с целой партией таких конденсаторов, но только от Kemet, в которой было очень много конденсаторов не соответствующих заявленным характеристикам: у многих был относительно высокое ЭПС (ESR), а вероятно и из-за этого была занижена ёмкость. Если ЭПС будет большим, то пр работе в цепях импульсных источников питания эти конденсаторы хорошо нагреваются, в дальнейшем перегреваются и сгорабт либо пробиваются.

Тестовый пуск GSM модуля SIM800L

Дата: 6 Октября 2016. Автор: Алексей

Далее собираем все в кучу. Ммм, а как!?

Вот схемка, вид сверху.

Бинго! Далее кидаем AT+COPS? и если в ответ получили своего оператора, то для закрепления позвоните себе набрав команду ATD89161234567;. Точка с запятой обязательно! Если модуль дозвонился, то значит он работает с нашими сетями. Я тестил на пчелайне. Если я сейчас скажу что на этом все, то меня закидают яйцами и помидорами, а этого не хочу))) Значит давайте соберем из этого что-нибудь полезное. Например сигнализацию. Прикрутим модуль к МК и будем следить за состояние пару ножек. Как только на ножке появится изменения, то тут же пошлем SMS с оповещением об данном изменении. В роли МК будет выступать ATmegs32a. На ноги PB2 и PB3 прикрутим кнопки. Кнопки имеют общий GND, а для подтяжки используем встроенные резисторы. Для работы с модулем напишем пару функций, а именно инициализации и передачи SMS. Чтож, поехали.

Читать еще:  Ошибка 0х8004242d при установке

Для начала сконфигурим проект при помощи генератора кода axlib. Для этого выберем МК ATmega32, внешний кварц на 7372800

(такой кварц нужен для уменьшения ошибок при передаче по UART)

. Настроим UART на скорость 9600. Далее сгенерив проект откроем его в AtmelStudio 6. Первым делом создадим файл sim800l.h в корне проекта и подключим его. Теперь переходим в наш созданный файл и впишем туда нужные нам дефайны. Такс, дефайны для упрощения записали, теперь пишем сложную функцию инициализации. Вся сложность данной функции заключается в том, что мы просто передаем команду АТ модулю. С этой команды должен начинать работать модуль. Следующая функция немного посложнее. Вот тут я понял всю сущность дешевизны данного модуля. Эта фиговина напрочь отказывалась стабильно возвращать ответы. Как я только не извращался, и ставил таймауты по приходу данных гигантские, и задержки лепил. Короче плюнул на те ответы что плавали во времени и натыкал задержек. Для работы это не сильно мешает. Платим за дешевизну. Поехали по функции. Первым делом тыкаем настройку передачи пакета. Это нужно чтобы модуль отправлял данные получив номер телефона, а затем ожидал принятия текста. Затем передаем номер телефона абонента которому отправляем SMS. Берем его из аргумента данной функции. Есть одно но! Номер телефона должен иметь формат вида: +79161234567. +7 обязательно, этот модуль в отличии от 900-тых не понимает 8. После передачи номера абонента просто тупим 3 секунды. Все это время модуль не спеша пережевывает номер и по хрен знает какому алгоритму, как раз на этих задержках я подорвался, выдает нам приглашение на ввод текста значком > 3 секунд железно хватает пережевать и выплюнуть приглашение. После 3 секунд кидаем текст сообщения. Его так же берем из аргумента данной функции и от туда же длину текста для функций UART. Ведь мы не знаем сколько буковок вы собираетесь послать. Если внимательно присмотреться, то можно заметить байт 0x1A в конце текста сообщения. Это команда Ctrl+Z нужна для окончания передачи текста. Когда модуль получит эту команду, то все бросит и передаст SMS. Все, с данным файлом закончили, переходим в основной файл программы. Что мы тут видим. Два дефайна с заранее подготовленным текстом. Затем мы инициализируем модуль. Затем настраиваем ножки 2 и 3 порта В на вход и подтягиваем внутренний резистор к плюсу питания. Затем в бесконечном цикле проверяем на нажатие кнопок. Как только какая-либо из кнопок будет нажата, сразу вваливаемся в бесконечный цикл и ждем пока не отпустят кнопку. После того как кнопку отпустили вызываем функцию отправки SMS с заранее продефаненым текстом. Вот и все.))) Проект выкладывать не буду так как его можно сгенерить axlib генератором и скопипастить текст отсюда. Ой, да, вот что я получил на телефон.))

Фыва 09.10.16 23:29
Алексей 09.10.16 23:39
Юрий 05.03.17 20:36
Алексей 06.03.17 12:36
Олег 28.03.17 02:43

Разъясните пожалуйста. Для чего в функции usart_str_rn
передаётся n ,для работы с симмодулем это нужно или на всякий случай?
Что делает символ /» тут

#define SIM800L_AT_SMS «AT+CMGS=»»

usart_str_out (SIM800L_AT_SMS, 9);
usart_str_out (num, 12);
usart_str_rn («»»);
тут тоже /» /r /n
почему нельзя разом usart_str_rn (AT+CMGS=»+7xxxxxxxxxx») , как в терминале ?
И

usart_str_out (text, lenght);
str[0] = 0x1A;понятно
str[1] = 0; зачем ноль?
usart_str_rn (str); и ещё /r /n ?

Алексей 28.03.17 12:33

—> Что делает символ /» тут
Символ ставится перед служебными символами для того чтобы эти символы превратить в простые. Дело в том что двойная кавычка это служебный символ. Его используют чтобы передать строку в массив. А для того чтобы компилятор прочитал именно как символ, то перед служебными символами ставят обратную косую черту.
Пример:

BYTE data[] = «Какой-то текст «Текст в кавычках»»;

Теперь внутренние кавычки запишутся в массив как символы.

—> почему нельзя разом usart_str_rn (AT+CMGS=»+7xxxxxxxxxx») , как в терминале ?

Потому что функция принимает в качестве аргумента указатель на первый элемент массива с номером абонента. Если написать сразу, то SMS будут высылаться вечно только этому абоненту. И изменить можно будет лишь переписав код.

—> Разъясните пожалуйста. Для чего в функции usart_str_rn
передаётся n

Потому что документация на модуль SIMCOM требует в конце команды вводить код конца строки и перевода каретки.

Олег 28.03.17 14:05
Алексей 28.03.17 15:04
Олег 28.03.17 16:59

Это я понял , коммада отправилась вот так

str[0] = 0x4D;
str[1] = 0x4B;
str[2] = 0x4D;// три буквы текст для теста.
str[3] = 0x1A;
str[4] = 0;
usart_str_rn (str);
, текст наверно могу строкой , но 1А получается только через массив, как-то проще нельзя?

Алексей 28.03.17 17:14

void usart_char_out ( BYTE data)

Просто посылает один байт в порт.

Евгений 07.05.17 17:47
Алексей 07.05.17 20:05
Евгений 08.05.17 20:13
Алексей 08.05.17 21:34
Евгений 12.05.17 06:43
Евгений 12.05.17 18:57

Алексей. Разобрался в чем проблема, в функции usart_str_in было принятие 18 байт, а модуль отвечал только 9тью байтами, соответственно функция воспринимала данный ответ как таймаут. (BYTE usart_str_in(BYTE *str, BYTE count)
<
BYTE out = 0;
BYTE data = 0;
BYTE timeout = 0;

while(count > data) // здесь пока 18>9 — таймаут
<
data = GetData();

// Если в течении 250 мс данные не пришли
// то выйти из функции и вернуть 0
if(timeout >= 250)
<
ClearBuffer();
return out;
>

out = OutBufferStr(str, count);
return out;
>
)
А как быть если не известно какой длины придет ответ?

Алексей 12.05.17 20:03
Евгений 12.05.17 20:21
Алексей 12.05.17 20:58

// Количество принятых байт в буфер
BYTE len_pocket = 0;

// Массив для данных
BYTE data[40] = <0>;

while (1)
<
// Смотрим что в буфере
len_pocket = usart_data();

// Проверяем пришло ли что в буфер
if (len_pocket > 0)
<
// Если пришло, ждем
// расчет паузы (1000/(битрейт/10)) * макс байт.
// Пример битрейт 19200, макс байт 40. (1000/1920) * 40 = 20.8мс

// Пауза для гарантированного получения всех байт
_delay_ms(22);

// Получаем количество принятых байт
len_pocket = usart_data();

// Записываем данные в массив
usart_str_in (data, len_pocket);

// Теперь в массиве data лежат все принятые байты.
>
>
>

Ссылка на основную публикацию
Adblock
detector