espressif / arduino-esp32

Arduino core for the ESP32
GNU Lesser General Public License v2.1
13.52k stars 7.39k forks source link

Can't compile when using I2C #5448

Closed felix900006 closed 2 years ago

felix900006 commented 3 years ago

Hardware:

Board: ESP32 Dev Module Espressif 32 Core Installation version: 3.3.0 IDE name: Platform.io Flash Frequency: 80Mhz PSRAM enabled: no Upload Speed: 115200 Computer OS: Windows 10

Description:

I get an copile error every time i try to use I2C

Sketch:


#include <Arduino.h>
#include <Ticker.h>
#include "SparkFunHTU21D.h"
#include <SPI.h>
#include <Wire.h>
#include <QuickPID.h>
#include <StopWatch.h>
#include <WiFi.h>
#include <ESPmDNS.h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <AsyncElegantOTA.h>
#include <FS.h>
#include <SPIFFS.h>
#include <ArduinoJson.h>

int outputPin = 21;

AsyncWebServer server(80);
AsyncWebSocket ws("/ws");

const char *ssid = "****";
const char *key = "****";
const char *hostname = "ESP32";
const char *mdns_name = "ESP32";

HTU21D htu;

const int16_t sampleTimeUs = 10000;
const int outputMax = 255;
const int outputMin = 180;

bool printOrPlotter = 0;
float POn = 1.0;
float DOn = 0.0;

byte outputStep = 5;
byte hysteresis = 1;

int setpoint = 80;
int output = 0;

float Input, Output, Setpoint;
float Kp = 0, Ki = 0, Kd = 0;
bool pidLoop = false;
static bool computeNow = false;
void runPid();

Ticker timer1(runPid, sampleTimeUs, 0, MICROS_MICROS);
QuickPID PID = QuickPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, POn, DOn, QuickPID::DIRECT);

// Measurement averaging
float avg(float inputVal) {
  static float arrDat[16];
  static int pos;
  static long sum;
  pos++;
  if (pos >= 16) pos = 0;
  sum = sum - arrDat[pos] + inputVal;
  arrDat[pos] = inputVal;
  return (float)sum / 16.0;
}

void runPid() {
  computeNow = true;
}

// Webserver Setup
void initWebserver() {
  server.serveStatic("/", SPIFFS, "index.html");
  server.serveStatic("/style.css", SPIFFS, "/style.css");
  server.serveStatic("/script.js", SPIFFS, "/script.js");

}

// System Startup Routine
void setup() {

  // Setup Serial
  Serial.begin(115200);
  Serial2.begin(9600);

  // Setup SPIFFS
   if (!SPIFFS.begin(true))
  {
    Serial.println("failed to mount SPIFFS!");
    return;
  }

  // Set WiFi Hostname
  WiFi.setHostname(hostname);
  WiFi.begin(ssid, key);

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  // Print IP
  Serial.println(WiFi.localIP());

  //Start mDNS 
  if (!MDNS.begin(mdns_name))
  {
    Serial.println("Error setting up mDNS responder");
  }
  else
  {
    Serial.println("mDNS responder started: " + String(mdns_name) + ".local");
  }

  // Setup WebSocket
  //ws.onEvent(onWSEvent);
  //server.addHandler(&ws);

  // Setup Webserver
  initWebserver();

  AsyncElegantOTA.begin(&server);
  server.begin();

  MDNS.addService("http", "tcp", 80);

  htu.begin();
  timer1.start();

  PID.AutoTune(tuningMethod::ZIEGLER_NICHOLS_PID);
  PID.autoTune->autoTuneConfig(outputStep, hysteresis, setpoint, output, QuickPID::DIRECT, printOrPlotter, sampleTimeUs);

}

// System Loop Routine
void loop() {
  AsyncElegantOTA.loop();
  timer1.update();
  if (PID.autoTune){
    switch (PID.autoTune->autoTuneLoop()) {
      case PID.autoTune->AUTOTUNE:
        Input = avg(htu.readTemperature());
        analogWrite(outputPin, Output);
        break;
      case PID.autoTune->TUNINGS:
        PID.autoTune->setAutoTuneConstants(&Kp, &Ki, &Kd); // set new tunings
        PID.SetMode(QuickPID::TIMER); // setup PID
        PID.SetSampleTimeUs(sampleTimeUs);
        PID.SetTunings(Kp, Ki, Kd, POn, DOn); // apply new tunings to PID
        Setpoint = 80;
        break;
      case PID.autoTune->CLR:
        if (!pidLoop) {
          Serial.println("New PID Values");
          Serial.println("Kp:" + String(Kp));
          Serial.println("Ki:" + String(Ki));
          Serial.println("Kd:" + String(Kd));
          PID.clearAutoTune(); // releases memory used by AutoTune object
          pidLoop = true;
        }
        break;
    }
  }
  if (pidLoop) {
    if (printOrPlotter == 0) { // plotter
      Serial.print("Setpoint:");  Serial.print(Setpoint);  Serial.print(",");
      Serial.print("Input:");     Serial.print(Input);     Serial.print(",");
      Serial.print("Output:");    Serial.print(Output);    Serial.println(",");
    }
    if (computeNow) {
      //Input = htu.readTemperature();
      PID.Compute();
      analogWrite(outputPin, Output);
      computeNow = false;
    }
  }
}

Debug Messages:

Processing esp32doit-devkit-v1 (platform: espressif32; board: esp32doit-devkit-v1; framework: arduino)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32doit-devkit-v1.html
PLATFORM: Espressif 32 (3.3.0) > DOIT ESP32 DEVKIT V1
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (esp-prog) External (esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
 - framework-arduinoespressif32 3.10006.210326 (1.0.6)
 - tool-esptoolpy 1.30100.210531 (3.1.0)
 - toolchain-xtensa32 2.50200.97 (5.2.0)
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 49 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <PID> 1.2.1
|-- <StopWatch> 0.2.2
|-- <Adafruit HTU21DF Library> 1.0.5
|   |-- <Wire> 1.0.1
Building in release mode
Compiling .pio\build\esp32doit-devkit-v1\src\main.cpp.o
Archiving .pio\build\esp32doit-devkit-v1\lib078\libPID.a
Indexing .pio\build\esp32doit-devkit-v1\lib078\libPID.a
Archiving .pio\build\esp32doit-devkit-v1\libf83\libStopWatch.a
Indexing .pio\build\esp32doit-devkit-v1\libf83\libStopWatch.a
Archiving .pio\build\esp32doit-devkit-v1\libfd4\libWire.a
Indexing .pio\build\esp32doit-devkit-v1\libfd4\libWire.a
Archiving .pio\build\esp32doit-devkit-v1\libcfc\libHTU21DF.a
Indexing .pio\build\esp32doit-devkit-v1\libcfc\libHTU21DF.a
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\FunctionalInterrupt.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\HardwareSerial.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\IPAddress.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\IPv6Address.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\MD5Builder.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\Print.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\Stream.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\StreamString.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\WMath.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\WString.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\base64.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\cbuf.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-adc.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-bt.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-cpu.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-dac.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-gpio.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-i2c.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-ledc.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-log.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-matrix.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-misc.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-psram.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-rmt.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-sigmadelta.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-spi.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-time.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-timer.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-touch.c.o
C:\Users\Deatsch\.platformio\packages\framework-arduinoespressif32\cores\esp32\esp32-hal-spi.c: In function 'spiTransferBytesNL':
C:\Users\Deatsch\.platformio\packages\framework-arduinoespressif32\cores\esp32\esp32-hal-spi.c:922:39: warning: initialization from incompatible pointer type [-Wincompatible
                 uint8_t * last_out8 = &result[c_longs-1];
                                       ^
C:\Users\Deatsch\.platformio\packages\framework-arduinoespressif32\cores\esp32\esp32-hal-spi.c:923:40: warning: initialization from incompatible pointer type [-Wincompatible
                 uint8_t * last_data8 = &last_data;
                                        ^
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\esp32-hal-uart.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\libb64\cdecode.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\libb64\cencode.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\main.cpp.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\stdlib_noniso.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\wiring_pulse.c.o
Compiling .pio\build\esp32doit-devkit-v1\FrameworkArduino\wiring_shift.c.o
Archiving .pio\build\esp32doit-devkit-v1\libFrameworkArduino.a
Indexing .pio\build\esp32doit-devkit-v1\libFrameworkArduino.a
Linking .pio\build\esp32doit-devkit-v1\firmware.elf
.pio\build\esp32doit-devkit-v1\libFrameworkArduino.a(esp32-hal-i2c.c.o):(.iram1.24.literal+0x0): undefined reference to `xEventGroupSetBitsFromISR'
.pio\build\esp32doit-devkit-v1\libFrameworkArduino.a(esp32-hal-i2c.c.o): In function `i2cIsrExit':
C:\Users\Deatsch\.platformio\packages\framework-arduinoespressif32\cores\esp32/esp32-hal-i2c.c:838: undefined reference to `xEventGroupSetBitsFromISR'
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\esp32doit-devkit-v1\firmware.elf] Error 1
stale[bot] commented 3 years ago

[STALE_SET] This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 14 days if no further activity occurs. Thank you for your contributions.

BaooQ commented 2 years ago

Have you solved the problem? I think I meet the same question...

VojtechBartoska commented 2 years ago

@BaooQ Are you on the latest 2.0.2 Arduino core ESP32 version?

BaooQ commented 2 years ago

@VojtechBartoska This one? I'm not sure. c48e48768dbe4ce1c9e244bdbcedeb5

VojtechBartoska commented 2 years ago

It's old one.

Latest is available here: https://github.com/espressif/arduino-esp32/releases/tag/2.0.2

Take a look on installing guide: https://docs.espressif.com/projects/arduino-esp32/en/latest/installing.html

BaooQ commented 2 years ago

@VojtechBartoska Thank you so much!

BaooQ commented 2 years ago

I think the problem was solved. I check the code,find this in event_groups.h :

if( configUSE_TRACE_FACILITY == 1 )

BaseType_t xEventGroupSetBitsFromISR( EventGroupHandle_t xEventGroup, const EventBits_t uxBitsToSet, BaseType_t *pxHigherPriorityTaskWoken );

else

#define xEventGroupSetBitsFromISR( xEventGroup, uxBitsToSet, pxHigherPriorityTaskWoken ) xTimerPendFunctionCallFromISR( vEventGroupSetBitsCallback, ( void * ) xEventGroup, ( uint32_t ) uxBitsToSet, pxHigherPriorityTaskWoken )

endif

And I remembered i set the configUSE_TRACE_FACILITY as 1 in some time before, to use some functions in rtos.h ,I try to set it back to 0 and then it works .

VojtechBartoska commented 2 years ago

@BaooQ Hi, glad you found a solution. I'm closing the issue as it was explained. If needed, you can reopen it felix900006.