精华内容
下载资源
问答
  • 把Android手机变成远程监控摄像头

    千次阅读 2014-09-12 10:28:36
    我们可以废物利用下,把旧的手机变成一个远程监控摄像头。这里使用Java创建手机camera客户端和远程服务上的监控界面。 实现方法考虑几点: 创建一个Android自定义的摄像头应用 把preview...

    要买新手机了旧手机怎么办?我们可以废物利用下,把旧的手机变成一个远程监控摄像头。这里使用Java创建手机camera客户端和远程服务上的监控界面。

    实现方法考虑几点:

    1. 创建一个Android自定义的摄像头应用

    2. 把preview的数据发送到服务端

    3. preview的NV21数据解码

    4. 把图像画出来

    Android摄像头,Socket链接,服务端图像显示

    创建preview回调函数:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private Camera.PreviewCallback mPreviewCallback = new PreviewCallback() {
      
            @Override
            public void onPreviewFrame(byte[] data, Camera camera) {
                // TODO Auto-generated method stub
                synchronized (mQueue) {
                    if (mQueue.size() == MAX_BUFFER) {
                        mQueue.poll();
                    }
                    mQueue.add(data);
                }
            }
        };

    注册回调函数:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    try {
                mCamera.setPreviewCallback(mPreviewCallback);
                mCamera.setPreviewDisplay(mHolder);
                mCamera.startPreview();
      
            catch (Exception e){
                Log.d(TAG, "Error starting camera preview: " + e.getMessage());
            }

    停止释放摄像头:

    ?
    1
    2
    3
    4
    5
    6
    7
    public void onPause() {
            if (mCamera != null) {
                mCamera.setPreviewCallback(null);
                mCamera.stopPreview();
            }
            resetBuff();
        }

    使用AlertDialog来设置服务器IP地址:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    private void setting() {
            LayoutInflater factory = LayoutInflater.from(this);
            final View textEntryView = factory.inflate(R.layout.server_setting, null);
            AlertDialog dialog =  new AlertDialog.Builder(IPCamera.this)
                .setIconAttribute(android.R.attr.alertDialogIcon)
                .setTitle(R.string.setting_title)
                .setView(textEntryView)
                .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
      
                        EditText ipEdit = (EditText)textEntryView.findViewById(R.id.ip_edit);
                        EditText portEdit = (EditText)textEntryView.findViewById(R.id.port_edit);
                        mIP = ipEdit.getText().toString();
                        mPort = Integer.parseInt(portEdit.getText().toString());
      
                        Toast.makeText(IPCamera.this"New address: " + mIP + ":" + mPort, Toast.LENGTH_LONG).show();
                    }
                })
                .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
      
                        /* User clicked cancel so do some stuff */
                    }
                })
                .create();
            dialog.show();
        }

    启动线程来创建socket链接,发送JSON数据和每一帧的图像数据:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    mSocket = new Socket();
    mSocket.connect(new InetSocketAddress(mIP, mPort), 10000);
    BufferedOutputStream outputStream = new BufferedOutputStream(mSocket.getOutputStream());
    BufferedInputStream inputStream = new BufferedInputStream(mSocket.getInputStream());
      
    JsonObject jsonObj = new JsonObject();
        jsonObj.addProperty("type""data");
        jsonObj.addProperty("length", mCameraPreview.getPreviewLength());
        jsonObj.addProperty("width", mCameraPreview.getPreviewWidth());
        jsonObj.addProperty("height", mCameraPreview.getPreviewHeight());
      
        byte[] buff = new byte[256];
        int len = 0;
        String msg = null;
        outputStream.write(jsonObj.toString().getBytes());
        outputStream.flush();
      
        while ((len = inputStream.read(buff)) != -1) {
            msg = new String(buff, 0, len);
      
            // JSON analysis
            JsonParser parser = new JsonParser();
            boolean isJSON = true;
            JsonElement element = null;
            try {
                element =  parser.parse(msg);
            }
            catch (JsonParseException e) {
                Log.e(TAG, "exception: " + e);
                isJSON = false;
            }
            if (isJSON && element != null) {
                JsonObject obj = element.getAsJsonObject();
                element = obj.get("state");
                if (element != null && element.getAsString().equals("ok")) {
                    // send data
                    while (true) {
                        outputStream.write(mCameraPreview.getImageBuffer());
                        outputStream.flush();
      
                        if (Thread.currentThread().isInterrupted())
                            break;
                    }
      
                    break;
                }
            }
            else {
                break;
            }
        }
      
        outputStream.close();
        inputStream.close();

    服务端接收数据:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public int fillBuffer(byte[] data, int off, int len, LinkedList<byte[]> YUVQueue) {
            mTotalLength += len;
            mByteArrayOutputStream.write(data, off, len);
      
            if (mTotalLength == mFrameLength) {
      
                synchronized (YUVQueue) {
                    YUVQueue.add(mByteArrayOutputStream.toByteArray());
                    mByteArrayOutputStream.reset();
                }
      
                mTotalLength = 0;         
                System.out.println("received file");
            }
      
            return 0;
        }

    NV21解码:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    public static int[] convertYUVtoRGB(byte[] yuv, int width, int height)
                throws NullPointerException, IllegalArgumentException {        
            int[] out = new int[width * height];
            int sz = width * height;
      
            int i, j;
            int Y, Cr = 0, Cb = 0;
            for (j = 0; j < height; j++) {
                int pixPtr = j * width;
                final int jDiv2 = j >> 1;
                for (i = 0; i < width; i++) {
                    Y = yuv[pixPtr];
                    if (Y < 0)
                        Y += 255;
                    if ((i & 0x1) != 1) {
                        final int cOff = sz + jDiv2 * width + (i >> 1) * 2;
                        Cb = yuv[cOff];
                        if (Cb < 0)
                            Cb += 127;
                        else
                            Cb -= 128;
                        Cr = yuv[cOff + 1];
                        if (Cr < 0)
                            Cr += 127;
                        else
                            Cr -= 128;
                    }
                    int R = Y + Cr + (Cr >> 2) + (Cr >> 3) + (Cr >> 5);
                    if (R < 0)
                        R = 0;
                    else if (R > 255)
                        R = 255;
                    int G = Y - (Cb >> 2) + (Cb >> 4) + (Cb >> 5) - (Cr >> 1)
                            + (Cr >> 3) + (Cr >> 4) + (Cr >> 5);
                    if (G < 0)
                        G = 0;
                    else if (G > 255)
                        G = 255;
                    int B = Y + Cb + (Cb >> 1) + (Cb >> 2) + (Cb >> 6);
                    if (B < 0)
                        B = 0;
                    else if (B > 255)
                        B = 255;
                    out[pixPtr++] = 0xff000000 + (B << 16) + (G << 8) + R;
                }
            }
      
            return out;
        }

    使用Swing绘制BufferedImage

    ?
    1
    2
    3
    4
    BufferedImage bufferedImage = null;
    int[] rgbArray = Utils.convertYUVtoRGB(data, mWidth, mHeight);
    bufferedImage = new BufferedImage(mWidth, mHeight, BufferedImage.TYPE_USHORT_565_RGB);
    bufferedImage.setRGB(00, mWidth, mHeight, rgbArray, 0, mWidth);
     
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
           synchronized (mQueue) {
                if (mQueue.size() > 0) {
                    mLastFrame = mQueue.poll();
                }   
            }
            if (mLastFrame != null) {
                g.drawImage(mLastFrame, 00null);
            }
            else if (mImage != null) {
                g.drawImage(mImage, 00null);
            }
        }

    源码

    https://github.com/DynamsoftRD/Android-IP-Camera

    展开全文
  • 起序:新手触碰 Android开发 领域,有望大佬指点。 源码 - Gitee 源码 - Github 加注:不管是进入 Gitee or...新手机的快速迭代更新使得一部分人对最新版手机有更高的使用期望,这就造成了这部分人原来使用的手机会..
    • 起序:新手触碰 Android开发 领域,有望大佬指点。

      源码 - Gitee
      源码 - Github

    • 加注:不管是进入 Gitee or Github 中,给孩子点个 star 呗。

    一、为什么想做这个项目?

    这也许是一个比较令人深省的问题,可能是突发奇想,一时兴起,也可能是锻炼自己在 Android开发 领域的能力。虽然这不是一个特别新颖的想法,但在 资源回收利用 方面还是有那么一点能力体现的。新手机的快速迭代更新使得一部分人对最新版手机有更高的使用期望,这就造成了这部分人原来使用的手机会被 搁浅 ,而这些手机 最终的去处也各式各样 ,可能被 尘封、低价卖出、当板砖。以上纯属个人 YY,下面进入正题。

    二、简介

    项目主要二次利用 Android 系统比较旧版本的手机,把旧手机的摄像头当作 监控摄像头,利用视频聊天的方式,在旧手机上安装一个 APP (AndMon) 录取视频,在其他手机上安装一个 APP (Monitor) 接收旧手机的视频流,这个功能是在 Monitor 通过 扫一扫二维码 的形式进而实现监控的目的。在 AndMon 上同时存在着 录制视频 的功能,录制的视频可以上传到 阿里云服务器上 ,然而可以在 Monitor 上的 媒体库 选项中查看录制好的视频。

    三、框架

    项目难免会用到第三方框架实现一些 自己觉得看似牛逼 但常用的功能,虽然不是自己编写的,但读懂第三方框架简单实现的代码也是一种能力,对不对。

    • SMSSDK : 实现了手机号获取验证码
    • zxing : 实现了二维码的扫描
    • agora : 实现了新手机查看旧手机的视频监控

    注:这三个框架功能强大,我只是利用了部分功能,还有其他功能需要发掘使用,在这里不细说。

    四、架构图解

    新手绘制架构图,如有 架构师大佬指点 ,感激涕零。

    在这里插入图片描述

    五、页面展示

    只截取了静态页面,功能界面 需要录制视频,偷个懒,如有兴趣,下方有联系方式。

    在这里插入图片描述

    展开全文
  • GB28181流媒体服务 ...国标设备语音对讲 支持语音对讲的设备,可以直接接入LiveGBS,这样就可以从控制中心和您关注的设备间,进行语音对讲 配置语音输出通道编码 看到有 语音输出通道编码 表示支持语音对讲功能 ...

    GB28181流媒体服务

    具体介绍这边不多说,参考 https://www.liveqing.com/docs/products/LiveGBS.html

    国标设备语音对讲

    支持语音对讲的设备,可以直接接入LiveGBS,这样就可以从控制中心和您关注的设备间,进行语音对讲

    配置语音输出通道编码

    看到有 语音输出通道编码 表示支持语音对讲功能
    在这里插入图片描述

    按住说话

    在这里插入图片描述

    展开全文
  • 现如今智能手机更新换代太频繁,换下来的旧手机卖二手不值钱,丢弃又觉得可惜,...在这里要推荐一个变废为宝的好办法,就是通过安装一个免费的“警猫眼”的App,把闲置旧手机变成专业网络摄像头,即经济又环保!!!
    现如今智能手机更新换代太频繁,换下来的旧手机卖二手不值钱,丢弃又觉得可惜,而且产生电子垃圾污染环境。怎么办???在这里要推荐一个变废为宝的好办法,就是通过安装一个免费的“警猫眼”的App,把闲置旧手机变成专业网络摄像头,即经济又环保!!!

    使用方法:
           第一步,在闲置的安卓手机上运行“警猫眼”摄像端程序,布防,如果能联网会自动分配一个摄像端ID并显示在标题栏。
           第二步,在另一台手机或电脑上运行“警猫眼”观看端程序,添加第一步的摄像端ID,即可连接。

    警猫眼App下载:(大小超附件限制,只好给个下载链接)

    点击打开链接



    连接后摄像端手机的摄像头会被打开,你把它放置在你想监控的地方,只要有网络,无论距离有多远,你就可以在另外一台手机里看到实时画面,而且比QQ视频还要更流畅,此外它还提供包括动作监测、双向语音、以及24小时SD卡录像等其他功能。






    摘录官方网页的介绍:

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    “警猫眼”软件把闲置安卓手机变成智能网络摄像头,可通过WiFi/3G远程传输实时视频与音频至随身手机,好似千里眼、顺风耳。附加摄像头动作捕捉、入侵报警,以及24小时无间断录像。专为居家室内安全系统设计。

      ▶ 无需专业监控硬件,只要一台闲置安卓手机 + 免费的“警猫眼”软件!
      ▶ 可用随身手机和电脑远程观看,观看端有Android、iOS、PC电脑 三个版本!
      ▶ 无需路由器端口设置,P2P即插即用!
      ▶ 没有内网限制,只要上互联网就能远程监控!
      ▶ 支持H.263硬编码、H.264硬编码,最大程度利用你安卓手机的潜能!
      ▶ 摄像头图像移动侦测触发报警,声音侦测触发报警,手机被拿动触发报警!
      ▶ 不插手机卡时,可以电子邮件报警;插手机卡时,还可以短信、彩信、打电话报警!
    ++++++++++++++++++++++++++++++++++++++++++++








    很明显,能看出来 “警猫眼”机底盒是 Arduino控制板为核心的,还有HC-06蓝牙模块,DHT11,MQ2,舵机,继电器,红外人体感应器,LED灯,等模块。。
    “警猫眼”机底盒与上面的安卓手机 是通过蓝牙串口通信交互的。

    Arduino程序分享出来,大家参考:


    #include <Servo.h>
    #include <dht.h>
    
    #define PIN_A_VOLTAGE  5
    #define PIN_A_MQ2      4
    
    #define PIN_D_SERVO    9
    #define PIN_D_DHT      8
    #define PIN_D_RELAY    4
    #define PIN_D_RED      5
    #define PIN_D_LED      2
    #define PIN_D_LEDA     7
    #define PIN_D_LEDB     12
    
    //PT2272 Recv
    #define PIN_D_2272VT   6
    #define PIN_A_2272D0   0
    #define PIN_A_2272D1   1
    #define PIN_A_2272D2   2
    #define PIN_A_2272D3   3
    
    //PT2262 Send
    #define PIN_D_315SEND   10
    #define PIN_D_433SEND   10
    
    
    #define ANALOG_HIGH_VALUE  560
    
    
    Servo servo;
    dht   DHT;
    int8_t relayVal;
    
    double readNumber()
    {
      int8_t dotCount = 0;
      int n = 0;
      double p = 0.0f;
      char ch;
      while (1) {
         if (Serial.available() > 0) {
           ch = Serial.read();
           if (ch == '\r')
           {
             continue;
           }
           else if (ch == '\n')
           {
             return (double)n + p;
           }
           else if (ch == '.')
           {
             if (dotCount == 0) dotCount = 1;
             continue;
           }
           else {
             if (dotCount == 0) {
               n = n*10 + (ch - '0');
             }
             else {
               double tmp = 1.0f;
               int i = dotCount;
               while (i > 0)
               {
                 tmp *= 0.1f;
                 i -= 1;
               }
               p += ((double)(ch - '0'))*tmp;
               dotCount += 1;
             }
           }
         }//if
      }//while
    }
    
    uint16_t readWord()
    {
      uint32_t ret = 0;
      char ch;
      while (1) {
         if (Serial.available() > 0) {
           ch = Serial.read();
           if (ch == '\r')
           {
             continue;
           }
           else if (ch == '\n')
           {
             return (uint16_t)ret;
           }
           else if (ch == ',')
           {
             return (uint16_t)ret;
           }
           else {
             if (ret <= 65535) {
               ret = ret*10 + (ch - '0');
             }
           }
         }//if
      }//while
    }
    
    // Return value:
    // -1: Error
    //  n: n > 0, number of bytes
    int readWordArray(uint16_t buf[], int bufSize)
    {
      uint16_t len = readWord();
      if (len > bufSize)
      {
        return -1;
      }
      
      int i;
      for (i = 0; i < len; i++)
      {
        buf[i] = readWord();
      }
      return len;
    }
    
    
    ///
    
    uint8_t  pt2262_pin;
    uint16_t pt2262_count;
    
    
    void pt2262_foura(void)
    {
    	int i;
            for (i = 0; i < pt2262_count; i++)
            {delayMicroseconds(10);}
    }
    
    void ev1527_bit0(void)
    {
    	digitalWrite(pt2262_pin, HIGH);
    	pt2262_foura();
    	digitalWrite(pt2262_pin, LOW);
    	pt2262_foura();
    	pt2262_foura();
    	pt2262_foura();
    }
    
    void ev1527_bit1(void)
    {
    	digitalWrite(pt2262_pin, HIGH);
    	pt2262_foura();
    	pt2262_foura();
    	pt2262_foura();
    	digitalWrite(pt2262_pin, LOW);
    	pt2262_foura();
    }
    
    void pt2262_dama0(void)//BIT"0"
    {
    	digitalWrite(pt2262_pin, HIGH);
    	pt2262_foura();
    	digitalWrite(pt2262_pin, LOW);
    	pt2262_foura();
    	pt2262_foura();
    	pt2262_foura();
    
    	digitalWrite(pt2262_pin, HIGH);
    	pt2262_foura();
    	digitalWrite(pt2262_pin, LOW);
    	pt2262_foura();
    	pt2262_foura();
    	pt2262_foura();
    }
    
    void pt2262_dama1(void)//BIT"1"
    {
    	digitalWrite(pt2262_pin, HIGH);
    	pt2262_foura();
    	pt2262_foura();
    	pt2262_foura();
    	digitalWrite(pt2262_pin, LOW);
    	pt2262_foura();
    	
    	digitalWrite(pt2262_pin, HIGH);
    	pt2262_foura();
    	pt2262_foura();
    	pt2262_foura();
    	digitalWrite(pt2262_pin, LOW);
    	pt2262_foura();
    }
    
    void pt2262_damaf(void)//BIT"f"
    {
    	digitalWrite(pt2262_pin, HIGH);
    	pt2262_foura();
    	digitalWrite(pt2262_pin, LOW);
    	pt2262_foura();
    	pt2262_foura();
    	pt2262_foura();
    
    	digitalWrite(pt2262_pin, HIGH);
    	pt2262_foura();
    	pt2262_foura();
    	pt2262_foura();
    	digitalWrite(pt2262_pin, LOW);
    	pt2262_foura();
    }
    
    void pt2262_syn(void)
    {
    	int i=31;
    	digitalWrite(pt2262_pin, HIGH);
    	pt2262_foura();
    	digitalWrite(pt2262_pin, LOW);
    	while(i--)
    	{
    		pt2262_foura();
    	}
    }
    
    void pt2262_send(uint16_t addr, uint8_t data)
    {
      uint16_t addr_bak = addr;
      uint8_t data_bak = data;
      uint8_t i;
      uint8_t j;
      uint8_t tmp;
      for (i = 0; i < 5; i++)
      {
    	addr = addr_bak;
    	data = data_bak;
    
    	pt2262_syn();
    
    	for (j = 0; j < 8; j++)
    	{//A0 -> A7
    		tmp = addr % 3;
    		if (0 == tmp)       pt2262_dama0();
    		else if  (1 == tmp) pt2262_dama1();
    		else                pt2262_damaf();
    		addr = addr / 3;
    	}
    	for (j = 0; j < 4; j++)
    	{//D0 -> D3
    		tmp = data % 2;
    		if (0 == tmp)       pt2262_dama0();
    		else if  (1 == tmp) pt2262_dama1();
    		data = data / 2;
    	}
      }
    }
    
    void ev1527_send(uint16_t addr, uint8_t data)
    {
      uint16_t addr_bak = addr;
      uint8_t data_bak = data;
      uint8_t i;
      uint8_t j;
      uint8_t tmp;
      for (i = 0; i < 5; i++)
      {
    	addr = addr_bak;
    	data = data_bak;
    
    	pt2262_syn();
    
    	for (j = 0; j < 8; j++)
    	{//A0 -> A7 (16bit)
    		tmp = addr % 3;
    		if (0 == tmp)       pt2262_dama0();
    		else if  (1 == tmp) pt2262_dama1();
    		else                pt2262_damaf();
    		addr = addr / 3;
    	}
    	for (j = 0; j < 8; j++)
    	{//D0 -> D7 (8bit)
    		tmp = data % 2;
    		if (0 == tmp)       ev1527_bit0();
    		else if  (1 == tmp) ev1527_bit1();
    		data = data / 2;
    	}
      }
    }
    
    
    
    
    int8_t vtState = 0;
    
    void pt2272_func()
    {
        uint8_t val2272;
        int val = digitalRead(PIN_D_2272VT);
        if (vtState == 0 &&  val == 1)
        {
          val2272 = 0;
          if ((analogRead(PIN_A_2272D0) > ANALOG_HIGH_VALUE ? HIGH : LOW) == HIGH)
          {
            val2272 |= 0x1;
          }
          if ((analogRead(PIN_A_2272D1) > ANALOG_HIGH_VALUE ? HIGH : LOW) == HIGH)
          {
            val2272 |= 0x2;
          }
          if ((analogRead(PIN_A_2272D2) > ANALOG_HIGH_VALUE ? HIGH : LOW) == HIGH)
          {
            val2272 |= 0x4;
          }
          if ((analogRead(PIN_A_2272D3) > ANALOG_HIGH_VALUE ? HIGH : LOW) == HIGH)
          {
            val2272 |= 0x8;
          }
          Serial.print("M");
          Serial.println(val2272, DEC);
        }
        vtState = val;
    }
    
    //
    
    
    void setup()
    {
      pinMode(PIN_D_2272VT,   INPUT);
      //pinMode(PIN_D_2272D0,   INPUT);
      //pinMode(PIN_D_2272D1,   INPUT);
      //pinMode(PIN_D_2272D2,   INPUT);
      //pinMode(PIN_D_2272D3,   INPUT);
    
      pinMode(PIN_D_315SEND,   OUTPUT);
      pinMode(PIN_D_433SEND,   OUTPUT);
      digitalWrite(PIN_D_315SEND,  LOW);
      digitalWrite(PIN_D_433SEND,  LOW);
    
      pinMode(PIN_D_LED,  OUTPUT);
      pinMode(PIN_D_LEDA, OUTPUT);
      pinMode(PIN_D_LEDB, OUTPUT);
      pinMode(PIN_D_RELAY, OUTPUT);
      pinMode(PIN_D_RED,   INPUT);
      digitalWrite(PIN_D_RELAY, HIGH);
      relayVal = 0;
      
      digitalWrite(PIN_D_LED,  LOW);
      digitalWrite(PIN_D_LEDA, LOW);
      digitalWrite(PIN_D_LEDB, LOW);
    
      servo.attach(PIN_D_SERVO);
      servo.write(90);
      
      Serial.begin(9600);
      delay(500);
      
      int n;
      char ch;
      int val;
      double fVal;
      int i;
      for (i = 0; i < 1500; i++)
      {
        while (Serial.available() > 0)
        {
            ch = Serial.read();
            if(ch == 'd')
            {
              n = readNumber();
              //Serial.print("dn=");Serial.println(n, DEC);Debug
              servo.write(n);
            }
            else if(ch == 'j')
            {
              n = readNumber();
              //Serial.print("jn=");Serial.println(n, DEC);Debug
              if (n == 1) {
                digitalWrite(PIN_D_RELAY, LOW);
                relayVal = 1;
              }
              else if (n == 0) {
                digitalWrite(PIN_D_RELAY, HIGH);
                relayVal = 0;
              }
            }
            else if(ch == 'a')
            {
              n = readNumber();
              if (n == 1) {
                digitalWrite(PIN_D_LEDA, HIGH);
              }
              else if (n == 0) {
                digitalWrite(PIN_D_LEDA, LOW);
              }
            }
            else if(ch == 'b')
            {
              n = readNumber();
              if (n == 1) {
                digitalWrite(PIN_D_LEDB, HIGH);
              }
              else if (n == 0) {
                digitalWrite(PIN_D_LEDB, LOW);
              }
            }
            else if(ch == 'L')
            {
              n = readNumber();
              if (n == 1) {
                digitalWrite(PIN_D_LED, HIGH);
              }
              else if (n == 0) {
                digitalWrite(PIN_D_LED, LOW);
              }
            }
    
    	else if(ch == 'm')
    	{
    		n = readWord();
    		if (n == 315)
    		{
    			pt2262_pin = PIN_D_315SEND;
    		}
    		else if (n == 433)
    		{
    			pt2262_pin = PIN_D_433SEND;
    		}
    		
    		pt2262_count = readWord();
    		
    		n = readWord();
    		if (n == 2262)
    		{
    			n = readWord();
    			pt2262_send(n, readWord());
    		}
    		else if (n == 1527)
    		{
    			n = readWord();
    			ev1527_send(n, readWord());
    		}
    	}
    
        }//while
        
        val = servo.read();
        Serial.print("d");
        Serial.println(val, DEC);
        
        val = relayVal;
        Serial.print("j");
        Serial.println(val, DEC);
        
        val = (digitalRead(PIN_D_RED) == HIGH ? 1 : 0);
        Serial.print("h");
        Serial.println(val, DEC);
        
        pt2272_func();
        
        delay(200);
      }
    }
    
    
    #define VOLTAGE_ARRAY_SIZE  50
    uint8_t voltageArray[VOLTAGE_ARRAY_SIZE];
    uint32_t loop_count = 0;
    
    void loop()
    {
      int n;
      char ch;
      while (Serial.available() > 0)
      {
          ch = Serial.read();
          if(ch == 'd')
          {
            n = readNumber();
            //Serial.print("dn=");Serial.println(n, DEC);Debug
            servo.write(n);
          }
          else if(ch == 'j')
          {
            n = readNumber();
            //Serial.print("jn=");Serial.println(n, DEC);Debug
            if (n == 1) {
              digitalWrite(PIN_D_RELAY, LOW);
              relayVal = 1;
            }
            else if (n == 0) {
              digitalWrite(PIN_D_RELAY, HIGH);
              relayVal = 0;
            }
          }
          else if(ch == 'a')
          {
            n = readNumber();
            if (n == 1) {
              digitalWrite(PIN_D_LEDA, HIGH);
            }
            else if (n == 0) {
              digitalWrite(PIN_D_LEDA, LOW);
            }
          }
          else if(ch == 'b')
          {
            n = readNumber();
            if (n == 1) {
              digitalWrite(PIN_D_LEDB, HIGH);
            }
            else if (n == 0) {
              digitalWrite(PIN_D_LEDB, LOW);
            }
          }
          else if(ch == 'L')
          {
            n = readNumber();
            if (n == 1) {
              digitalWrite(PIN_D_LED, HIGH);
            }
            else if (n == 0) {
              digitalWrite(PIN_D_LED, LOW);
            }
          }
    
    	else if(ch == 'm')
    	{
    		n = readWord();
    		if (n == 315)
    		{
    			pt2262_pin = PIN_D_315SEND;
    		}
    		else if (n == 433)
    		{
    			pt2262_pin = PIN_D_433SEND;
    		}
    		
    		pt2262_count = readWord();
    		
    		n = readWord();
    		if (n == 2262)
    		{
    			n = readWord();
    			pt2262_send(n, readWord());
    		}
    		else if (n == 1527)
    		{
    			n = readWord();
    			ev1527_send(n, readWord());
    		}
    	}
    
      }//while
      
      int val;
      double fVal;
      if ((loop_count % 10) == 0)
      {
        val = analogRead(PIN_A_MQ2);
        Serial.print("y");
        Serial.println(val, DEC);
      
        val = servo.read();
        Serial.print("d");
        Serial.println(val, DEC);
      
        val = relayVal;
        Serial.print("j");
        Serial.println(val, DEC);
      
        val = (digitalRead(PIN_D_RED) == HIGH ? 1 : 0);
        Serial.print("h");
        Serial.println(val, DEC);
      
        if (0 == DHT.read11(PIN_D_DHT))
        {
          fVal = DHT.temperature;
          Serial.print("w");
          Serial.println(fVal, 3);
        
          fVal = DHT.humidity;
          Serial.print("s");
          Serial.println(fVal, 3);
        }
      
      }
      
      uint8_t index = loop_count % VOLTAGE_ARRAY_SIZE;
      voltageArray[index] = (uint8_t)round((double)(analogRead(PIN_A_VOLTAGE) - 3)/4.0f);
      if (index == (VOLTAGE_ARRAY_SIZE - 1))
      {
        uint8_t j;
        uint16_t arraySum = 0;
        for (j = 0; j < VOLTAGE_ARRAY_SIZE; j++)
        {
          arraySum += voltageArray[j];
        }
        fVal = (double)(arraySum * 4) / (double)VOLTAGE_ARRAY_SIZE;
        fVal = fVal * 0.02444f;
        Serial.print("U");
        Serial.println(fVal, 3);
      }
      
      pt2272_func();
      
      delay(100);
      loop_count += 1;
    }
    


    展开全文
  • 旧安卓手机改为门禁探头,或用作监控摄像头可行性资料分析,仅供创意灵感参考!其一、手机直接对准猫眼就是将手机直接贴在门上,摄像头对准猫眼(可能镜头会模糊,猫眼需改为广角,该方案还未测试),手机打开摄像头...
  • 今天我看到了这样问题:“监控摄像头如何用作网络直播?”,通常我都会直接在问题下回帖,但是我发现对视频监控直播方面有不了解的人仍在多数,所以干脆将我的想法记录下来,大家以后查阅起来也方便。 随着科技...
  • 最近在SRS群里回答一些视频监控设备上云问题时,SRS开源作者让我写一篇文章介绍下视频监控摄像头的互联网化实践思路,很有幸毕业这几年工作的大体方向都跟这个有关系,本篇就抛砖引玉说下视频监控设备上云的一些实践...
  • 今天教大家2个小技巧,用家中闲置的安卓手机或者电脑摄像头,DIY搭建小型视频监控 先在手机上安装一款远程控制软件向日葵,登录同一帐号; 然后在手机主控端【设备】列表下,找到需要被控的另一台手机,然后选择...
  • 监控摄像头RTSP低延时无插件直播解决方案第一章 应用简介第二章 方案的实现方式2.1 方案的技术架构2.2 功能模块构成第三章 平台的安装和部署3.1 视频转码工作站的搭建3.2 流媒体服务器搭建3.3 视频节目的WEB发布3.4 ...
  • 用OpenCV实现桌面的摄像头程序很简单,把这部分代码集成到一个简单的HTTP server上就可以实现浏览器远程监控。 OpenCV安装 我这里使用了opencv4nodejs: npm i opencv4nodejs 安装的时间会有点长,需要先下载OpenCV...
  • 现如今智能手机更新换代太频繁,换下来的旧手机卖二手不值钱,丢弃又觉得可惜,而且产生电子垃圾污染环境。怎么办?...那就赶紧下载“警猫眼”软件,把闲置旧手机变成专业网络摄像头,即经济又环保!!!
  • 将虚拟机连接电脑摄像头 在VMware Workstation Pro上点击:“虚拟机”->“可移动设备”下确认是否存在Camera设备,如果Vmware不支持当前摄像头,在如下界面下将无法找到Camera设备;如果支持,则在最后一项点击连接...
  • 手机利用 第二弹 ——网络摄像头

    千次阅读 2015-09-11 23:56:39
    手机利用 第二弹 ——网络摄像头 出门在外,想实时查看家里的情况吗?那就把旧手机变成网络摄像头吧~~
  • 网络监控摄像头已经进入了我们生活的方方面面,它以安装使用方便及价格低廉,在现代社会得到了极大的普及。在网络摄像机安装过程中,有很多需要注意的问题,下面简要介绍六个问题及解决方法。 (摄像头) 1、...
  • 用旧弃的Android智能手机变为新手机的WIFI摄像头  生活中由于手机产品的更新换代神速,人们往往将旧的智能手机闲置或丢弃,实在是可惜,我们不妨让旧的Android智能手机充当新手机的WIFI摄像头,插上充电可长期监看捕捉...
  • 电脑自带的摄像头没有手机的清楚怎么办,用此工具将手机的高清摄像功能移到电脑上!
  • Pierre Kim通过Full Disclosure发布的安全公告披露,影响18.5万Wi-Fi监控摄像头的安全漏洞暴露在网上,随时会被黑客和诈骗者利用。 设备主要受到以下漏洞影响: 后门账户 RSA密钥和认证 GoAheadhttp服务器内预授权...
  • 近几年来,无论是食品生产企业还是餐饮单位,食品安全...在企业监控端,包括学校(含托幼园所)食堂、机关和企事业单位食堂、中型以上餐饮企业食堂,进行视频监控设备的施工与集成,前端实现NVR存储,并将NVR接入到中心
  • 无论在大街上,还是小区里,各式各样的摄像头总是出现在我们身边,就连进了卫生间,也不得不提防,说不定在某个隐秘的地方,一双“小眼睛”正悄悄盯着你。日益复杂的公共安全形势和社会事务,让越来越多的监控设备...
  • 利用电脑摄像头解码

    2017-01-13 14:57:47
    提供C#代码文件,封装Aforge,VFW方式调用笔记本摄像头,用户可以设置解码次数,仿照手机扫码界面 提供用到的第三方的dll库,功能已封装好
  • 手机做监控

    2020-08-08 19:44:42
    突然有一个想法,在手机里面安装一个APP,用来做监控也是挺好的,于是整理了一下需要的功能,如图。 在市场上找了一下,也有些类似功能的APP,看评论是需要开会员才能用的,那就自己写一个呗,自己写的也比较放心些...
  • 一开始对旧手机的第一想法是拆了扔掉,一是本人确实有拆解的欲望,另一方面也是怕手机被不法分子获取到以后加以利用。后来在 QQ 视频时有一个念头冒出来,为什么不利用这些闲置的旧手机 DIY 组建成一套零
  • 接触音视频流媒体行业也好几年的时间,我们亲眼见证了视频监控从模拟视频监控、数字视频监控到现在的智能网络视频监控阶段,其中的变化只有身在其中才感触颇深。而在视频监控的应用上,随着公共安全问题的需求...
  • app和硬件交互的几种方式:zigbee,蓝牙,wifi、nfc交互、声波。...手机访问硬件的几种模式:https://blog.csdn.net/zoomdy/article/details/51594977 https://blog.csdn.net/qq_33570093/article/details/81567...
  • 通过无线网络对监控平台进行移动方向、速度的控制,平台上的安卓手机摄像头实时采集视频图像信号并通过无线WiFi网络将视频信号实时传输到手机端观看。具有控制方便,监控灵活,模块化,可拓展性强等优点,可应用于...
  • 查看PC实时摄像头视频,其实就是以大于24次/秒的速度,控制PC摄像头进行拍照,并把每一张拍得的图片发送到android手机端,在手机上展示这些图片,得到实时的视频。 主要解决两个问题一时调用PC摄像头拍摄图片,二是...
  • wifi摄像头

    2013-02-03 23:09:12
    Wifi手机摄像头是一款可以利用WiFi网络连接手机摄像头,并可通过WIFI链接手机浏览器来进行观看(本身有IP),在手机上进行监控录像的Android软件!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,764
精华内容 2,705
关键字:

利用手机做监控摄像头