OS: Ubuntu 22.04.4 LTS
PlatformIO: Core 6.1.16, Home 3.4.4
I have following src folder structure in my PlatformIO project:
-src--arduino---main.cpp--esp32---essentials.cpp---main.cppthe content of all the three files is as follows:
arduino/main.cpp:
#include<Arduino.h>#define aggregationCount 10#define sensorPin 5#define devicePin 6#define esp Serial1String messageFromEsp, messageToEsp;void setup(){ pinMode(sensorPin,INPUT); pinMode(devicePin,OUTPUT); // Serial.begin(9600); esp.begin(9600); Serial.begin(9600); while(!Serial){} Serial.println("Serial began");}void loop(){ if(esp.available()){ messageFromEsp = messageToEsp = ""; messageFromEsp = esp.readStringUntil('\n'); Serial.print("esp:"); Serial.println(messageFromEsp); if(messageFromEsp.indexOf("giveReading") == 0){ messageToEsp = "reading:" + String(digitalRead(sensorPin)); esp.println(messageToEsp); Serial.print("sent:"); Serial.println(messageToEsp); } else if(messageFromEsp.indexOf("turnDeviceOn") == 0){ digitalWrite(devicePin,HIGH); messageToEsp = "deviceIs:" + String("ON"); esp.println(messageToEsp); Serial.print("sent:"); Serial.println(messageToEsp); } else if(messageFromEsp.indexOf("turnDeviceOff") == 0){ digitalWrite(devicePin,LOW); messageToEsp = "deviceIs:" + String("OFF"); esp.println(messageToEsp); Serial.print("sent:"); Serial.println(messageToEsp); } else{ esp.println("invalid command"); } while(esp.available())esp.read(); }}esp32/essentials.cpp
#define ssid "Gondals"#define password "GondalsRouter"#define askArdTimeout 3000#define arduino Serial2ESPTelnet telnet;IPAddress myIp(192,168,10,55);IPAddress subnet(255,255,255,0);IPAddress gateway(192,168,10,1);IPAddress dns(192,168,10,1);String message;void onTelnetConnect(String ip);void onTelnetDisconnect(String ip);void onTelnetInput(String input);void setupOTA();void setupTelnet();//helpingFunctionsvoid print(String inMessage){ Serial.println(inMessage); telnet.println(inMessage);}String askArduino(String inMessage){ // while(arduino.available())arduino.read(); print("sent:" + inMessage); arduino.flush(); arduino.println(inMessage); unsigned long int start = millis(); while((!arduino.available()) && ((millis() - start) < askArdTimeout)){} message = ""; message = arduino.readStringUntil('\n'); print("message:" + message); // while(arduino.available())arduino.read(); return message;}void onTelnetConnect(String ip){ print("telnet connected from ip: " + ip);}void onTelnetDisconnect(String ip){ print("telnet disconnected from ip: "+ip);}void onTelnetInput(String input){ print("input received: "+input);}void setupOTA(){ ArduinoOTA.onStart([]() { print("OTA Update started"); }); ArduinoOTA.onEnd([]() { print("OTA Update ended"); }); ArduinoOTA.onError([](ota_error_t error){ print("OTA Error["+String(error)+"]"); if (error == OTA_AUTH_ERROR) print("Auth Failed"); else if (error == OTA_BEGIN_ERROR) print("Begin Failed"); else if (error == OTA_CONNECT_ERROR) print("Connect Failed"); else if (error == OTA_RECEIVE_ERROR) print("Receive Failed"); else if (error == OTA_END_ERROR) print("End Failed"); }); ArduinoOTA.begin(); print("OTA ready");}void setupTelnet(){ if(telnet.begin(55555)){ print("telnet began"); } else{ print("error in telnet"); } telnet.onConnect(onTelnetConnect); telnet.onDisconnect(onTelnetDisconnect); telnet.onInputReceived(onTelnetInput);}esp32/main.cpp
#include <Arduino.h>#include<ArduinoOTA.h>#include<ESPTelnet.h>#include"essentials.h"#include<freertos/FreeRTOS.h>#include<freertos/task.h>// #include<ACS712.h>#define aggregationCount 10#define sensorPin 5#define devicePin 6enum status {OFF, ON, INVALID};status deviceStatus = OFF, reading = OFF;int result = 0, aggregation = 0;int param = 5;unsigned long int start = millis();status changeDevState(status deviceStatus){ String message = deviceStatus ? askArduino("turnDeviceOff") : askArduino("turnDeviceOn"); print(String("ardResp:" + message)); if(message.indexOf("deviceIs:" == 0)){ message = message.substring(9); if(message.indexOf("ON") == 0)return ON; else if(message.indexOf("OFF") == 0)return OFF; } else print("invalid response"); return INVALID;}void turnTheDevice(status statusIn){ if(statusIn) deviceStatus = changeDevState(ON); else deviceStatus = changeDevState(OFF); if(deviceStatus)print("device ON"); else print("device OFF");}status getReading(){ message = ""; message = askArduino("giveReading"); print("ardResp:" + message); if(message.indexOf("reading:" == 0)){ message = message.substring(8); if(message[0] == '0')return OFF; else if(message[0] == '1')return ON; } else print("invalid response"); return INVALID;}void services(void *pvParamters){ while(1){ telnet.loop();ArduinoOTA.handle(); }}void setup() { Serial.begin(9600); arduino.begin(9600); pinMode(2, OUTPUT); WiFi.mode(WIFI_AP_STA); //wireless services initializations if(!WiFi.config(myIp,gateway,subnet,dns)){ print("static ip config failed"); } WiFi.begin(ssid,password); while(WiFi.status() != WL_CONNECTED){ digitalWrite(2, LOW);print(".");delay(500); digitalWrite(2, HIGH);print(".");delay(500); print(String(WiFi.status())); } setupTelnet(); setupOTA(); xTaskCreate(services,"services",4096,NULL,1,NULL);}void loop(){ while(1){ if(deviceStatus == OFF){ do{ reading = getReading(); print(String(reading)); delay(500); }while(!(reading == 1)); turnTheDevice(ON); } else if(deviceStatus == ON){ print("inside deviceON"); result = 0; for(int m=0,end=aggregationCount*2;m<end;m++){ reading = getReading(); if((reading == 0) || (reading == 1)){ result += reading; } delay(500); print(String(reading)); } aggregation = (result*100)/(aggregationCount*2); print("aggregation:" + String(aggregation)); if(aggregation < 25){ turnTheDevice(OFF); } } }}and finally, the platformio.ini contents:
[env:megaatmega1280]platform = atmelavrboard = megaatmega1280framework = arduinobuild_src_filter = +<arduino/*> -<esp32/*>and the error I am being faced with is:
/tmp/ccCoYnv2.ltrans0.ltrans.o: In function `main':<artificial>:(.text.startup+0xe0): undefined reference to `setup'<artificial>:(.text.startup+0xe8): undefined reference to `loop'collect2: error: ld returned 1 exit status*** [.pio/build/megaatmega1280/firmware.elf] Error 1What can be the issue?