Выходим в Интернет с помощью модуля на SIM800L

от автора

Привет всем неравнодушным! Сегодня предлагаю поговорить о миниатюрных GSM-модемах на базе чипа SIM800L. Области применения таких модулей весьма обширны: охрана дачи или дома, сигнализация в машине и многое другое, где требуется удаленная связь, а возможности подключиться к Wi-Fi нет. В том числе они прекрасно подходят для проектов IoT, потому что с их помощью можно не только отправлять сообщения или управлять телефонными звонками, но и подключаться к Интернету.

В данной статье рассмотрим:

  • подключение модулей к переходнику USB-TTL для проверки и отладки;

  • подключение модулей к платам Arduino для выхода в Интернет в условиях, когда нет доступа к Wi-Fi;

  • код, который позволяет подключиться к объекту на платформе Rightech IoT Cloud, публиковать данные и получать команды.


Обзор модулей на базе чипа SIM800L

Технические особенности чипа: 

  • Напряжение питания: 3,4 В — 4,4 В (рекомендуемое 4 В)

  • Потребляемый ток режима ожидания: 0,7 мА

  • Пиковый ток: 2 А

  • Поверхностный монтаж

  • Голосовые вызовы

  • Встроенный FM-приемник (?ребята_прикиньте_тут_есть_радио)

  • Режим сети: 2G

Документация на чип >>>

Подавляющее большинство начинающих радиолюбителей не готовы работать с такими чипами напрямую, поэтому производители радиоэлектронных компонентов предлагают большое количество плат с уже размещенным на них чипом SIM800L. Каждый такой модуль — это переходник между чипом и пользователем. Платы в обязательном порядке предоставляют пользователю минимальный функционал в виде обмена данными по UART и имеют слот для SIM-карты формата microSIM.

Для знакомства и изучения взяли два модуля с Aliexpress. Китайцы не стали заморачиваться с придумыванием для них какого-то специального названия (“red plate”, “blue plate”), так что и мы будем различать их по цветам: красный и синий.

Модуль “красный”

Технические особенности:

  • К этой плате можно подключить гарнитуру или микрофон

  • Контакты чипа SIM800L выведены по бокам модуля

  • Для подключения к сотовой сети нужна внешняя антенна, которая идет в комплекте с модулем. Также на плате имеется разъем U.FL, если необходимо подключить выносную антенну, в моем случае она тоже шла в комплекте, одна на два модуля. Мне для работы антенны-пружинки вполне хватило. Если вы размещаете модуль в корпусе, который может снижать уровень сигнала, используйте выносную антенну

  • Максимальный уровень логической единицы на входе RX — 3,1 В (при минимальном 2,1 В), поэтому необходимо понижать напряжение 5 В стандартной логики Arduino, например, с помощью делителя напряжения

  • На задней панели расположено гнездо для SIM-карты (подойдет любая активированная SIM карта). Устанавливать ее необходимо при отключенном питании модуля контактами к чипу SIM800L, а срез ДОЛЖЕН ТОРЧАТЬ СНАРУЖИ. Я первый раз установила срезом внутрь, и, конечно, получила в терминале ошибку о том, что SIM-карта не вставлена.

Моя симка вставлена правильно?

Чтобы проверить обнаружение SIM-карты, отправьте командуAT+CSMINS?. Второй параметр в ответе должен быть 1. Если 0, значит карта не вставлена. Подробнее об AT-командах будет рассказано ниже.

В верхнем правом углу модуля находится красный светодиод, который показывает состояние сотовой сети:

  • мигает раз в 1 сек — модуль работает, но еще не подключился к сотовой сети;

  • мигает раз в 2 сек — запрошенное соединение для передачи данных GPRS активно;

  • мигает раз в 3 сек — модуль установил связь с сотовой сетью и может отправлять/получать голосовые и SMS-сообщения.

Модуль “синий”

Технические особенности:

  • Не выведено подключение гарнитуры;

  • Стоит два включенных последовательно диода, которые снижают напряжение питания примерно на 1 В. Такое схемотехническое решение позволяет питать от блока на 5 В, не волнуясь о том, что модуль уйдет в защиту и отключится;

  • Присутствует конвертер уровней на двух транзисторах 2N7002, поэтому можно спокойно подключать хоть к пяти-, хоть к трехвольвотовой логике (не нужен делитель напряжения как для красного модуля).

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

