基于ESP32-CAM做一个智能家居监控
Posted 苏师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于ESP32-CAM做一个智能家居监控相关的知识,希望对你有一定的参考价值。
首先我们需要用到设备:
- ESP32-CAM(20元左右)
- USB转TTL串口(几块钱)or 底板
我这边使用到的是ESP32-CAM拼夕夕二十多买的,质量还可以,然后用到了USB转TTL串口。
首先我们先进行连线。
5V->5V
VOR->TX
VOT->RX
GND->GND
此时还要用杜邦线将IO0与GND连接起来,需要连接起来才能进行上传下载。下载完成后要查看的时候在断开。
在此处更改WIFI的账号与密码:
此处为视频的刷新FPS;越高越流畅
代码写完后。在此处点击上传;
如果出现以下状况
需要按一下板上的复位按键,就是唯一可以按的那个按钮。
上传成功后打开串口
拔掉IO0与GND连接。在按一下RST
连接成功。复制网址。
成功运行,我们也可以在APP端设计个软件。我简单的设计了一下。代码如下:
MainActivity:
package com.huangfushi.mjpeg_1;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.os.Build;
import android .os .Bundle;
import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ZoomButtonsController;
import java.lang.reflect.Field;
public class MainActivity extends Activity
private WebView wv;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wv = (WebView) findViewById(R.id.wv);
wv.getSettings().setjavascriptEnabled(true);
wv.getSettings().setPluginState(WebSettings.PluginState.ON);
wv.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
wv.getSettings().setAllowFileAccess(true);
wv.getSettings().setDefaultTextEncodingName("UTF-8");
wv.getSettings().setLoadWithOverviewMode(true);
wv.getSettings().setUseWideViewPort(true);
wv.setVisibility(View.VISIBLE);
wv.loadUrl("http://192.168.0.102/mjpeg/1");
布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.huangfushi.mjpeg_1.MainActivity">
<TextView
android:layout_width="348dp"
android:layout_height="wrap_content"
android:textSize="80sp"
android:text="家"
android:gravity="center" />
<WebView
android:layout_width="355dp"
android:layout_height="400dp"
android:id="@+id/wv"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true" />
</LinearLayout>
需要加入网络权限
最终的效果图:
基于用户角色的数据库智能监控系统应用场景分析
摘要:本文尝试从概念和逻辑上推导了基于用户角色的数据库智能监控系统的可能应用场景。
本文分享自华为云社区《GaussDB(DWS)数据库智能监控系统应用场景分析》,原文作者:鲁大师。
与互联网产品的立项模式类似,当我们定义设计一款新产品时,首先需要对用户做需求分析,归纳整理综合分析用户的需求,定义我们的产品定位,功能,业务逻辑,使用界面等等。因此,为了设计好数据库智能监控系统,我们需要对数据库监控系统的目标用户做需求分析,收集用户诉求,挖掘用户潜在需求,绘制典型用户画像。最后,设计数据库监控系统的实现架构,将典型用户的各种需求纳入到产品的设计架构管道中。
数据库智能监控系统的用户
实际应用场景中,数据库监控系统的用户可能会有很多种不同的角色。不同公司因为组织架构不同,可能存在更细分或者更聚合的用户角色。但是总的来说可以归纳整理为如下三种用户类型:
-
- 应用开发(APP DEV)
- 运维工程师(SRE)
- 数据库管理员(DBA)
应用开发工程师角色:主要负责开发云应用中的业务SQL,对云服务的功能和性能负责。同时需要保证写出的SQL高效优质,不会对集群造成额外的资源消耗和时间消耗。因此,应用开发工程师,需要能够对新开发的SQL进行监控,了解该新增查询语句的执行效率以及资源消耗情况。
运维工程师角色:主要负责保证数据库集群的长期稳定运行。需要分别从资源消耗和系统负载两个角度对数据库系统进行评估。需要能够配置数据库的告警场景,并且可以看到实时或预测的数据库告警信息,将发现的问题报告给数据库管理员角色做进一步处理。总的来说,运维工程师角色会监控大量的数据库集群,他不会对每一个集群做非常深入的分析,而是更多的会以问题发现者的角色出现。
数据库管理员角色:主要负责定位数据库问题的根因并且提供相应的解决方案。数据库管理员需要是数据库领域的专家,熟悉数据库的方方面面,他可以从多个维度分析数据库监控数据,定位数据库故障,并提供解决方案。
需要说明的是,以上三种角色并不是指实际生产环境中的岗位,而是为了方便分析用户需求而归纳总结出来的典型角色符号。实际生产环境中,可能出现三种角色为同一个人的场景,或者SRE岗位会身兼SRE与DBA角色的场景。我们这里将用户区分为三种角色,主要是为了方便我们做需求分析并且构建对应的人物画像,从而进一步锁定对应角色人物所需要的工具。最终,呈现给大家一个思路清晰的数据库监控系统开发概念脉络。
数据库智能监控系统工具及应用场景
通过上面的抽象和梳理,我们发现在数据库监控运维过程中三种角色分别对应着不同的需求,而不同的需求必将导致不同工具或者同一个工具的不同侧重点。下面我们围绕三种角色,分别展开详细介绍其将要用到的工具:
应用开发角色,他们只关心自己写的SQL是否高效,是否有利用到集群的各种优化特性,是否占用了集群的过多资源?因此,他需要一个能够让他评估其所写SQL执行效率的工具,也就是WebSQL工具,允许用户简单的连接到数据库,并且执行SQL语句。WebSQL可以返回SQL语句的执行结果,也可以返回其执行计划,帮助应用开发角色,了解其SQL语句的执行效率。同时,用户的SQL语句并不是简单的单条语句执行的,而是需要将其放在整个作业流中去执行的。那么衡量其在作业流中的执行时间和资源消耗的基线就变得非常重要。因此,我们就需要查询监控可以针对特性的SQL记录其执行时间和资源的消耗,并且计算最大值,最小值和平均值,作为比对基线,来进一步帮助用户评估其SQL的执行效率。在用户现场,因为资源隔离需求,用户的作业是需要绑定到某个工作负载队列执行的,那么工作敷在队里的资源配置,以及工作负载队列的负载水平等数据又变得非常重要,新加的SQL语句是否会造成工作负载队列的超载?当前工作敷在队列的资源是否合理,这个都需要应用开发角色在新开发的应用上线前有个直观的了解。
系统运维角色角色(SRE),他们关心云上数量庞大的数据库系统的长稳运行,基于这个需求,我们打算提供三个方面的工具来解决问题。
健康指数指标,该指标是一个复合指标,该指标主要由两方面的指标支撑,资源消耗指数和数据库系统负载指数。而这两种指标又有其更下一层的原子指标和延伸指标支撑。集群健康指数的计算需要设计一套相应的数学模型,以该模型为基础我们就可量化系统的健康指数,从而可以使系统管理员非常简单的从云上数以百计的数据库中快速发现有问题的数据库。
除了健康指数这样需要系统管理员亲自去查看的被动指标以外,DMS还会进一步提供覆盖全面的告警能力。DMS将从三个层次上提供数据库的告警能力,(1)在dms-agent端,通过日志分析的手段,实时分析dms-agent所处节点上,操作系统以及数据库的日志,当发现威胁关键词后,立刻触发告警,通过相应渠道上报到告警平台;(2)在DMS服务端,因为DMS拥有数据库集群的全部监控数据,通过数据分析手段和数据库专业知识,我们将能设计相应的告警规则,周期性的对数据库集群做检查,发现问题后直接触发告警;(3)对于DMS采集的数据库集群指标数据,能够作为阈值告警的指标,全部对接CES,通过CES服务做阈值告警。以上三种告警的配置和展示都需要在DMS的前端页面上呈现。
人工智能与云计算有的天然的联系,当数据库上云后,人工智能与数据库运维的交叉节点AIOps就顺理成章的出现了。因为DMS拥有数据集群的全部监控数据,因此使用历史监控数据对集群的工作模式做判别,推荐最优化的配置参数;对数据库磁盘的空间增长趋势做预测,提前通知用户扩容或运维需求等等。在人工智能的加持下这一切都变成为可能。
数据库管理员角色(DBA),数据库管理员一直都是数据库的大管家,在传统的数据中心里,他们负责数据库的性能优化,也负责数据库的长稳运行,有时候甚至也要帮助应用开发工程师优化SQL。但是在云时代,数据库管理员的工作分工会变得更精细,应用开发和系统管理员分担了数据库管理的一部分工作,从而使得数据库管理员角色职责变的更纯粹。数据库管理员作为一个数据库领域的专家,他将负责定位数据库问题的根因,以及提供解决问题的方法。系统管理员+数据库管理员两个角色最终就形成了发现问题,分析问题,解决问题的任务闭环。因此,在云上,SRE岗位往往会包含SRE+DBA两个角色的职责。
DBA是一个数据库专家,也是一个使用数据库工具定位各种数据库问题的大师。针对问题根因定位,他将需要故障分析工具和故障自愈工具两类工具。其中,故障分析工具,将会提供各种监控数据和数据的不同可视化形式,为数据库管理员快速定位问题根因提供帮助。故障自愈类工具,则是将数据库管理员过去定位问题,解决问题经验的固化。未来随着我们对DBA工作方法的进一步了解,将会有越来越多的自愈类工具。
数据库管理员另一类重要的职责就是提供故障的解决方案,这一块是运维系统非常重要的一环。再好的故障定位工具,定位到的问题,如果最后没有解决方案,那么最终还是不能真正帮助到用户。因此,我们需要建立一套问题根因-解决方案的专业搜索引擎,帮助用户也是帮助我们加速解决问题的流程,缓解一线客户支持工作人员的工作强度。
本文是介绍云上的数据库监控运维体系设计的核心概念的三篇文章之二,尝试从概念和逻辑上推导了基于用户角色的数据库智能监控系统的可能应用场景。有了这个基本框架,则我们后续所需要做的工作和工具都变得清晰可见。愿我们的期待早日成为显示,让云端的数据库运维工作变得更轻松与智能。
想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料哦~
以上是关于基于ESP32-CAM做一个智能家居监控的主要内容,如果未能解决你的问题,请参考以下文章
ESP32开源项目基于esp32cam制作的迷你监控,可以通过app远程查看
ESP32-CAM 使用 MicroPython 进行开发 - 使用图形化工具 Thonny (Mac)