Почему скетч на ESP8266 работает только от USB ноутбука?
- Войдите на сайт для отправки комментариев
Пнд, 21/02/2022 - 19:56
Всем привет, почему скетч на ESP8266 работает только от USB ноутбука? (Когда подключаешь от блочка питания програма не работает.) Может дело в коде? Буду очень благодарен за помощь
Код отправителя:
Думаю, что дело в невнимательности.
Пожалуйста, подскажи в чем дело. Я 0 в программировании только начал заниматса.
Пожалуйста, подскажи в чем дело. Я 0 в программировании только начал заниматса.
не прочитали правила форума
//получатель #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); }//отправитель #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; }} }Извиняюсь, редактировать я так понял нельзя, прикрепил код ниже
Что за "блочек питания? Как конкретно подключен?
Подключал от блока питания с регулировкой напряжения, 5V стабильно без просадок
А почему serial.begin два раза в обоих скетчах? Да и обрамлений что-то чересчур. Вы эти скетчи из разных в «складывали» чтоль?
Что это за библиотеки?:
Ой-ёй, ну и жесть. Сомневаюсь, что ОНО и от 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(); } }Да ж без надежды, но ты ж натыкивал - пробуй )))
Не помогло(
Не помогло(
В каком именно смысле непомогло то? Не заработало как хотел? Или что? Обратил внимание, что код изменился?
Не заработало совсем. Да обратил внимания. Может подскажешь как сделать чтоб ESP могли передавать даные между собой? Я уже совсем розачарован в своих знаниях.
Я уже совсем розачарован в своих знаниях.
так может стоит это поправить? Для тех, кто сомневается в своих знаниях(в таких сомнениях нет ничего плохого, вообще-то) - существуют учебники...
-Я, наверное, не смогу...
- Больше уверенности!
- Я точно не смогу!!!
А при чем здесь код вообще. С питанием разбираться нужно
Да к#ли с ним разбираться, ты на код взгляни. )))
Да к#ли с ним разбираться, ты на код взгляни. )))
Если при питании от разных источников устройство ведет себя по-разному, то на код вообще смотреть бессмысленно.
Подключал от блока питания с регулировкой напряжения, 5V стабильно без просадок
Вообще надо начать с Blink и по нему смотреть, нормально ли поступает питание.
Подключал через разъем micro-USB