sim800l
- Войдите на сайт для отправки комментариев
Вс, 22/01/2017 - 21:38
Вот какая проблема!!! Подключив 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 перевожу на автономное питание ничего не работает!!! Как понимать????
Оно это .. автономное питание.. совсем не питание.. току маловато или напряжения.
Для нормальной работы модему нужно 3,7 - 4,2 В с током до 2 А...
Сам sim800l кажись работает(мигает как положен и дозвониться на него можно) а вот с смс 0 внимание:( питание отдельное на ардуино и на sim два (DC-DC понижающий преобразователь напряжения LM2596HVS (DC 4-60 B на DC 3-53 B) 3A 15W)
Да и еще пробывал на звонок вот этот код работает все нормально автономно!
#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; } }Решил проблему! При включеии на горячию ( с компа ) 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); }