feat: Initial esp32-hacking project with firmware sources and docs
This commit is contained in:
2
get-started/csi_send/main/CMakeLists.txt
Normal file
2
get-started/csi_send/main/CMakeLists.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
idf_component_register(SRC_DIRS "."
|
||||
INCLUDE_DIRS ".")
|
||||
170
get-started/csi_send/main/app_main.c
Normal file
170
get-started/csi_send/main/app_main.c
Normal file
@@ -0,0 +1,170 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
/* Get Start 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 11
|
||||
|
||||
#if CONFIG_IDF_TARGET_ESP32C5 || CONFIG_IDF_TARGET_ESP32C61 || (CONFIG_IDF_TARGET_ESP32C6 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 4, 0))
|
||||
#define CONFIG_WIFI_BAND_MODE WIFI_BAND_MODE_2G_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
|
||||
#else
|
||||
#define CONFIG_WIFI_BANDWIDTH WIFI_BW_HT40
|
||||
#endif
|
||||
|
||||
#define CONFIG_ESP_NOW_PHYMODE WIFI_PHY_MODE_HT40
|
||||
#define CONFIG_ESP_NOW_RATE WIFI_PHY_RATE_MCS0_LGI
|
||||
#define CONFIG_SEND_FREQUENCY 100
|
||||
|
||||
#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(6, 0, 0)
|
||||
#define ESP_IF_WIFI_STA ESP_MAC_WIFI_STA
|
||||
#endif
|
||||
|
||||
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));
|
||||
|
||||
#if CONFIG_IDF_TARGET_ESP32C5
|
||||
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));
|
||||
#elif (CONFIG_IDF_TARGET_ESP32C6 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 4, 0)) || CONFIG_IDF_TARGET_ESP32C61
|
||||
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,
|
||||
};
|
||||
ESP_ERROR_CHECK(esp_wifi_set_protocols(ESP_IF_WIFI_STA, &protocols));
|
||||
wifi_bandwidths_t bandwidth = {
|
||||
.ghz_2g = CONFIG_WIFI_2G_BANDWIDTHS,
|
||||
};
|
||||
ESP_ERROR_CHECK(esp_wifi_set_bandwidths(ESP_IF_WIFI_STA, &bandwidth));
|
||||
#else
|
||||
ESP_ERROR_CHECK(esp_wifi_set_bandwidth(ESP_IF_WIFI_STA, CONFIG_WIFI_BANDWIDTH));
|
||||
ESP_ERROR_CHECK(esp_wifi_start());
|
||||
|
||||
#endif
|
||||
|
||||
ESP_ERROR_CHECK(esp_wifi_set_ps(WIFI_PS_NONE));
|
||||
#if CONFIG_IDF_TARGET_ESP32C5
|
||||
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));
|
||||
}
|
||||
#elif (CONFIG_IDF_TARGET_ESP32C6 && ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 4, 0)) || CONFIG_IDF_TARGET_ESP32C61
|
||||
if (CONFIG_WIFI_BAND_MODE == WIFI_BAND_MODE_2G_ONLY && CONFIG_WIFI_2G_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));
|
||||
}
|
||||
#else
|
||||
if (CONFIG_WIFI_BANDWIDTH == 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));
|
||||
}
|
||||
#endif
|
||||
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_ERROR_CHECK(esp_now_add_peer(&peer));
|
||||
esp_now_rate_config_t rate_config = {
|
||||
.phymode = CONFIG_ESP_NOW_PHYMODE,
|
||||
.rate = CONFIG_ESP_NOW_RATE,
|
||||
.ersu = false,
|
||||
.dcm = false
|
||||
};
|
||||
ESP_ERROR_CHECK(esp_now_set_peer_rate_config(peer.peer_addr, &rate_config));
|
||||
}
|
||||
|
||||
void app_main()
|
||||
{
|
||||
/**
|
||||
* @brief Initialize NVS
|
||||
*/
|
||||
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);
|
||||
|
||||
/**
|
||||
* @brief Initialize Wi-Fi
|
||||
*/
|
||||
wifi_init();
|
||||
|
||||
/**
|
||||
* @brief 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));
|
||||
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
get-started/csi_send/main/idf_component.yml
Normal file
3
get-started/csi_send/main/idf_component.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
## IDF Component Manager Manifest File
|
||||
dependencies:
|
||||
idf: ">=4.4.1"
|
||||
Reference in New Issue
Block a user