Подключение модуля к USB-TTL конвертору

Взаимодействие с модулем осуществляется по последовательному порту посредством AT-команд.

AT-команда?

AT-команда — это текстовая строка, начинающаяся с букв «AT» (от английского attention — «внимание»). Модуль выполняет полученную команду и отправляет обратно ответ (результат выполнения команды), который также является строкой.

Для начала, чтобы просто проверить работоспособность модуля, вставляем в него рабочую SIM-карту и подключаем через USB-Serial адаптер (например, такой) к компьютеру.

Модуль “красный”

Собираем схему

Из всех 12 контактов понадобятся только 4: VCC, RXD, TXD, GND.

Где эти контакты?

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

  1. Подача питания (VCC, GND)

В документации сказано, что для стабильной работы модуля SIM800L необходим источник питания с выходным напряжением от 3,4 до 4,4 В и максимальным рабочим током 2 А. Не знаю, как это должно работать, но у меня почему-то при напряжении меньше 5 В модуль совсем никак не хотел регистрироваться в сети. Начиталась советов по сдвиганию SIM-карты в слоте, окислившимся контактам, антеннам… но потом решила подать напряжение от стандартного блока питания 5 В/2 А, и все заработало. Итак, в моем случае контакты VCC и GND соединяем с плюсом и минусом блока питания на 5 В.

Примечание 1: У меня заработало не с любым блоком на 5 В. Один блок давал напряжение 5,25 В, и с ним не работало, появлялась ошибка OVER-VOLTAGE POWER DOWN (пороговый уровень напряжения сильно превышен), и модуль отключался (уходил в защиту). С блоком на 5,06-5,16 В все заработало отлично.

Как понять, какое у меня сейчас напряжение питания на модуле?

Если нет мультиметра, то после того как подключите модуль, отправьте команду AT+CBC. Последний параметр в ответе — текущее напряжение питания модуля в милливольтах. У меня этот модуль заработал при числе около 5097.

Примечание 2: Запитать можно также от повербанка. Но имейте в виду, что модуль в режиме ожидания потребляет так мало тока, что повербанк через какое-то время самопроизвольно выключится, не принимая всерьез такое незначительное потребление. Поэтому подключите к повербанку что-нибудь еще — например, ту же Arduino после того, как зальете на нее скетч. В режиме же активной работы при передаче данных по протоколу MQTT потребление тока значительно увеличивается, поэтому повербанк выключаться уже не будет.

Это может выглядеть так

Примечание 3: ЗАПИТЫВАТЬ МОДУЛЬ ОТ ARDUINO НЕЛЬЗЯ. Напомню, что модуль может потреблять до 2 А, а Arduino не в состоянии такой ток выдавать, поэтому произойдет сбой в работе либо модуля, либо Arduino, либо того и другого (вполне вероятен выход Arduino из строя). Аналогичная история и с запитыванием от USB порта компьютера.

  1. Подключение к конвертору

Собираем схему.

SIM800L

USB-Serial

TX

RX

RX через делитель напряжения (5 В->3,3 В)

TX

GND

GND

Остальные пины не подключены

VCCIO, RTS, CTS — не подключены

Проверяла без делителя напряжения — работало долго и стабильно. Однако это дело случая, может и сгореть, поэтому так делать не надо. Проще всего сделать равноплечий делитель напряжения на паре резисторов одинакового номинала в диапазоне 1-10 КОм. В таком случае мы получим 2,5 В, что укладывается в необходимый диапазон 2,1 — 3,1 В.

Примечание — В некоторых статьях видела, что VDD модуля тоже подключают, но по факту такой вариант не работает, модуль просто не реагирует на AT команды. А вот пин GND подключать нужно обязательно.

Тестируем

Теперь проверяем корректность ответов на AT-команды. Для этого нам нужен терминал COM порта. В качестве него используем монитор порта, который есть в IDE Arduino. Никаких скетчей в данном случае писать и загружать никуда не надо, просто открываем монитор порта. Модуль может автоматически подстраиваться под одну из следующих скоростей обмена: 2400, 4800, 9600, 14400, 19200, 28800, 33600, 38400, 57600, 115200, 230400, 460800, 921600.

