iis服务器助手广告
返回顶部
首页 > 资讯 > 移动开发 >Android app+ESP32-CAM实现远程监控app
  • 586
分享到

Android app+ESP32-CAM实现远程监控app

pythonpandas机器学习 2023-09-09 17:09:25 586人浏览 独家记忆
摘要

文章目录 目录 前言 一、ESP32-CAM设备准备 二、设备接线 三、 Arduino获取视频IP地址以及端口 四、在Android studio上代码实现 总结 前言 最近打比赛创

文章目录

目录

前言

一、ESP32-CAM设备准备

二、设备接线

三、 Arduino获取视频IP地址以及端口

四、在Android studio上代码实现

总结



前言

最近打比赛创新点需要在app里设计添加监控模块,看了CSDN其他文章,借鉴了各位大佬的思路,最近成功解决,由于花费也少,所以在这里总结一下。 

一、ESP32-CAM设备准备

ESP32-CAM开发板(30块左右),USB转TTL设备、ESP32-CAM烧录座(可以不买,后面发现被坑了几块钱)、杜邦线五根

本人于淘宝和pdd上购买,截图如下:

这里ESP32-CAM开发板到货后,注意摄像头插槽的使用,可以看下图,将开发板黑色小插槽上翻,刚好压住摄像头元件,正常情况下摄像头是不会脱落的。

   

二、设备接线

用杜邦线将ESP32-CAM的5V、GND、U0T、U0R分别连上USB转TTL设备的5V、GND、RXD、TXD,其中输入电源一定要至少5V 2A,否则视频会出现水纹。另外再用杜邦线将ESP32-CAM的GND与io0短接,否则后期代码烧录会失败。

三、 Arduino获取视频IP地址以及端口

下载Arduino IDE 2.0.4 下载地址:https://www.arduino.cc/en/software

注意下载win10 and newer,64bits

设备连接

USB转TTL连上电脑,将开发板IO0与GND短接,打开电脑的设备管理器,端口中有CH340,则说明设备连接成功。

Arduino代码示例

打开Arduino的exe文件,File—Examples—ESP32—Camera—CameraWEBServer,Tools工具栏的Board选择ai Thinker ESP32—CAM,Port选择COM3,在sketch中敲入示例代码: 

