Узел MCU не работает правильно
у меня есть узел mcu, и я загрузил один пример кода, чтобы проверить его для декодирования радиочастотного сигнала. поэтому после этого я написал код, основанный на этом, и когда я загрузил код, мой узел MCU внезапно не работает так, как должен быть. Он выдает некоторые случайные вещи на последовательный монитор, как это:
⸮L⸮⸮⸮ՋR(⸮⸮^⸮̓#⸮⸮;'⸮⸮(Zs"⸮⸮Z|⸮⸮⸮'⸮⸮⸮'⸮⸮⸮!#⸮⸮⸮G⸮⸮⸮⸮⸮h⸮y⸮⸮⸮⸮'⸮⸮LD⸮⸮J⸮*J⸮⸮⸮⸮⸮⸮⸮LD⸮⸮⸮⸮F(⸮y⸮⸮'1⸮L⸮⸮⸮
КОД:
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <RCSwitch.h>
BlynkTimer clocktime;
#define relayfan 5
#define relaylight 6
#define relaylightb 7
#define relayrandom 2
#define VPIN_BUTTON_1 V12
#define VPIN_BUTTON_2 V13
#define VPIN_BUTTON_3 V14
#define VPIN_BUTTON_4 V15
RCSwitch mySwitch = RCSwitch();
int relayfanstate = HIGH;
int relaylightstate = HIGH;
int relaylightbstate = HIGH;
int relayrandomstate = HIGH;
int mainstate = HIGH;
long code;
char auth[] = "rJUG7fhgXk9Y7OlowTontA1C2irfpgs2";
const char *ssid = "Nag";
const char *pass = "87654321";
BLYNK_CONNECTED()
{
Serial.println("blynk connected first function");
Blynk.syncVirtual(VPIN_BUTTON_1);
Blynk.syncVirtual(VPIN_BUTTON_2);
Blynk.syncVirtual(VPIN_BUTTON_3);
Blynk.syncVirtual(VPIN_BUTTON_4);
}
BLYNK_WRITE(VPIN_BUTTON_1)
{
Serial.println("blynk write");
relayfanstate = param.asInt();
digitalWrite(relayfan, relayfanstate);
}
BLYNK_WRITE(VPIN_BUTTON_2)
{
Serial.println("blynk write");
relaylightstate = param.asInt();
digitalWrite(relaylight, relaylightstate);
}
BLYNK_WRITE(VPIN_BUTTON_3)
{
Serial.println("blynk write");
relaylightbstate = param.asInt();
digitalWrite(relaylightb, relaylightbstate);
}
BLYNK_WRITE(VPIN_BUTTON_4)
{
Serial.println("blynk write");
relayrandomstate = param.asInt();
digitalWrite(relayrandom, relayrandomstate);
}
void setup()
{
Serial.begin(9600);
mySwitch.enableReceive(0);
pinMode(relayfan, OUTPUT);
pinMode(relaylight, OUTPUT);
pinMode(relaylightb, OUTPUT);
pinMode(relayrandom, OUTPUT);
digitalWrite(relayfan, HIGH);
digitalWrite(relaylight, HIGH);
digitalWrite(relaylightb, HIGH);
digitalWrite(relayrandom, HIGH);
Serial.println("Start");
WiFi.begin(ssid, pass);
Serial.println("wifi config done");
Blynk.config(auth);//, ssid, pass);
Serial.println("Blynk config done");
}
void loop()
{
if (WiFi.status() != WL_CONNECTED)
{
Serial.println("Not Connected");
Serial.println("Without internet rf code recieving started");
delay(500);
if (mySwitch.available())
{
Serial.println("Switch available");
code = mySwitch.getReceivedValue();
if (mySwitch.getReceivedValue() == 8594433)
{
Serial.println("code matched without internet");
mainstate = !mainstate;
digitalWrite(relayfan, mainstate);
digitalWrite(relaylight, mainstate);
digitalWrite(relaylightb, mainstate);
digitalWrite(relayrandom, mainstate);
delay(1000);
mySwitch.resetAvailable();
}
else if(mySwitch.getReceivedValue() == 8594447)
{
digitalWrite(relayfan, LOW);
delay(1000);
mySwitch.resetAvailable();
}
else if(mySwitch.getReceivedValue() == 8594445)
{
digitalWrite(relayfan, HIGH);
delay(1000);
mySwitch.resetAvailable();
}
else if(mySwitch.getReceivedValue() == 8594436)
{
relaylightstate = !relaylightstate;
digitalWrite(relaylight, relaylightstate);
delay(1000);
mySwitch.resetAvailable();
}
else if(mySwitch.getReceivedValue() == 8594437)
{
relaylightbstate = !relaylightbstate;
digitalWrite(relaylightb, relaylightbstate);
delay(1000);
mySwitch.resetAvailable();
}
else if(mySwitch.getReceivedValue() == 8594439)
{
relayrandomstate = !relayrandomstate;
digitalWrite(relayrandom, relayrandomstate);
delay(1000);
mySwitch.resetAvailable();
}
}
}
else
{
Serial.println(" Connected");
Blynk.run();
with_internet();
}
clocktime.run();
}
void with_internet()
{
Serial.println("With internet rf code recieving started");
delay(500);
if (mySwitch.available())
{
Serial.println("Switch available");
code = mySwitch.getReceivedValue();
if (mySwitch.getReceivedValue() == 8594433)
{
Serial.println("code matched without internet");
mainstate = !mainstate;
digitalWrite(relayfan, mainstate);
digitalWrite(relaylight, mainstate);
digitalWrite(relaylightb, mainstate);
digitalWrite(relayrandom, mainstate);
Blynk.virtualWrite(VPIN_BUTTON_1, mainstate);
Blynk.virtualWrite(VPIN_BUTTON_2, mainstate);
Blynk.virtualWrite(VPIN_BUTTON_3, mainstate);
Blynk.virtualWrite(VPIN_BUTTON_4, mainstate);
delay(1000);
mySwitch.resetAvailable();
}
else if(mySwitch.getReceivedValue() == 8594447)
{
digitalWrite(relayfan, LOW);
Blynk.virtualWrite(VPIN_BUTTON_1, LOW);
delay(1000);
mySwitch.resetAvailable();
}
else if(mySwitch.getReceivedValue() == 8594445)
{
digitalWrite(relayfan, HIGH);
Blynk.virtualWrite(VPIN_BUTTON_1, HIGH);
delay(1000);
mySwitch.resetAvailable();
}
else if(mySwitch.getReceivedValue() == 8594436)
{
relaylightstate = !relaylightstate;
digitalWrite(relaylight, relaylightstate);
Blynk.virtualWrite(VPIN_BUTTON_2, relaylightstate);
delay(1000);
mySwitch.resetAvailable();
}
else if(mySwitch.getReceivedValue() == 8594437)
{
relaylightbstate = !relaylightbstate;
digitalWrite(relaylightb, relaylightbstate);
Blynk.virtualWrite(VPIN_BUTTON_3, relaylightbstate);
delay(1000);
mySwitch.resetAvailable();
}
else if(mySwitch.getReceivedValue() == 8594439)
{
relayrandomstate = !relayrandomstate;
digitalWrite(relayrandom, relayrandomstate);
Blynk.virtualWrite(VPIN_BUTTON_4, relayrandomstate);
delay(1000);
mySwitch.resetAvailable();
}
}
}
может ли кто-нибудь сказать мне, что не так с моим кодом или моим модулем nodemcu? Это потому, что я загрузил два кода один за другим и испортил модуль?
1 ответ
Может ли кто нибудь просто попытаться загрузить этот код в свой узел MCU изменив учетные данные Wi Fi и токен blynk Auth на один из ваших собственных проектов следуя руководству blynk и проверить подключается ли он к blynk и это только проблема с моим модулем или есть какая то проблема в моем коде
Это может быть необходимо, чтобы увидеть больше проблем. Но не обязательно видеть хотя бы одну важную. Вот до чего я сократил ваш код:
#define relayfan 5
#define relaylight 6
#define relaylightb 7
#define relayrandom 2
void setup() {
Serial.begin(9600);
pinMode(relayfan, OUTPUT);
pinMode(relaylight, OUTPUT);
pinMode(relaylightb, OUTPUT);
pinMode(relayrandom, OUTPUT);
digitalWrite(relayfan, HIGH);
digitalWrite(relaylight, HIGH);
digitalWrite(relaylightb, HIGH);
digitalWrite(relayrandom, HIGH);
Serial.println("Start");
}
void loop() {
Serial.println("loop()");
}
Итак, у вас есть:
#define relaylight 6
Одна вещь, чтобы прояснить здесь , заключается в том, что это GPIO6, а не D6
, который был бы сопоставлен с GPIO12, что имело бы больше смысла. GPIO6 фактически используется внутри модуля ESP8266 для доступа к флэш-чипу SPI, который хранит ваш код. В основном, когда вы делаете это:
pinMode(relaylightb /* GPIO6 */, OUTPUT);
вы как бы вырываете ковер из - под микроконтроллера внутри модуля ESP8266. Это все равно что залезть в компьютер и вытащить жесткий диск, пока он работает. Он пытается загрузить код и данные с SPI-flash, но вы перенастроили этот pin.
ESP8266 переносит код из SPI flash в какой-то меньший кусок внутренней оперативной памяти, из которого он выполняет инструкции. Таким образом, я предполагаю, что можно было бы попасть в ситуацию, когда вы продолжаете выполнять кэшированные инструкции, пытаясь и не загружая данные из spi flash, что, возможно, могло бы объяснить часть того, почему проблема проявляется так, как она для вас.
В случае, если вам интересно, можно получить микросхему, используемую в ESP8266, чтобы загрузить код из источников, отличных от SPI flash, и в этом случае GPIO6 может быть действительно доступен для ваших собственных общих целей, но не с тем, как большинство модулей настроены и используются. Если вы посмотрите на вывод для общих модулей ESP8266, меньшую плату, смонтированную на вашей плате NodeMCU, вы заметите, что GPIO6 фактически не покидает модуль; он просто идет от микроконтроллера к флэш-чипу SPI, который скрыт под радиочастотным экраном на NodeMCU.
Здесь могут возникнуть и другие проблемы с выбором контакта. Например, GPIO7 не упоминается в сопоставлении контактов, и, похоже, не оставляет общих модулей, поэтому #define relaylightb 7
-плохой знак. Посмотрите в этом руководстве, что вы можете сделать с каждым контактом и какое поведение они имеют при загрузке. Например, GPIO2 (ваш relayrandom
) - это "pin is high on BOOT, boot failure if pulled LOW" в соответствии с руководством. Так что, возможно, это будет пульсировать ваше реле, которое вам может не понравиться. И может быть, какая бы схема у вас ни была для реле, она тянет GPIO2 в сторону НИЗКОГО уровня, что тоже было бы плохо. Имейте в виду, что маркировка D# отличается от маркировки GPIO#.
Я только что проверил GPIO7 (randomlightb
), и, как и GPIO6 (randomlight
), было достаточно выполнить pinMode
с выходом
на нем вызвать сброс.
- Ошибка при компиляции для NodeMCU
- Больше не могу прошить ESP8266 (NodeMCU)
- ESP8266 слишком много аргументов для функции
- Декодировать радиочастотные удаленные сигналы с помощью ESP32 или node MCU?
- Прошивка ATtiny85 с помощью NodeMCU?
- Ошибка при компиляции кода модуля NODE MCU ESP8266-12E в Arduino ide
- Как использовать миллис вместо задержки?
- NodeMCU ESP8266 12E теряет код после повторного подключения питания
Вы установили правильную скорость передачи данных в последовательном мониторе?, @Python Schlange
да, 9600 точно такой же, но даже если бы я это сделал, он должен был бы подключиться к моему Wi-Fi правильно, чего он не сделал, @rohithrathod banoth
Если у вас есть сомнения по поводу того, работает ли NodeMCU, загрузите пример скетча., @Python Schlange
Установите скорость передачи данных на 74880 и прочитайте сообщения об ошибке загрузки., @Majenko
@PythonSchlange Я попробовал базовый пример blynk, и он работает, а также подключается к моему Wi-Fi и серверу blynk, но мой код не работает, @rohithrathod banoth
@Majenko ошибка, которую я получаю, когда подключаю и подключаю свой микроконтроллер узла, это ⸮⸮*⸮P*V⸮⸮ET⸮⸮⸮⸮T⸮⸮K⸮⸮u⸮U+UZ⸮Z⸮T⸮⸮T⸮⸮⸮⸮Eu⸮⸮T⸮UQ⸮⸮jP⸮,⸮⸮⸮UP⸮⸮TZT⸮(E⸮⸮⸮⸮Q*UE⸮j*Q*UE⸮⸮⸮+RU⸮/⸮Ţ⸮*⸮P*V⸮⸮ET⸮⸮⸮⸮T⸮⸮K⸮⸮u⸮U+UZ⸮Z⸮T⸮⸮T⸮⸮⸮⸮Eu⸮⸮T⸮UQ⸮⸮jP⸮,⸮⸮⸮UP⸮⸮TZT⸮(E⸮⸮⸮⸮Q*UE⸮j*Q*UE⸮⸮⸮+RU⸮/⸮ если это имеет смысл, @rohithrathod banoth
@rohithrathodbanoth В 74800 бод?, @Majenko
@majenko да на скорости 74800 бод, @rohithrathod banoth
Но какой-то нормальный 6-строчный код работает просто отлично, но не мой., @rohithrathod banoth
Может ли кто-нибудь просто попытаться загрузить этот код в свой микроконтроллер узла, изменив учетные данные Wi-Fi и маркер аутентификации blynk на один из ваших собственных проектов, следуя руководству blynk и проверив, подключается ли он к blynk, и это только проблема с моим модулем или в моем коде есть какая-то проблема, @rohithrathod banoth