浏览器实时更新esp32-c3 Supermini http server 数据

一利用此程序的思路就可以用浏览器显示esp32 采集的各种传感器的数据,也可以去控制各种传感器。省去编写针对各系统的app.  

图片

48d7489c9574460e9ba59f463d9abc31.jpg

1.浏览器每隔1秒更新一次数据

2.现在更新的是开机数据,运用此程序,可以实时显示各种传感器的实时数据

3.esp32 服务器代码


#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"
#include "esp_timer.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  uint64_t n;
// 
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 ");
}// 浏览器向esp32 GET信息
esp_err_t hello_get_handler(httpd_req_t *req) {ESP_LOGI(TAG, "Requested URI: %s", req->uri);     //显示浏览器向esp32 http server 发送的信息   可以把uri的信息提取出来 控制esp32 如uri中有ds3231  则esp32控制ds3231ESP_LOGI(TAG, "Requested Method: %s", http_method_str(req->method));ESP_LOGI(TAG, "Requested URI: %d", req->content_len);n=esp_timer_get_time();   //esp32 从开机到运行此命令的时间(微秒)char resp_str[21]; // uint64_t 的最大长度是 20 位,加上结尾的 null 字符snprintf(resp_str, sizeof(resp_str), "%llu", n);    // 使用 snprintf 将 uint64_t 转换为字符串httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); // 允许所有来源,此条非常重要httpd_resp_set_type(req, "text/plain");httpd_resp_send(req, resp_str, HTTPD_RESP_USE_STRLEN);      //esp32 向浏览器发送return ESP_OK;
}//  URI 
httpd_uri_t hello = {.uri = "/time",.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");}
}