#include #include #include "esp_camera.h"#include  #define maxcache 1024  //图像数据包的大小 const char* ssid = "*****"; //输入wifi名称const char* password = "   "; //输入电脑连上的wifi的密码 const int LED = 4;//闪光灯const int ZHESHI_LED = 33; //指示灯 bool cam_state = true;  //是否开启摄像头传输const int port = 8080;String  frame_begin = "FrameBegin"; //图像传输包头String  frame_over = "FrameOverr";  //图像传输包尾String  msg_begin = "Esp32Msg";  //消息传输头//创建服务器端WiFiServer server;//创建客户端WiFiClient client; //CAMERA_MODEL_AI_THINKER类型摄像头的引脚定义#define PWDN_GPIO_NUM     32#define RESET_GPIO_NUM    -1#define XCLK_GPIO_NUM      0#define SIOD_GPIO_NUM     26#define SIOC_GPIO_NUM     27 #define Y9_GPIO_NUM       35#define Y8_GPIO_NUM       34#define Y7_GPIO_NUM       39#define Y6_GPIO_NUM       36#define Y5_GPIO_NUM       21#define Y4_GPIO_NUM       19#define Y3_GPIO_NUM       18#define Y2_GPIO_NUM        5#define VSYNC_GPIO_NUM    25#define HREF_GPIO_NUM     23#define PCLK_GPIO_NUM     22 static camera_config_t camera_config = {    .pin_pwdn = PWDN_GPIO_NUM,    .pin_reset = RESET_GPIO_NUM,    .pin_xclk = XCLK_GPIO_NUM,    .pin_sscb_sda = SIOD_GPIO_NUM,    .pin_sscb_scl = SIOC_GPIO_NUM,        .pin_d7 = Y9_GPIO_NUM,    .pin_d6 = Y8_GPIO_NUM,    .pin_d5 = Y7_GPIO_NUM,    .pin_d4 = Y6_GPIO_NUM,    .pin_d3 = Y5_GPIO_NUM,    .pin_d2 = Y4_GPIO_NUM,    .pin_d1 = Y3_GPIO_NUM,    .pin_d0 = Y2_GPIO_NUM,    .pin_vsync = VSYNC_GPIO_NUM,    .pin_href = HREF_GPIO_NUM,    .pin_pclk = PCLK_GPIO_NUM,        .xclk_freq_hz = 20000000,    .ledc_timer = LEDC_TIMER_0,    .ledc_channel = LEDC_CHANNEL_0,        .pixel_format = PIXFORMAT_JPEG,    .frame_size = FRAMESIZE_VGA,    .jpeg_quality = 31,   //图像质量   0-63  数字越小质量越高    .fb_count = 1,};//初始化摄像头esp_err_t camera_init() {    //initialize the camera    esp_err_t err = esp_camera_init(&camera_config);    if (err != ESP_OK) {        Serial.println("Camera Init Failed!");        return err;    }    sensor_t * s = esp_camera_sensor_get();    //initial sensors are flipped vertically and colors are a bit saturated    if (s->id.PID == OV2640_PID) {    //        s->set_vflip(s, 1);//flip it back    //        s->set_brightness(s, 1);//up the blightness just a bit    //        s->set_contrast(s, 1);    }    Serial.println("Camera Init OK!");    return ESP_OK;} bool wifi_init(const char* ssid,const char* passWord ){  WiFi.mode(WIFI_STA);  WiFi.setSleep(false); //关闭STA模式下wifi休眠,提高响应速度  #ifdef staticIP    WiFi.config(staticIP, gateway, subnet);  #endif  WiFi.begin(ssid, password);  uint8_t i = 0;  Serial.println();  while (WiFi.status() != WL_CONNECTED && i++ < 20) {      delay(500);      Serial.print(".");  }  if (i == 21) {    Serial.println();    Serial.print("Could not connect to");     Serial.println(ssid);    digitalWrite(ZHESHI_LED,HIGH);  //网络连接失败 熄灭指示灯    return false;  }  Serial.print("Connecting to wifi ");   Serial.print(ssid);  Serial.println(" success!");   digitalWrite(ZHESHI_LED,LOW);  //网络连接成功 点亮指示灯  return true;} void TCPServerInit(){  //启动server  server.begin(port);  //关闭小包合并包功能,不会延时发送数据  server.setNoDelay(true);  Serial.print("Ready! TCP Server");  Serial.print(WiFi.localIP());  Serial.println(":8080 Running!");}void cssp(){  camera_fb_t * fb = esp_camera_fb_get();  uint8_t * temp = fb->buf; //这个是为了保存一个地址,在摄像头数据发送完毕后需要返回,否则会出现板子发送一段时间后自动重启,不断重复  if (!fb)  {      Serial.println("Camera Capture Failed");  }  else  {     //先发送Frame Begin 表示开始发送图片 然后将图片数据分包发送 每次发送1430 余数最后发送     //完毕后发送结束标志 Frame Over 表示一张图片发送完毕     client.print(frame_begin); //一张图片的起始标志    // 将图片数据分段发送    int leng = fb->len;    int timess = leng/maxcache;    int extra = leng%maxcache;    for(int j = 0;j< timess;j++)    {      client.write(fb->buf, maxcache);       for(int i =0;i< maxcache;i++)      {        fb->buf++;      }    }    client.write(fb->buf, extra);    client.print(frame_over);      // 一张图片的结束标志    //Serial.print("This Frame Length:");    //Serial.print(fb->len);    //Serial.println(".Succes To Send Image For TCP!");    //return the frame buffer back to the driver for reuse    fb->buf = temp; //将当时保存的指针重新返还    esp_camera_fb_return(fb);  //这一步在发送完毕后要执行,具体作用还未可知。          }  //delay(20);//短暂延时 增加数据传输可靠性        }void tcpServerMonitor(){if (server.hasClient()) {  if ( client && client.connected()) {    WiFiClient serverClient = server.available();    serverClient.stop();    Serial.println("Connection rejected!");  }else{    //分配最新的client    client = server.available();    client.println(msg_begin +  "Client is Connect!");    Serial.println("Client is Connect!");  }}  //检测client发过来的数据if (client && client.connected()) {  if (client.available()) {    String line = client.readStringUntil('\n'); //读取数据到换行符    if (line == "CamOFF"){      cam_state = false;      client.println(msg_begin +  "Camera OFF!");    }    if (line == "CamON"){      cam_state = true;      client.println(msg_begin +  "Camera ON!");    }    if (line == "LedOFF"){      digitalWrite(LED, LOW);      client.println(msg_begin +  "Led OFF!");    }    if (line == "LedON"){      digitalWrite(LED, HIGH);      client.println(msg_begin +  "Led ON!");    }    Serial.println(line);  }}  // 视频传输if(cam_state){  if (client && client.connected()) {    CSSp();  }}} void setup() {  Serial.begin(115200);  pinMode(ZHESHI_LED, OUTPUT);  digitalWrite(ZHESHI_LED, HIGH);  pinMode(LED, OUTPUT);  digitalWrite(LED, LOW);  wifi_init(ssid,password);  camera_init();  TCPServerInit();} void loop() {  TCPServerMonitor();}

