使用ESP32-CAM和OpenCV实现图片获取

2023-11-10

我觉得这是一种廉价并且较为可靠的图像获取方案,目前无法输出视频流,因为我还不知道怎么提升传输速度…
进入正题-- ESP32-CAM模组在某宝上面差不多25块一个(不是M5STACK)我的图像传输方案是先在esp32上面获取图像的16进制字符串,再publish到MQTT服务器上面,接着电脑的客户端把这个hexchar下载下来以后转成2进制,用opencv decode成图像再打开。
ESP32用Arduino IDE编程,电脑上面是用python写的一个小程序来读图像的。
python需要安装opencv。安装方法是在电脑的命令行,或者bash,或者ps里面输入pip install opencv-contrib-python 来安装,推荐把python的pip源换成清华的国内源,这样下载速度会比较快。

#include <Arduino.h>
#include <esp_camera.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include "PubSubClient.h"
#include "CamConfig.h"

WiFiClient Wclient;
PubSubClient client(Wclient);
const char *hostA = "esp32";
const char *ssid = "***********";
const char *password = "***********";
const char *mqtt_server = "************";
boolean shotflag = false;
boolean WiFiDisconnect = false;
String msg;
int timeCount = 0;
void callback(char *topic, byte *message, unsigned int length);
void getimg();
void reconnect();
void setupCamera();
void WiFiEvent(WiFiEvent_t event);
void setup()
{
    Serial.begin(115200);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED)
    {
    }
    Serial.println("WiFi connected");
    Serial.println(WiFi.localIP());
    WiFi.onEvent(WiFiEvent);
    client.setServer(mqtt_server, 1883);
    client.setCallback(callback);
    setupCamera();
    Serial.println("Ready");
}

void loop()
{
    reconnect();
    client.loop();
    if (shotflag == true)
    {
        getimg();
        shotflag = false;
    }
}