Каждая AT-команда (как и ответ) должна заканчиваться символами перевода строки «\r\n», поэтому в мониторе порта выставляем параметр Newline и отправляем самую простую команду AT. На нее должен прийти ответ OK.

После этого можно отправлять другие AT-команды, чтобы оценить состояние модуля.

Команды можно писать следующим образом:

  • AT+КОМАНДА=? — узнать, какие параметры поддерживает команда

  • AT+КОМАНДА? — запросить текущие значения

  • AT+КОМАНДА=ПАРАМЕТР(Ы) — установить одно или несколько значений

  • AT+КОМАНДА — установить/запросить данные, определяемые внутренними процессами модуля

Примеры:

  • AT+GCAP — возможности модуля

  • AT+GMM — идентификатор модуля

  • AT+GMR — ревизия

  • AT+GSN — IMEI модуля

  • AT+COPS? — информация об операторе

  • AT+COPS=? — доступные операторы

  • AT+CPAS — состояние модуля:

    • 0 – готов к работе

    • 2 – неизвестно (исполнение команд не гарантируется)

    • 3 – входящий звонок

    • 4 – голосовое соединение

  • AT+CREG? — Тип регистрации сети

    Первый параметр ответа:

    • 0 – нет кода регистрации сети — плохой знак, позвонить или выйти в интернет не получится

    • 1 – есть код регистрации сети

    • 2 – есть код регистрации сети + доп. параметры

    Второй параметр ответа:

    • 0 – не зарегистрирован, поиска сети нет

    • 1 – зарегистрирован, домашняя сеть

    • 2 – не зарегистрирован, идет поиск новой сети

    • 3 – регистрация отклонена

    • 4 – неизвестно

    • 5 – роуминг

  • AT+CSQ — Качество сигнала

    Первый параметр ответа — мощность сигнала rssi (от 10 и выше — нормальная):

    • 0 -115 дБм или меньше

    • 1 -111 дБм

    • 2-30 -110..-54 дБм

    • 31 -52 дБм или больше

    • 99 -неизвестно или нет сигнала.

    Второй параметр ответа — частота ошибок по битам ber:

    • 0…7 – коэффициент битовых ошибок (меньше — лучше)

    • 99 – неизвестно или нет сигнала

  • AT+CCLK? — текущая дата и время 

  • AT+CBC — монитор напряжения питания модуля

    Первый параметр ответа:

    • 0 – не заряжается

    • 1 – заряжается

    • 2 – зарядка окончена

    Второй параметр ответа — уровень заряда батареи (1-100 %)

    Третий параметр ответа — напряжение питания модуля, мВ

  • AT+CADC? — значение АЦП (до 2,8 В)

Список всех доступных AT-команд >>>

В качестве вишенки на торте позвоним на модуль, но перед этим включим определитель номера при помощи команды AT+CLIP=1. В терминале во время звонка появился текст RING и наш номер телефона, значит все хорошо и модуль работает как надо, переходим к следующему этапу.

Модуль “синий”

Собираем схему

Контакты модуля разделены на два смысловых блока:

  1. POWER

Контакты 5VIN и GND соединяем с плюсом и минусом блока питания на 5 В. 

  1. UART-TTL

Собираем схему.

SIM800L

USB-Serial

TX

RX

RX (делитель уже не нужен)

TX

GND

GND

VDD, RST — не подключены

VCCIO, RTS, CTS — не подключены

Тестируем

После подключения я, воодушевившись успехом красного модуля и решив, что все проблемы, которые только могли быть, я уже поймала, начала тестировать на AT-команды. И что вы думаете? Опять не регистрируется в сети! Блок питания подобран, SIM-карта вставлена правильно, что еще ему нужно? Ковырялась-ковырялась, шаманила, танцевала с бубном, а потом решила отправить команду на проверку наличия SIM-карты, о которой писала выше. Карта не вставлена. Тут я начала вспоминать все советы по сдвиганию карты в слоте на миллиметр и так далее. Однако при внимательном рассмотрении модуля можно обнаружить некоторую неприятность.

Посмотрите на фото и найдите ее. =)

Проверить себя

Да, вы абсолютно правы! Шаловливый производитель устроил нам небольшой квест, забыв допаять один резистор.

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

