Узел 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

Обсуждение

Вы установили правильную скорость передачи данных в последовательном мониторе?, @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


1 ответ


2

Может ли кто нибудь просто попытаться загрузить этот код в свой узел 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 с выходом на нем вызвать сброс.

,