Привет друзья! Пора продолжить тему SIM800.

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

В инструкции на AT-команды модуля SIM800 предусмотрена команда AT-COPS. Она отвечает за выбор оператора. Здесь первый запрос AT-COPS=? возвращает список найденных поблизости сетей GSM-операторов. Список содержит длинные имена операторов, сокращённые, а так же цифровые.


Второй запрос AT+COPS? возвращает текущий режим модуля SIM800. Формат вывода следующий: номер режима, формат наименования оператора и само наименование.

Третья в списке идет управляющая команда. В ней нужно передать такие параметры, как режим, формат имени оператора и само имя.

Здесь указан параметр “stat”, но он помоему относится только к первому тестовому запросу и определяет, выявленный оператор неизвестен, доступен, текущий или запрещён.

Нам здесь интересны только режимы: 0-автоматический, 1-ручной и возможно 4-й-ручной с автоматическим подхватом.

А форматы указания имени оператора в ручном режиме мы изучим на практике.

Схема подключения Arduino Nano к GSM модулю SIM800L будет прежней, как в предыдущих видео.


Для опытов я как всегда буду использовать наш шилд для Arduino Nano + SIM800. Вы можете купить его у нас или собрать свою схему.

Шилд помогает согласовать сигналы 5В и 3,3В, а так же обеспечивает рекомендованое напряжение питания SIM800, порядка 4В.

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

Праграмма взята из предыдущего видео. Я просто заменяю прошлые команды на новую в секции loop. Для начала я хочу протестировать запрос, который покажет текущую настройку по GSM-оператору.

//https://geekmatic.in.ua | https://pinout.uno
#include <SoftwareSerial.h>
SoftwareSerial SIM800serial (2, 3);

#define OK 1 #define NOTOK 2 #define TIMEOUT 3 String txt; void setup() { pinMode(5, OUTPUT); digitalWrite(5, HIGH); //SIM800 ON only for this module Serial.begin(9600); SIM800serial.begin(9600); delay(5000); SIM800command("AT", "OK", "ERROR", 500, 5); } void loop() { //current selection mode and operator SIM800command("AT+COPS?", "OK", "ERROR", 5000, 1); delay(2000); //to show the list of available operators SIM800command("AT+COPS=?", "OK", "ERROR", 20000, 1); //manual long alphanumeric SIM800command("AT+COPS=1,0,\"KYIVSTAR\"", "OK", "ERROR", 10000, 1); SIM800command("AT+COPS?", "OK", "ERROR", 5000, 1); //auto (default) SIM800command("AT+COPS=0", "OK", "ERROR", 10000, 1); //manual long alphanumeric SIM800command("AT+COPS=1,0,\"Astelit\"", "OK", "ERROR", 10000, 1); SIM800command("AT+COPS?", "OK", "ERROR", 5000, 1); //manual short alphanumeric SIM800command("AT+COPS=1,1,\"UA-KS\"", "OK", "ERROR", 10000, 1); SIM800command("AT+COPS?", "OK", "ERROR", 5000, 1); //manual with automatic fallback //If manual fails than automatic is entered SIM800command("AT+COPS=4,0,\"arduino\"", "OK", "ERROR", 10000, 1); SIM800command("AT+COPS?", "OK", "ERROR", 5000, 1); //manual long alphanumeric with error SIM800command("AT+COPS=1,0,\"arduino\"", "OK", "ERROR", 10000, 1); SIM800command("AT+COPS?", "OK", "ERROR", 5000, 1); delay(10000);
}
byte SIM800command(String command, String response1, String response2, uint16_t timeOut, uint16_t repetitions) {
byte returnValue = NOTOK;
byte countt = 0;
while (countt < repetitions && returnValue != OK) {
SIM800serial.println(command);
if (SIM800waitFor(response1, response2, timeOut) == OK) {
returnValue = OK;
} else {returnValue = NOTOK;}
countt++;
}
return returnValue;
}