Обратите внимание на ответ команды AT+CBC. При подключении блока питания на 5 В к красному модулю мы видим число чуть больше 5000 мВ. При этом с тем же блоком синий модуль выдает 4000 мВ. Это происходит как раз за счет тех диодов, о которых упоминалось выше.

Подключение модуля к Arduino

Абсолютно у всех плат Arduino есть как минимум один последовательный порт для связи между платой Arduino и компьютером или другими устройствами (UART/USART). Однако, как вы понимаете, нам нужно таких порта два: один для общения компьютера и Arduino и один для общения Arduino и модуля. Давайте рассмотрим два типа плат Arduino: с одним портом и с несколькими. В первом случае для общения Arduino c модулем пользуемся программным UART (в этом нам поможет библиотека SoftwareSerial), во втором — аппаратным UART. 

SoftwareSerial?

“Библиотека SoftwareSerial позволяет реализовать последовательный интерфейс на любых других цифровых выводах Arduino с помощью программных средств, дублирующих возможности UART (отсюда и название «SoftwareSerial»). Библиотека позволяет программно создавать несколько последовательных портов, работающих на скорости до 115200 бод.”

Arduino UNO

Аппаратная часть

Подключение питания не меняется.

Подключение к Arduino UNO для красного модуля.

SIM800L

Arduino UNO

TX

2

RX через делитель напряжения (5 В->3,3 В)

3

GND

GND

Остальные пины не подключены

Остальные пины не подключены

Подключение к Arduino UNO для синего модуля.

SIM800L

Arduino UNO

TX

2

RX (делитель уже не нужен)

3

GND

GND

VDD, RST — не подключены

Остальные пины не подключены

Копируем приведенный ниже скетч и загружаем его в Arduino. Этот код позволяет пересылать данные между двумя последовательными связями:

  • Arduino и Arduino IDE (Serial)

  • Arduino и SIM800L (mySerial)

#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX void setup() {   Serial.begin(9600);  // Скорость обмена данными с компьютером   Serial.println("Start!");   mySerial.begin(9600);  // Скорость обмена данными с GSM модулем   mySerial.println("AT"); }  void loop() {   if (mySerial.available())     Serial.write(mySerial.read());   if (Serial.available())     mySerial.write(Serial.read()); }

Мы увидели ответ OK, значит, все хорошо и можно работать дальше.

Программная часть

Прежде чем перейти к сложному коду, давайте удостоверимся, что модуль к этому готов.

Настройка GPRS-контекста и открытие соединения

Ниже представлена последовательность команд и результат выполнения.

Команда

Результат

1

AT+CIPSTATUS — запрос текущего состояния подключения

STATE: IP INITIAL — GPRS-контекст не настроен. Во время активации контекста информация направляется в сеть GPRS и может служить условием доступа к услугам пакетной передачи данных. Сегодня многие операторы сотовой связи дают доступ в GPRS независимо от того, какой контекст был задан.

2

AT+CSTT=<APN>,<USR>,<PASS> — настройка контекста, где 

<APN> — точка доступа, 

<USR> — логин, 

<PASS> — пароль

Для моей симки Мегафон сработало так AT+CSTT=»internet», хотя потом я заметила, что вполне хорошо работает и с другими APN. Данные по любым операторам легко гуглятся.

OK

3

AT+CIPSTATUS — проверяем еще раз текущее состояние подключения

STATE: IP START — Успешная настройка контекста

4

AT+CIICR — активация контекста. С этого момента модуль получает доступ в сеть GPRS и на стороне оператора сотовой связи начинается отсчет трафика.

OK

5

AT+CIPSTATUS

STATE: IP GPRSACT

6

AT+CIFSR — запрос IP-адреса

Какой-то присвоенный IP

7

AT+CIPSTATUS

STATE: IP STATUS

8

AT+CIPSTART=»TCP»,»dev.rightech.io«,»1883» — подключение к платформе по MQTT

OK

CONNECT OK — если на данном этапе мы получаем такой результат, значит модуль исправен и поддается настройке. Через 30 секунд мы получим сообщение CLOSED, так как так и не дали брокеру MQTT понять, к какому же объекту надо подключиться.

Подключение к объекту на платформе по протоколу MQTT

