Add helloworld project; Add Dockerfile and idf.sh; Update README.md

This commit is contained in:
Andreas Tsouchlos 2023-08-25 12:16:18 +02:00
parent b82f169f93
commit eafa002b5c
8 changed files with 109 additions and 1 deletions

6
CMakeLists.txt Normal file
View File

@ -0,0 +1,6 @@
cmake_minimum_required(VERSION 3.16)
set(CMAKE_CXX_STANDARD 20)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(HyperLink)

11
Dockerfile Normal file
View File

@ -0,0 +1,11 @@
FROM espressif/idf:release-v5.1
LABEL maintainer="andreas.tsouchlos@gmail.com"
# Make building with a non-root user possible
RUN mkdir -p /home/build
RUN chmod -R 777 /home/build
ENV HOME=/home/build
ENV IDF_TARGET=esp32c3

View File

@ -1,3 +1,29 @@
# HyperLink_SW
Firmware for the HyperLink board.
Firmware for the HyperLink board.
## Build and run
This project is built using the [ESP IDF](https://docs.espressif.com/projects/esp-idf/en/release-v5.1/esp32/index.html) toolchain.
In order to ease the build process, a custom `Dockerfile` is provided.
Any ESP IDF toolchain command can be run by replacing `idf.py` by `./idf.sh`, e.g., `./idf.sh build`,
after having built the docker image.
As the docker container has to be able to access the serial device for flashing,
some configuration may have to take place.
Make sure the `USB_GUID` and `USB_DEV` in `idf.py` have the correct values.
1. Build the docker image
```bash
$ sudo docker build . --tag hyperlink
```
2. Compile the project
```bash
$ ./idf.sh build
```
3. Flash the executable
```bash
$ ./idf.sh flash
```

View File

View File

9
idf.sh Executable file
View File

@ -0,0 +1,9 @@
# This variabe should contain the GUID of the group responsible for the serial
# devices (e.g., 'dialout' for Ubuntu or 'uucp' for Arch)
USB_GUID=986
# This variable should contain the path to the serial device corresponding to
# the ESP32 board (e.g., '/dev/ttyUSB0' or '/dev/ttyACM0').
USB_DEV=/dev/ttyUSB0
sudo docker run --device=${USB_DEV} --rm --user $(id -u):${USB_GUID} -v $PWD:/project -w /project -it hyperlink idf.py $@

4
main/CMakeLists.txt Normal file
View File

@ -0,0 +1,4 @@
set(SOURCES src/main.cpp)
set(INCLUDES include)
idf_component_register(SRCS ${SOURCES} INCLUDE_DIRS ${INCLUDES})

52
main/src/main.cpp Normal file
View File

@ -0,0 +1,52 @@
/*
* SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: CC0-1.0
*/
#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "esp_system.h"
extern "C" void app_main(void)
{
printf("Hello world!\n");
/* Print chip information */
esp_chip_info_t chip_info;
uint32_t flash_size;
esp_chip_info(&chip_info);
printf("This is %s chip with %d CPU core(s), %s%s%s%s, ",
CONFIG_IDF_TARGET,
chip_info.cores,
(chip_info.features & CHIP_FEATURE_WIFI_BGN) ? "WiFi/" : "",
(chip_info.features & CHIP_FEATURE_BT) ? "BT" : "",
(chip_info.features & CHIP_FEATURE_BLE) ? "BLE" : "",
(chip_info.features & CHIP_FEATURE_IEEE802154) ? ", 802.15.4 (Zigbee/Thread)" : "");
unsigned major_rev = chip_info.revision / 100;
unsigned minor_rev = chip_info.revision % 100;
printf("silicon revision v%d.%d, ", major_rev, minor_rev);
if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) {
printf("Get flash size failed");
return;
}
printf("%" PRIu32 "MB %s flash\n", flash_size / (uint32_t)(1024 * 1024),
(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
printf("Minimum free heap size: %" PRIu32 " bytes\n", esp_get_minimum_free_heap_size());
for (int i = 10; i >= 0; i--) {
printf("Restarting in %d seconds...\n", i);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
printf("Restarting now.\n");
fflush(stdout);
esp_restart();
}