sim800l

Sethod
Offline
Зарегистрирован: 23.11.2016

Вот какая проблема!!! Подключив sim800l к ардуино нано на 0 и 1 рин и реле 8 штук взял пример

#include <SoftwareSerial.h>
 
SoftwareSerial gprsSerial(7, 8);
 
//для зелёного светодиода будем использовать второй цифровой вход,
//а для жёлтого - третий
int greenPin = 2;
int yellowPin = 3;
 
void setup()
{
    gprsSerial.begin(19200);
    pinMode(greenPin, OUTPUT);
    pinMode(yellowPin, OUTPUT);
 
    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    gprsSerial.print("AT+CMGF=1\r");
    delay(300);
    gprsSerial.print("AT+IFC=1, 1\r");
    delay(300);
    gprsSerial.print("AT+CPBS=\"SM\"\r");
    delay(300);
    gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
    delay(500);
}
 
String currStr = "";
// Переменная принимает значение True, если текущая строка является сообщением
boolean isStringMessage = false;
 
void loop()
{
    if (!gprsSerial.available())
        return;
 
    char currSymb = gprsSerial.read();    
    if ('\r' == currSymb) {
        if (isStringMessage) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("Green on")) {
                digitalWrite(greenPin, HIGH);
            } else if (!currStr.compareTo("Green off")) {
                digitalWrite(greenPin, LOW);
            } else if (!currStr.compareTo("Yellow on")) {
                digitalWrite(yellowPin, HIGH);
            } else if (!currStr.compareTo("Yellow off")) {
                digitalWrite(yellowPin, LOW);
            }
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}

  пока подклчин к компу все работает принимает и выключает и вклчает, как отключаю usb перевожу на автономное питание ничего не работает!!! Как понимать????

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Оно это .. автономное питание.. совсем не питание.. току маловато или напряжения.

Ivanii
Offline
Зарегистрирован: 11.10.2015

Для нормальной работы модему нужно 3,7 - 4,2 В с током до 2 А...

Sethod
Offline
Зарегистрирован: 23.11.2016

Сам sim800l кажись работает(мигает как положен и дозвониться на него можно) а вот с смс 0 внимание:( питание отдельное на ардуино и на sim два (DC-DC понижающий преобразователь напряжения LM2596HVS (DC 4-60 B на DC 3-53 B) 3A 15W)

 

Sethod
Offline
Зарегистрирован: 23.11.2016

Да и еще пробывал на звонок вот этот код работает все нормально автономно!

#include <SoftwareSerial.h>
 
//заводим Serial-соединение с GPRS-Shield на 7 и 8 цифровых входах
SoftwareSerial gprsSerial(1, 0);
 
void setup()
{
    // GPRS Shield общается по умолчанию на скорости 19200 бод
    gprsSerial.begin(19200);
}
 
//в строке curStr будем хранить текущую строку, которую передает нам плата
String currStr = ""; 
int updateTime = 0;
 
void loop()
{
    touch();
 
    if (!gprsSerial.available())
        return;
 
    // Считываем очередной символ с платы
    char currSymb = gprsSerial.read();    
 
    if ('\r' == currSymb) { 
        // Получен символ перевода строки, это значит, что текущее
        // сообщение от платы завершено и мы можем на него отреагировать.
        // Если текущая строка - это RING, то значит, нам кто-то звонит
        if (!currStr.compareTo("RING")) {
            //кокетничаем 3 секунды, чтобы дать услышать звонящему гудок
            delay(3000);
            //посылаем команду на поднятие трубки
            gprsSerial.println("ATA");
        }
        currStr = "";
    } else if (currSymb != '\n') {
        // Дополняем текущую команду новым сиволом
        // При этом игнорируем второй символ в последовательности переноса
        // строки: \r\n
        currStr += String(currSymb);
    }
}
 
/*
 * Функция провоцирует поддержание коммуникации с платой даже если
 * та была перезагружена без перезагрузки Arduino
 */
void touch()
{
    if (millis() >= updateTime) {
        gprsSerial.println("AT");
        updateTime += 5000;
    }  
}

 

Sethod
Offline
Зарегистрирован: 23.11.2016

Решил проблему! При включеии на горячию ( с компа ) sim800l уже был подключин к сети, а в автономки нужно подождать ,тоесть 

void setup()
{
    gprsSerial.begin(19200);
    pinMode(greenPin, OUTPUT);
    pinMode(yellowPin, OUTPUT);

delay(20000); //это задержка на подключения к вышке

 
    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    gprsSerial.print("AT+CMGF=1\r");
    delay(300);
    gprsSerial.print("AT+IFC=1, 1\r");
    delay(300);
    gprsSerial.print("AT+CPBS=\"SM\"\r");
    delay(300);
    gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
    delay(500);
}