Wemos d1 mini продолжает сбрасывать настройки при использовании SIM800L
Я пытаюсь сделать небольшой проект с SIM800L с Wemos d1 mini. Это проект на основе DTMF. Проблема в том, что каждый раз, когда я звоню, d1 mini сбрасывается. Это мой первый проект с d1 mini. Последние несколько дней я гуглил, пытаясь найти решение. Но я потерпел неудачу. Буду очень признателен, если вы предоставите решение.
Я получаю следующие ошибки в последовательном мониторе:
ets Jan 8 2013,rst cause:4, boot mode:(3,7)
wdt reset
load 0x4010f000, len 3460, room 16
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4
tail 4
chksum 0xc9
csum 0xc9
v00043b40
~ld
Я использую Arduino IDE. Версия: 1.8.8
Вот код моего проекта.
#include <SoftwareSerial.h>
#define rxPin D3
#define txPin D4
SoftwareSerial sim800L(rxPin, txPin);
#define RELAY_1 D7
#define RELAY_2 D8
boolean relay1_state = false;
boolean relay2_state = false;
//хранит входящие данные от sim800l
String buff;
String dtmf_cmd;
boolean is_call = false;
String ownerNumber = "xxxxxxxxxxxxxxx";
void setup()
{
pinMode(RELAY_1, OUTPUT);
pinMode(RELAY_2, OUTPUT);
//Начать последовательную связь с (Serial Monitor)
Serial.begin(115200);
//Начать последовательную связь с (SIM800L)
sim800L.begin(9600);
Serial.println("Begin serial communication with (SIM800L)");
delay(500);
sim800L.println("AT"); //отправить AT
delay(500);
sim800L.println("AT+DDET=1"); // Включить DTMF
delay(500);
sim800L.println("AT+CLIP=1"); // Включить CallerID
delay(500);
}
void loop()
{
while (sim800L.available()) {
buff = sim800L.readString();
Serial.println("Raw: " + buff);
if (is_call == true) {
if (int index = buff.indexOf("+DTMF:") > -1 ) {
index = buff.indexOf(":");
dtmf_cmd = buff.substring(index + 1, buff.length());
dtmf_cmd.trim();
Serial.println("dtmf_cmd: " + dtmf_cmd);
doAction();
}
if (buff.indexOf("NO CARRIER") > -1) {
sim800L.println("ATH");
is_call = false;
}
}
if (buff.indexOf("RING") > -1) {
// Теперь проверяем номер вызывающего абонента
if (buff.indexOf("+CLIP:")) {
unsigned int index, index1;
index = buff.indexOf("\"");
index1 = buff.indexOf("\"", index + 1);
String temp = buff.substring(index + 2, index1);
temp.trim();
if (ownerNumber == "+" + temp) {
Serial.println("Number matched");
delay(2000);
sim800L.println("ATA");
is_call = true;
} else {
Serial.println("Number not matched");
}
}
}
}
while (Serial.available()) {
sim800L.println(Serial.readString());
}
}
void doAction() {
if (dtmf_cmd == "1") {
relay1_state = !relay1_state;
digitalWrite(RELAY_1, relay1_state);
if (relay1_state == true)
{
Serial.println("Relay 1 has been ON");
}
else
{
Serial.println("Relay 1 has been OFF");
}
}
else if (dtmf_cmd == "2") {
relay2_state = !relay2_state;
digitalWrite(RELAY_2, relay2_state);
if (relay2_state == true)
{
Serial.println("Relay 2 has been ON");
}
else
{
Serial.println("Relay 2 has been OFF");
}
}
}
@S.k.joy, 👍1
Обсуждение0
Смотрите также:
- Резервное копирование и восстановление прошивки
- ESP8266 всегда сбрасывается после 65 секунд работы
- C++ против языка Arduino?
- avrdude ser_open() can't set com-state
- Как читать и записывать EEPROM в ESP8266
- Float печатается только 2 десятичных знака после запятой
- устаревшее преобразование из строковой константы в 'char*'
- Сброс Arduino Uno в коде
Первая причина: 4, сброс сторожевого таймера. Добавьте
yield()
внутри вашегоloop()
, чтобы разрешить «дыхание» в каждом цикле., @hcheungЯ пробовал, ничего не изменилось., @S.k.joy