ESP32 创建图片 WebServer-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1169|回复: 1

ESP32 创建图片 WebServer

[复制链接]
发表于 2022-7-16 18:32 | 显示全部楼层 |阅读模式
这次介绍一个比较好玩的:通过 ESP32 创建一个 WebServer ,通过浏览器访问的时候自动播放预先定义好的图片序列。
制作方法:
1.     创建一个 640x480的图片,放上彩色文字,便于观察,保存为 JPG 格式
webs1.png
2.     旋转文字,再保存成另外一个文件
3.     重复上述动作我们能获得4个文件
webs2.png
4.     使用 bin2c 工具将四个文件转化为4个C语言h文件
5.     文件头定义中做一点调整,图片大小命名为  picN_size, 内容命名为 picN 这种
webs3.png
6.     接下来就可以编写我们的代码了
  1. #include "esp_camera.h"
  2. #include <WiFi.h>
  3. #include "esp_timer.h"
  4. #include "img_converters.h"
  5. #include "Arduino.h"
  6. #include "fb_gfx.h"
  7. #include "soc/soc.h"
  8. #include "soc/rtc_cntl_reg.h"
  9. #include "esp_http_server.h"
  10. #include "pic\ph0.h"
  11. #include "pic\ph1.h"
  12. #include "pic\ph2.h"
  13. #include "pic\ph3.h"

  14. // 这里改成你自己的 WIFI 名称和密码
  15. const char* ssid = "YOUWIFI";
  16. const char* password = "PASSWORD";

  17. #define PART_BOUNDARY "123456789000000000000987654321"

  18. static const char* _STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY;
  19. static const char* _STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n";
  20. static const char* _STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\n\r\n";

  21. httpd_handle_t stream_httpd = NULL;

  22. static esp_err_t stream_handler(httpd_req_t *req) {
  23.   esp_err_t res = ESP_OK;
  24.   size_t _jpg_buf_len = 0;
  25.   uint8_t * _jpg_buf = NULL;
  26.   char * part_buf[64];
  27.   
  28.   static int index=0;
  29.   
  30.   res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE);
  31.   if (res != ESP_OK) {
  32.     return res;
  33.   }

  34.   while (true) {
  35.     // 这里设定一个循环,轮流发送PIC0-4
  36.     if (index==0) {
  37.       _jpg_buf_len = pic0_size;
  38.       _jpg_buf = (uint8_t *)pic0;
  39.     } else if (index==1) {
  40.       _jpg_buf_len = pic1_size;
  41.       _jpg_buf = (uint8_t *)pic1;
  42.     } else if (index==2) {
  43.       _jpg_buf_len = pic2_size;
  44.       _jpg_buf = (uint8_t *)pic2;
  45.     } else if (index==3) {
  46.       _jpg_buf_len = pic3_size;
  47.       _jpg_buf = (uint8_t *)pic3;
  48.     }
  49.     // 如果发送完PIC3 接来发送PIC0
  50.     index=(index+1)%4;

  51.     if (res == ESP_OK) {
  52.       size_t hlen = snprintf((char *)part_buf, 64, _STREAM_PART, _jpg_buf_len);
  53.       res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen);
  54.     }
  55.     if (res == ESP_OK) {
  56.       res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len);
  57.     }
  58.     if (res == ESP_OK) {
  59.       res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY));
  60.     }
  61.     if (res != ESP_OK) {
  62.       break;
  63.     }
  64.     Serial.printf("MJPG: %uB\n",(uint32_t)(_jpg_buf_len));
  65.   }
  66.   return res;
  67. }

  68. void startPicServer() {
  69.   httpd_config_t config = HTTPD_DEFAULT_CONFIG();
  70.   config.server_port = 80;

  71.   httpd_uri_t index_uri = {
  72.     .uri       = "/",
  73.     .method    = HTTP_GET,
  74.     .handler   = stream_handler,
  75.     .user_ctx  = NULL
  76.   };

  77.   if (httpd_start(&stream_httpd, &config) == ESP_OK) {
  78.     httpd_register_uri_handler(stream_httpd, &index_uri);
  79.   }
  80. }

  81. void setup() {
  82.   WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); //disable brownout detector

  83.   Serial.begin(115200);
  84.   Serial.setDebugOutput(false);

  85.   // Wi-Fi connection
  86.   WiFi.begin(ssid, password);
  87.   while (WiFi.status() != WL_CONNECTED) {
  88.     delay(500);
  89.     Serial.print(".");
  90.   }
  91.   Serial.println("");
  92.   Serial.println("WiFi connected");

  93.   Serial.print("Camera Stream Ready! Go to: http://");
  94.   Serial.print(WiFi.localIP());

  95.   //启动
  96.   startPicServer();
  97. }

  98. void loop() {
  99.   delay(1);
  100. }
复制代码

7.运行之后串口监视器会输出当前 WebServer IP ,将地址在浏览器中打开即可看到结果:
webs4.png

 楼主| 发表于 2022-7-16 18:57 | 显示全部楼层
完整代码 ESP32PICWebServer.zip (68.48 KB, 下载次数: 2)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 06:46 , Processed in 0.111185 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表