📌  相关文章
📜  esp32cam 发布到另一台服务器 (1)

📅  最后修改于: 2023-12-03 14:41:01.486000             🧑  作者: Mango

在ESP32CAM上发布视频到另一台服务器

在本教程中,我们将学习如何使用ESP32CAM将视频流发布到另一台服务器上。我们将使用以下工具和技术:

  • ESP32CAM模块
  • Arduino IDE
  • WiFi连接
  • MQTT协议
  • Node-RED
ESP32CAM概述

ESP32CAM是一款结合了ESP32和OV2640图像传感器的模块,可以方便地用于基于WiFi的摄像头应用。该模块支持多种图像格式和分辨率,并配备了4 MB PSRAM来存储连续的高分辨率图像。此外,ESP32CAM还支持多种接口和协议,包括GPIO、SPI、I2C和UART接口以及WiFi和BLE无线连接。

Arduino IDE概述

Arduino IDE是一种用于开发Arduino硬件平台的集成开发环境。Arduino IDE支持各种板卡和库文件,使得基于Arduino的开发变得更加容易。在本教程中,我们将使用Arduino IDE将代码上传到ESP32CAM模块。

WiFi连接概述

WiFi连接是通过WiFi网络连接到网络的过程。本教程中,我们将让ESP32CAM模块通过WiFi连接到网络。

MQTT协议概述

MQTT协议是一种轻量级、高效的消息传输协议。本教程中,我们将使用MQTT协议将ESP32CAM模块实时视频流发布到服务器上。

Node-RED概述

Node-RED是一个开源的可视化编程工具,用于搭建IoT应用程序。在本教程中,我们将使用Node-RED来接收ESP32CAM发布的实时视频流。

实现步骤
步骤1: 设置Arduino环境
  1. 首先需要安装Arduino IDE,可以在Arduino官网上下载。
  2. 安装ESP32板卡。
    1. 文件->首选项中输入以下链接到附加板卡网址:https://dl.espressif.com/dl/package_esp32_index.json
    2. 工具->开发板->开发板管理器中搜索ESP32,找到ESP32并安装之。
  3. 安装ESP32CAM库。
    1. Sketch->包含库->管理库中搜索ESP32CAM,找到esp32-cam并安装之。
步骤2: 连接硬件
  1. 将ESP32CAM模块连接到计算机上。使用USB转串口模块将ESP32CAM模块连接到计算机上。
步骤3: 编写程序
  1. 打开Arduino IDE,然后在文件->示例->ESP32->Camera->CameraWebServer中找到CameraWebServer示例程序。
  2. 替换以下部分:
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

只需将REPLACE_WITH_YOUR_SSIDREPLACE_WITH_YOUR_PASSWORD替换为您的WiFi SSID和密码。

  1. Tools->Partition scheme中选择Huge APP (3MB No OTA)分区方案。
  2. 上传代码到ESP32CAM模块。
步骤4: 启动MQTT代理

在本教程中,我们将使用Node-RED作为MQTT代理,简化MQTT消息传输过程。

  1. 安装Node-RED。可以从Node-RED官网上下载并安装。
  2. 启动Node-RED。在终端中输入node-red以启动Node-RED。
  3. 打开Web浏览器,进入http://localhost:1880来打开Node-RED编辑器。
  4. 在编辑器的右上角单击菜单,选择Manage palette
  5. install选项卡中,搜索MQTT,并安装node-red-contrib-mqtt-broker节点。
  6. 安装完毕后,单击到dashboard选项卡中,以创建一个人性化的MQTT控制面板。
步骤5: 将视频流发布到MQTT代理
  1. 在Arduino IDE中打开Serial Monitor。
  2. 在Serial Monitor中,找到ESP32CAM模块的IP地址以及与的IP地址。
WiFi connected
IP address: 192.168.1.200
  1. IP_ADDRESSBROKER_ADDRESS替换为ESP32CAM模块的IP地址和MQTT代理的IP地址。
  2. 上传以下代码到ESP32CAM模块:
#include "esp_camera.h"
#include <WiFi.h>
#include <PubSubClient.h>

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
char* mqtt_server = "BROKER_ADDRESS";
int mqtt_port = 1883;
const char* mqtt_topic = "esp32cam/video_stream";

WiFiClient wifiClient;
PubSubClient client(wifiClient);

static esp_err_t mqtt_event_handler(esp_mqtt_event_handle_t event) {
    // your code here 
}

void setup() {
    Serial.begin(115200);
    Serial.setDebugOutput(true);

    // your code here 
}

void loop() {
    // your code here 
}
  1. setup()函数中,连接到WiFi网络和MQTT代理。
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
}

Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());

client.setServer(mqtt_server, mqtt_port);
client.setCallback(mqtt_callback);

while (!client.connected()) {
    Serial.println("Connecting to MQTT...");

    if (client.connect("ESP32CamClient")) {
        Serial.println("connected");
        client.subscribe(mqtt_topic);
    } else {
        Serial.print("failed, rc=");
        Serial.print(client.state());
        Serial.println(" try again in 5 seconds");
        delay(5000);
    }
}
  1. loop()函数中,捕获并发布实时视频流。
camera_fb_t * fb = NULL;

fb = esp_camera_fb_get();
if(!fb) {
    Serial.println("Camera capture failed");
    delay(1000);
    return;
}

client.publish(mqtt_topic, (const uint8_t*)fb->buf, fb->len);

esp_camera_fb_return(fb);

delay(1000);
步骤6: 接收并显示视频流
  1. Node-RED编辑器中,创建一个新流,并添加以下节点:
  • MQTT Broker:用于使用MQTT协议与ESP32CAM模块进行通信。
  • MQTT In:用于订阅ESP32CAM模块的实时视频流。
  • Base64:用于将接收到的视频流转换为图片格式。
  • Image:用于显示转换后的图片。
  1. 连接这些节点,并针对MQTT Broker节点编写正确的MQTT选项。
  2. 重新加载Node-RED以完成设置。
总结

在本教程中,我们学习了如何使用ESP32CAM将视频流发布到另一台服务器上。我们使用了Arduino IDE、WiFi连接、MQTT协议和Node-RED这些工具和技术。我们成功地实现了以下步骤:

  • 设置Arduino环境
  • 连接硬件
  • 编写程序
  • 启动MQTT代理
  • 将视频流发布到MQTT代理
  • 接收并显示视频流

此外,本教程提供了逐步说明并附有示例代码,以说明如何在实际应用中实现这些步骤。尽管要面对许多挑战,但通过掌握本教程中涉及的技术和工具,您可以创建出功能强大的基于WiFi的摄像头应用。