Помогите загрузить скетч на плату esp32 devkit v1
не загружает, после компиляции выдаёт ошибку
C:\Users\Nelly\Downloads\ESP32_domofon_v2_2\ESP32_domofon_v2_2.ino: In function 'void setup()':
C:\Users\Nelly\Downloads\ESP32_domofon_v2_2\ESP32_domofon_v2_2.ino:13:21: error: invalid conversion from 'int' to 'const esp_task_wdt_config_t*' [-fpermissive]
13 | #define WDT_TIMEOUT 60
| ^~
| |
| int
C:\Users\Nelly\Downloads\ESP32_domofon_v2_2\ESP32_domofon_v2_2.ino:13:21: note: in definition of macro 'WDT_TIMEOUT'
13 | #define WDT_TIMEOUT 60
| ^~
C:\Users\Nelly\Downloads\ESP32_domofon_v2_2\ESP32_domofon_v2_2.ino:156:20: error: too many arguments to function 'esp_err_t esp_task_wdt_init(const esp_task_wdt_config_t*)'
156 | esp_task_wdt_init(WDT_TIMEOUT, true); //enable panic so ESP32 restarts
| ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
In file included from C:\Users\Nelly\Downloads\ESP32_domofon_v2_2\ESP32_domofon_v2_2.ino:4:
C:\Users\Nelly\AppData\Local\Arduino15\packages\esp32\tools\esp32-arduino-libs\idf-release_v5.1-442a798083\esp32/include/esp_system/include/esp_task_wdt.h:47:11: note: declared here
47 | esp_err_t esp_task_wdt_init(const esp_task_wdt_config_t *config);
| ^~~~~~~~~~~~~~~~~
exit status 1
Compilation error: invalid conversion from 'int' to 'const esp_task_wdt_config_t*' [-fpermissive]
сам скетч:
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <Preferences.h>
#include <esp_task_wdt.h>
#include "DFRobotDFPlayerMini.h"
//==========================================================================//
//+++++++++++++++++++ Initialize Telegram BOT AND WIFI +++++++++++++++++++++//
//==========================================================================//
#define FIRMWARE "28.05.2024"
#define DEBUG 0
#define TEST_CHECK_DELAY 30000
#define HEALTH_CHECK_DELAY 30000
#define WDT_TIMEOUT 60
//+++++++++++++++++++++++++++++++ WiFi ++++++++++++++++++++++++++++++++++++++//
#define USE_WIFI
#define WIFI_SSID "9999" //"360WiFi"
#define WIFI_PASS "9999" //"amkhalyawa"
//+++++++++++++++++++++++++ Настройка телеграм +++++++++++++++++++++++++++++//
#define USE_TELEGRAM //ракоментировать если используется телеграм
#define CHAT_ID "9999" //Используйте @myidbot чтобы найти chat ID
#define BOTtoken "9999" // Ваш Бот токен (возмите от Botfather)
//Также вам нужно отправить "start" вашему боту для начала работы.
#define BOT_REQUEST_DELAY 15000
//++++++++++++++++++++++++++++++++ TCP +++++++++++++++++++++++++++++++++++++//
#define USE_TCP_SERVER //ракоментировать если используется TCP
#define TCP_PORT 8888
#define TCP_TIMEOUT 5000
//==========================================================================//
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//==========================================================================//
#define LED_PIN 2
#define RELAY_CONTROL_PIN 5
#define RELAY_PIN 13
#define DF_MINI_RX 16
#define DF_MINI_TX 17
#define DF_MINI_BUSY 27
#define PICK_UP_PIN 15 //1 - трубка положена,0 - трубка поднята
#define OPEN_DOOR_PIN 4 //1 - открыть дверь
#define CALL_DETECT_PIN 14 //детекция входящего звонка
#define DEBONCE_LEVEL 5000
#define SWITCHING_TIME 500
#define OPEN_DELAY_TIME 500
#define DF_MINI_WAIT_BUSY 1000
#define BLINK_LED_BUSY_DELAY 100
#define DEBUG_SPEED 500000
#define PREF_DEFAULT_RETURN 255
#define VOLUME 25
//============================ domofonBot states =============================//
#define NORMAL 0
#define OPEN_DOOR 1
#define OPEN_DOOR2 2
#define INTERCOM_OFF 3
#ifdef USE_TELEGRAM
#include <UniversalTelegramBot.h>
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOTtoken, secured_client);
#endif
WiFiServer server(TCP_PORT);
Preferences preferences;
const char* pref_key = "domfonBotSetup";
DFRobotDFPlayerMini myDFPlayer;
uint32_t debonce = 0;
uint32_t playerCounter = 0;
bool ledState = LOW;
unsigned short internalState = NORMAL;
unsigned long lastTimeCheckMessages = 0;
unsigned long currentTime = millis();
unsigned long lastTimeCheckHealth = 0;
unsigned long previousTime = 0;
unsigned long lastTimeTest = 0;
void blink_error(uint8_t count) {
for (uint8_t i = 0; i < count; i++) {
digitalWrite(LED_PIN, LOW);
delay(100);
digitalWrite(LED_PIN, HIGH);
delay(100);
}
}
//==========================================================================//
//+++++++++++++++++++++++++++++++++ tests +++++++++++++++++++++++++++++++++++//
//==========================================================================//
void relay_test(void) {
while (1) {
digitalWrite(RELAY_PIN, HIGH);
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(RELAY_PIN, LOW);
digitalWrite(LED_PIN, LOW);
delay(500);
}
}
void sound_test() {
myDFPlayer.volume(VOLUME);
myDFPlayer.play(1); //Play the first mp3
delay(DF_MINI_WAIT_BUSY); //wait until the busy pin status changes
while (digitalRead(DF_MINI_BUSY) == LOW) {
digitalWrite(LED_PIN, ledState = ledState ? LOW : HIGH);
delay(BLINK_LED_BUSY_DELAY);
}
}
//==========================================================================//
//++++++++++++++++++++++++++++++ debonce_read ++++++++++++++++++++++++++++++//
//==========================================================================//
boolean debonce_read(uint32_t pin, boolean check_level) {
uint32_t pin_state_cnt = 0;
uint32_t result;
do {
result = check_level ? digitalRead(pin) : !digitalRead(pin);
if (result) pin_state_cnt++;
if (pin_state_cnt > DEBONCE_LEVEL)
return true;
} while (result);
return false;
}
//==========================================================================//
//+++++++++++++++++++++++++++++++++++ setup ++++++++++++++++++++++++++++++++//
//==========================================================================//
void setup() {
internalState = OPEN_DOOR; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//========================================================================//
Serial.begin(DEBUG_SPEED);
Serial2.begin(9600, SERIAL_8N1, DF_MINI_RX, DF_MINI_TX);
//============================ eeprom check setup =======================//
preferences.begin("my_setup", false);
unsigned short domofonBotState = preferences.getUShort(pref_key, PREF_DEFAULT_RETURN);
if (domofonBotState != PREF_DEFAULT_RETURN)
switch (domofonBotState) {
case (NORMAL):
internalState = NORMAL; //0
break;
case (OPEN_DOOR):
internalState = OPEN_DOOR; //1
break;
case (OPEN_DOOR2):
internalState = OPEN_DOOR2; //2
break;
case (INTERCOM_OFF):
internalState = INTERCOM_OFF; //3
break;
}
else Serial.println("Error reading settings set to default!");
//================================= gpio setup ===========================//
pinMode(LED_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
pinMode(PICK_UP_PIN, OUTPUT);
pinMode(OPEN_DOOR_PIN, OUTPUT);
pinMode(CALL_DETECT_PIN, INPUT_PULLUP);
pinMode(RELAY_CONTROL_PIN, INPUT_PULLUP);
pinMode(DF_MINI_BUSY, INPUT);
//============================== wachdog setup ===========================//
esp_task_wdt_init(WDT_TIMEOUT, true); //enable panic so ESP32 restarts
esp_task_wdt_add(NULL); //add current thread to WDT watch
//=========================== connect to Wifi network ===================//
#ifdef USE_WIFI
Serial.print("Connecting Wifi: ");
Serial.println(WIFI_SSID);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
blink_error(2);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
#endif
//========================= Initializing DFPlayer =========================//
Serial.println("Initializing DFPlayer");
while (!myDFPlayer.begin(Serial2)) {
delay(1000);
Serial.println("DFPlayer.begin ERROR!!!");
blink_error(3);
}
// else {
Serial.println("DFPlayer OK");
myDFPlayer.volume(VOLUME); //Set volume value. From 0 to 30
// }
#ifdef USE_TELEGRAM
secured_client.setCACert(TELEGRAM_CERTIFICATE_ROOT); // Add root certificate for api.telegram.org
//========================= send telegram message =========================//
String start_msg = "DomofonBot restarted - выберите режим работы !!!\n";
start_msg += "/normal - обычный режим работы\n";
start_msg += "/open_door - отрыть двери и играть mp3\n";
start_msg += "/open_door2 - играть mp3,затем открыть\n";
start_msg += "/intercom_off - режим тишины\n";
//bot.sendMessage(CHAT_ID, start_msg, "");
String keyboardJson = "[[\"/normal\", \"/open_door\"],[\"/open_door2\",\"/intercom_off\"]]";
bot.sendMessageWithReplyKeyboard(CHAT_ID, start_msg, "", keyboardJson, true);
#endif
#ifdef USE_TCP_SERVER
server.begin();
#endif
}
//==========================================================================//
//++++++++++++++++++++++++++++++++ intercom_up +++++++++++++++++++++++++++++//
//==========================================================================//
void intercom_up(void) {
if (DEBUG) Serial.println("intercom_up()");
//internalState = INTERCOM_UP;
delay(SWITCHING_TIME);
digitalWrite(RELAY_PIN, HIGH); //disconnect internal intercom from the line
digitalWrite(PICK_UP_PIN, LOW); //intercom picked up
}
//==========================================================================//
//++++++++++++++++++++++++++++++++ open_door +++++++++++++++++++++++++++++++//
//==========================================================================//
void open_door(void) {
if (DEBUG) Serial.println("open_door()");
internalState = OPEN_DOOR;
digitalWrite(OPEN_DOOR_PIN, HIGH);
delay(OPEN_DELAY_TIME);
digitalWrite(OPEN_DOOR_PIN, LOW);
delay(SWITCHING_TIME);
digitalWrite(OPEN_DOOR_PIN, HIGH);
delay(OPEN_DELAY_TIME);
digitalWrite(OPEN_DOOR_PIN, LOW);
delay(SWITCHING_TIME);
}
//==========================================================================//
//++++++++++++++++++++++++++++++ intercom_down +++++++++++++++++++++++++++++//
//==========================================================================//
void intercom_down(void) {
if (DEBUG) Serial.println("intercom_down()");
digitalWrite(PICK_UP_PIN, HIGH); //intercom down
delay(SWITCHING_TIME);
digitalWrite(RELAY_PIN, LOW); //connect internal intercom to the line
digitalWrite(PICK_UP_PIN, LOW); //intercom UP
}
//==========================================================================//
//++++++++++++++++++++++++++++++ parse_commands ++++++++++++++++++++++++++++//
//==========================================================================//
boolean parse_commands(String command) {
if (command == "/normal") {
internalState = NORMAL;
#ifdef USE_TELEGRAM
bot.sendMessage(CHAT_ID, "DomofonBot - режим по умолчанию!", "");
#endif
return true;
} else if (command == "/intercom_off") {
internalState = INTERCOM_OFF;
#ifdef USE_TELEGRAM
bot.sendMessage(CHAT_ID, "DomofonBot - режим тишины!", "");
#endif
return true;
} else if (command == "/open_door") {
internalState = OPEN_DOOR;
#ifdef USE_TELEGRAM
bot.sendMessage(CHAT_ID, "DomofonBot - режим открытия двери!!", "");
#endif
return true;
} else if (command == "/open_door2") {
internalState = OPEN_DOOR2;
#ifdef USE_TELEGRAM
bot.sendMessage(CHAT_ID, "DomofonBot - режим открытия двери2!!", "");
#endif
return true;
}
return false;
}
//==========================================================================//
//++++++++++++++++++++++++++ handleNewTelegrammMessages ++++++++++++++++++++//
//==========================================================================//
#ifdef USE_TELEGRAM
void handleNewMessages(int numNewMessages) {
if (DEBUG) Serial.println("handleNewMessages");
if (DEBUG) Serial.println(String(numNewMessages));
for (int i = 0; i < numNewMessages; i++) {
// Chat id of the requester
String chat_id = String(bot.messages[i].chat_id);
if (chat_id != CHAT_ID) {
bot.sendMessage(chat_id, "Unauthorized user", "");
continue;
}
// Print the received message
String message = bot.messages[i].text;
if (DEBUG) Serial.println(message);
String from_name = bot.messages[i].from_name;
unsigned short latsStateSetup = internalState;
parse_commands(message);
if (latsStateSetup != internalState) {
preferences.begin("my_setup", false);
unsigned short domofonBotState = preferences.putUShort(pref_key, internalState);
preferences.end();
}
}
}
#endif
//==========================================================================//
//++++++++++++++++++++++++++++++ main loop +++++++++++++++++++++++++++++++++//
//==========================================================================//
void loop() {
if (millis() > lastTimeCheckHealth + HEALTH_CHECK_DELAY) {
esp_task_wdt_reset();
if (WiFi.status() != WL_CONNECTED) ESP.restart();
lastTimeCheckHealth = millis();
}
if (millis() > lastTimeTest + TEST_CHECK_DELAY) {
//sound_test();
}
#ifdef USE_TCP_SERVER
WiFiClient client = server.available(); // Listen for incoming clients
if (client) { // If a new client connects,
currentTime = millis();
previousTime = currentTime;
if (DEBUG) Serial.println("New Client.");
while (client.connected() && currentTime - previousTime <= TCP_TIMEOUT) { // loop while the client's connected //
currentTime = millis();
if (client.available()) { // if there's bytes to read from the client,
String comand = client.readStringUntil('\r');
if (DEBUG) Serial.println(comand);
if (comand == "/status") {
if (DEBUG) Serial.println("send internalState");
switch (internalState) {
case (0):
client.println("normal");
break;
case (1):
client.println("open_door");
break;
case (2):
client.println("open_door2");
break;
case (3):
client.println("intercom_off");
break;
}
} else if (parse_commands(comand) == true) {
if (DEBUG) Serial.println("domfomBot mode has changed");
client.println(comand);
break;
}
}
}
if (DEBUG) Serial.println("Closing connection.");
client.stop();
if (DEBUG) Serial.println("Client disconnected.");
Serial.println("");
}
#endif
if (debonce_read(CALL_DETECT_PIN, LOW) == true) {
if (DEBUG) Serial.println("DomofonBot call detected!");
if (debonce_read(RELAY_CONTROL_PIN, LOW) == true) {
intercom_up();
open_door();
myDFPlayer.volume(VOLUME);
myDFPlayer.play(1); //Play the first mp3
}
#ifdef USE_TELEGRAM
bot.sendMessage(CHAT_ID, "DomofonBot call detected!", "");
#endif
switch (internalState) {
case OPEN_DOOR: //open doors before starting mp3
intercom_up();
open_door();
myDFPlayer.volume(VOLUME);
myDFPlayer.play(1); //Play the first mp3
#ifdef USE_TELEGRAM
bot.sendMessage(CHAT_ID, "Domofon door opened!", "");
#endif
delay(DF_MINI_WAIT_BUSY); //wait until the busy pin status changes
while (digitalRead(DF_MINI_BUSY) == LOW) {
digitalWrite(LED_PIN, ledState = ledState ? LOW : HIGH);
delay(BLINK_LED_BUSY_DELAY);
}
intercom_down();
internalState = OPEN_DOOR;
break;
case OPEN_DOOR2: //open doors at the end of mp3
intercom_up();
myDFPlayer.volume(VOLUME);
myDFPlayer.play(2); //Play the first mp3
#ifdef USE_TELEGRAM
bot.sendMessage(CHAT_ID, "Domofon door opened!", "");
#endif
delay(DF_MINI_WAIT_BUSY); //wait until the busy pin status changes
while (digitalRead(DF_MINI_BUSY) == LOW) {
digitalWrite(LED_PIN, ledState = ledState ? LOW : HIGH);
delay(BLINK_LED_BUSY_DELAY);
}
open_door();
intercom_down();
internalState = OPEN_DOOR2;
break;
case INTERCOM_OFF:
intercom_up();
myDFPlayer.volume(VOLUME);
myDFPlayer.play(3); //Play the first mp3
delay(DF_MINI_WAIT_BUSY); //wait until the busy pin status changes
while (digitalRead(DF_MINI_BUSY) == LOW) {
digitalWrite(LED_PIN, ledState = ledState ? LOW : HIGH);
delay(BLINK_LED_BUSY_DELAY);
}
intercom_down();
internalState = INTERCOM_OFF;
break;
}
}
#ifdef USE_TELEGRAM
if (millis() > lastTimeCheckMessages + BOT_REQUEST_DELAY) {
digitalWrite(LED_PIN, HIGH);
if ((WiFi.status() != WL_CONNECTED)) ESP.restart();
if (DEBUG) Serial.print("start check new messages ");
if (DEBUG) Serial.println(millis());
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages) {
if (DEBUG) Serial.println("got response");
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
lastTimeCheckMessages = millis();
if (DEBUG) Serial.print("stop check new messages ");
if (DEBUG) Serial.println(millis());
digitalWrite(LED_PIN, LOW);
}
#endif
}