Здравствуйте товарищи! Нигде не могу найти решения задачи. Собрал простую схемку на ардуино нано, (управление питанием реле по GSM каналу), залил скаченный из инета скетч, все скомпилировано. Все подключено через mini usb, от порта ПК. Открываю монитор порта, все работает, на смс команды реагирует, on/off. Отключаю от ПК, подсоединяю через блок питания 5v 3A, и через разные другие пробовал, ардуино включается, модем ловит сеть, в общем как по нотам, но на смс команды не реагирует. Включаю обратно на ПК, все работает. Соответственно скетч на месте. В чем проблема? #include <SoftwareSerial.h> SoftwareSerial mySerial(10,11); // (Rx,Tx > Tx,Rx) char incomingByte; String inputString; int relay = 13; // Выход для управления реле void setup() { pinMode(relay, OUTPUT); digitalWrite(relay, LOW); // Исходное состояние реле Serial.begin(9600); mySerial.begin(9600); while(!mySerial.available()){ mySerial.println("AT"); delay(1000); Serial.println("Connecting..."); } Serial.println("Connected!"); mySerial.println("AT+CMGF=1"); // Установка SMS в текстовый режим delay(1000); mySerial.println("AT+CNMI=1,2,0,0,0"); // Процедура обработки вновь полученных сообщений delay(1000); mySerial.println("AT+CMGL=\"REC UNREAD\""); // Прочитать непрочитанные сообщения } void loop() { if(mySerial.available()){ delay(100); // Последовательный буфер while(mySerial.available()){ incomingByte = mySerial.read(); inputString += incomingByte; } delay(10); Serial.println(inputString); inputString.toUpperCase(); // включить или выключить реле if (inputString.indexOf("ON") > -1){ digitalWrite(relay, HIGH); } if (inputString.indexOf("OFF") > -1){ digitalWrite(relay, LOW); } delay(50); // Удалить сообщения и сохранить память if (inputString.indexOf("OK") == -1){ mySerial.println("AT+CMGDA=\"DEL ALL\""); delay(1000);} inputString = ""; } }
Код (C++): #include <SoftwareSerial.h> SoftwareSerial mySerial(10,11); // (Rx,Tx > Tx,Rx) char incomingByte; String inputString; int relay = 13; // Выход для управления реле void setup() { pinMode(relay, OUTPUT); digitalWrite(relay, LOW); // Исходное состояние реле Serial.begin(9600); mySerial.begin(9600); while(!mySerial.available()){ mySerial.println("AT"); delay(1000); Serial.println("Connecting..."); } Serial.println("Connected!"); mySerial.println("AT+CMGF=1"); // Установка SMS в текстовый режим delay(1000); mySerial.println("AT+CNMI=1,2,0,0,0"); // Процедура обработки вновь полученных сообщений delay(1000); mySerial.println("AT+CMGL=\"REC UNREAD\""); // Прочитать непрочитанные сообщения } void loop() { if(mySerial.available()){ delay(100); // Последовательный буфер while(mySerial.available()){ incomingByte = mySerial.read(); inputString += incomingByte; } delay(10); Serial.println(inputString); inputString.toUpperCase(); // включить или выключить реле if (inputString.indexOf("ON") > -1){ digitalWrite(relay, HIGH); } if (inputString.indexOf("OFF") > -1){ digitalWrite(relay, LOW); } delay(50); // Удалить сообщения и сохранить память if (inputString.indexOf("OK") == -1){ mySerial.println("AT+CMGDA=\"DEL ALL\""); delay(1000);} inputString = ""; } }
да все просто, от усб проваливается напруга и модем ее переваривает, а когда подается честные 5 вольт, он ругается на овервольтаж и устраивает забастовку. ... хрустальный шар починил, ес что.
Сеть же ловит. Модем SIM800l EVB, написано что питается от 5v, не как SIM800L который от 4v. То есть подать питание через резистор?
Спасибо господа! При 4 вольтах все заработало. Бред конечно, но работает. Другие проекты, делал сигнализацию, работали нормально без DC-DC конвертора.