Произошла ошибка компиляции при программировании node mcu
я программировал свой микроконтроллер узла, я изменил код и получил сообщение об ошибке, но когда я скомпилировал исходный код, я не получил измененного кода ошибки
#include "arduino_secrets.h"
#include "thingProperties.h"
// define the GPIO connected with Relays and switches
#define RelayPin1 5 //D1
#define RelayPin2 4 //D2
#define RelayPin3 14 //D5
#define RelayPin4 12 //D6
#define RelayPin5 2 //d4
#define RelayPin6 0 //D3
#define RelayPin7 13 //D7
#define RelayPin8 15 //d8
#define wifiLed 16 //D0
int toggleState_1 = 0; //Define integer to remember the toggle state for relay 1
int toggleState_2 = 0; //Define integer to remember the toggle state for relay 2
int toggleState_3 = 0; //Define integer to remember the toggle state for relay 3
int toggleState_4 = 0; //Define integer to remember the toggle state for relay 4
int toggleState_5 = 0; //Define integer to remember the toggle state for relay 5
int toggleState_6 = 0; //Define integer to remember the toggle state for relay 6
int toggleState_7 = 0; //Define integer to remember the toggle state for relay 7
int toggleState_8 = 0; //Define integer to remember the toggle state for relay 8
void relayOnOff(int relay) {
switch (relay) {
case 1:
if (toggleState_1 == 0) {
digitalWrite(RelayPin1, HIGH); // turn on relay 1
toggleState_1 = 1;
Serial.println("Device1 ON");
}
else {
digitalWrite(RelayPin1, LOW); // turn off relay 1
toggleState_1 = 0;
Serial.println("Device1 OFF");
}
delay(100);
break;
case 2:
if (toggleState_2 == 0) {
digitalWrite(RelayPin2, HIGH); // turn on relay 2
toggleState_2 = 1;
Serial.println("Device2 ON");
}
else {
digitalWrite(RelayPin2, LOW); // turn off relay 2
toggleState_2 = 0;
Serial.println("Device2 OFF");
}
delay(100);
break;
case 3:
if (toggleState_3 == 0) {
digitalWrite(RelayPin3, HIGH); // turn on relay 3
toggleState_3 = 1;
Serial.println("Device3 ON");
} else {
digitalWrite(RelayPin3, LOW); // turn off relay 3
toggleState_3 = 0;
Serial.println("Device3 OFF");
}
delay(100);
break;
case 4:
if (toggleState_4 == 0) {
digitalWrite(RelayPin4, HIGH); // turn on relay 3
toggleState_4 = 1;
Serial.println("Device4 ON");
} else {
digitalWrite(RelayPin4, LOW); // turn off relay 3
toggleState_4 = 0;
Serial.println("Device4 OFF");
}
delay(100);
break;
case 5:
if (toggleState_5 == 0) {
digitalWrite(RelayPin5, HIGH); // turn on relay 3
toggleState_5 = 1;
Serial.println("Device5 ON");
} else {
digitalWrite(RelayPin5, LOW); // turn off relay 3
toggleState_5 = 0;
Serial.println("Device5 OFF");
}
delay(100);
break;
case 6:
if (toggleState_6 == 0) {
digitalWrite(RelayPin6, HIGH); // turn on relay 3
toggleState_6 = 1;
Serial.println("Device6 ON");
} else {
digitalWrite(RelayPin6, LOW); // turn off relay 3
toggleState_6 = 0;
Serial.println("Device6 OFF");
}
delay(100);
break;
case 7:
if (toggleState_7 == 0) {
digitalWrite(RelayPin7, HIGH); // turn on relay 3
toggleState_7 = 1;
Serial.println("Device7 ON");
} else {
digitalWrite(RelayPin7, LOW); // turn off relay 3
toggleState_7 = 0;
Serial.println("Device7 OFF");
}
delay(100);
break;
case 8:
if (toggleState_8 == 0) {
digitalWrite(RelayPin8, HIGH); // turn on relay 4
toggleState_8 = 1;
Serial.println("Device8 ON");
}
else {
digitalWrite(RelayPin8, LOW); // turn off relay 4
toggleState_8 = 0;
Serial.println("Device8 OFF");
}
delay(100);
break;
default : break;
}
}
void setup() {
// Initialize serial and wait for port to open:
Serial.begin(9600);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
pinMode(RelayPin1, OUTPUT);
pinMode(RelayPin2, OUTPUT);
pinMode(RelayPin3, OUTPUT);
pinMode(RelayPin4, OUTPUT);
pinMode(RelayPin5, OUTPUT);
pinMode(RelayPin6, OUTPUT);
pinMode(RelayPin7, OUTPUT);
pinMode(RelayPin8, OUTPUT);
pinMode(wifiLed, OUTPUT);
digitalWrite(RelayPin1, LOW);
digitalWrite(RelayPin2, LOW);
digitalWrite(RelayPin3, LOW);
digitalWrite(RelayPin4, LOW);
digitalWrite(RelayPin5, LOW);
digitalWrite(RelayPin6, LOW);
digitalWrite(RelayPin7, LOW);
digitalWrite(RelayPin8, LOW);
digitalWrite(wifiLed, HIGH); //Turn ON WiFi LED
}
void loop() {
ArduinoCloud.update();
if (WiFi.status() != WL_CONNECTED)
{
digitalWrite(wifiLed, HIGH); //Turn ON WiFi LED
}
else{
digitalWrite(wifiLed, LOW); //Turn OFF WiFi LED
}
}
исходный код
#include "arduino_secrets.h"
#include "thingProperties.h"
// define the GPIO connected with Relays and switches
#define RelayPin1 5 //D1
#define RelayPin2 4 //D2
#define RelayPin3 14 //D5
#define RelayPin4 12 //D6
#define SwitchPin1 10 //SD3
#define SwitchPin2 0 //D3
#define SwitchPin3 13 //D7
#define SwitchPin4 3 //RX
#define wifiLed 16 //D0
int toggleState_1 = 0; //Define integer to remember the toggle state for relay 1
int toggleState_2 = 0; //Define integer to remember the toggle state for relay 2
int toggleState_3 = 0; //Define integer to remember the toggle state for relay 3
int toggleState_4 = 0; //Define integer to remember the toggle state for relay 4
void relayOnOff(int relay) {
switch (relay) {
case 1:
if (toggleState_1 == 0) {
digitalWrite(RelayPin1, HIGH); // turn on relay 1
toggleState_1 = 1;
Serial.println("Device1 ON");
}
else {
digitalWrite(RelayPin1, LOW); // turn off relay 1
toggleState_1 = 0;
Serial.println("Device1 OFF");
}
delay(100);
break;
case 2:
if (toggleState_2 == 0) {
digitalWrite(RelayPin2, HIGH); // turn on relay 2
toggleState_2 = 1;
Serial.println("Device2 ON");
}
else {
digitalWrite(RelayPin2, LOW); // turn off relay 2
toggleState_2 = 0;
Serial.println("Device2 OFF");
}
delay(100);
break;
case 3:
if (toggleState_3 == 0) {
digitalWrite(RelayPin3, HIGH); // turn on relay 3
toggleState_3 = 1;
Serial.println("Device3 ON");
} else {
digitalWrite(RelayPin3, LOW); // turn off relay 3
toggleState_3 = 0;
Serial.println("Device3 OFF");
}
delay(100);
break;
case 4:
if (toggleState_4 == 0) {
digitalWrite(RelayPin4, HIGH); // turn on relay 4
toggleState_4 = 1;
Serial.println("Device4 ON");
}
else {
digitalWrite(RelayPin4, LOW); // turn off relay 4
toggleState_4 = 0;
Serial.println("Device4 OFF");
}
delay(100);
break;
default : break;
}
}
void manual_control() {
//Manual Switch Control
if (digitalRead(SwitchPin1) == LOW) {
delay(200);
relayOnOff(1);
}
else if (digitalRead(SwitchPin2) == LOW) {
delay(200);
relayOnOff(2);
}
else if (digitalRead(SwitchPin3) == LOW) {
delay(200);
relayOnOff(3);
}
else if (digitalRead(SwitchPin4) == LOW) {
delay(200);
relayOnOff(4);
}
}
void setup() {
// Initialize serial and wait for port to open:
Serial.begin(9600);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
pinMode(RelayPin1, OUTPUT);
pinMode(RelayPin2, OUTPUT);
pinMode(RelayPin3, OUTPUT);
pinMode(RelayPin4, OUTPUT);
pinMode(wifiLed, OUTPUT);
pinMode(SwitchPin1, INPUT_PULLUP);
pinMode(SwitchPin2, INPUT_PULLUP);
pinMode(SwitchPin3, INPUT_PULLUP);
pinMode(SwitchPin4, INPUT_PULLUP);
//During Starting all Relays should TURN OFF
digitalWrite(RelayPin1, HIGH);
digitalWrite(RelayPin2, HIGH);
digitalWrite(RelayPin3, HIGH);
digitalWrite(RelayPin4, HIGH);
digitalWrite(wifiLed, HIGH); //Turn OFF WiFi LED
}
void loop() {
ArduinoCloud.update();
manual_control(); //Control relays manually
if (WiFi.status() != WL_CONNECTED)
{
digitalWrite(wifiLed, HIGH); //Turn OFF WiFi LED
}
else{
digitalWrite(wifiLed, LOW); //Turn ON WiFi LED
}
}
void onSwitch1Change() {
if (switch1 == 1)
{
digitalWrite(RelayPin1, HIGH);
Serial.println("Device1 ON");
toggleState_1 = 1;
}
else
{
digitalWrite(RelayPin1, LOW);
Serial.println("Device1 OFF");
toggleState_1 = 0;
}
}
void onSwitch2Change() {
if (switch2 == 1)
{
digitalWrite(RelayPin2, HIGH);
Serial.println("Device2 ON");
toggleState_2 = 1;
}
else
{
digitalWrite(RelayPin2, LOW);
Serial.println("Device2 OFF");
toggleState_2 = 0;
}
}
void onSwitch3Change() {
if (switch3 == 1)
{
digitalWrite(RelayPin3, HIGH);
Serial.println("Device2 ON");
toggleState_3 = 1;
}
else
{
digitalWrite(RelayPin3, LOW);
Serial.println("Device3 OFF");
toggleState_3 = 0;
}
}
void onSwitch4Change() {
if (switch4 == 1)
{
digitalWrite(RelayPin4, HIGH);
Serial.println("Device4 ON");
toggleState_4 = 1;
}
else
{
digitalWrite(RelayPin4, LOW);
Serial.println("Device4 OFF");
toggleState_4 = 0;
}
}
я включил функции arduino_secrets и thingproperties в оба своих фрагмента кода, разница в том, что я хотел настроить 8 контактов реле вместо 4 контактов пожалуйста, спросите, не нужно ли вам что-нибудь от меня
это была точная ошибка
C:\Users\akki kisu\Documents\Arduino\libraries\ArduinoIoTCloud\src\property\Property.cpp:25:19: note: '#pragma message: No RTC available on this architecture - ArduinoIoTCloud will not keep track of local change timestamps .'
25 | #pragma message "No RTC available on this architecture - ArduinoIoTCloud will not keep track of local change timestamps ."
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:/users/akki kisu/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/3.0.4-gcc10.3-1757bed/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/bin/ld.exe: sketch\Code_NodeMCU_Alexa_ArduinoIotCloud_4Relays.ino.cpp.o:(.text._Z14initPropertiesv+0x1c): undefined reference to `_Z15onSwitch1Changev'
c:/users/akki kisu/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/3.0.4-gcc10.3-1757bed/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/bin/ld.exe: sketch\Code_NodeMCU_Alexa_ArduinoIotCloud_4Relays.ino.cpp.o:(.text._Z14initPropertiesv+0x34): undefined reference to `_Z15onSwitch2Changev'
c:/users/akki kisu/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/3.0.4-gcc10.3-1757bed/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/bin/ld.exe: sketch\Code_NodeMCU_Alexa_ArduinoIotCloud_4Relays.ino.cpp.o:(.text._Z14initPropertiesv+0x40): undefined reference to `_Z15onSwitch3Changev'
c:/users/akki kisu/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/3.0.4-gcc10.3-1757bed/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/bin/ld.exe: sketch\Code_NodeMCU_Alexa_ArduinoIotCloud_4Relays.ino.cpp.o:(.text._Z14initPropertiesv+0x4c): undefined reference to `_Z15onSwitch4Changev'
collect2.exe: error: ld returned 1 exit status
exit status 1
Error compiling for board NodeMCU 1.0 (ESP-12E Module).
1 ответ
Лучший ответ:
В облаке интернета вещей IoT Arduino переменные, синхронизированные между Облаком и скетчем, определены в определении (IoT). Переменные отражаются в свойствах thingProperties.h, который поддерживается облачным редактором. Функции on<имя переменной> в скетче обрабатывают синхронизацию этих переменных <имя переменной>. Они объявлены в свойствах вещей.h
Вы удалили функции onSwitchChange
, но не удалили переменные switchChange в определении этой вещи. Эти вещи обладают thingProperties.h по-прежнему содержит объявления функций onSwitchChange
, но компоновщик не может найти определение функции, потому что вы удалили ее из скетча.
Ошибки похожи на эту:
undefined reference to `_Z15onSwitch1Changev'
Чтобы решить эту проблему, удалите переменные switchChange из объекта в пользовательском интерфейсе облака.
И... *в чем* заключается "ошибка", которую вы получили?, @Majenko
вы можете уменьшить код почти на 90%, если используете массивы для хранения номеров контактов и состояния пина ...
if (toggleState[relay] == 0) { digitalWrite(RelayPin[relay], HIGH);
, @jsotola"Эй, пожалуйста, помогите мне с этой ошибкой. Хотя я не скажу тебе, в чем это ошибка". Мы не волшебники. Пожалуйста, предоставьте полный вывод ошибок, включая строку, в которой произошла ошибка, @chrisl
вы удалили переменные в определении вещи в облаке интернета вещей Arduino? или вы получаете ошибку "Неопределенная ссылка на onSwitch1Change"?, @Juraj
В чем разница между вашим измененным кодом и исходным кодом? Посмотрите на это, и вы, по крайней мере, на один шаг приблизитесь к причине., @the busybee
я получил ошибку, из-за которой ошибка компиляции для платы nodemcu и для какой-либо конкретной строки, @Rathore Brothers
вы получаете ошибку компоновщика "Неопределенная ссылка на onSwitch1Change"?, @Juraj