Почему скетч на ESP8266 работает только от USB ноутбука?

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Всем привет, почему скетч на ESP8266 работает только от USB ноутбука? (Когда подключаешь от блочка питания програма не работает.) Может дело в коде? Буду очень благодарен за помощь

Код отправителя:

 
 
 
 

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Думаю, что дело в невнимательности.

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Пожалуйста, подскажи в чем дело. Я 0 в программировании только начал заниматса.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

CHARODEY пишет:

Пожалуйста, подскажи в чем дело. Я 0 в программировании только начал заниматса.

не прочитали правила форума

CHARODEY
Offline
Зарегистрирован: 21.02.2022
//получатель
#include <Wire.h>
#include <LiquidCrystal_PCF8574.h>
#include <LiquidCrystal_I2C.h>
#include <ESP8266WiFi.h>
#include <espnow.h>
#define LCD_ADDRESS 0x27
#define SERIAL_BAUD 115200
float ves = 0;
float Press_sensor = 0;

typedef struct struct_message {
  int id;
  float ves;
  float Press_sensor;
} struct_message;

struct_message myData;
struct_message board1;
struct_message board2;

struct_message boardsStruct[2] = {board1, board2};

void OnDataRecv(uint8_t * mac_addr, uint8_t *incomingData, uint8_t len) {
  char macStr[18];
  memcpy(&myData, incomingData, sizeof(myData));
  boardsStruct[myData.id - 1].ves = myData.ves;
  boardsStruct[myData.id - 1].Press_sensor = myData.Press_sensor;
}

LiquidCrystal_PCF8574 lcd(LCD_ADDRESS);
void setup() {
  Serial.begin(115200);
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  if (esp_now_init() != 0) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }
  esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
  esp_now_register_recv_cb(OnDataRecv);

  { Serial.begin(SERIAL_BAUD);
    Wire.begin();
    Wire.beginTransmission(LCD_ADDRESS);
    lcd.begin(20, 4);
    lcd.setBacklight(0);
    delay(100);
    lcd.setBacklight(55);
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("Pressure sensor test");
    delay(100);
    lcd.clear();
  }
  esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
  esp_now_register_recv_cb(OnDataRecv);
}

void loop() {
  // Передатчик - 1
  float board1X = boardsStruct[0].ves;
  float board1Y = boardsStruct[0].Press_sensor;
  lcd.setCursor(0, 1);
  lcd.print("W1:");
  lcd.print(board1X);
  lcd.print("T");
  lcd.setCursor(0, 0);
  lcd.print("Pres1: ");
  lcd.print(board1Y);
  lcd.print("bar ");
  // Передатчик - 2
  float board2X = boardsStruct[1].ves;
  float board2Y = boardsStruct[1].Press_sensor;
  lcd.setCursor(0, 3);
  lcd.print("W2:");
  lcd.print(board2X);
  lcd.print("T");
  lcd.setCursor(0, 2);
  lcd.print("Pres2:");
  lcd.print(board2Y);
  lcd.print("bar ");
  delay(100);

}

 

CHARODEY
Offline
Зарегистрирован: 21.02.2022
//отправитель
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <espnow.h>

int PotenciometrPin = A0;
int Value = 0;
float ves = 0;
float  Value_volt = 0;
float Press_sensor = 0;

#define DELTA_V_Press 20
#define Input_V 5600
#define pin_Press_sensor 2
#define SERIAL_BAUD 115200

uint8_t broadcastAddress[] = {0x40, 0x91, 0x51, 0x53, 0x30, 0xDA};
#define BOARD_ID 1

unsigned long timing = 0;
unsigned int Press_read = 0;
unsigned int Press_bar = 0;

typedef struct struct_message {
  int id;
  float ves;
  float Press_sensor;
} struct_message;
struct_message myData;

unsigned long lastTime = 0;
unsigned long timerDelay = 100;

void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
  Serial.print("\r\nСтатус Отправки Последнего Пакета: ");
  if (sendStatus == 0) {
    Serial.println("Сообщение доставлено");
  }
  else {
    Serial.println("Сообщение НЕ доставлено");
  }
}

