Прошу помощи по отправке СМС SIM800L
- Войдите на сайт для отправки комментариев
Вс, 05/03/2017 - 08:42
Подскажите пожалуйста в чем может быть пробемма. Если заливаю этот скетч
#include <SoftwareSerial.h> SoftwareSerial gprsSerial(50, 51); void setup(void) { Serial.begin(9600); delay(30); gprsSerial.begin(9600); delay(300); } void loop() { if (gprsSerial.available()) Serial.write(gprsSerial.read()); if (Serial.available()) gprsSerial.write(Serial.read()); }
И задаю АТ команды на отпраку СМС, все отправляется:
AT
OK
AT+CMGS="+795********"
> Privet
+CMGS: 5
OK
В этой программе прием СМС происходит, диоды загараются, код СМС проходит но СМСки не отправляются.
Очень прошу помощи. Заранее спасибо. Испробовал много вариантов с форума, но так п не смог разлбраться.
#include <SoftwareSerial.h> SoftwareSerial gprsSerial(50, 51); int greenPin = 11; int yellowPin = 13; int btnPin = 7; boolean prevBtn = LOW; String mess; void setup(void) { Serial.begin(9600); delay(10); gprsSerial.begin(9600); delay(300); gprsSerial.print("AT+IPR=9600\r"); delay(500); 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.println("AT+CSCS=\"GSM\""); delay(300); gprsSerial.print("AT+CNMI=2,2\r"); // gprsSerial.print("AT+CNMI=2,2,2,1,0\r"); delay(500); } String currStr = ""; // Переменная принимает значение True, если текущая строка является сообщением boolean isStringMessage = false; void loop() { boolean currBtn = digitalRead(btnPin); if (prevBtn != currBtn && currBtn == HIGH) { //кнопка для отправки смс sendTextMessage("knopka"); Serial.println ("knopka"); } prevBtn = currBtn; if (!gprsSerial.available()) return; char currSymb = gprsSerial.read(); if ('\r' == currSymb) { if (isStringMessage) { //если текущая строка - SMS-сообщение, //отреагируем на него соответствующим образом if (!currStr.compareTo("A")) { digitalWrite(greenPin, HIGH); mess = ("Green vkl"); sendTextMessage(mess); } else if (!currStr.compareTo("S")) { digitalWrite(greenPin, LOW); mess = ("Green otkl"); sendTextMessage(mess); } else if (!currStr.compareTo("Z")) { digitalWrite(yellowPin, HIGH); mess = ("Yellow vkl"); sendTextMessage(mess); } else if (!currStr.compareTo("X")) { digitalWrite(yellowPin, LOW); mess = ("Yellow otkl"); sendTextMessage(mess); } isStringMessage = false; } else { if (currStr.startsWith("+CMT")) { //если текущая строка начинается с "+CMT", //то следующая строка является сообщением isStringMessage = true; } } currStr = ""; } else if ('\n' != currSymb) { currStr += String(currSymb); } } void sendTextMessage(String mes) { Serial.println ("SMS START"); delay(300); if (gprsSerial.println("AT+CMGF=1")); // Устанавливает текстовый режим для SMS-сообщений { Serial.println ("AT+CMGF=1 OK"); } delay(300); // даём время на усваивание команды if (gprsSerial.println (("AT+CSCS=\"GSM\""))); { Serial.println ("AT+CSCS= GSM OK"); } delay(300); gprsSerial.print("AT + CMGS ="); gprsSerial.print((char)34); gprsSerial.print ("+79519827414"); gprsSerial.print((char)34); gprsSerial.println((char)13); delay(1500); // Пишем текст сообщения gprsSerial.print(mes); delay(700); gprsSerial.print ((char)26); // Отправляем Ctrl+Z, обозначая, что сообщение готово delay(3000); Serial.println ("SMS STOP"); }
Может кому поможет, потратил много времени, чтоб отправить смс. Вытащил этот код с библиотеки. теперь смс отправляет. За скетч не ругайте я новичек, теперь можно шлифовать.
Доброго времени суток всем!
Осваиваю SIM800l, пытаюсь его прикрутить к ESP8266 12e (NodeMcu) через библиотеки типа sim900, хочу научиться, но пока ничего не получается.
Сам Sim800l рабочий, питание отдельное нормальное 4,2в на 2 А. Через софтсериал модем работает, АT команды принимает и на них отвечает правильно. ESP кА тоже рабочая, GND общий. Скорости менял.
Модем никак не хочет работать с библиотеками( причем разными) sim900,sim800 и т.д.
В некоторых библиотеках работают примеры только с АT командами и все.
В GSM.cpp менял пины и так и так (т.е. D1(5) и D2(4) для esp8266)
#define _GSM_TXPIN_ 4
#define _GSM_RXPIN_ 5
#define _GSM_TXPIN_ D2
#define _GSM_RXPIN_ D1
Все равно смс, звонки и т.д. не работает. На разных библиотеках пишет либо ошибка компиляции для платы ESP8266, либо компилируется, но не работает, так понимаю сторожевой таймер срабатывает. ( в сериал шпарит перезагрузка) Может где в этих библиотеках что-то нужно поменять под ESP8266?
Я так понимаю все билиотеки под разные ардуино написаны, а для ESP8266 есть библиотеки для SIM800L может кто с этим сталкивался, либо как мне их подружить.
Подскажите, где собака зарыта?
Попробой этот код,
Позже еще выложу вариант, я тоже долго мучался
Вот этот скетч у меня работает. Работатет только на скорости 9600. Иногда после заливки скетча нужно перезагрузить модем и ESP.
Такой я уже пробовал, так работает
с библиотеками sim800 и ESP8266 пока никак не хотят работать
в сериал пишет:
GSM Shield testing.
DB:ELSE
DB:ELSE
DB:ELSE
DB:CORRECT BR
status=READY
Soft WDT reset
ctx: cont
sp: 3ffef850 end: 3ffefac0 offset: 01b0
и т.д. по кругу. Почему сторожевой таймер срабатывает?
В этом скетче нет функции отправки СМС, пробовал вставлять. У меня прием происходил, а отправка нет.