esp-idf配置和使用 esp32s3 n16r8 发表于 2026-01-15 更新于 2026-02-02
字数总计: 897 阅读时长: 3分钟 阅读量: 广西
CPU frequency = 240MHz Flash = QIO ESP PSRAM 勾选 Pull-up PSRAM CS pin in light sleep,并且mode of spi ram chip in use = Octal Mode PSRAM configTICK_RATE_HZ = 1000
GPIO 配置GPIO 1 2 3 4 5 6 7 8 9 10 11 12 13 #include "driver/gpio.h" void gpio_init (void ) { gpio_config_t io_conf = { .intr_type = GPIO_INTR_DISABLE, .mode = GPIO_MODE_OUTPUT, .pin_bit_mask = 1ULL << GPIO_NUM_3, .pull_down_en = 0 , .pull_up_en = 0 , }; esp_err_t ret = gpio_config(&io_conf); if (ret != ESP_OK) { printf ("LED 初始化失败!\n" ); } }
设置 GPIO 电平 可以使用 gpio_set_level 函数设置 GPIO 的输出电平。该函数接受 GPIO 编号和电平值(0 或 1)作为参数。
1 gpio_set_level(GPIO_NUM_3, 1); // 将 GPIO3 设置为高电平
读取 GPIO 电平 可以使用 gpio_get_level 函数读取 GPIO 的输入电平。该函数返回 GPIO 的当前电平(0 或 1)。
1 int level = gpio_get_level(GPIO_NUM_3); // 读取 GPIO3 的电平
FreeSTOS 创建线程 XTaskCreate
协议 I2C I²C 用两根线,一根SDA传输数据,一根SCL同步时钟
模式
速度
Standard
100 kHz
Fast
400 kHz
Fast+
1 MHz
WIFI 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 // 第一步,初始化 nvs_flash_init() // 存储WiFi的SSID、密码、国家码、上次连接状态 // 第二步,初始化TCP/IP协议栈 esp_netif_init() // 创建默认的网络接口 // 第三步,WiFi循环事件 esp_event_loop_create_default() // WiFi是异步的,需要一个事件循环来处理WiFi事件 // 第四步,配置WiFi esp_netif_create_default_wifi_sta() // WiFi有三种模式:Station、SoftAP、Station+SoftAP // 创建一个“网络接口对象” // 第五步,WiFi初始化 esp_wifi_init() // 真正启动wifi芯片 // 第六步,注册事件处理器 esp_event_handler_instance_register(...) // 监控WiFi,自动重连,异常恢复 // 第七步,指定WiFi的模式 esp_wifi_set_mode() // STA AP STAP // 第八步,连接WiFi esp_wifi_set_config(WIFI_IF_STA, &wifi_config); // 配置WiFi的SSID和密码 // 第九步,连接WiFi esp_wifi_connect() // 连接WiFi
最简代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 #include <string.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "esp_event.h" #include "esp_log.h" #include "esp_netif.h" #include "esp_wifi.h" #include "nvs_flash.h" static const char *TAG = "wifi"; /* WiFi 事件回调 */ static void wifi_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) { if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) { esp_wifi_connect(); } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { esp_wifi_connect(); } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) { ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data; ESP_LOGI(TAG, "Got IP: " IPSTR, IP2STR(&event->ip_info.ip)); } } void wifi_manager_init(void) { // 第一步,初始化 nvs_flash_init() // 存储WiFi的SSID、密码、国家码、上次连接状态 nvs_flash_init(); // 第二步,初始化TCP/IP协议栈 esp_netif_init() // 创建默认的网络接口 esp_netif_init(); // 第三步,WiFi循环事件 esp_event_loop_create_default() // WiFi是异步的,需要一个事件循环来处理WiFi事件 esp_event_loop_create_default(); // 第四步,配置WiFi esp_netif_create_default_wifi_sta() // WiFi有三种模式:Station、SoftAP、Station+SoftAP // 创建一个“网络接口对象” esp_netif_create_default_wifi_sta(); // 第五步,WiFi初始化 esp_wifi_init() // 真正启动wifi芯片 wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); esp_wifi_init(&cfg); // 第六步,注册事件处理器 esp_event_handler_instance_register(...) // 监控WiFi,自动重连,异常恢复 esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL); esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL); // 第七步,指定WiFi的模式 esp_wifi_set_mode() // STA AP STAP esp_wifi_set_mode(WIFI_MODE_STA); // 第八步,连接WiFi esp_wifi_set_config(WIFI_IF_STA, &wifi_config); // 配置WiFi的SSID和密码 wifi_config_t wifi_config = { .sta = { .ssid = WIFI_SSID, .password = WIFI_PASS, }, }; esp_wifi_set_config(WIFI_IF_STA, &wifi_config); // 第九步,连接WiFi esp_wifi_connect() // 连接WiFi esp_wifi_start(); }
Kconfig 可以把一些参数放进menuconfig里面,从里面进行配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 menu "WiFi Configuration" config WIFI_SSID string "WiFi SSID" default "my_wifi" help The SSID of the WiFi network to connect to. config WIFI_PASSWORD string "WiFi Password" default "12345678" help The password of the WiFi network. endmenu
📌 规则:
config 名字 → 自动生成 CONFIG_名字
string / int / bool 都可以
help 是给 menuconfig UI 用的
然后在代码里面引用一下
1 2 3 4 5 6 7 8 9 10 11 12 #include "sdkconfig.h" …… wifi_config_t wifi_config = { .sta = { .ssid = CONFIG_WIFI_SSID, .password = CONFIG_WIFI_PASSWORD, .threshold.authmode = WIFI_AUTH_WPA2_PSK, }, };