zoukankan      html  css  js  c++  java
  • 【STM32 .NET MF开发板学习29】摄像头蓝牙图像远程获取

          目前生产串口摄像头的厂家有很多,每家的通信协议也不同,所以针对不同的摄像头都必须编写相对应的摄像头驱动程序。

    最早做医疗项目的时候,开发过一款串口摄像头的驱动,不过是配合TinyIOs而使用,并没有把其作为一个独立的库封装起来。最近手头上又有一款摄像头,拍摄质量还不错,所以封装成一个标准.NET Micro Framework库,供应用开发的用户直接调用。

    目前M3的开发板,虽然前段时间可以支持WPF了,但是SRAM毕竟还是有限,所以从串口摄像头直接获取的jpg图像,并不能在LCD屏上显示出来(在模拟器上没有这个问题,可以直接呈现),所以我借助蓝牙接口,把另一个串口获取的图像数据发送到一台带蓝牙的PC上,PC上的程序否则实现数据接收,并把图像呈现出来。

    其核心代码如下(部分代码被删减):

     public static void Main()

     {                       

            Debug.Print("Camera Test ...");

            PCT01 pct01 = new PCT01("COM1", PCT01.Baudrate.Baudrate_38400);          

            if (!pct01.Open()) 

            {

                 Debug.Print("Open failed");

                 pct01.Close();

                 return;

            }

            //复位

            if (!pct01.Reset())

            {

                Debug.Print("Reset failed");

                pct01.Close();

                return;

            }

            //设置图片大小

            if (!pct01.SetPhotoSize(PCT01.PhotoSize.Photo_320_240))

            {

                Debug.Print("SetPhotoSize failed");

                pct01.Close();

                return;

            }

            //设置压缩率

            if (!pct01.SetCompressRatio(0x50))  //0x36

            {

                Debug.Print("SetCompressRatio failed");

                pct01.Close();

                return;

            }

            byte[] picData = null;

            while (true)

            {

                picSize = pct01.GetPhoho(out picData);

                if (picSize > 0)

                {

                     Bitmap bmp = new Bitmap(picData, Bitmap.BitmapImageType.Jpeg);

                     bmp.Flush();                           

                }

            }

      }

    如果在模拟器上运行此段程序,需要把摄像头连接到电脑的串口上,运行后的结果如下:

     

    如果摄像头连接到开发板上,需要做一个连接头,因为开发板上的串口是母头,而摄像头的接口一般也是母头,所以需要自行焊接两个公头串口,记住2、3要交叉相连,5直连。

    至于蓝牙相关内容,请查看我以前写的博客文章《蓝牙遥控智能小车(PC模式)》。

    相关设备连接后的示意图如下:

     

    我们打开PC的应用数据读取程序(源码下载地址:http://www.sky-walker.com.cn/MFRelease/Sample/YFPCCameraTest.rar),示例界面如下:

     

    YFSoft.Hardwave.Camera.PTC01库接口说明如下:

    1【属性】

    1.1   Overtime

    属性:读写 

    说明:超时时间,主要指发送摄像头指令时,设备的响应时间。该时间单位为毫秒,实际使用时超时等待时间有可能会远大于该值。

    2【方法】

    2.1 SetDebugMode

    声明:void SetDebugMode(bool on)

    参数:on –  True 开启Debug模式 False 关闭Debug模式

    返回: 

    说明:设置Debug模式,开启后,通信过程中的信息通过Debug.Print函数输出。

    2.2 Open

    声明:int Open()

    参数:

    返回:操作返回值

    True – 成功

    False – 串口打开失败

    说明:打开串口。

    2.3 Close

    声明:void  Close()

    参数:

    返回:

    说明:关闭串口。

    2.4 Reset

    声明:bool Reset ()

    参数:

    返回:操作返回值

    True – 成功

    False – 复位失败

    说明:摄像头复位,复位后一半需要延时500ms,在本函数中已经添加了这个延时。

    2.5 SetCompressRatio

    声明:bool SetCompressRatio (byte value)

    参数:value  – 压缩率 00~0xFF,默认值ox36,

    返回:True 设置成功,False 设置失败

    说明: 设置jpg图片的压缩率。

    2.6 SetPhotoSize

    声明:bool SetPhotoSize (PhotoSize size)

    参数:size–图片尺寸

          Photo_320_240 – 320*240

          Photo_640_480  - 640*480

    返回:True 成功 false 失败

    说明:设置图片的画幅尺寸。

    2.7 SetBaudrate

    声明:bool SetBaudrate (Baudrate baudRate)

    参数:baudRate 波特率,支持如下参数

            Baudrate_9600=0,

            Baudrate_19200,

            Baudrate_38400,(默认值)

            Baudrate_57600,

            Baudrate_115200,  

    返回:True 成功 False 失败

    说明:设置摄像头通信波特率。

    2.8 SetPowerMode

    声明:bool SetPowerMode ()

    参数:

    返回:True 成功,False 失败

    说明:设置摄像头进入省电模式。

    2.9 GetPhoho

    声明:int GetPhoho(out byte[] bytData)

    参数:bytData – 图片数据

    返回: >0  图片数据长度

           -1  开始拍照命令执行失败

           - 2 读取图片数据失败

           -3  读取图片长度失败

           -4  停止拍照命令执行失败

    说明:获取摄像头图片数据(jpg)。

    YFSoft.Hardwave.Camera.PTC01库:

    http://www.sky-walker.com.cn/MFRelease/library/YFSoft.Hardware.Camera.PTC01.rar

    MF论坛:http://space.cnblogs.com/group/MFSoft/

    MF开发板:http://item.taobao.com/item.htm?id=7117999726

    QQ群:127465602(将满)  146524112

  • 相关阅读:
    【网络编程3】网络编程基础-arp请求(局域网主机扫描)
    【CTF MISC】隐写术wireshark找出图片-“强网杯”网络安全挑战赛writeup
    【网络编程2】网络编程基础-发送ICMP包(Ping程序)
    【网络编程1】网络编程基础-TCP、UDP编程
    【漏洞分析】两个例子-数组溢出修改返回函数与strcpy覆盖周边内存地址
    【Python】zip文件密码破解
    【bzoj1923】[Sdoi2010]外星千足虫 高斯消元
    spring cloud zuul在使用中遇到的坑 : 转发时自动去掉prefix
    Eclipse MAT:浅堆 vs 保留堆
    Java SDK夯住(Hang)问题排查
  • 原文地址:https://www.cnblogs.com/yefanqiu/p/1997216.html
Copyright © 2011-2022 走看看