First encounter with ESP32
April 2, 2018
I had some issues working with the ESP32. I will list all the issues I had and their solutions. For the record I use Manjaro 17.1.7 - 64bits.
Toolchain related
- ESP32 uses python scripts to configure, compile and flash the chip. If the scripts don’t work it’s most likely due to python3 is the default application for the executable
python
. I should be python 2.7.
$ python --version
Python 2.7.14
- Fail to write to “serial port”
/dev/ttyUSB0
using python. The problem is the libraryserial
. When importing the library in python
import serial
You should have installed pyserial
instead of serial
.
$ pip install pyserial
- Add your
$USER
touupc
group in order to have permission to write through/dev/ttyUSB0
. In arch linux:
$ usermod -a -G uucp $USER
Library related
- Assign not enough stack memory to a task when using FreeRTOS. Check
configMINIMAL_STACK_SIZE
in the ESP32 documentation.
// For ESP-IDF applications
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
BaseType_t xTaskCreate(
TaskFunction_t pvTaskCode,
const char * const pcName,
unsigned short usStackDepth,
void *pvParameters,
UBaseType_t uxPriority,
TaskHandle_t *pxCreatedTask
);
- Use
main
instead ofapp_main
// Wrong
int main(){
...
}
// Correct
void app_main(){
...
}
- Forget initialize the flash. Quoted from “Explore Embedded”, the ESP32 Modules run code from an external flash. Unless you’re using directly the ESP32 chip, the module/board maker will taker of the flash initialization and access. link
void app_main(){
ESP_ERROR_CHECK( nvs_flash_init() );
...
}
- Use
vTaskStartScheduler();
.vTaskStartScheduler()
call is not required, as scheduler is already started beforeapp_main()
call
Share it!
Comments powered by Talkyard.