news 2026/6/17 8:25:48

esp32开发与应用(http服务器)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
esp32开发与应用(http服务器)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

大家都知道,esp32本身是以wifi和bt见长。既然说到了wifi,那么就有两种模式,一种是ap,一种是station。在实际开发中,很多时候都是先用ap配置wifi和密码,然后转到station模式,这是比较常见的做法。那么另外一个大家可能不太熟悉的地方,就是esp32还自带了http服务器,写起来也不复杂。

1、http服务器

所谓http服务器,就是外部使用者可以通过浏览器的方式直接访问设备,或者是模块。对于小的模块来说,这种方式一般是用来配置参数,比如端口号、波特率、pid参数等等,都是可以的,使用起来特别方便,不需要串口,也不需要usb,wifi直连就行。

2、静态网页

既然是http服务器,那么前端这些内容做到哪里呢?很多时候,嵌入式设备当中,静态网页、css、js这些内容,都是固化成一个字符串保存的,甚至可能是一个只读字符数组。

3、回调机制

大部分http server的开发,都是通过回调机制来完成的。这种回调,就是对方发一个什么url的时候,那么这边就会触发一次回调函数。至于你想回什么内容,就看双方的约定了。

4、向ai学demo

如果对esp32编写web server还是没有什么印象,可以让ai写一个esp32的http服务器。这样,不出意外,很快ai就可以写出来一个web server,

#include <stdio.h> #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 "esp_http_server.h" // Please modify these to match your WiFi credentials #define WIFI_SSID "NETGEAR" #define WIFI_PASS "12345678" static const char *TAG = "HTTP_SERVER"; /* Handler for GET / request */ static esp_err_t root_get_handler(httpd_req_t *req) { const char resp[] = "<html><body><h1>Hello, ESP32!</h1></body></html>"; httpd_resp_set_type(req, "text/html"); httpd_resp_send(req, resp, strlen(resp)); return ESP_OK; } /* Register URI handler */ static httpd_uri_t uri_root = { .uri = "/", .method = HTTP_GET, .handler = root_get_handler, .user_ctx = NULL }; /* Start HTTP server */ static httpd_handle_t start_webserver(void) { httpd_handle_t server = NULL; httpd_config_t config = HTTPD_DEFAULT_CONFIG(); config.lru_purge_enable = true; // Optional: auto-free sessions when memory is low if (httpd_start(&server, &config) == ESP_OK) { httpd_register_uri_handler(server, &uri_root); ESP_LOGI(TAG, "HTTP server started on port: %d", config.server_port); return server; } ESP_LOGE(TAG, "Failed to start HTTP server"); return NULL; } /* WiFi event handler */ 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(); ESP_LOGI(TAG, "Reconnecting to WiFi..."); } 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)); } } /* Initialize WiFi in STA (station) mode */ static void wifi_init_sta(void) { esp_netif_init(); esp_event_loop_create_default(); esp_netif_create_default_wifi_sta(); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); esp_wifi_init(&cfg); esp_event_handler_instance_t instance_any_id; esp_event_handler_instance_t instance_got_ip; esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL, &instance_any_id); esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL, &instance_got_ip); 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(WIFI_IF_STA, &wifi_config) ); ESP_ERROR_CHECK(esp_wifi_start() ); ESP_LOGI(TAG, "WiFi init finished."); } void app_main(void) { // Initialize NVS (Non-Volatile Storage) 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); // Connect to WiFi wifi_init_sta(); // Start HTTP server httpd_handle_t server = start_webserver(); if (server == NULL) { ESP_LOGE(TAG, "Server start failed, restarting..."); esp_restart(); } // Main loop (can do other work here) while (1) { vTaskDelay(pdMS_TO_TICKS(1000)); } }

5、编译和测试

这种生成的代码不复杂,一般情况下不会出什么问题。直接编译、下载后,通过log看看对应的ip地址是多少,就可以通过pc浏览器访问模块了。当然因为demo比较简单,只是看到一行打印而已,实际功能的多少,完全取决于我们自己开发的内容。

有了wifi/web server,后续就可以用esp32做很多的内容了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/17 8:22:35

t-SNE不是降维工具,而是高维数据的可视化显微镜

1. 为什么我坚持把t-SNE当作“数据显微镜”&#xff0c;而不是降维工具&#xff1f; 在带新人做项目复盘时&#xff0c;我常被问到一个问题&#xff1a;“老师&#xff0c;PCA和t-SNE都画二维图&#xff0c;为啥非得用t-SNE&#xff1f;跑一次要十分钟&#xff0c;还每次结果都…

作者头像 李华
网站建设 2026/6/17 8:04:29

企业级AI编程工具选型指南:代码规范统一与协作提效

1. 这不是“替代程序员”的工具清单&#xff0c;而是团队代码流水线的加速器 最近帮三支不同规模的技术团队做开发流程诊断&#xff0c;发现一个共性痛点&#xff1a;新成员入职两周内写的代码&#xff0c;80%要被 senior 同事手动重写&#xff1b;Code Review 会议平均耗时从4…

作者头像 李华
网站建设 2026/6/17 8:00:32

老款Mac焕新指南:3个步骤让你的旧设备运行最新macOS系统

老款Mac焕新指南&#xff1a;3个步骤让你的旧设备运行最新macOS系统 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否还在为手中的老款Mac感到惋惜&…

作者头像 李华
网站建设 2026/6/17 7:51:58

QuantStats:Python量化投资组合分析的全栈解决方案

QuantStats&#xff1a;Python量化投资组合分析的全栈解决方案 【免费下载链接】quantstats Portfolio analytics for quants, written in Python 项目地址: https://gitcode.com/gh_mirrors/qu/quantstats 在数据驱动的投资时代&#xff0c;量化分析已成为专业投资者和…

作者头像 李华
网站建设 2026/6/17 7:49:55

如何快速部署AI智能交易系统:面向新手的完整教程

如何快速部署AI智能交易系统&#xff1a;面向新手的完整教程 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 在当今快速变化的金融市场中&#x…

作者头像 李华
网站建设 2026/6/17 7:42:03

从lorrey_看个人数字身份构建:命名策略、技术实现与品牌运营

1. 项目概述&#xff1a;从“lorrey_”看个人数字身份的品牌化构建最近在和一些做独立开发、内容创作的朋友聊天时&#xff0c;发现一个挺有意思的现象&#xff1a;大家越来越在意自己的“网络代号”或者说“数字身份”了。这不仅仅是一个用户名那么简单&#xff0c;它更像是一…

作者头像 李华