编译烧录(按右向箭头)

下载代码时注意将GND与IO0一直相连,出现Leaving... 和 Hard resetting via RTS pin...,即下载成功。

测试结果

将GND与IO0断开,打开右上角的Serial Monitor,选择115200baud波段,按一下ESP32—CAM开发板上的RST复位键,显示IP地址和相应端口,如下图,TCP Server后面就是IP地址,将其记住。

四、在Android studio上代码实现

编写Android studio代码,将每一帧视频的图片导入监控页面上,输入在arduino中成功连接的IP地址和端口号。连接以后结果如下,即可将摄像头采集到的视频导入到你想做的app上了。

         

 代码链接:https://github.com/caixukun-jinitaimei/ESP32CAM-android-app

     

总结

以上就是今天要讲的内容,本文介绍了ESP32—CAM结合android app简单的开发使用,本人第一次发文章,还请多多包涵。

来源地址:https://blog.csdn.net/zlq721127/article/details/129954776

--结束END--

本文标题: Android app+ESP32-CAM实现远程监控app

本文链接: https://www.lsjlt.com/news/401761.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android app+ESP32-CAM实现远程监控app
    文章目录 目录 前言 一、ESP32-CAM设备准备 二、设备接线 三、 Arduino获取视频IP地址以及端口 四、在Android studio上代码实现 总结 前言 最近打比赛创...
    99+
    2023-09-09
    python pandas 机器学习
  • Android实现APP秒表功能
    本文实例为大家分享了Android实现APP秒表功能的具体代码,供大家参考,具体内容如下 这几天一直在看安卓,也正好赶上老师布置的作业,所以就做了一个秒表。自己参考了一下别人的图标,...
    99+
    2024-04-02
  • android退出app应用程序怎么实现
    在Android中,可以通过以下方式退出应用程序:1. 使用System.exit(0)方法退出应用程序。这种方式不太推荐,因为它会...
    99+
    2023-05-30
    android退出app android
  • Android studio实现app登录界面
    本文实例为大家分享了Android studio设计app登录界面,供大家参考,具体内容如下 UI界面设计 在设计登录界面时,可以使用不同布局方式来实现该功能,通常情况下使用的是Li...
    99+
    2024-04-02
  • android如何实现记事本app
    这篇文章将为大家详细讲解有关android如何实现记事本app,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。自己写的一个简单的记事本app,效果如下:一、首先是第一个界面的编写,最上面是一个TextVie...
    99+
    2023-05-30
  • Android如何监控App使用剪切板权限的行为?
    要使用Android Studio监控剪贴板权限记录,你可以按照以下步骤进行操作: 创建一个新的Android项目: 打开Android Studio并创建一个新的Android项目。选择适当的项目名称、包名和其他配置选项。 添加剪贴板...
    99+
    2023-09-04
    android
  • Android studio实现网上订餐app
    目录 一.应用分析 1.1应用总体描述 1.2应用开发环境 1.3应用模块说明 二.效果展示 2.1店铺界面 2.2店铺详情界面 2.3菜品详情界面 2.4订单界面 三.服务器数据准备 四.店铺功能业务实现 4.1搭建标题栏布局 1.创建项...
    99+
    2023-10-04
    android java apache
  • Android studio课程设计开发实现---日记APP
    Android studio课程设计开发实现—日记APP 文章目录 Android studio课程设计开发实现---日记APP前言一、效果二、功能介绍1.主要功能2.涉及知识点 三、实...
    99+
    2023-09-23
    android studio android ide
  • Android怎么实现app一键重启
    要在Android应用中实现一键重启的功能,可以通过以下步骤进行操作:1. 获取重启权限:在AndroidManifest.xml文...
    99+
    2023-10-23
    Android
  • Android简单实现天气预报App
    本文实例为大家分享了Android简单实现天气预报App的具体代码,供大家参考,具体内容如下 一、UI设计 首页UI <xml version="1.0" encoding="...
    99+
    2024-04-02
  • Android怎么实现APP秒表功能
    要实现一个APP秒表功能,可以按照以下步骤进行操作:1. 创建一个新的Android项目。在Android Studio中,选择“F...
    99+
    2023-08-17
    Android
  • Android快速实现一个财务APP程序详解
    目录前言一,系统的技术栈二,系统界面三,系统核心代码前言 昨天有个粉丝朋友也想学开发Web和小程序、安卓,问可以在大学学会吗? 在学校学到的东西真的有限: 在很多的高校,有一些教授是...
    99+
    2024-04-02
  • Android实现绘制折线图APP代码
    目录一.总体设计二.具体模块实现三.效果展示四.功能展望总结一.总体设计 1.寻找规律,公式化的生成坐标系。 2.将生成坐标系的关键参数设置为可自定义,从而可变的可以生成自己想要的坐...
    99+
    2024-04-02
  • Android studio怎么实现app登录界面
    这篇文章主要介绍了Android studio怎么实现app登录界面的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android studio怎么实现app登录界面文章都会有所收获,下面我们...
    99+
    2023-06-30
  • Android Studio实现一个小说阅读App
    应用目录 一、基本信息二、功能介绍1. 主界面2. 排行榜界面3. 分类界面4. 搜索界面5. 书籍详情界面6. 阅读界面7. 相关书籍界面 三、类图/时序图/架构图四、采用技术及原因1.ViewPager+Fragmen...
    99+
    2023-08-17
    android 安卓app 移动应用开发 安卓毕设 android大作业
  • Android studio 实现app登录注册页面
    目录 activity_main.xml代码如下 MainActivity.java代码如下 用于高校实现Android studio专业课作业提交,如确实有用,欢迎观众姥爷打赏 该页面实现了注册页面的布局效果,包含用户名,密码,忘记密...
    99+
    2023-10-06
    android-studio adb android android studio
  • uni-app实现 app 小程序 手机端H5扫码功能
    首先 扫码这个功能小程序和App都是有现成的方法 但是H5是不行的 我们可以看这样一段代码 扫描{{result}}扫描{{result}} export default { data...
    99+
    2023-09-05
    uni-app 小程序
  • Android OpenGL如何实现APP裸眼3D效果
    Android OpenGL如何实现APP裸眼3D效果,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。原理简介 & OpenGL 的优势裸眼 3D 效果的本质是...
    99+
    2023-06-28
  • Android实现设置APP灰白模式效果
    目录方案一:方案二:方案三细心点的童鞋会发现,到特殊节日比如清明节这天很多App都设置了符合主题的灰白模式,比如京东,如图所示: 我们再来看看最终实现的效果图: 那我们今天就介绍...
    99+
    2024-04-02
  • Android Studio怎么实现简易计算器App
    本篇内容主要讲解“Android Studio怎么实现简易计算器App”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android Studio怎么实现简易计算器App”吧!...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作