AirGradient Forum

Firmware compile error

Hi. I have issue with compiling official firmware 3.1.21 and official instruction.
Here is the compile error:

/home/user/Arduino/libraries/AirGradient_Air_Quality_Sensor/src/MqttClient.cpp: In member function 'bool MqttClient::begin(String)':
/home/user/Arduino/libraries/AirGradient_Air_Quality_Sensor/src/MqttClient.cpp:37:3: error: 'esp_mqtt_client_config_t' has no non-static data member named 'uri'
   37 |   };
      |   ^
/home/user/Arduino/libraries/AirGradient_Air_Quality_Sensor/src/AgConfigure.cpp: In member function 'void Configuration::saveConfig()':
/home/user/Arduino/libraries/AirGradient_Air_Quality_Sensor/src/AgConfigure.cpp:221:3: error: 'File' was not declared in this scope
  221 |   File file = SPIFFS.open(CONFIG_FILE_NAME, "w", true);
      |   ^~~~
/home/user/Arduino/libraries/AirGradient_Air_Quality_Sensor/src/AgConfigure.cpp:222:7: error: 'file' was not declared in this scope
  222 |   if (file && !file.isDirectory()) {
      |       ^~~~
/home/user/Arduino/libraries/AirGradient_Air_Quality_Sensor/src/AgConfigure.cpp: In member function 'void Configuration::loadConfig()':
/home/user/Arduino/libraries/AirGradient_Air_Quality_Sensor/src/AgConfigure.cpp:246:3: error: 'File' was not declared in this scope
  246 |   File file = SPIFFS.open(CONFIG_FILE_NAME);
      |   ^~~~
/home/user/Arduino/libraries/AirGradient_Air_Quality_Sensor/src/AgConfigure.cpp:247:7: error: 'file' was not declared in this scope
  247 |   if (file && !file.isDirectory()) {
      |       ^~~~
/home/user/Arduino/libraries/AirGradient_Air_Quality_Sensor/src/AgConfigure.cpp:256:5: error: 'SPIFFS' was not declared in this scope
  256 |     SPIFFS.format();
      |     ^~~~~~
/home/user/Arduino/libraries/AirGradient_Air_Quality_Sensor/src/AgConfigure.cpp: In member function 'bool Configuration::begin()':
/home/user/Arduino/libraries/AirGradient_Air_Quality_Sensor/src/AgConfigure.cpp:333:8: error: 'SPIFFS' was not declared in this scope
  333 |   if (!SPIFFS.begin(true)) {
      |        ^~~~~~
/home/user/Arduino/libraries/AirGradient_Air_Quality_Sensor/src/AgApiClient.cpp: In member function 'bool AgApiClient::postToServer(String)':
/home/user/Arduino/libraries/AirGradient_Air_Quality_Sensor/src/AgApiClient.cpp:122:7: error: 'WiFi' was not declared in this scope
  122 |   if (WiFi.isConnected() == false) {
      |       ^~~~

exit status 1

Compilation error: exit status 1

What can be the issue?
Here is the screenshot of my setup

Check out my notes here:

1 Like

Also, it looks like you aren’t on the version of the board manager the direction specify. It has to be a 2.x version to compile

Yes, I selected the latest 3.1.1 board manager as it is listed in their official instruction.
If I reset the project and select 2.0.11 board manager I will get another compile error:

Traceback (most recent call last):
  File "/home/user/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool.py", line 31, in <module>
    import esptool
  File "/home/user/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/__init__.py", line 41, in <module>
    from esptool.cmds import (
  File "/home/user/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/cmds.py", line 14, in <module>
    from .bin_image import ELFFile, ImageSegment, LoadFirmwareImage
  File "/home/user/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/bin_image.py", line 14, in <module>
    from .loader import ESPLoader
  File "/home/user/.arduino15/packages/esp32/tools/esptool_py/4.5.1/esptool/loader.py", line 30, in <module>
    import serial
ModuleNotFoundError: No module named 'serial'
exit status 1

Compilation error: exit status 1

Looks like they have to update their official guide

I was able to fix compile error with the latest board manager 3.1.1

First compile error can be fixed here has to be
#ifdef ESP32
instead of
#if ESP32

Second here has to be

esp_mqtt_client_config_t config = { };
config.broker.address.uri = this->uri.c_str();

instead of

esp_mqtt_client_config_t config = {
      .uri = this->uri.c_str(),
  };

And here can be fixed by wrapping

if (WiFi.isConnected() == false) {
return false;
}

into

#ifdef ESP8266
#endif

to looks like:

#ifdef ESP8266
if (WiFi.isConnected() == false) {
	return false;
}
#endif

There are too many sources of truth as this page specifies the older version
https://www.airgradient.com/documentation/install-arduino-c3-mini/

Of you are interested, you can submit a PR on the GitHub page to see if they’ll accept it into the main repo.

1 Like