Небольшая библиотека Arduino для модулей GSM, которая просто работает.
Если вам нравится TinyGSM — поставьте ему звездочку или сделайте форк и внесите свой вклад!
Вы также можете присоединиться к нашему чату:
Эту библиотеку легко интегрировать со многими эскизами, использующими Ethernet или Wi-Fi. Приводятся примеры PubSubClient (MQTT) , Blynk , HTTP-клиента и загрузки файлов .
Полный пример WebClient для Arduino Uno (через Software Serial) требует мало ресурсов:
Sketch uses 15022 bytes (46%) of program storage space. Maximum is 32256 bytes.
Global variables use 574 bytes (28%) of dynamic memory, leaving 1474 bytes for local variables. Maximum is 2048 bytes.
Библиотека Arduino GSM использует 15868 байт (49%) флэш-памяти и 1113 байт (54%) ОЗУ в аналогичном сценарии. TinyGSM также аккуратно извлекает данные из модема (когда это возможно), поэтому он может работать с очень небольшим объемом оперативной памяти. Теперь у вас есть больше места для ваших экспериментов.
Следите за этим репо, чтобы быть в курсе новых обновлений! И, конечно же, вклады приветствуются ;)
Подключения к данным
USSD-запрос
SMS
Голосовые вызовы
Расположение
Кредиты
AT
команду, используя этот эскиз.Общий поток вашего кода должен быть таким:
#define TINY_GSM_MODEM_SIM800
#include
TinyGsm modem(SerialAT);
TinyGsmClient client(modem);
или TinyGsmClientSecure client(modem);
(на поддерживаемых модулях)TinyGsmClient clientX(modem, 0);
, TinyGsmClient clientY(modem, 1);
и т. д. илиTinyGsmClientSecure clientX(modem, 0);
, TinyGsmClientSecure clientY(modem, 1);
, и т. дmodem.init()
или modem.restart()
modem.simUnlock(GSM_PIN)
modem.networkConnect(wifiSSID, wifiPass)
modem.waitForNetwork(600000L)
modem.gprsConnect(apn, gprsUser, gprsPass)
(или просто modem.gprsConnect(apn)
)client.connect(server, port)
Многими GSM-модемами, модулями Wi-Fi и радио можно управлять, отправляя AT-команды через последовательный порт. TinyGSM знает, какие команды отправлять и как обрабатывать AT-ответы, и включает это в стандартный интерфейс клиента Arduino.
Эта библиотека «блокирует» все свои коммуникации. В зависимости от функции ваш код может быть заблокирован на долгое время в ожидании ответов модуля. Помимо очевидных функций (например, waitForNetwork()
), некоторые другие функции могут заблокировать ваш код на срок до нескольких минут . Функции gprsConnect()
и client.connect()
обычно блокируют дольше всего, особенно в регионах с плохим обслуживанием. Выключение и перезапуск модуля также могут происходить довольно медленно.
Эта библиотека не поддерживает какие-либо «аппаратные» средства управления или элементы управления на уровне контактов для модулей. Если вам нужно включить модуль или сбросить его с помощью какой-либо последовательности выводов High/Low/High, вы должны написать эти функции самостоятельно.
Для потоков данных GPRS эта библиотека предоставляет стандартный интерфейс клиента Arduino. Дополнительные функции см. в этом примере эскиза.
Большинству модулей для правильного подключения к сети требуется ток до 2 А. Это в 4 раза больше, чем обеспечивает «стандартный» USB! Улучшение источника питания во многих случаях фактически решает проблемы со стабильностью!
Большинство модулей поддерживают своего рода функцию «автоматического изменения скорости», при которой модуль пытается настроить скорость передачи данных в соответствии с тем, что он получает. TinyGSM также реализует собственную функцию автоматического переключения скорости ( TinyGsmAutoBaud(SerialAT, GSM_AUTOBAUD_MIN, GSM_AUTOBAUD_MAX);
). Хотя они очень полезны при первоначальном подключении к модулю и выполнении тестов, их НЕ следует использовать в каком-либо производственном коде. После того, как вы установили связь с модулем, установите скорость передачи данных с помощью функции setBaud(#)
и придерживайтесь этой скорости.
Иногда (особенно если вы играли с AT-командами) конфигурация вашего модуля может стать недействительной. Это может привести к таким проблемам, как:
Чтобы вернуть модуль к заводским настройкам , используйте этот эскиз: Файл -> Примеры -> TinyGSM -> инструменты -> FactoryReset.
В некоторых случаях вам может потребоваться установить начальный APN для подключения к сотовой сети. Попробуйте использовать функцию gprsConnect(APN)
для установки начального APN, если вы не можете зарегистрироваться в сети. После регистрации вам может потребоваться снова установить APN. (В большинстве случаев вам следует установить APN после регистрации.)
Первое подключение с новой SIM-картой, новым модулем или в новой локации/вышке может занять ДОЛГОЕ время — до 15 минут и даже больше, особенно если качество сигнала не очень хорошее. Если это ваше первое соединение, возможно, вам придется изменить время ожидания и, возможно, пойти на обед, пока вы ждете.
Если вы можете открыть TCP-соединение, но оно закрывается до получения данных, попробуйте добавить в запрос заголовок проверки активности. Некоторые модули (например, SIM7000 в режиме SSL) сразу же удаляют все непрочитанные данные, когда удаленный сервер закрывает соединение - иногда даже не уведомляя о том, что данные прибыли. При использовании MQTT для поддержания непрерывного соединения вам может потребоваться уменьшить интервал поддержания активности (PINGREQ/PINGRESP).
Используйте этот эскиз, чтобы диагностировать проблемы с SIM-картой и GPRS-соединением: Файл -> Примеры -> TinyGSM -> инструменты -> Диагностика.
Если диагностика не удалась, раскомментируйте эту строку, чтобы вывести некоторые отладочные комментарии из библиотеки:
# define TINY_GSM_DEBUG SerialMon
В любом пользовательском коде перед включением библиотеки TinyGSM необходимо определить TINY_GSM_DEBUG
.
Если вы не видите каких-либо очевидных ошибок при отладке библиотеки, используйте StreamDebugger для копирования всей последовательности AT-команд в основной последовательный порт. В примере диагностики просто раскомментируйте строку:
# define DUMP_AT_COMMANDS
В собственный код вы можете добавить этот фрагмент:
# ifdef DUMP_AT_COMMANDS
# include < StreamDebugger.h >
StreamDebugger debugger (SerialAT, SerialMon);
TinyGsm modem (debugger);
# else
TinyGsm modem (SerialAT);
# endif
Эта библиотека открывает соединение TCP (или SSL) с сервером. В модели OSI это уровень 4 (или 5 для SSL). HTTP (GET/POST), MQTT и большинство других функций, которые вы, вероятно, захотите использовать, работают на уровне 7. Это означает, что вам нужно либо вручную закодировать верхний уровень, либо использовать другую библиотеку (например, HTTPClient или PubSubClient) для этого. это для тебя. Такие инструменты, как PostMan, также отображают уровень 7, а не уровни 4/5, как TinyGSM. Если вы успешно подключаетесь к серверу, но получаете ответы «неверный запрос» (или отсутствие ответа), возможно, проблема в вашем форматировании. Вот несколько советов по написанию уровня 7 (особенно HTTP-запроса) вручную:
client.print("...")
или client.write(buf, #)
или даже client.write(String("..."))
, а не client.write("...")
для помочь предотвратить отправку текста по одному символу (стиль пишущей машинки)client.print(String( " GET " ) + resource + " HTTP/1.1 rn " );
client.print( " GET " );
client.print(resource);
client.println( " HTTP/1.1 " )
client.print("....rnrn")
или добавьте дополнительный client.println()
При использовании SoftwareSerial
(на Uno, Nano и т.д.) скорость 115200 может не работать. Попробуйте выбрать 57600 , 38400 или даже ниже — тот, который вам больше всего подходит. В некоторых случаях 9600 работает нестабильно, но помогает использование 38400 и т. д. Обязательно установите правильные контакты TX/RX в скетче. Обратите внимание, что не каждый вывод Arduino может служить в качестве вывода TX или RX. Подробнее об опциях и настройке SoftSerial можно прочитать здесь и здесь.
При использовании ESP32 HardwareSerial
вам может потребоваться указать дополнительные параметры для вызова .begin()
. Пожалуйста, обратитесь к этому комментарию.
Вы не сможете скомпилировать примеры HttpClient или HttpsClient с ядром ESP32 1.0.2. Обновите версию до 1.0.3, перейдите на версию 1.0.1 или используйте пример WebClient.
При использовании плат на базе SAMD21 вам может потребоваться использовать порт Sercom UART вместо Serial1
. Пожалуйста, обратитесь к этому комментарию.
Оказывается, Goouuu Tech IOT-GA6 — это не то же самое, что AI-Thinker A6 . К сожалению, IOT-GA6 пока не поддерживается «из коробки». Есть некоторые намеки на то, что прошивку IOT-GA6 можно обновить до версии A6... См. эту тему.
Некоторые, но не все версии SIM800 поддерживают SSL. Наличие поддержки SSL зависит от версии прошивки и отдельного модуля. Пользователи с разной степенью успеха использовали SSL на SIM800 даже с внешне идентичной прошивкой. Если вам нужен SSL, но он не работает на вашем SIM800, попробуйте другой модуль или попробуйте использовать дополнительную библиотеку SSL.
Существует две версии кода SIM7000: одна использует TINY_GSM_MODEM_SIM7000
, а другая — TINY_GSM_MODEM_SIM7000SSL
. Версия TINY_GSM_MODEM_SIM7000
не поддерживает SSL , но поддерживает до 8 одновременных подключений. Версия TINY_GSM_MODEM_SIM7000SSL
поддерживает как SSL , так и незащищенные соединения, до двух одновременных подключений. Так почему же существуют две версии? Версия «SSL» использует «прикладные» команды SIM7000, а другая использует «набор инструментов TCP-IP». В зависимости от вашего региона/прошивки тот или иной вариант может вам не подойти. Попробуйте оба варианта и выберите тот, который более стабилен. Если вам не нужен SSL, рекомендую начать с TINY_GSM_MODEM_SIM7000
.
Этот проект выпущен под лицензией GNU Lesser General Public License (LGPL-3.0).