4.浏览器代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>ESP32 Time</title><script>function fetchTime() {fetch('http://192.168.101.40/time') // 替换为你的服务器地址.then(response => response.text()).then(data => {document.getElementById('wz').innerText = data;}).catch(error => console.error('Error fetching time:', error));}// 每1秒调用 fetchTime 函数setInterval(fetchTime, 1000);</script>
</head>
<body><h1> ESP32 开机时间:</h1><div id="wz">Waiting ...</div>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/56792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【计算机网络 - 基础问题】每日 3 题(四十七)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

Cesium 实战 - 自定义纹理材质 - 立体墙(旋转材质)

Cesium 实战 - 自定义纹理材质 - 立体墙(旋转材质) 核心代码完整代码在线示例Cesium 给实体对象(Entity)提供了很多实用的样式,基本满足普通项目需求; 但是作为 WebGL 引擎,肯定不够丰富,尤其是动态效果样式。 对于实体对象(Entity),可以通过自定义材质,实现各种…

YOLOv11来了 | 自定义目标检测

概述 YOLO11 在 2024 年 9 月 27 日的 YOLO Vision 2024 活动中宣布&#xff1a;https://www.youtube.com/watch?vrfI5vOo3-_A。 YOLO11 是 Ultralytics YOLO 系列的最新版本&#xff0c;结合了尖端的准确性、速度和效率&#xff0c;用于目标检测、分割、分类、定向边界框和…

esp32-c3 Supermini 驱动ds3121的问题

c3 驱动ds3121 ,始终有问题&#xff0c;但把程序用esp32上&#xff0c;一点问题都没有&#xff0c;难道c3 的i2c库是另外的库&#xff0c; 下图只读取秒显示的 错误数据&#xff0c;更换了scl频率&#xff0c;针脚&#xff0c;还是错&#xff0c;但换成esp32 输出是正确连续秒…

字节跳动实习生投毒自家大模型细节曝光 影响到底有多大?

10月19日&#xff0c;字节跳动大模型训练遭实习生攻击一事引发广泛关注。据多位知情人士透露&#xff0c;字节跳动某技术团队在今年6月遭遇了一起内部技术袭击事件&#xff0c;一名实习生因对团队资源分配不满&#xff0c;使用攻击代码破坏了团队的模型训练任务。 据悉&#xf…

鸿蒙开发 四十七 Promise async await

1、Promise是接口 鸿蒙sdk提供的ProPromise版本有点多&#xff0c;是泛型接口&#xff0c;用interface修饰&#xff0c;官网给出的解释是“Represents the completion of an asynchronous operation”&#xff0c;翻译大概意思是&#xff1a;异步操作的完成的处理&#xff0c;总…

全球知名度最高的华人改名大师颜廷利:世界公认的三大哲学家思想家

颜廷利教授&#xff0c;一位享誉全球的思想巨擘与现代国学泰斗&#xff0c;以其卓越的哲学地位和深远的影响力&#xff0c;成为当代思想界的璀璨明星。他的哲学思想深邃而广博&#xff0c;不仅涵盖了人的全面发展、自然社会的深度融合&#xff0c;更在教育理念上独树一帜&#…

2.2机器学习--逻辑回归(分类)

目录 1.算法介绍 2.算法原理 3. API 介绍 4.代码示例 本章节我们来学习线性分类问题&#xff0c;在有监督学习中&#xff0c;最主要的两种学习任务是 回归&#xff08;regression&#xff09; 和 分类&#xff08;classification&#xff09;&#xff0c;而其中线性回归和线…

JR_T0213—2021 金融网络安全 Web应用服务安全测试通用规范.pdf

预览 内容太多&#xff0c;自己下载看吧 https://www.mhtsec.com/667/

精选20个爆火的Python实战项目(含源码),直接拿走不谢!

今天给大家介绍20个非常实用的Python项目&#xff0c;帮助大家更好的学习Python。 完整版Python项目源码&#xff0c;【点击这里】领取&#xff01; ① 猜字游戏 import random def guess_word_game(): words ["apple", "banana", "cherry&quo…

1. 安装框架

一、安装 Laravel 11 框架 按照官方文档直接下一步安装即可 1. 安装步骤 2. 执行数据库迁移 在.env文件中提前配置好数据库连接信息 php artisan migrate二、安装 Filament3.2 参考 中文文档 进行安装 1. 安装 拓展包 composer require filament/filament:"^3.2" -W…

双十一有啥不能错过的好物清单?真心为你带来2024最值好物分享!

双十一购物狂欢节即将到来&#xff0c;许多朋友们都在期待着这一天&#xff0c;希望能够在这个特别的日子里为自己添置一些日常用品。今天&#xff0c;我特意为大家精心挑选了五款在生活中都会用得到的好物&#xff0c;希望能够帮助大家在双十一期间做出明智的选择。 最值好物…

【java面经thinking】四

目录 悲观锁synchronized synchronized的用法 只能锁引用类型 对象的内存布局&#xff08;引用型&#xff09; JDK1.6之前的锁----重量级锁 1.6之后---偏向锁&#xff0c;轻量级锁(自适应自旋锁) 偏向锁 轻量级锁 区别 某些场景使用重量级锁的原因 synchronized是不公…

电脑基础知识:mfc110.dll丢失的解决方法

1.mfc110.dll 丢失常见原因 mfc110.dll 文件的丢失或损坏是Windows系统中常见的问题&#xff0c;它可能由多种原因引起&#xff0c;以下是一些主要的因素&#xff1a; 不完全的软件卸载 在卸载程序时&#xff0c;如果相关的 DLL 文件没有被正确移除&#xff0c;可能会导致文件…

ASP.NET Core8.0学习笔记(二十二)——单向导航属性

一、单向导航属性引入 1.双向导航属性存在的问题&#xff1a;数据库中存在一些“基础表”&#xff0c;这些表会被其他各种表来引用。比如有一张User表&#xff0c;另有请假表&#xff08;请假人、审批人&#xff09;、采购表&#xff08;采购员、审核员&#xff09;等多个表的…

H-TCP 的效率和公平性

昨晚带安孩楼下玩耍&#xff0c;用手机 desmos 作了一组 response curve 置于双对数坐标系&#xff1a; 长肥管道的优化思路都很类似&#xff0c;cwnd 增长快一点&#xff1a; BIC TCP&#xff1a;二分查找逼近 capacity&#xff1b;CUBIC TCP&#xff1a;上凸曲线逼近 capa…

C++ -string -常见用法4

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【C】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 文章目录 &#x1f4a1;前言&#x1f4a1;字符串操作1.c_str 、data -重点⭐1.1函数原型1.2用法 2.copy2.1函数原型2.2用法2.3注意事项 3.find、rfind -重点⭐3.1函数原型3.2用…

华山论剑之Rust的Trait

华山论剑&#xff0c;群雄荟萃&#xff0c;各显神通。武林中人&#xff0c;各有所长&#xff0c;或剑法飘逸&#xff0c;或掌法刚猛&#xff0c;或轻功绝顶。这就好比Rust中的trait&#xff0c;它定义了一种武功套路&#xff0c;而不同的门派、不同的人&#xff0c;可以将这套武…

分布式篇(分布式事务)(持续更新迭代)

一、事务 1. 什么是事务 2. 事务目的 3. 事务的流程 4. 事务四大特性 原子性&#xff08;Atomicity&#xff09; 一致性&#xff08;Consistency&#xff09; 持久性&#xff08;Durability&#xff09; 隔离性&#xff08;Isolation&#xff09; 5. MySQL VS Oracle …

016_基于python+django网络爬虫及数据分析可视化系统2024_kyz52ks2

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍&#xff1a;CodeMentor毕业设计领航者、全网关注者30W群落&#xff0c;InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者&#xff0c;博客领航之星、开发者头条/腾讯云/AW…