void getimg()
{

    camera_fb_t *fb = esp_camera_fb_get();
    // int tranCount = (fb->len * 2 + (1000 - 1)) / 1000;
    if (fb)
    {
        Serial.printf("width: %d, height: %d, buf: 0x%x, le
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用ESP32-CAM和OpenCV实现图片获取 的相关文章

  • STMCubeMX+Proteus仿真DHT11(LCD1602显示)

    本文说明 开发工具 STM32CubeMX Keil5 开发芯片 STM32F103R6 采温模块 DHT11 数显屏幕 LCD1602 仿真软件 Proteus 8 12 项目目标 DHT11读取温湿度值 将信息显示在LCD1602上 T
  • 2.4.5Qt之plainTextEdit 文本编辑器dial刻度盘spinBox整数计数器QDoubleSpinBox浮点计数器QSlider滑块基础知识

    Qt之plainTextEdit 文本编辑器dial刻度盘spinBox整数计数器QDoubleSpinBox浮点计数器QSlider滑块基础知识 文章目录 Qt之plainTextEdit 文本编辑器dial刻度盘spinBox整数计数器
  • 嵌入式学习——c语言数据的输入输出

    嵌入式学习 c语言数据的输入输出 一 输入输出概念 1 2C语言本身不提供输入输出语句 1 3 include头文件放在程序中 二 printf输出数据 2 2格式字符 三 scanf输入数据 3 1scanf一般格式 四 输入输出函数 4
  • C语言指针-什么是指针,如何引用指针

    C语言指针 什么是指针 如何引用指针 文章目录 C语言指针 什么是指针 如何引用指针 1 什么是指针 2 存储单元的地址和内容 2 1直接访问和间接访问 3 指针变量 3 1定义指针变量 3 2引用指针变量 3 3编程 输入两个a和b两个整
  • QT--3.创建一个简单的图形界面

    创建一个简单的图形界面 1 qt基础 qt的移植性非常强 2 做一个简单的qt界面 1 创建一个工程 2 项目选择Application 然后选择Qt Widgets Application 最后选择choose 注意 创建项目的名称和路径
  • 电机的堵转检测及处理

    基于L298N控制的电机的堵转检测及其处理 一 L298N原理 二 电机堵转检测 三 电机堵转处理 一 L298N原理 1 L298N datasheet 2 使用须知 工作电压高 最高工作电压可达46V 输出电流大 瞬间峰值电流可达3A
  • OLED滚动显示

    少年 一 滚动显示介绍 1 1 具体介绍 1 2 水平滚动命令 1 3 垂直滚动命令 二 代码模块 三 显示效果 四 总结 五 参考资料 一 滚动显示介绍 1 1 具体介绍 SSD1306 OLED驱动芯片 指令详解 1 2 水平滚动命令
  • 单片机——串口初探及串口+中断

    简介 设备间接线通信的一种方式 数据一位一位地顺序传送 双向通信 全双工 全双工 A向B发消息时 B也可以向A发消息 半双工 A向B发消息时 B不可以向A发消息 只有当A发完时 B才可以向A发消息 传送速度较慢 常用串口的电器标准协议 RS
  • error:object with buffer protocol required如何解决(学习中问题分析)

    在学习openmv中遇到的问题 object with buffer protocol required 如何解决 根据网上搜索资料得到 F write 如openmv中的串口发送函数 函数需要一个字符串或者字节数组或者bytes对象作为参
  • C语言-指针变量作为函数参数

    指针变量作为函数参数 函数的参数类型不仅仅是整型 浮点型 字符型也可以是指针类型 它的作用是将一个变量的地址传到另外一个函数中 常见的是传数组的首地址 文章目录 指针变量作为函数参数 一 示例1 二 示例2 三 示例3 提示 以下是本篇文章
  • STM32CubeMX+Proteus仿真实现ADC_DMA多路采样

    DMA简介 DMA Direct Memory Access 直接存储器存取 功能 在外设到存储器或者存储器到存储器提供高速的数据传输支持 特点 不占用CPU DMA负责直接传输数据 CPU则可以处理其他事物 传输方式 DMA Mode N
  • 2.1Qt基础按钮控件

    第二章 基础控件 2 1按钮控件组 2 1 1QAbstractButton 类 2 1 2QPushButton 按钮 2 1 3 QRadioButton 按钮 2 1 4 checkBox 按钮 2 1 5 commandLinkBu
  • Linux嵌入式学习---c语言之循环结构

    Linux嵌入式学习 c语言之循环结构 一 while语句循环 1 1一般形式 1 2累加求和 二 do while语句循环 2 1do while语句一般形式 2 2do while语句特点 三 for语句循环 3 1for语句的一般形式
  • CMW500的基本使用方法之BLE测试

    概述 R S CMW500是罗德与施瓦茨公司继CMU200后推出的新一代的无线通信综合测试仪 本文介绍了如何利用CMW500测试低功耗蓝牙 主要参数有频偏 发射功率和接收灵敏度 测试环境搭建 所需仪器 CMW500 屏蔽箱 射频线若干 串口
  • STM32 工作流程

    工作流程 上电后 芯片复位启动 MCU通过指令 数据总线从FLASH中读取指令或数据 配合解析执行 然后再通过RAM和通用寄存器 R0 R12的内部寄存器 处理可变数据 根据执行的指令 配置和操作外设的寄存器 从而驱动对应的外设实现具体的功
  • getnameinfo failed

    在虚拟机vmware中用netstat 查看网络状态出现一行 getnameinfo failed 可能的一个原因 虚拟机使用NAT方式链接网络 解决方法 使用桥接方式即可
  • 关调度与关中断

    关调度与关中断 关中断与关调度是两种进入临界区的方式 它们有各自的使用环境 最近在研究 ucos III 的源代码时发现 ucos III 中有对临界区的优化 以关调度来代替关中断的方式工作 系统可以在特定的情况下用关调度的方式来替代关中断
  • 嵌入式---c语言变量范围及生命周期和定义声明

    嵌入式 c语言变量范围及生命周期 1 局部变量和全局变量 变量分为局部变量和全局变量 因为有的变量只能在本程序中使用 而有的变量可以在其他函数中使用 这就是变量作用域问题 1 1局部变量 定义 只能在一定范围内使用的变量称为局部变量 例如
  • 嵌入式学习笔记---VIM常用操作和命令

    嵌入式学习笔记 VIM常用操作和命令 写在前面 这里我使用的开发环境是Windows下的Cygwin软件 如果不想下载虚拟机什么的 用这个日常开发完全够 具体的下载安装教程网上一大把 可以参考其他博主 一些配置文件 1 定义 Cygwin是
  • 2021全国大学生电子设计竞赛F题(智能送药小车)国一赛后总结

    作为2022年的第一篇博客 思索了很久 就以此为题吧 11月7号随着电赛比赛的结束 我的大学竞赛生涯也差不多告一段落了 那天的心情也是无法用语言形容 第二天就又回归了正常的上课生活 2021年的电赛 既让人期盼 又存在许多变数 这一切都要从

随机推荐

  • typora中的图片传入到CSDN报错问题解决办法(详细步骤讲解)

    文章目录 typora中的图片传入到CSDN报错问题解决办法 一 报错问题描述 1 问题描述 2 原因分析 二 解决办法 1 软件介绍 2 阿里云oss 2 1 注册登录阿里云 2 2 购买对象存储oss 2 3 创建Buket 3 pic
  • 【AI外呼+RPA自动加微】,解锁企微新能力

    促销季临近 各类线上促销活动又拉开帷幕 多数商家意识到 在铺广告 做推广获客的同时 还可以利用好现有的用户数据 与客户建立更紧密的联系 激活客户进行二次转化 为了更加便于激活 运营客户 我们可以将客户引入另一个流量载体 企微私域 在使用平台
  • 微信小程序marquee

    https www jianshu com p 0ff03e5e942e 发现点问题 setdata方法放在create 里面获取不到真正的length长度 要放在attached 或者ready
  • Spring MVC框架详解(一)

    一 三层架构与MVC模型 我们的开发架构一般都是基于两种形式 一种是C S架构 也就是客户端 服务器架构 另一种是B S架构 也就是浏览器 服务器架构 在JavaEE开发中 几乎都是基于B S架构的开发 在B S架构中 系统标准的三层架构包
  • 主键索引和普通索引有什么区别?

    在 MySQL 中 索引是在存储引擎层实现的 所以并没有统 的索引标准 由于 InnoDB 存储引擎在 MySQL数据库中使 最为 泛 下 以 InnoDB 为例来分析 下其中的索引模型 在 InnoDB 中 表都是根据主键顺序以索引的形式
  • Java Jdbc的详解

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 一 Jdbc原理示意图 二 Jdbc的概述 三 JDBC的快速入门 代码如下 具体讲解在注释中已经说明 public class Jdb
  • SQLAlchemy使用教程

    文章目录 一 SQLAlchemy简介 1 ORM 2 SQLAlchemy的优点 3 SQLAlchemy分为两部分 二 SQLAlchemy的安装和连接 1 安装SQLAlchemy 2 使用SQLAlchemy连接MySQL数据库 三
  • IDEA导入web项目报错:Error running tomcat: Can‘t find catalina.jar

    IDEA导入web项目报错 Error running tomcat Can t find catalina jar 使用IDEA部署javaWEB项目时 报错如下 Error running tomcat Can t find catal
  • CDN高防靠什么防御恶意网络攻击?一分钟带你了解它的原理!

    21世纪随着互联网业务的兴起 CDN高防作为网站防御支持 收到很多站长的喜爱 那么CDN高防究竟是怎么做到网站高效 稳定的呢 下面让我用一分钟带你来了解CDN高防的原理 CDN高防即内容分流网络流量防御 原理就是构建在网络之上的内容分发网络
  • 贼全面的计算机考研数据结构算法题集合(408+自命题均可)

    文章目录 Code 数组 合并排序的数组 约瑟夫环问题 高效解法 栈 栈实现队列 最小栈 逆波兰表达式求值 队列 设计循环队列 链表 删除链表节点 删除链表中间节点 删除链表的倒数第n个节点 删除链表中的重复元素 相交链表 链表中环的入口点
  • idea快捷键与eclipse对比

    分类 功能点 Eclipse快捷键 IDEA快捷键 搜索 搜索文本 Ctrl F Ctrl F Ctrl R 查找替换 Alt P A 逐个 全部替换 Alt F3 查找当前选中词 继续搜索 Ctrl K 向前 Ctrl Shift K 向
  • SuperSocket教程七:获取连接的已连接事件和已关闭事件

    在进行socket通信的时候 客户端一般有三个状态1 新客户端连接上服务端 2 客户端与服务端保持连接进行交互 3 客户端断开连接 前面我们做了交互的一些操作 这个教程处理一下连接前和连接后 当然这些都是根据你的逻辑去写 我只是做一个展示
  • 微信授权绑定手机号 java_微信小程序获取手机号授权用户登录功能

    小程序中有很多地方都会用到注册用户信息的地方 用户需要填写手机号等 有了这个组件可以快速获取微信绑定手机号码 无须用户填写 1 getPhoneNumber这个组件通过button来实现 别的标签无效 将button中的open type
  • 硬件知识1--原理图和接口类型(基于百问网硬件操作大全视频教程)

    一 原理图 原理图 是表示电路板上各器件之间连接原理的图表 通过对原理图的分析 可以了解一个模块的输入输出 看出每个电子元器件的具体参数及各个元器件之间的连接关系等 通过原理图用户可以迅速熟悉系统的某些结构及关系 1 1 常见器件 在电路板
  • 2023华为OD机试真题【最大平分数组/动态规划】

    题目描述 给定一个数组nums 可以将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 最大的平分组个数 输入描述 第一行输入 m 接着输入m个数 表示此数组 数据范围 1 lt M lt 50 1 lt nums i lt 50
  • tensorflow2 auto mpg汽车油耗预测实践(3.5节)

    tensorflow2 汽车油耗预测实践 tensorflow2 汽车油耗预测实践 1 数据集 1 1 Auto MPG 1 2 数据清洗 1 3 数据处理 1 4 标准化 2 搭建神经网络 3 训练 4 画图与结果分析 tensorflo
  • 为php8安装xmlrpc扩展

    Php从php4到php5 由php5至php7 由php7至php8 每次大版本的更新 都有质的飞跃 Php 8 0 5来了 紧随着Php 8 0 6也来了 Php8也为大家带来了新的特性 值得大家一试 上周Moodle3 11稳定版本也
  • 打开FTP server或者wftpd32提示 unknow error 10013

    打开FTP server或者wftpd32提示 unknow error 10013 问题描述 解决方法 重启ftp 参考 问题描述 近期在进行vxworks的相关环境搭建时打开FTP server总提示unknow error 由于没有详
  • 【无标题】h5跳转微信公众号关注页面

    h5跳转微信公众号关注页面 最近在做h5项目 有个需求是如果用户没有关注公众号 需要引导用户跳转至微信公众号关注页面 制作一个链接 点击该链接跳转到公众号关注页面 方法一 1 从公众平台登进入公众号 2 查看源代码 3 ctrl f 搜索
  • 使用ESP32-CAM和OpenCV实现图片获取

    我觉得这是一种廉价并且较为可靠的图像获取方案 目前无法输出视频流 因为我还不知道怎么提升传输速度 进入正题 ESP32 CAM模组在某宝上面差不多25块一个 不是M5STACK 我的图像传输方案是先在esp32上面获取图像的16进制字符串