Для того чтобы взаимодействовать с объектом на платформе, мы можем пойти двумя путями:

  1. Прописывать в коде все необходимые для этого AT-команды

  2. Воспользоваться готовой библиотекой, которая все эти страсти-мордасти от нас спрячет и нам останется только сформировать необходимую логику

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

Второй путь проще и позволяет без больших заморочек быстро настроить подключение. Самая удачная библиотека, которая решает нашу задачу, — TinyGSM. Она есть в Arduino IDE. Устанавливаем ее, и сразу можно пользоваться.

В разделе Примеры есть скетч, который используем как базу.

После незначительного упрощения кода получаем скетч, являющийся смысловым аналогом этого за исключением способа выхода в Интернет (там Wi-Fi).

В строке 

const char* broker = "dev.rightech.io";

указываем адрес нужного MQTT-брокера. В данном случае это адрес платформы Rightech IoT Cloud. 

В строке 

boolean status = mqtt.connect("uno_sim800");

задаем идентификатор объекта, заранее созданного на платформе с моделью MQTT.

// Select your modem: #define TINY_GSM_MODEM_SIM800  // Set serial for debug console (to the Serial Monitor, default speed 115200) #define SerialMon Serial  // Set serial for AT commands (to the module) // Use Hardware Serial on Mega, Leonardo, Micro #ifndef __AVR_ATmega328P__ #define SerialAT Serial1  // or Software Serial on Uno, Nano #else #include <SoftwareSerial.h> SoftwareSerial SerialAT(2, 3);  // RX, TX #endif  // See all AT commands, if wanted // #define DUMP_AT_COMMANDS  // Define the serial console for debug prints, if needed #define TINY_GSM_DEBUG SerialMon  // Add a reception delay, if needed. // This may be needed for a fast processor at a slow baud rate. #define TINY_GSM_YIELD() { delay(2); }  // Your GPRS credentials, if any const char apn[]      = "internet"; const char gprsUser[] = ""; const char gprsPass[] = "";  // MQTT details const char* broker = "dev.rightech.io";  #include <TinyGsmClient.h> #include <PubSubClient.h>  #define PUB_DELAY (5 * 1000) /* 5 seconds */  #ifdef DUMP_AT_COMMANDS #include <StreamDebugger.h> StreamDebugger debugger(SerialAT, SerialMon); TinyGsm        modem(debugger); #else TinyGsm        modem(SerialAT); #endif TinyGsmClient client(modem); PubSubClient  mqtt(client);  uint32_t lastReconnectAttempt = 0;  void mqttCallback(char* topic, byte* payload, unsigned int len) {   SerialMon.println(topic);   SerialMon.write(payload, len);   SerialMon.println(); }  boolean mqttConnect() {   SerialMon.print("Connecting to ");   SerialMon.print(broker);    // Connect to MQTT Broker   boolean status = mqtt.connect("uno_sim800");    if (status == false) {     SerialMon.println(" fail");     return false;   }   SerialMon.println(" success");    mqtt.subscribe("base/relay/led1");   return mqtt.connected(); }   void setup() {   // Set console baud rate   SerialMon.begin(115200);   delay(10);    SerialMon.println("Wait...");    // Set GSM module baud rate   SerialAT.begin(9600);   delay(6000);    // Restart takes quite some time   // To skip it, call init() instead of restart()   SerialMon.println("Initializing modem...");   modem.restart();   // modem.init();    String modemInfo = modem.getModemInfo();   SerialMon.print("Modem Info: ");   SerialMon.println(modemInfo);    SerialMon.print("Waiting for network...");   if (!modem.waitForNetwork()) {     SerialMon.println(" fail");     delay(10000);     return;   }   SerialMon.println(" success");    if (modem.isNetworkConnected()) {     SerialMon.println("Network connected");   }    // GPRS connection parameters are usually set after network registration   SerialMon.print(F("Connecting to "));   SerialMon.print(apn);   if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {     SerialMon.println(" fail");     delay(10000);     return;   }   SerialMon.println(" success");    if (modem.isGprsConnected()) {     SerialMon.println("GPRS connected");   }    // MQTT Broker setup   mqtt.setServer(broker, 1883);   mqtt.setCallback([] (char* topic, byte * payload, unsigned int len)  {     SerialMon.write(payload, len);     SerialMon.println();   }); }   long last = 0; void publishTemperature() {   long now = millis();   if (now - last > PUB_DELAY) {     mqtt.publish("base/state/temperature", String(random(20, 30)).c_str());     mqtt.publish("base/state/humidity", String(random(40, 90)).c_str());     last = now;   } }  void loop() {   // Make sure we're still registered on the network   if (!modem.isNetworkConnected()) {     SerialMon.println("Network disconnected");     if (!modem.waitForNetwork(180000L, true)) {       SerialMon.println(" fail");       delay(10000);       return;     }     if (modem.isNetworkConnected()) {       SerialMon.println("Network re-connected");     }      // and make sure GPRS/EPS is still connected     if (!modem.isGprsConnected()) {       SerialMon.println("GPRS disconnected!");       SerialMon.print(F("Connecting to "));       SerialMon.print(apn);       if (!modem.gprsConnect(apn, gprsUser, gprsPass)) {         SerialMon.println(" fail");         delay(10000);         return;       }       if (modem.isGprsConnected()) {         SerialMon.println("GPRS reconnected");       }     }   }    if (!mqtt.connected()) {     SerialMon.println("=== MQTT NOT CONNECTED ===");     // Reconnect every 10 seconds     uint32_t t = millis();     if (t - lastReconnectAttempt > 10000L) {       lastReconnectAttempt = t;       if (mqttConnect()) {         lastReconnectAttempt = 0;       }     }     delay(100);     return;   }    mqtt.loop();   publishTemperature(); }

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

