GSM не может прочитать SMS, если Arduino не был сброшен в первый раз после включения питания
Я использую GSM-модуль с Arduino вместе с Node MCU. У меня есть источник питания 9 В, 2 А в разъеме постоянного тока Arduino и GSM Shield. Node MCU питается от 3,3 В Arduino. Я могу нормально получать сообщения в GSM, когда USB-порт Arduino (включая блок питания, о котором я упоминал ранее) подключен к ноутбуку и контролируется с помощью последовательного монитора. Однако, если я отключу USB-порт, GSM больше не сможет получать сообщения, но когда я нажму кнопку сброса Arduino, он снова начнет получать сообщения. Почему это работает только тогда, когда я сначала сбрасываю Arduino после включения питания?
#include <SoftwareSerial.h>
#include <Wire.h>
SoftwareSerial gsmSerial(2, 3);
char incomingByte;
String inputString;
// Конфигурации выводов.
const int outlet1Pin = 4;
const int outlet2Pin = 5;
const int outlet3Pin = 6;
const int ping1Pin = 7;
const int ping2Pin = 8;
const int ping3Pin = 9;
const int ping4Pin = 10;
const int ping5Pin = 11;
const int ping6Pin = 12;
const int signalPin = 13;
const int pingWaitTime = 3000;
void setup()
{
Serial.begin(9600);
gsmSerial.begin(9600);
pinMode(outlet1Pin, INPUT);
pinMode(outlet2Pin, INPUT);
pinMode(outlet3Pin, INPUT);
pinMode(ping1Pin, OUTPUT);
pinMode(ping2Pin, OUTPUT);
pinMode(ping3Pin, OUTPUT);
pinMode(ping4Pin, OUTPUT);
pinMode(ping5Pin, OUTPUT);
pinMode(ping6Pin, OUTPUT);
pinMode(signalPin, OUTPUT);
initGSM();
//Последовательный.flush();
//gsmSerial.flush();
//sendSMS("Тестовая отправка.");
}
void loop()
{
if (gsmSerial.available())
{
digitalWrite(signalPin, HIGH);
delay(500);
//Serial.println("Серийный номер доступен.");
while (gsmSerial.available())
{
incomingByte = gsmSerial.read();
inputString += incomingByte;
}
inputString.toUpperCase();
checkCommandAction(inputString);
if (inputString.indexOf("OK") == -1)
{
gsmSerial.println("AT+CMGDA=\"DEL ALL\"");
delay(1000);
}
inputString = "";
gsmSerial.flush();
}
digitalWrite(signalPin, LOW);
}
void sendSMS(String text)
{
Serial.println("Sending Text...");
gsmSerial.println("AT+CMGF=1");
delay(1000);
gsmSerial.print("AT+CMGS=\"+numberhere\"\r");
delay(1000);
gsmSerial.print(text);
delay(1000);
gsmSerial.print((char)26);
delay(1000);
gsmSerial.println();
Serial.println("Message sent!");
delay(1000);
}
void initGSM()
{
gsmSerial.println("ATE0");
while (!gsmSerial.available())
{
gsmSerial.println("AT");
delay(500);
Serial.println("Connecting...");
}
Serial.println("Connected!");
gsmSerial.println("AT+CMGF=1");
delay(500);
gsmSerial.println("AT+CNMI=1,2,0,0,0");
delay(500);
gsmSerial.println("AT+CMGL=\"REC UNREAD\"");
delay(500);
gsmSerial.println("AT+CMGDA=\"DEL ALL\"");
delay(500);
Serial.println("All messages deleted!");
Serial.println("Sending Text...");
gsmSerial.println("AT+CMGF=1");
delay(500);
gsmSerial.print("AT+CMGS=\"+639776811077\"\r");
delay(500);
gsmSerial.print("Device Initialized!");
delay(500);
gsmSerial.print((char)26);
delay(500);
gsmSerial.println();
Serial.println("Message sent!");
delay(500);
}
void checkCommandAction(String command)
{
//Serial.println("Проверить команду.");
if (command.indexOf("O1ON") > -1)
{
digitalWrite(ping1Pin, !LOW);
delay(pingWaitTime);
digitalWrite(ping1Pin, !HIGH);
Serial.println("O1ON Enter");
sendSMS("Outlet 1 Turned ON by text.");
}
else if (command.indexOf("O1OFF") > -1)
{
digitalWrite(ping4Pin, !LOW);
delay(pingWaitTime);
digitalWrite(ping4Pin, !HIGH);
Serial.println("O1OFF");
sendSMS("Outlet 1 Turned OFF by text.");
}
else if (command.indexOf("O2ON") > -1)
{
digitalWrite(ping2Pin, !LOW);
delay(pingWaitTime);
digitalWrite(ping2Pin, !HIGH);
Serial.println("O2ON");
sendSMS("Outlet 2 Turned ON by text.");
}
else if (command.indexOf("O2OFF") > -1)
{
digitalWrite(ping5Pin, !LOW);
delay(pingWaitTime);
digitalWrite(ping5Pin, !HIGH);
Serial.println("O2OFF");
sendSMS("Outlet 2 Turned OFF by text.");
}
else if (command.indexOf("O3ON") > -1)
{
digitalWrite(ping3Pin, !LOW);
delay(pingWaitTime);
digitalWrite(ping3Pin, !HIGH);
Serial.println("O3ON");
sendSMS("Outlet 3 Turned ON by text.");
}
else if (command.indexOf("O3OFF") > -1)
{
digitalWrite(ping6Pin, !LOW);
delay(pingWaitTime);
digitalWrite(ping6Pin, !HIGH);
Serial.println("O1OFF");
sendSMS("Outlet 3 Turned OFF by text.");
}
else if (command.indexOf("CHECKSTATE") > -1)
{
int state1 = !digitalRead(outlet1Pin);
int state2 = !digitalRead(outlet2Pin);
int state3 = !digitalRead(outlet3Pin);
String toSend = "";
toSend += "Outlet 1: ";
toSend += String((state1) ? ("ON") : ("OFF"));
toSend += "Outlet 2: ";
toSend += String((state2) ? ("ON") : ("OFF"));
toSend += "Outlet 3: ";
toSend += String((state3) ? ("ON") : ("OFF"));
sendSMS(toSend);
}
}
void turnPingsOn()
{
// Контакты, к которым подключены пинги,
// настраивается как INPUT_PULL up, поэтому нам нужно высокое
// это по умолчанию.
digitalWrite(ping1Pin, HIGH);
digitalWrite(ping2Pin, HIGH);
digitalWrite(ping3Pin, HIGH);
digitalWrite(ping4Pin, HIGH);
digitalWrite(ping5Pin, HIGH);
digitalWrite(ping6Pin, HIGH);
}
@LinkedRom, 👍0
1 ответ
Теоретически не следует полагаться на источник питания 3,3 В Arduino для питания платы NodeMCU, его мощности недостаточно, особенно при передаче данных по WIFI .
Вы извлекаете USB-накопитель, когда система находится в рабочем состоянии? Если так, то вы, вероятно, задеваете разные части, которые не любят задевания, и поэтому они ломаются.
Если вы извлекаете USB и ПОТОМ включаете систему, что происходит, когда вы выключаете систему и включаете ее снова через 10 секунд? Я предполагаю, что она не будет получать сообщения. Так что есть разница между подачей питания и сбросом платы, что подразумевает, что вы очень ограничены в своем блоке питания.
Если вы используете модуль SIM800 (?), им нужно 2 Ампера для передачи, поэтому если вы подаете только 2 А, то может не хватить мощности для холодного запуска, но при сбросе она есть. Так что если вы можете попробовать больше мощности, это может помочь.
Другая мысль может заключаться в том, что у вас нет надлежащего заземления (настенные бородавки обычно не заземляются), поэтому ваше USB-подключение действует как заземление. Если это так, то оно должно работать, когда ваш ПК выключен.
Извините, это немного расплывчато, но в вашем вопросе нужны названия моделей и номера деталей, чтобы люди могли быть более конкретными.
- Проблема с получением SMS - GSM-модуль Arduino Uno и SIM900A
- Мини-модем SIM900a, IMEI 0, помощь с контактами TX RX
- Как получить данные из базы данных моего сервера в переменную в моем Arduino?
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- SIM800L не регистрируется в сети
- Как проверить, работает ли GSM-модуль?
- Как отправлять сообщения на несколько номеров с помощью модуля Arduino uno и SIM800?
- Клиент MQTT на Arduino + SIM900