void setup() {
  { Serial.begin(115200);                                                   // Запускаем монитор порта на скорости 115200 бод
    WiFi.mode(WIFI_STA);                                                    // Режим работы Клиент
    WiFi.disconnect();
    if (esp_now_init() != 0) {
      Serial.println("Ошибка инициализации ESP-NOW");
      return;
    }
    {
      esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
      esp_now_register_send_cb(OnDataSent);                                   // Получаем сообщение об отправке
      esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
    }
  }
  Serial.begin(SERIAL_BAUD);
  pinMode(pin_Press_sensor, INPUT);
}
void loop() {
  if (millis() - timing > 1000)
  {
    Pressure_Data_read();
    timing = millis();
  }

  if ((millis() - lastTime) > timerDelay) {                               // Если прошло больше 10 секунд
    myData.id = BOARD_ID;
    myData.ves = ves;                                                         // Отправляем данные
    myData.Press_sensor = Press_sensor;                                                         // Отправляем данные
    esp_now_send(0, (uint8_t *) &myData, sizeof(myData));                 // Отправляем сообщение
    lastTime = millis();
  }
}


void Pressure_Data_read()
{

  const byte count_read = 20;
  int Value = 0;
  int Analog_data_read[count_read];
  Value = analogRead(PotenciometrPin);
  Value_volt = (float)5 / 1025 * Value;
  delay(100);

  if ((Value_volt >= 0.500) && (Value_volt <= 4.500))
  {
  if (Value_volt < 0.500)
  {
    Press_sensor = 0;
  }
  else if (Value_volt > 0.500)
  {
    Press_sensor = (Value_volt - 0.5) * 2.490;
  }

  if (Value_volt < 1.3);
  {
    ves = 0;
  }
  if (Value_volt > 1.3);
  {
    ves = Press_sensor * 1.07;
  }}
}

 

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Извиняюсь, редактировать я так понял нельзя, прикрепил код ниже

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Что за "блочек питания? Как конкретно подключен?

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Подключал от блока питания с регулировкой напряжения, 5V стабильно без просадок

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А почему serial.begin два раза в обоих скетчах? Да и обрамлений что-то чересчур. Вы эти скетчи из разных в «складывали» чтоль?

Что это за библиотеки?:

#include <LiquidCrystal_PCF8574.h>
#include <LiquidCrystal_I2C.h>

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ой-ёй, ну и жесть. Сомневаюсь, что ОНО и от USB то работало ))) Без башки натыкано (скопипасчено) откуда-то. Даже не разбирался в логике работы, просто очевидные косяки убрал - пробуй (скомпилировать не могу - лень ставить библиотеки), наврятли поможет:

//получатель
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP8266WiFi.h>
#include <espnow.h>
#define LCD_ADDRESS 0x27
#define SERIAL_BAUD 115200
float ves = 0;
float Press_sensor = 0;

LiquidCrystal_I2C lcd(LCD_ADDRESS);

typedef struct struct_message {
  int id;
  float ves;
  float Press_sensor;
} struct_message;

struct_message myData;
struct_message board1;
struct_message board2;

struct_message boardsStruct[2] = {board1, board2};

void OnDataRecv(uint8_t * mac_addr, uint8_t *incomingData, uint8_t len) {
  char macStr[18];
  memcpy(&myData, incomingData, sizeof(myData));
  boardsStruct[myData.id - 1].ves = myData.ves;
  boardsStruct[myData.id - 1].Press_sensor = myData.Press_sensor;
}

void setup() {
  Serial.begin(SERIAL_BAUD);
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  if (esp_now_init() != 0) {
    Serial.println("Error initializing ESP-NOW");
    return;
  }
  esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
  esp_now_register_recv_cb(OnDataRecv);

  Wire.begin();
  Wire.beginTransmission(LCD_ADDRESS);
  lcd.begin(20, 4);
  lcd.setBacklight(0);
  delay(100);
  lcd.setBacklight(55);
  lcd.clear();
  lcd.setCursor(0, 1);
  lcd.print("Pressure sensor test");
  delay(100);
  lcd.clear();
  esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
  esp_now_register_recv_cb(OnDataRecv);
}

void loop() {
  // Передатчик - 1
  float board1X = boardsStruct[0].ves;
  float board1Y = boardsStruct[0].Press_sensor;
  lcd.setCursor(0, 1);
  lcd.print("W1:");
  lcd.print(board1X);
  lcd.print("T");
  lcd.setCursor(0, 0);
  lcd.print("Pres1: ");
  lcd.print(board1Y);
  lcd.print("bar ");
  // Передатчик - 2
  float board2X = boardsStruct[1].ves;
  float board2Y = boardsStruct[1].Press_sensor;
  lcd.setCursor(0, 3);
  lcd.print("W2:");
  lcd.print(board2X);
  lcd.print("T");
  lcd.setCursor(0, 2);
  lcd.print("Pres2:");
  lcd.print(board2Y);
  lcd.print("bar ");
  delay(100);
}
//отправитель
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <espnow.h>