…и получать команды.

Примечание — Заметила, что периодически происходит разрыв соединения и тут же переподключение. Как только подключила к Arduino Mega, это прошло. Думаю, что проблема в использовании SoftwareSerial. В Интернете пишут, что она подходит для проверки работы модема и отладки, но в устройствах стабильной работы добиться практически невозможно. Наиболее вероятная причина в том, что SoftwareSerial не может нормально переварить поток с модема.

Arduino Mega

Аппаратная часть

Подключение питания не меняется.

Подключение к Arduino Mega для красного модуля.

SIM800L

Arduino MEGA

TX

19

RX через делитель напряжения (5 В->3,3 В)

18

GND

GND

Остальные пины не подключены

Остальные пины не подключены

Подключение к Arduino Mega для синего модуля.

SIM800L

Arduino MEGA

TX

19

RX (делитель уже не нужен)

18

GND

GND

VDD, RST — не подключены

Остальные пины не подключены

Программная часть

Код для взаимодействия по MQTT остается тем же, однако обратите внимание на следующие строки.

// Set serial for AT commands (to the module) // Use Hardware Serial on Mega, Leonardo, Micro #ifndef __AVR_ATmega328P__ #define SerialAT Serial1  // or Software Serial on Uno, Nano #else #include <SoftwareSerial.h> SoftwareSerial SerialAT(2, 3);  // RX, TX #endif 

Благодаря директивам препроцессора автоматически происходит выбор в зависимости от платы, какой вариант UART используем: аппаратный или программный. Для Arduino MEGA это UART Serial1, поэтому модуль мы подключили к соответствующим Serial1 пинам платы (19, 18).

Для того чтобы четко определить, что состоялось подключение с новой платы, создадим другой объект на платформе с идентификатором mega_sim800 и изменим соответствующую строку в коде.

boolean status = mqtt.connect("mega_sim800");

Мой лог выглядит следующим образом. Выскочило несколько непонятных символов на моменте Waiting for network, которые, впрочем, никак не помешали подключиться и начать отправлять данные …

…и получать команды.

Выводы

  1. Если вам нужно организовать выход в Интернет там, где нет Wi-Fi, то модуль на чипе SIM800L вполне решает эту задачу.

  2. Модули капризные по части питания. Возьмите себе за правило — если модуль работает нестабильно, надо попробовать немного поднять напряжения питания.

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

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

  5. Не выбирайте программный UART, если есть такая возможность.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Работали раньше с модулем на SIM800L?
28.57% Нет, первый раз услышал о нем 2
28.57% Нет, но давно хотел попробовать 2
0% Да, не заработало 0
42.86% Да, заработало 3
Проголосовали 7 пользователей. Воздержались 2 пользователя.

ссылка на оригинал статьи https://habr.com/ru/post/657935/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *