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

esp32 wifi 联网后,用http 发送hello 用pc 浏览器查看网页

参考chatgpt

Esp32可以配置为http服务器,可以socket编程。为了免除编写针对各种操作系统的app。完全可以用浏览器仿问esp32服务器,获取esp32的各种数据,甚至esp的音频,视频。也可以利用浏览器对esp进行各种操作。但esp不能主动仿问各客户端,只能客户端定时仿问服务器。

图片57e1385b78b6464fb53542a839078e93.jpg

图片

b5981f81f9b34d7b9f755c17688fd0fa.jpg

 

 

#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/event_groups.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "esp_http_server.h"// WiFi 配置信息
#define WIFI_SSID "ChinaNet-AETP5V"
#define WIFI_PASS "wf123456"static EventGroupHandle_t s_wifi_event_group;
static const int WIFI_CONNECTED_BIT = BIT0;
static const char *TAG = "WiFi_HTTP";// 事件处理程序
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) {esp_wifi_connect();  // 重新连接ESP_LOGI(TAG, "重新连接...");} 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, "获取到IP: " IPSTR, IP2STR(&event->ip_info.ip));xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);  // 设置连接标志位}
}// WiFi 初始化
void wifi_init_sta(void) {s_wifi_event_group = xEventGroupCreate();  // 创建事件组// 初始化 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);// 初始化 WiFiESP_ERROR_CHECK(esp_netif_init());ESP_ERROR_CHECK(esp_event_loop_create_default());esp_netif_create_default_wifi_sta();wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK(esp_wifi_init(&cfg));ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL, NULL));ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL, NULL));// 设置 WiFi 连接参数wifi_config_t wifi_config = {.sta = {.ssid = WIFI_SSID,.password = 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());  // 启动 WiFiESP_LOGI(TAG, "WiFi 初始化完成,开始连接");
}// HTTP GET 请求处理函数
esp_err_t hello_get_handler(httpd_req_t *req) {const char* resp_str = "Hello from ESP32!";httpd_resp_send(req, resp_str, strlen(resp_str));  // 发送响应return ESP_OK;
}// 注册 URI 处理程序
httpd_uri_t hello = {.uri = "/",.method = HTTP_GET,.handler = hello_get_handler,.user_ctx = NULL
};// 启动 HTTP 服务器
static httpd_handle_t start_webserver(void) {httpd_config_t config = HTTPD_DEFAULT_CONFIG();httpd_handle_t server = NULL;if (httpd_start(&server, &config) == ESP_OK) {httpd_register_uri_handler(server, &hello);  // 注册处理函数}return server;
}void app_main(void) {// 初始化 WiFi 并连接wifi_init_sta();// 等待 WiFi 连接成功EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, WIFI_CONNECTED_BIT, pdFALSE, pdTRUE, portMAX_DELAY);if (bits & WIFI_CONNECTED_BIT) {ESP_LOGI(TAG, "WiFi ok");// 启动 HTTP 服务器start_webserver();} else {ESP_LOGI(TAG, "WiFi no");}
}

 

 

 

 

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 微软宣布弃用WSUS,企业用户尽早准备替换方案
  • 内网基础知识
  • 【Python报错已解决】AttributeError: ‘WindowsPath‘ object has no attribute ‘rstrip‘
  • 如何使用Apache Kafka处理实时数据
  • 【React】(推荐项目)一个用 React 构建的 CRUD 应用程序
  • el-form动态标题和输入值,并且最后一个输入框不校验
  • 【888题竞赛篇】第十二题,2024ICPC网络赛第二场-游戏(Game)
  • 《C++设计新思维-泛型编程与设计模式之应用》阅读记录
  • kubernetes基础命令
  • ClickHouse 与 Quickwit 集成实现高效查询
  • 網路本地連接沒有有效的IP配置:原因與解決方法
  • 探索AI编程新境界:aider库揭秘
  • 素数判断-C语言
  • 视频监控相关笔记
  • js中Fucntion的意义
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 78. Subsets
  • Akka系列(七):Actor持久化之Akka persistence
  • Android 架构优化~MVP 架构改造
  • Consul Config 使用Git做版本控制的实现
  • JAVA 学习IO流
  • session共享问题解决方案
  • spring boot 整合mybatis 无法输出sql的问题
  • vue的全局变量和全局拦截请求器
  • webpack+react项目初体验——记录我的webpack环境配置
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 大快搜索数据爬虫技术实例安装教学篇
  • 第十八天-企业应用架构模式-基本模式
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 数据结构java版之冒泡排序及优化
  • 突破自己的技术思维
  • 详解移动APP与web APP的区别
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • Hibernate主键生成策略及选择
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • $(selector).each()和$.each()的区别
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • ()、[]、{}、(())、[[]]命令替换
  • (Forward) Music Player: From UI Proposal to Code
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (python)数据结构---字典
  • (二)pulsar安装在独立的docker中,python测试
  • (分布式缓存)Redis持久化
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)ssm码农论坛 毕业设计 231126
  • (函数)颠倒字符串顺序(C语言)
  • (七)c52学习之旅-中断
  • (三十五)大数据实战——Superset可视化平台搭建
  • (算法)Travel Information Center
  • (一)基于IDEA的JAVA基础12
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一