int PotenciometrPin = A0;
int Value = 0;
float ves = 0;
float  Value_volt = 0;
float Press_sensor = 0;

#define DELTA_V_Press 20
#define Input_V 5600
#define pin_Press_sensor 2
#define SERIAL_BAUD 115200

uint8_t broadcastAddress[] = {0x40, 0x91, 0x51, 0x53, 0x30, 0xDA};
#define BOARD_ID 1

unsigned long timing = 0;
unsigned int Press_read = 0;
unsigned int Press_bar = 0;

typedef struct struct_message {
  int id;
  float ves;
  float Press_sensor;
} struct_message;
struct_message myData;

unsigned long lastTime = 0;
unsigned long timerDelay = 100;

void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
  Serial.print("\r\nСтатус Отправки Последнего Пакета: ");
  if (sendStatus == 0) {
    Serial.println("Сообщение доставлено");
  }
  else {
    Serial.println("Сообщение НЕ доставлено");
  }
}

void Pressure_Data_read() {

  const byte count_read = 20;
  int Value = 0;
  int Analog_data_read[count_read];
  Value = analogRead(PotenciometrPin);
  Value_volt = (float)5 / 1025 * Value;
  delay(100);

  if ((Value_volt >= 0.500) && (Value_volt <= 4.500)) {
    if (Value_volt < 0.500) {
      Press_sensor = 0;
    }
    else if (Value_volt > 0.500) {
      Press_sensor = (Value_volt - 0.5) * 2.490;
    }

    if (Value_volt < 1.3) {
      ves = 0;
    }
    if (Value_volt > 1.3) {
      ves = Press_sensor * 1.07;
    }
  }
}

void setup() {
  Serial.begin(SERIAL_BAUD);                                                   // Запускаем монитор порта на скорости 115200 бод
  WiFi.mode(WIFI_STA);                                                    // Режим работы Клиент
  WiFi.disconnect();
  if (esp_now_init() != 0) {
    Serial.println("Ошибка инициализации ESP-NOW");
    return;
  }
  esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
  esp_now_register_send_cb(OnDataSent);                                   // Получаем сообщение об отправке
  esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
  pinMode(pin_Press_sensor, INPUT);
}
void loop() {
  if (millis() - timing > 1000) {
    Pressure_Data_read();
    timing = millis();
  }

  if ((millis() - lastTime) > timerDelay) {                               // Если прошло больше 10 секунд
    myData.id = BOARD_ID;
    myData.ves = ves;                                                         // Отправляем данные
    myData.Press_sensor = Press_sensor;                                                         // Отправляем данные
    esp_now_send(0, (uint8_t *) &myData, sizeof(myData));                 // Отправляем сообщение
    lastTime = millis();
  }
}

Да ж без надежды, но ты ж натыкивал - пробуй )))

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Не помогло(

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

CHARODEY пишет:

Не помогло(

В каком именно смысле непомогло то? Не заработало как хотел? Или что? Обратил внимание, что код изменился?

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Не заработало совсем. Да обратил внимания. Может подскажешь как сделать чтоб ESP могли передавать даные между собой? Я уже совсем розачарован в своих знаниях.

b707
Offline
Зарегистрирован: 26.05.2017

CHARODEY пишет:

Я уже совсем розачарован в своих знаниях.


так может стоит это поправить? Для тех, кто сомневается в своих знаниях(в таких сомнениях нет ничего плохого, вообще-то) - существуют учебники...

b707
Offline
Зарегистрирован: 26.05.2017

-Я, наверное, не смогу...
- Больше уверенности!
- Я точно не смогу!!!

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

А при чем здесь код вообще. С питанием разбираться нужно

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

v258 пишет:
А при чем здесь код вообще. С питанием разбираться нужно

Да к#ли с ним разбираться, ты на код взгляни. )))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

BOOM пишет:

v258 пишет:
А при чем здесь код вообще. С питанием разбираться нужно

Да к#ли с ним разбираться, ты на код взгляни. )))

Если при питании от разных источников устройство ведет себя по-разному, то на код вообще смотреть бессмысленно.

Erling
Offline
Зарегистрирован: 23.02.2022

CHARODEY пишет:

Подключал от блока питания с регулировкой напряжения, 5V стабильно без просадок

Подключал через разъем micro-USB или через пины? Если второе, то у некоторых NodeMCU пины входа и выхода стабилизатора напряжения перепутаны (питать через Vin бесполезно).

Вообще надо начать с Blink и по нему смотреть, нормально ли поступает питание.

CHARODEY
Offline
Зарегистрирован: 21.02.2022

Подключал через разъем micro-USB