当前位置: 首页 > java >正文

基于ESP32 - S3实现一个ping百度的C测试程序

环境准备

  • 安装ESP-IDF开发环境,可参考官方文档。
  • 确保开发环境已正确配置,能对ESP32 - S3进行编译和烧录。

实现思路

  1. 连接WiFi:让ESP32 - S3连接到一个可用的WiFi网络。
  2. 初始化Ping功能:利用ESP-IDF提供的Ping API初始化Ping功能。
  3. 执行Ping操作:对百度的服务器(例如 www.baidu.com)执行Ping操作。
  4. 处理Ping结果:显示Ping操作的结果。

示例代码

#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "lwip/err.h"
#include "lwip/sys.h"
#include "lwip/apps/ping.h"// 替换为你的WiFi信息
#define EXAMPLE_ESP_WIFI_SSID      "your_wifi_ssid"
#define EXAMPLE_ESP_WIFI_PASS      "your_wifi_password"static const char *TAG = "ping_test";// WiFi事件处理函数
static void 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) {if (esp_wifi_connect() == ESP_OK) {ESP_LOGI(TAG, "Connect to the AP failed");}} 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));// 连接成功后开始Ping操作xTaskCreate(ping_task, "ping_task", 4096, NULL, 5, NULL);}
}// Ping结果处理函数
static void ping_result_handler(echo_reply_info_t *echo_reply)
{if (echo_reply->err == ERR_OK) {ESP_LOGI(TAG, "Ping success: seq %d, time %d ms", echo_reply->seqno, echo_reply->rtt);} else {ESP_LOGI(TAG, "Ping failed: seq %d, err %d", echo_reply->seqno, echo_reply->err);}
}// Ping任务函数
static void ping_task(void *pvParameters)
{ping_config_t ping_config = {.host = "www.baidu.com",.count = 4,.interval_ms = 1000,.timeout_ms = 2000,.data_size = 64,.tos = 0,};ping_result_t ping_result;int err = ping_start(&ping_config, ping_result_handler, &ping_result);if (err == ERR_OK) {ESP_LOGI(TAG, "Ping started");vTaskDelay(pdMS_TO_TICKS((ping_config.count + 1) * ping_config.interval_ms));ping_stop();ESP_LOGI(TAG, "Ping stopped");} else {ESP_LOGI(TAG, "Ping start failed: err %d", err);}vTaskDelete(NULL);
}void app_main(void)
{// 初始化NVSesp_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);// 初始化网络栈ESP_ERROR_CHECK(esp_netif_init());ESP_ERROR_CHECK(esp_event_loop_create_default());esp_netif_create_default_wifi_sta();// 初始化WiFiwifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK(esp_wifi_init(&cfg));// 注册WiFi事件处理函数esp_event_handler_instance_register(WIFI_EVENT,ESP_EVENT_ANY_ID,&event_handler,NULL,NULL);esp_event_handler_instance_register(IP_EVENT,IP_EVENT_STA_GOT_IP,&event_handler,NULL,NULL);// 配置WiFiwifi_config_t wifi_config = {.sta = {.ssid = EXAMPLE_ESP_WIFI_SSID,.password = EXAMPLE_ESP_WIFI_PASS},};ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );ESP_ERROR_CHECK(esp_wifi_start() );ESP_LOGI(TAG, "wifi_init_sta finished.");
}

代码解释

  1. WiFi连接部分

    • event_handler 函数用于处理WiFi事件,当连接到WiFi并获取到IP地址后,会启动Ping任务。
    • app_main 函数中进行了NVS初始化、网络栈初始化、WiFi初始化和配置等操作,并启动WiFi连接。
  2. Ping操作部分

    • ping_task 函数中配置了Ping参数,包括目标主机、Ping次数、间隔时间等,并调用 ping_start 函数开始Ping操作。
    • ping_result_handler 函数用于处理Ping结果,根据结果输出成功或失败信息。

编译和烧录

  1. 打开终端,进入代码所在目录。
  2. 配置项目:
    idf.py set-target esp32s3
    idf.py menuconfig
    
    在 menuconfig 中配置串口等参数。
  3. 编译和烧录项目:
    idf.py build flash monitor
    

注意事项

  • 要将 EXAMPLE_ESP_WIFI_SSID 和 EXAMPLE_ESP_WIFI_PASS 替换为你实际的WiFi信息。
  • 确保ESP32 - S3能够正常连接到WiFi网络,并且网络可以访问百度的服务器。
http://www.xdnf.cn/news/781.html

相关文章:

  • linux 搭建 dvwa 渗透测试环境
  • 6.数据手册解读—运算放大器(三)
  • AI日报 - 2025年04月20日
  • LangChain 单智能体模式示例【纯代码】
  • Spring Boot 集成 Spring Cloud 的详细教程
  • 学习笔记—C++—string(练习题)
  • 基于 LWE 的格密码python实战
  • STM32 HAL库Freertos 信号量的使用
  • c++类与对象(一)
  • Postgresql几个常用的json操作
  • dubbo SPI插件扩展点使用
  • [RHEL8] 指定rpm软件包的更高版本模块流
  • 深度解析微前端架构设计:从monorepo工程化设计到最佳实践
  • day 22 作业
  • python 字符串解析 struct.unpack_from(fmt, buffer, offset=0) ‘<? B I‘
  • Datawhale 春训营 创新药赛道
  • 011数论——算法备赛
  • 解决IDEA创建SpringBoot项目没有Java版本8
  • 线性回归之归一化(normalization)
  • SAP IAS云产品简介
  • AI与思维模型【70】——遗忘曲线
  • 金融图QCPFinancial
  • Oracle--用户管理
  • 微信小程序上传腾讯云
  • 基于SpringBoot的社区家庭医生在线问诊系统
  • 【笔记】SpringBoot实现图片上传和获取图片接口
  • 【上位机——MFC】消息映射机制
  • 【TeamFlow】3 Rust 与 WebAssembly (Wasm) 深度应用指南
  • JavaScript 版本号比较
  • Matlab PID参数整定和设计