feat: Initial esp32-hacking project with firmware sources and docs
This commit is contained in:
109
esp-crab/slave_send/.gitignore
vendored
Normal file
109
esp-crab/slave_send/.gitignore
vendored
Normal file
@@ -0,0 +1,109 @@
|
||||
.config
|
||||
*.o
|
||||
*.pyc
|
||||
*.orig
|
||||
|
||||
# gtags
|
||||
GTAGS
|
||||
GRTAGS
|
||||
GPATH
|
||||
|
||||
# emacs
|
||||
.dir-locals.el
|
||||
|
||||
# emacs temp file suffixes
|
||||
*~
|
||||
.#*
|
||||
\#*#
|
||||
|
||||
# eclipse setting
|
||||
.settings
|
||||
|
||||
# MacOS directory files
|
||||
.DS_Store
|
||||
|
||||
# Components Unit Test Apps files
|
||||
components/**/build
|
||||
components/**/sdkconfig
|
||||
components/**/sdkconfig.old
|
||||
|
||||
# Example project files
|
||||
examples/**/sdkconfig
|
||||
examples/**/sdkconfig.old
|
||||
examples/**/build
|
||||
|
||||
# Doc build artifacts
|
||||
docs/**/_build/
|
||||
docs/**/doxygen-warning-log.txt
|
||||
docs/**/sphinx-warning-log.txt
|
||||
docs/**/sphinx-warning-log-sanitized.txt
|
||||
docs/**/xml/
|
||||
docs/**/xml_in/
|
||||
docs/**/man/
|
||||
|
||||
# Downloaded font files
|
||||
docs/_static/DejaVuSans.ttf
|
||||
docs/_static/NotoSansSC-Regular.otf
|
||||
|
||||
# Unit test app files
|
||||
tools/unit-test-app/sdkconfig
|
||||
tools/unit-test-app/sdkconfig.old
|
||||
tools/unit-test-app/build
|
||||
tools/unit-test-app/builds
|
||||
tools/unit-test-app/output
|
||||
tools/unit-test-app/test_configs
|
||||
|
||||
# Unit Test CMake compile log folder
|
||||
log_ut_cmake
|
||||
|
||||
# test application build files
|
||||
tools/test_apps/**/build
|
||||
tools/test_apps/**/sdkconfig
|
||||
tools/test_apps/**/sdkconfig.old
|
||||
|
||||
# IDF monitor test
|
||||
tools/test_idf_monitor/outputs
|
||||
|
||||
TEST_LOGS
|
||||
|
||||
# gcov coverage reports
|
||||
*.gcda
|
||||
*.gcno
|
||||
coverage.info
|
||||
coverage_report/
|
||||
|
||||
test_multi_heap_host
|
||||
|
||||
# VS Code Settings
|
||||
.vscode/
|
||||
|
||||
# VIM files
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# Clion IDE CMake build & config
|
||||
.idea/
|
||||
cmake-build-*/
|
||||
|
||||
# Results for the checking of the Python coding style and static analysis
|
||||
.mypy_cache
|
||||
flake8_output.txt
|
||||
|
||||
# ESP-IDF default build directory name
|
||||
build
|
||||
build_esp*/
|
||||
build_linux*/
|
||||
size_info.txt
|
||||
|
||||
# lock files for examples and components
|
||||
dependencies.lock
|
||||
|
||||
# managed_components for examples
|
||||
managed_components
|
||||
|
||||
# pytest log
|
||||
pytest_embedded_log/
|
||||
pytest_log/
|
||||
.pytest_cache/
|
||||
XUNIT_RESULT.xml
|
||||
|
||||
13
esp-crab/slave_send/CMakeLists.txt
Normal file
13
esp-crab/slave_send/CMakeLists.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
# The following lines of boilerplate have to be in your project's CMakeLists
|
||||
# in this exact order for cmake to work correctlycmake_minimum_required(VERSION 3.5)
|
||||
cmake_minimum_required(VERSION 3.5)
|
||||
add_compile_options(-fdiagnostics-color=always)
|
||||
|
||||
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||
|
||||
string(REGEX REPLACE ".*/\(.*\)" "\\1" CURDIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
project(${CURDIR})
|
||||
|
||||
git_describe(PROJECT_VERSION ${COMPONENT_DIR})
|
||||
message("Project commit: " ${PROJECT_VERSION})
|
||||
2
esp-crab/slave_send/main/CMakeLists.txt
Normal file
2
esp-crab/slave_send/main/CMakeLists.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
idf_component_register(SRC_DIRS "."
|
||||
INCLUDE_DIRS ".")
|
||||
120
esp-crab/slave_send/main/app_main.c
Normal file
120
esp-crab/slave_send/main/app_main.c
Normal file
@@ -0,0 +1,120 @@
|
||||
/* Esp-crab Example
|
||||
|
||||
This example code is in the Public Domain (or CC0 licensed, at your option.)
|
||||
|
||||
Unless required by applicable law or agreed to in writing, this
|
||||
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||
CONDITIONS OF ANY KIND, either express or implied.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include "nvs_flash.h"
|
||||
#include "esp_mac.h"
|
||||
#include "esp_log.h"
|
||||
#include "esp_wifi.h"
|
||||
#include "esp_netif.h"
|
||||
#include "esp_now.h"
|
||||
|
||||
#define CONFIG_LESS_INTERFERENCE_CHANNEL 40
|
||||
#define CONFIG_WIFI_BAND_MODE WIFI_BAND_MODE_5G_ONLY
|
||||
#define CONFIG_WIFI_2G_BANDWIDTHS WIFI_BW_HT40
|
||||
#define CONFIG_WIFI_5G_BANDWIDTHS WIFI_BW_HT40
|
||||
#define CONFIG_WIFI_2G_PROTOCOL WIFI_PROTOCOL_11N
|
||||
#define CONFIG_WIFI_5G_PROTOCOL WIFI_PROTOCOL_11N
|
||||
#define CONFIG_ESP_NOW_PHYMODE WIFI_PHY_MODE_HT40
|
||||
#define CONFIG_SEND_FREQUENCY 40
|
||||
|
||||
static const uint8_t CONFIG_CSI_SEND_MAC[] = {0x1a, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
static const char *TAG = "csi_send";
|
||||
|
||||
static void wifi_init()
|
||||
{
|
||||
ESP_ERROR_CHECK(esp_event_loop_create_default());
|
||||
|
||||
ESP_ERROR_CHECK(esp_netif_init());
|
||||
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
||||
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
|
||||
|
||||
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
|
||||
ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));
|
||||
|
||||
ESP_ERROR_CHECK(esp_wifi_start());
|
||||
esp_wifi_set_band_mode(CONFIG_WIFI_BAND_MODE);
|
||||
wifi_protocols_t protocols = {
|
||||
.ghz_2g = CONFIG_WIFI_2G_PROTOCOL,
|
||||
.ghz_5g = CONFIG_WIFI_5G_PROTOCOL
|
||||
};
|
||||
ESP_ERROR_CHECK(esp_wifi_set_protocols(ESP_IF_WIFI_STA, &protocols));
|
||||
wifi_bandwidths_t bandwidth = {
|
||||
.ghz_2g = CONFIG_WIFI_2G_BANDWIDTHS,
|
||||
.ghz_5g = CONFIG_WIFI_5G_BANDWIDTHS
|
||||
};
|
||||
ESP_ERROR_CHECK(esp_wifi_set_bandwidths(ESP_IF_WIFI_STA, &bandwidth));
|
||||
|
||||
ESP_ERROR_CHECK(esp_wifi_start());
|
||||
ESP_ERROR_CHECK(esp_wifi_set_ps(WIFI_PS_NONE));
|
||||
|
||||
|
||||
if ((CONFIG_WIFI_BAND_MODE == WIFI_BAND_MODE_2G_ONLY && CONFIG_WIFI_2G_BANDWIDTHS == WIFI_BW_HT20) || (CONFIG_WIFI_BAND_MODE == WIFI_BAND_MODE_5G_ONLY && CONFIG_WIFI_5G_BANDWIDTHS == WIFI_BW_HT20)) {
|
||||
ESP_ERROR_CHECK(esp_wifi_set_channel(CONFIG_LESS_INTERFERENCE_CHANNEL, WIFI_SECOND_CHAN_NONE));
|
||||
}
|
||||
else {
|
||||
ESP_ERROR_CHECK(esp_wifi_set_channel(CONFIG_LESS_INTERFERENCE_CHANNEL, WIFI_SECOND_CHAN_BELOW));
|
||||
}
|
||||
|
||||
ESP_ERROR_CHECK(esp_wifi_set_mac(WIFI_IF_STA, CONFIG_CSI_SEND_MAC));
|
||||
}
|
||||
|
||||
static void wifi_esp_now_init(esp_now_peer_info_t peer)
|
||||
{
|
||||
ESP_ERROR_CHECK(esp_now_init());
|
||||
ESP_ERROR_CHECK(esp_now_set_pmk((uint8_t *)"pmk1234567890123"));
|
||||
esp_now_rate_config_t rate_config = {
|
||||
.phymode = CONFIG_ESP_NOW_PHYMODE,
|
||||
.rate = WIFI_PHY_RATE_MCS0_LGI,
|
||||
.ersu = false,
|
||||
.dcm = false
|
||||
};
|
||||
ESP_ERROR_CHECK(esp_now_add_peer(&peer));
|
||||
ESP_ERROR_CHECK(esp_now_set_peer_rate_config(peer.peer_addr,&rate_config));
|
||||
|
||||
}
|
||||
|
||||
void app_main()
|
||||
{
|
||||
esp_err_t ret = nvs_flash_init();
|
||||
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
|
||||
ESP_ERROR_CHECK(nvs_flash_erase());
|
||||
ret = nvs_flash_init();
|
||||
}
|
||||
ESP_ERROR_CHECK(ret);
|
||||
wifi_init();
|
||||
|
||||
/**
|
||||
* @breif Initialize ESP-NOW
|
||||
* ESP-NOW protocol see: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_now.html
|
||||
*/
|
||||
esp_now_peer_info_t peer = {
|
||||
.channel = CONFIG_LESS_INTERFERENCE_CHANNEL,
|
||||
.ifidx = WIFI_IF_STA,
|
||||
.encrypt = false,
|
||||
.peer_addr = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
|
||||
};
|
||||
wifi_esp_now_init(peer);
|
||||
|
||||
ESP_LOGI(TAG, "================ CSI SEND ================");
|
||||
ESP_LOGI(TAG, "wifi_channel: %d, send_frequency: %d, mac: " MACSTR,
|
||||
CONFIG_LESS_INTERFERENCE_CHANNEL, CONFIG_SEND_FREQUENCY, MAC2STR(CONFIG_CSI_SEND_MAC));
|
||||
|
||||
for (uint32_t count = 0; ;++count) {
|
||||
esp_err_t ret = esp_now_send(peer.peer_addr, (const uint8_t *)&count, sizeof(count));
|
||||
ESP_LOGI(TAG,"count:%ld",count);
|
||||
if(ret != ESP_OK) {
|
||||
ESP_LOGW(TAG, "free_heap: %ld <%s> ESP-NOW send error",esp_get_free_heap_size(), esp_err_to_name(ret));
|
||||
}
|
||||
|
||||
usleep(1000 * 1000 / CONFIG_SEND_FREQUENCY);
|
||||
}
|
||||
}
|
||||
3
esp-crab/slave_send/main/idf_component.yml
Normal file
3
esp-crab/slave_send/main/idf_component.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
## IDF Component Manager Manifest File
|
||||
dependencies:
|
||||
idf: ">=4.4.1"
|
||||
8
esp-crab/slave_send/sdkconfig.defaults
Normal file
8
esp-crab/slave_send/sdkconfig.defaults
Normal file
@@ -0,0 +1,8 @@
|
||||
# This file was generated using idf.py save-defconfig. It can be edited manually.
|
||||
# Espressif IoT Development Framework (ESP-IDF) 5.5.0 Project Minimal Configuration
|
||||
#
|
||||
CONFIG_IDF_TARGET="esp32c5"
|
||||
CONFIG_ESP_WIFI_DYNAMIC_TX_BUFFER_NUM=128
|
||||
CONFIG_ESP_WIFI_CSI_ENABLED=y
|
||||
CONFIG_ESP_WIFI_AMPDU_TX_ENABLED=n
|
||||
CONFIG_FREERTOS_HZ=1000
|
||||
Reference in New Issue
Block a user