ESP32-Web-Server ESP-IDF 开发系列介绍

介绍

使用 ESP-IDF 在ESP32上构建 HTTP Web 服务器或 WebSocket Web 服务器。
带你玩转物联网小项目开发系列之~玩转 Web server 开发。

Web 的优势

Web 通过网页提供物联网项目的人机交互界面。

Web 是最便宜的无线“UI”。仅仅通过电脑或者手机上的浏览器就可以立即打开一个人机交互界面。

即便在没有浏览器的平台上,你仍然可以通过一些工具,如 wget、cURL 来从 esp32 web 服务器上下载一些文件或者数据。

学习内容

学习使用 ESP32 建立一个 web 访问框架。

学习 HTML、CSS、JavaScript 和 Websocket 和 HTTP协议。

学习一些重要的 web 技术,如SSE(Server-Sent Events)、AJAX(Asynchronous JavaScript and XML)、文件系统。

掌握典型的物联网应用,如通过网页控制物联网设备、通过网页显示传感器的数据、通过网页进行配网、通过网页进行 OTA、登录授权、通过网页传输文件、图片等。

了解技术细节、知其然知其所以然,物联网 DIY 开发人员必备技能。

使用说明

1.基于ESP-IDF v4.4 开发环境。
2.主要编程语言为 C 语言,适合嵌入式、物联网开发工程师快速上手。
3.分为三个部分:基

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
2022 / 01/ 30: 新版esptool 刷micropython固件指令不是 esptool.py cmd... 而是 esptool cmd... 即可;另外rshell 在 >= python 3.10 的时候出错解决方法可以查看:  已于2022年发布的: 第二章:修复rshell在python3.10出错 免费内容: https://edu.csdn.net/course/detail/29666 micropython语法和python3一样,编写起来非常方便。如果你快速入门单片机玩物联网而且像轻松实现各种功能,那绝力推荐使用micropython。方便易懂易学。 同时如果你懂C语音,也可以用C写好函数并编译进micropython固件里然后进入micropython调用(非必须)。 能通过WIFI联网(2.1章),也能通过sim卡使用2G/3G/4G/5G联网(4.5章)。 为实现语音控制,本教程会教大家使用tensorflow利用神经网络训练自己的语音模型并应用。为实现通过网页控制,本教程会教大家linux(debian10 nginx->uwsgi->python3->postgresql)网站前后台入门。为记录单片机传输过来的数据, 本教程会教大家入门数据库。  本教程会通过通俗易懂的比喻来讲解各种原理与思路,并手把手编写程序来实现各项功能。 本教程micropython版本是 2019年6月发布的1.11; 更多内容请看视频列表。  学习这门课程之前你需要至少掌握: 1: python3基础(变量, 循环, 函数, 常用库, 常用方法)。 本视频使用到的零件与淘宝上大致价格:     1: 超声波传感器(3)     2: MAX9814麦克风放大模块(8)     3: DHT22(15)     4: LED(0.1)     5: 8路5V低电平触发继电器(12)     6: HX1838红外接收模块(2)     7:红外发射管(0.1),HX1838红外接收板(1)     other: 电表, 排线, 面包板(2)*2,ESP32(28)  
ESP32-CAM是一款集成了ESP32和摄像头的开发板,它可以用于物联网、机器视觉、智能家居等领域的开发。下面我将对ESP32-CAM的示例代码进行解读。 首先,我们需要了解示例代码的主要功能。该示例代码可以让ESP32-CAM将拍摄到的图像传输到Web服务器上,并通过Web页面查看实时图像。该示例代码分为两个部分:ESP32-CAM端和Web服务器端。 ESP32-CAM端代码: 该部分代码主要有以下几个功能: 1. 初始化摄像头 ``` #include "esp_camera.h" camera_config_t config; esp_err_t camera_init(){ config.ledc_channel = LEDC_CHANNEL_0; config.ledc_timer = LEDC_TIMER_0; config.pin_d0 = Y2_GPIO_NUM; config.pin_d1 = Y3_GPIO_NUM; config.pin_d2 = Y4_GPIO_NUM; config.pin_d3 = Y5_GPIO_NUM; config.pin_d4 = Y6_GPIO_NUM; config.pin_d5 = Y7_GPIO_NUM; config.pin_d6 = Y8_GPIO_NUM; config.pin_d7 = Y9_GPIO_NUM; config.pin_xclk = XCLK_GPIO_NUM; config.pin_pclk = PCLK_GPIO_NUM; config.pin_vsync = VSYNC_GPIO_NUM; config.pin_href = HREF_GPIO_NUM; config.pin_sscb_sda = SIOD_GPIO_NUM; config.pin_sscb_scl = SIOC_GPIO_NUM; config.pin_pwdn = PWDN_GPIO_NUM; config.pin_reset = RESET_GPIO_NUM; config.xclk_freq_hz = 20000000; config.pixel_format = PIXFORMAT_JPEG; if(psramFound()){ config.frame_size = FRAMESIZE_UXGA; config.jpeg_quality = 10; config.fb_count = 2; } else { config.frame_size = FRAMESIZE_SVGA; config.jpeg_quality = 12; config.fb_count = 1; } return esp_camera_init(&config); } ``` 该函数使用ESP-IDF的相机库来初始化摄像头,并设置相机的参数。 2. 开启服务器 ``` esp_err_t stream_httpd_start(void){ httpd_handle_t server = NULL; httpd_config_t config = HTTPD_DEFAULT_CONFIG(); config.server_port = 80; httpd_uri_t index_uri = { .uri = "/", .method = HTTP_GET, .handler = stream_handler, .user_ctx = NULL }; httpd_uri_t capture_uri = { .uri = "/capture", .method = HTTP_GET, .handler = capture_handler, .user_ctx = NULL }; if (httpd_start(&server, &config) == ESP_OK) { httpd_register_uri_handler(server, &index_uri); httpd_register_uri_handler(server, &capture_uri); return ESP_OK; } return ESP_FAIL; } ``` 该函数使用ESP-IDF的HTTP服务器库开启服务器,并注册了两个URI处理器:/和/capture。其中,/处理器用于显示实时图像,/capture处理器用于获取当前图像并保存到SD卡中。 3. 图像处理 ``` esp_err_t capture(){ camera_fb_t * fb = NULL; esp_err_t res = ESP_OK; fb = esp_camera_fb_get(); if (!fb) { ESP_LOGE(TAG, "Camera capture failed"); return ESP_FAIL; } res = esp_camera_fb_return(fb); if (res != ESP_OK) { ESP_LOGE(TAG, "Camera capture failed"); return ESP_FAIL; } return ESP_OK; } ``` 该函数使用ESP-IDF的相机库获取当前图像,并将其保存到SD卡中。 Web服务器端代码: 该部分代码主要有以下几个功能: 1. 显示实时图像 ``` static esp_err_t stream_handler(httpd_req_t *req){ httpd_resp_set_type(req, "text/html"); httpd_resp_set_hdr(req, "Content-Encoding", "identity"); httpd_resp_send(req, (const char *) index_ov2640_html_gz_start, index_ov2640_html_gz_end - index_ov2640_html_gz_start); return ESP_OK; } ``` 该函数用于显示实时图像。它使用HTTP响应对象将HTML代码发送给客户端,客户端可以在Web页面上查看实时图像。 2. 获取当前图像 ``` static esp_err_t capture_handler(httpd_req_t *req){ esp_err_t res = ESP_OK; res = capture(); if (res == ESP_OK) { httpd_resp_set_type(req, "application/octet-stream"); httpd_resp_set_hdr(req, "Content-Disposition", "inline; filename=capture.jpg"); httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); camera_fb_t * fb = esp_camera_fb_get(); if (!fb) { ESP_LOGE(TAG, "Camera capture failed"); return ESP_FAIL; } res = httpd_resp_send(req, (const char *) fb->buf, fb->len); esp_camera_fb_return(fb); } else { httpd_resp_send_500(req); } return res; } ``` 该函数用于获取当前图像并将其发送回客户端。它使用HTTP响应对象将JPEG图像数据发送给客户端,客户端可以将其保存到本地设备上。 以上就是ESP32-CAM示例代码的主要功能及其实现原理。除此之外,还有一些辅助函数和宏定义,可以在示例代码中查看。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

物联网老王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值