byte SIM800waitFor(String response1, String response2, uint16_t timeOut) { uint16_t entry = 0; uint16_t count = 0; String reply = SIM800read(); byte retVal = 99; do { reply = SIM800read(); delay(1); entry ++; } while ((reply.indexOf(response1) + reply.indexOf(response2) == -2) && entry < timeOut ); if (entry >= timeOut) { retVal = TIMEOUT; } else { if (reply.indexOf(response1) + reply.indexOf(response2) > -2) retVal = OK; else retVal = NOTOK; } return retVal; } String SIM800read() { String reply = ""; if (SIM800serial.available()) { reply = SIM800serial.readString(); } if (reply!=""){ Serial.print("Reply: "); Serial.println(reply); txt = reply; } return reply;
}

После загрузки программы в контроллер видим сначала ответ COPS:0. Это ещё неопределённое состояние в автоматическом режиме.

На повторный запрос SIM800 отвечает двумя нулями и названием текущего оператора.

Первый ноль – это режим автоматический. Второй ноль – это формат наименования длинный буквенный. Тоесть модуль SIM800 сообщает нам, что он при автоматическом определении оператора выбрал одного конкретного.

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

Загружаю скетч в Arduino и получаю следующие ответы SIM800. Видим список из трех операторов.

Первая цифра – это параметр stat. Единица означает, что данный оператор доступен.

Первое наименование – это длинный формат, потом идет короткий.

Последняя цифра – это цифровое наименование оператора.

Эти два запроса в скетче будут нам показывать полную диагностическую картину в нашем исследовании.

Идем дальше, и добавляем команду для ручного назначения GSM-оператора. Здесь первая цифра задает ручной режим, а вторая – длинный формат названия.

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

После загрузки новой программы в Arduino видим правильный отклик на основную управляющую команду. Единица – это ручной режим, а ноль – это длинный формат.

Теперь я покажу как вернуть автоматическое подключение к сети GSM. Для этого вставляю команду COPS=0.

Так же рядом оставляю запрос на текущее состояние подключения.

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

Теперь давайте попробуем вручную подключиться к другому оператору, который не относится к моей SIM-карте.

Вот прошла команда на подключение к стороннему оператору.

А вот SIM800 уже подключилась к нему без проблем.

Теперь я заменю в основной команде два параметра.

Вторая единица задаст короткий формат имени.

А короткое имя я введу от первого GSM-оператора. И проверим нашу команду в коротком формате имени.

Короткий формат на SIM800 тоже хорошо работает.

А теперь изменю настройки и проверим четвертый режим определения оператора. Это ручной режим, который при неудачном подключении переходит в автоматический. И имя я специально взял неправильное. Операторов Arduino в моей стране нет.

При обработке заведомо неправильного наименования SIM800 ругается и не желает переходить в четвертый режим. Просто отбрасывает управляющий запрос. Ну не находиш ты такого оператора, так перейди в четвертый режим и найди подходящего оператора автоматически! Так нет же! Вообще не переходит в четвертый режим. Берем это на заметку.

Это был четвертый режим, а как поведет себя SIM800L при ошибочном названии в первом ручном режиме.

В этом режиме видим тоже ошибку и игнорирование команды.

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

А для возврата в автоматический режим будем вводить команду COPS=0.

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

AT+COPS - это очень важная команда для локаций, где можно словить нежелательный роуминг. Советую предусматривать эту настройку для пользователей в ваших GSM-устройствах.

Наш модуль можно купить по ссылкам в описании.

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

Всем удачи и до новых встреч.



<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Клавиатура для панели управления аналоговая

Клавиатура для панели управления аналоговая

Аналоговая клавиатура может использоваться как джойстик управления или как панель управления менюшко..

100.02грн.

Стойка нейлоновая М3 15мм + 6мм

Стойка нейлоновая М3 15мм + 6мм

Стойка для крепления различных електронных модулей к корпусу устройстваВысота стойки 15 ммДлина внеш..

3.60грн.

Муфта на шаговый двигатель 5x5x25мм

Муфта на шаговый двигатель 5x5x25мм

Данная муфта служит переходником между валами 5 мм и 5 мм. Тоесть имеет с обеих сторон отверстие диа..

60.04грн.

Модуль стабилизатора напряжения 3,3 В

Модуль стабилизатора напряжения 3,3 В

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

18.61грн.

Arduino SIM800 тест схемы подключения

Arduino SIM800 тест схемы подключения

Привет друзья! Arduino SIM800 тест схемы подключения. С этого блога начнем новую рубрику. За последн..