精华内容
下载资源
问答
  • Android中通过USB连接来控制硬件设备

    千次阅读 2020-04-15 17:17:27
    现在好多设备都USB接口,在Android系统的手机或者开发板...USB连接中需要知道对应USB设备的vendorId(设备厂商Id)和productId(设备产品Id),这两个id主要是用于连接和过滤设备。那么下面我们就先来看下拿到设备怎...

    现在好多设备都有USB接口,在Android系统的手机或者开发板上可以实现通过USB来控制设备。一般手机上没有USB接口,需要使用OTG功能的转接线扩展出USB母口;一般Android开发板上带有USB口就可以直接使用了。

    USB连接中需要知道对应USB设备的vendorId(设备厂商Id)和productId(设备产品Id),这两个id主要是用于连接和过滤设备。那么下面我们就先来看下拿到设备怎样找设备的vendorId和productId:

    (1)先将设备通过USB口连接到电脑上;

    (2)我的电脑->管理->设备管理器->找到链接的usb设备->右键属性->详细信息->硬件ID->其中的VID就是厂商id、PID是产品id。如下图所示:

    这个ID是16进制的,需要转换成10进制的在  xml---device_filter.xml文件里配置。

    在res目录下新建文件夹,名字是xml,然后再xml文件夹里新建device_filter.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    <resources xmlns:android="http://schemas.android.com/apk/res/android">
    <!--设备过滤文件-->
    
        <!-- devices vendor-id= 0x1F3A product-id=0x1007-->
        <usb-device vendor-id="7994" product-id="4103"/>
    </resources>

    这里的每一个usb-device对应一个usb设备;如果应用需要对多个设备使用,这里可以添加多个usb-device对应的usb设备的vendor-id和product-id;如果应用可以对同一个厂商的所有设备使用,这里可以只写vendor-id(个人是这么理解的)。

    前面的准备工作做好了就可以进行下面的开发了:

    (1)在AndroidManifest.xml中申明USB权限:

    <!-- 声明使用usb -->
        <uses-feature
            android:name="android.hardware.usb.host"
            android:required="true" />

    (2)在AndroidManifest.xml中对应Activity中添加下面内容:

    <!--获取USB操作的通知-->
        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>
        </intent-filter>
    
    <!-- android设备的信息过滤 -->
        <meta-data
            android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
            android:resource="@xml/usb_xml"/>

    通过设备的vendorId(设备厂商Id)和productId(设备产品Id)找到设备

    /**
         * 找到自定设备
         */
        public UsbDevice getUsbDevice(int vendorId, int productId) {
            //1)创建usbManager
            if (usbManager == null)
                usbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
    
            //2)获取到所有设备 选择出满足的设备
            HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
            Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
            while (deviceIterator.hasNext()) {
                UsbDevice device = deviceIterator.next();
                Log.e(TAG, "vendorID--" + device.getVendorId() + "ProductId--" + device.getProductId());
                if (device.getVendorId() == vendorId && device.getProductId() == productId) {
                    return device; // 获取USBDevice
                }
            }
            statue = USBContent.usb_find_this_fail;
            return null;
        }

    查找所有连接的USB设备,与上面的通过id查找设备  两者根据实际情况来选用。

        /**
         * 查找本机所有的USB设备
         */
        public List<UsbDevice> getUsbDevices() {
            //1)创建usbManager
            if (usbManager == null)
                usbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
    
            //2)获取到所有设备 选择出满足的设备
            HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
            Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
            //创建返回数据
            List<UsbDevice> lists = new ArrayList<>();
            while (deviceIterator.hasNext()) {
                UsbDevice device = deviceIterator.next();
                Log.e(TAG, "vendorID--" + device.getVendorId() + "ProductId--" + device.getProductId());
                lists.add(device);
            }
            return lists;
        }
    

    连接USB设备

    
        /**
         * 根据指定的vendorId和productId连接USB设备
         *
         * @param vendorId  产商id
         * @param productId 产品id
         */
        public int connection(int vendorId, int productId) {
            usbDevice = getUsbDevice(vendorId, productId);
    
            //3)查找设备接口
            if (usbDevice == null) {
                Log.e(TAG, "未找到目标设备,请确保供应商ID" + vendorId + "和产品ID" + productId + "是否配置正确");
                return statue;
            }
            UsbInterface usbInterface = null;
            for (int i = 0; i < usbDevice.getInterfaceCount(); i++) {
                //一个设备上面一般只有一个接口,有两个端点,分别接受和发送数据
                usbInterface = usbDevice.getInterface(i);
                Log.e("USBHelper","usbInterface.getEndpointCount()="+usbInterface.getEndpointCount());
                break;
            }
    
            //4)获取usb设备的通信通道endpoint
            for (int i = 0; i < usbInterface.getEndpointCount(); i++) {
                UsbEndpoint ep = usbInterface.getEndpoint(i);
                switch (ep.getType()) {
                    case UsbConstants.USB_ENDPOINT_XFER_BULK://USB端口传输
                        if (UsbConstants.USB_DIR_OUT == ep.getDirection()) {//输出
                            epBulkOut = ep;
                            Log.e(TAG, "获取发送数据的端点");
                        } else {
                            epBulkIn = ep;
                            Log.e(TAG, "获取接收数据的端点");
                        }
                        break;
                    case UsbConstants.USB_ENDPOINT_XFER_CONTROL://控制端点
                        epControl = ep;
                        Log.e(TAG, "find the ControlEndPoint:" + "index:" + i + "," + epControl.getEndpointNumber());
                        break;
                    case UsbConstants.USB_ENDPOINT_XFER_INT://中断端点
                        if (ep.getDirection() == UsbConstants.USB_DIR_OUT) {//输出
                            epIntEndpointOut = ep;
                            Log.e(TAG, "find the InterruptEndpointOut:" + "index:" + i + "," + epIntEndpointOut.getEndpointNumber());
                        }
                        if (ep.getDirection() == UsbConstants.USB_DIR_IN) {
                            epIntEndpointIn = ep;
                            Log.e(TAG, "find the InterruptEndpointIn:" + "index:" + i + "," + epIntEndpointIn.getEndpointNumber());
                        }
                        break;
                    default:
                        break;
                }
            }
    
            //5)打开conn连接通道
            if (usbManager.hasPermission(usbDevice)) {
                //有权限,那么打开
                conn = usbManager.openDevice(usbDevice);
            } else {//没有权限
                usbManager.requestPermission(usbDevice, intent);// 先去获取权限
                if (usbManager.hasPermission(usbDevice)) { // 权限获取成功
                    conn = usbManager.openDevice(usbDevice);
                } else {
                    Log.e(TAG, "USB授权失败");
                    statue = USBContent.usb_permission_fail;
                }
            }
            if (null == conn) {
                Log.e(TAG, "不能连接到设备");
                statue = USBContent.usb_open_fail;
                return statue;
            }
    
            //打开设备
            if (conn.claimInterface(usbInterface, true)) {
                if (conn != null)// 到此你的android设备已经连上设备
                    Log.e(TAG, "open设备成功!");
                final String mySerial = conn.getSerial();
                Log.e(TAG, "设备serial number:" + mySerial);
                statue = USBContent.usb_ok;
            } else {
                Log.e(TAG, "无法打开连接通道。");
                statue = USBContent.usb_passway_fail;
                conn.close();
            }
            return statue;
        }
    

    发送数据

    
        /**
         * 通过USB发送数据
         */
        public void sendData(byte[] buffer) {
            if (conn == null || epBulkOut == null) return;
            int res = conn.bulkTransfer(epBulkOut, buffer, buffer.length, 1000);
            Log.e(TAG, "res="+res);
    
            if (res  >= 0) {
                //0 或者正数表示成功
                Log.e(TAG, "发送成功");
                statue = USBContent.usb_permission_ok;
            } else {
                Log.e(TAG, "发送失败的");
                statue = USBContent.usb_permission_fail;
            }
        }
    

    使用完关闭USB连接

        /**
         * 关闭USB连接
         */
        public void close() {
            if (conn != null) { //关闭USB设备
                conn.close();
                conn = null;
            }
            if (mContext != null && broadcastReceiver != null) {
                mContext.unregisterReceiver(broadcastReceiver);
            }
        }
    

    到这里USB的连接、通过USB向硬件设备发送数据就完成了,在此做下记录,方便以后参考使用。大家如果看到了此文章,如果发现哪里有问题欢迎指正。(本人也是刚刚接触USB通信,对USB通信了解有限,上面这个是用到了亲自试验的记录一下)

    感谢参考文章:https://blog.csdn.net/u013057253/article/details/82725585

    还有一篇USB协议基本知识文章个人感觉写的也不错,对刚接触USB的会有帮助,附上个链接https://blog.csdn.net/u010142953/article/details/82627591

    展开全文
  • USB2.0和USB3.0彻底梳理

    千次阅读 2019-03-21 15:20:59
    最近公司一款产品要用到USB技术,因此我又一次对USB基础知识进行了梳理,只是这一次把这些梳理全部公之于众,希望对大家帮助,下表是我边查资料边更新,耗费了半天的时间汇总出来的。 USB1.0 ...

            最近公司有一款产品要用到USB技术,因此我又一次对USB基础知识进行了梳理,只是这一次把这些梳理全部公之于众,希望对大家有帮助,下表是我边查资料边更新,耗费了半天的时间汇总出来的。

     

    USB1.0

    (USB2.0低速版本)

    USB1.1

    (USB2.0全速版本)

    USB2.0

    (USB2.0高速版本)

    USB3.0

    (USB3.1 Gen 1)

    (USB3.2 Gen 1)

    USB3.1

    (USB3.1 Gen 2)

    (USB3.2 Gen 2)

    USB3.2

    (USB3.2 Gen 3)

    发布时间

    1995年

    1998年

    2000年

    2008年

    2013年

    2018年

    信号定义

    4条信号线:

    电源、地线、2条数据线(一对差分信号线)

    4条信号线:

    电源、地线、2条数据线(一对差分信号线)

    4条信号线:

    电源、地线、2条数据线(一对差分信号线)

    4条原有线(电源、地线、2条数据线)用于兼容老版本的USB;4条新增的线(一对差分输入线和一对差分输出线)用于提高速率

    4条原有线(电源、地线、2条数据线)用于兼容老版本的USB;4条新增的线(一对差分输入线和一对差分输出线)用于提高速率

    --

    传输速率

    1.5Mbps,即0.1875MB/s

    12Mbps,即1.5MB/s

    480Mbps,即60MB/s

    5GMbs

    10GMbs

    20GMbs

    /全双工

    半双工

    半双工

    半双工

    全双工

    全双工

    全双工

    采用该接口的设备

    鼠标;键盘

    鼠标;键盘;打印机

    打印机;

    大容量存储器

    大容量存储器

    大容量存储器;影音设备;

     

    供电

    5V/100mA

    5V/500mA

    5V/100mA

    5V/500mA

    5V/0.5A

    5V/0.9A

    20V/5A,即100w

     

    编码方式

    8bit/8bit

    8bit/8bit

    8bit/8bit

    8bit/10bit

    128bit/132bit

     

    采用的接口类型

     

     

     

     

     

     

    【几点说明】

    1、USB-IF公布了最新的USB命名规范,原来的USB 3.0和USB 3.1将会不再被命名,所有的USB标准都将被叫做USB 3.2,当然考虑到兼容性,USB 3.0至USB 3.2分别被叫做USB 3.2 Gen 1、USB 3.2 Gen 2、USB 3.2 Gen 2x2。至于为什么USB 3.2被叫做USB 3.2 Gen 2x2,原因是它使用了上下所有的数据针脚,让数据速度能够加倍。

    2、USB 3.2仍然采用SuperSpeed USB层数据速率和编码技术,这点和USB 3.1并没有区别;不过USB 3.2标准却对集线器规范进行更新,支持主机设备和外设在单通道和双通道之间无缝切换。

    3、USB 3.2支持多通道操作,使用USB 3.2主机连接USB 3.2存储设备时,最高可以实现2GB/s的数据传输速率。不过就目前情况来看,目前只有使用USB-C线缆(通过USB SuperSpeed 10Gbps USB 3.1 认证)时才支持该极限速度。由此看来USB 3.2更像是把两条独立的USB 3.1通道合并,从而对单向传输速率进行了翻倍,原理类似于Thunderbolt 1向Thunderbolt 2进化的过程;至于频宽和数据传输效率的改进则暂时没有提到。

     

    【心得感悟】

    USB1.1没有搞死USB1.0,USB2.0没有搞死USB1.1,USB3.0没有搞死USB2.0,USB3.1也没有搞死USB3.0,如今USB3.2也出来了,它们都活的好好的,只不过它们都活在各自的土地上,它们是一个家族,祖孙六代同堂,统治着各种各样的电子产品。实际上,虽然PC端的USB HOST已经逐步更新到USB3.1,但是基于USB1.0和USB1.1的设备(比如键盘、鼠标和游戏手柄)都还能活很久,因为孕育它们的土壤依然存在。

    谈到土壤,我不得不简单回顾一下USB的历史,USB因什么而生。雷军说,小米为发烧而生,那么USB为什么而生呢?

    答案是:USB是为当下而生。

    为什么USB协议会不断更新,不断升级,为什么不能一步到位呢?因为时代背景限制了USB协议的能达到的高度。它必须在时代发展的大潮下推动着前进。

    一方面,早期的接口不具备即插即用的功能,要使用某个接口,就必须通过系统重启的方式对它们进行初始化,这种局面毫无疑问急需打破;另一方面,计算机的发展推动了周边设备的发展,比如打印机、扫描仪、传真机等,而这些设备早期与电脑通信是通过其他接口进行的,这些接口必须在电脑启动之前就连接好,否则无法使用。况且很多厂商都定义自己的接口,导致接口类型五花八门,性能参差不齐,这为电子设备的普及带来了巨大的障碍。

    基于这方面的原因,一个对电子领域影响深远的组织就成立了,这就是USB-IF,就是它发明了USB,也就是USB的出现,电子设备的通信接口才被统一了,这是一个伟大的壮举,英雄的壮举,因为它为电子设备的飞速发展清扫了一个大的障碍。

     

    【写在最后】

    还没有到最后,我会在研发空余时间持续更新这篇文档的内容,请大家耐心等待。

    展开全文
  • C#通过USB连接斑马打印机实现ZPL打印

    热门讨论 2014-04-09 17:19:19
    C#通过USB连接斑马打印机 实现ZPL打印,可打印中文 文件包括ZPL打印类和fnthex32.DLL 可直接应用于项目
  • PC与Android设备通过USB建立通信连接

    热门讨论 2016-04-21 14:28:29
    PC与Android设备通过USB建立通信连接,通过socket收发数据。
  • Android硬件控制之USB连接

    万次阅读 2018-09-16 16:33:43
    在Android实现USB连接有什么作用?USB连接有什么限制?USB连接实现的难度? 1.Android实现USB连接有什么作用? 在Android上实现USB连接的用处在于可以在搭载Android系统的手机或者开发板上控制设备。例如:Android...

    简介

    在Android实现USB连接有什么作用?USB连接有什么限制?USB连接实现的难度?

    1.Android实现USB连接有什么作用?

    在Android上实现USB连接的用处在于可以在搭载Android系统的手机或者开发板上控制设备。例如:Android控制USB摄像头、Android控制USB打印机、Android控制身份证读卡器......理论上只要支持USB连接的设备都可以用Android实现控制。当然这里的控制分为两种情况:

    • USB免驱设备。(驱动部分已在Android底层或Linux层实现)

    • USB指定驱动设备。(硬件厂家驱动、通用通讯协议 

    2.USB连接有什么限制?

    对于USB设备连接来说就像客户端连接服务器,在网络连接中需要知道服务器的ip地址才能找到对应的服务器,同理在USB连接中也是需要知道对应USB设备的vendorId(设备厂商Id)和productId(设备产品Id)。在我开发过的USB的设备中发现这两个Id在同一厂商生产的相同系列的不同产品中,他们可能会重复。和网络连接不同的是,如果不知道这两个Id,也是可以连接设备,只是不知道连接的哪一个,这里的id主要是用于连接和过滤设备用的

    3.USB连接实现的难度?

    其实USB设备的连接比较简单,比较现在USB设备已经相当普及、不论是通过Android系统还是通过Linux系统你都可以很好的实现。可能对于平时没有在Android接触过USB通信的感觉难而已,等你看完本文后你会觉得真的很简单。而且这个是不需要root权限的,看完本文后你就可以用你Android手机实现控制一个外接摄像头,想想是不是很激动。

    实现步骤

    1.物理连接

    如果你是在Android手机这样不支持USB连接的设备上实现,可以通过在type-c上用OTG扩展出USB母口(淘宝5元包邮),如果你实在Android开发板上实现USB连接,直连就可以,一般开发板都支持USB口。如果你想控制更多的USB设备可以通过USB扩展器实现。

    2.权限配置

    首先在AndroidManifest.xml中申明USB权限

     <!-- 声明使用usb -->
        <uses-feature
            android:name="android.hardware.usb.host"
            android:required="true" />

    然后在你操作的Activity或service中添加meta-data

     <!-- android设备的信息过滤 -->
                <meta-data
                    android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
                    android:resource="@xml/usb_xml" />

    这里的usb_xml文件为res文件夹下的xml文件夹中的设备过滤文件

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <usb-device vendor-id="10473" product-id="649"/>
        <usb-device vendor-id="1336" product-id="0" />
        <usb-device vendor-id="1061" product-id="33113" />
        <usb-device vendor-id="17224" product-id="33113" />
    </resources>

    这里的每一个usb-device对应一个usb设备。

    3.找到指定USB设备

    连接USB设备前,首先要通过vendorId和productId过滤出我们需要的设备操作对象UsbDevice

    /**
         * 找到自定设备
         */
        public void findUSB(int VENDORID, int PRODUCTID) {
            //1)创建usbManager
            usbManager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
            //2)获取到所有设备 选择出满足的设备
            HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
            Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
            while (deviceIterator.hasNext()) {
                UsbDevice device = deviceIterator.next();
                Log.i(TAG, "vendorID--" + device.getVendorId() + "ProductId--" + device.getProductId());
                if (device.getVendorId() == VENDORID && device.getProductId() == PRODUCTID) {
                    usbDevice = device; // 获取USBDevice
                }
            }
        }

    4.查找设备接口

    根据USBDevice找到指定的设备接口UsbInterface,一个设备上面一般只有一个接口,有两个端点,分别接受和发送数据
     

    UsbInterface usbInterface = null;
            for (int i = 0; i < usbDevice.getInterfaceCount(); i++) {
                //一个设备上面一般只有一个接口,有两个端点,分别接受和发送数据
                usbInterface = usbDevice.getInterface(i);
                break;
            }

    5.获取usb设备的通信通道

    USB通信通道即和USB设备间接收和发送的通过,通过获取通道中对应的断点发送或接收数据实现控制。
     

     for (int i = 0; i < usbInterface.getEndpointCount(); i++) {
                UsbEndpoint ep = usbInterface.getEndpoint(i);
                switch (ep.getType()) {
                    case UsbConstants.USB_ENDPOINT_XFER_BULK://USB端口传输
                        if (UsbConstants.USB_DIR_OUT == ep.getDirection()) {//输出
                            epBulkOut = ep;
                            Log.e(TAG, "获取发送数据的端点");
                        } else {
                            epBulkIn = ep;
                            Log.e(TAG, "获取接受数据的端点");
                        }
                        break;
                    case UsbConstants.USB_ENDPOINT_XFER_CONTROL://控制
                        epControl = ep;
                        Log.e(TAG, "find the ControlEndPoint:" + "index:" + i + "," + epControl.getEndpointNumber());
                        break;
                    case UsbConstants.USB_ENDPOINT_XFER_INT://中断
                        if (ep.getDirection() == UsbConstants.USB_DIR_OUT) {//输出
                            epIntEndpointOut = ep;
                            Log.e(TAG, "find the InterruptEndpointOut:" + "index:" + i + "," + epIntEndpointOut.getEndpointNumber());
                        }
                        if (ep.getDirection() == UsbConstants.USB_DIR_IN) {
                            epIntEndpointIn = ep;
                            Log.e(TAG, "find the InterruptEndpointIn:" + "index:" + i + "," + epIntEndpointIn.getEndpointNumber());
                        }
                        break;
                    default:
                        break;
                }
            }

    6.打开USB设备连接

    在打开USB设备的时候是需要申请USB连接权限的,而且申请权限的次数是根据连接的设备来确定。也就是说需要给每个usb设备单独授权(这个也好理解,只是很多时候系统USB权限弹窗都一样,多个设备时体验不好,如果要修改我认为只能从系统层面解决)。
     

     if (usbManager.hasPermission(usbDevice)) {
                //有权限,那么打开
                conn = usbManager.openDevice(usbDevice);
            } else {
                usbManager.requestPermission(usbDevice, intent);
                if (usbManager.hasPermission(usbDevice)) { //权限获取成功
                    conn = usbManager.openDevice(usbDevice);
                } else {
                    Log.e(TAG, "没有权限");
                }
            }

    7.请求接口

    到此整个USB连接就已经完成了。整个连接就像Socket似的,你如果不主动释放,正常情况下他不会断开。

     if (conn.claimInterface(usbInterface, true)) {
                if (conn != null)// 到此你的android设备已经连上zigbee设备
                    Log.i(TAG, "open设备成功!");
                final String mySerial = conn.getSerial();
                Log.i(TAG, "设备serial number:" + mySerial);
            } else {
                Log.i(TAG, "无法打开连接通道。");
                conn.close();
            }

    8.发送数据

    当USB连接完成后就可以进行数据发送了,这里发送的通常都是字节数据,设备根据他自己的方式解析数据做出对应的响应。

    public void sendData(byte[] buffer) {
            if (conn == null || epBulkOut == null) return;
            if (conn.bulkTransfer(epBulkOut, buffer, buffer.length, 0) >= 0) {
                //0 或者正数表示成功
                Log.i(TAG, "发送成功");
            } else {
                Log.i(TAG, "发送失败的");
            }
        }

    9.关闭USB连接

    当你不用的时候一定要记得关闭连接释放资源

    conn.close();

    结语

    对于USB连接其实就通过简单的几步就能实现USB设备与Android系统的通信,是不是很简单。我把Android系统USB通讯、Android系统串口通信、Android系统Pos打印、Android系统gpio控制、Android上USB连接Camera、Android系统上实现双屏异显等示例代码都放到github上(CSDN现在下载需要积分,暂时就不上传了),代码现在还没有整理,如有什么不合理的地方,希望大佬们指正 QQ 962851730。后续将陆续推出以上系列播客。

     

    展开全文
  • 关于笔记本用usb转串口连接出现乱码的解决
  • STM32单片机实现连接USB摄像头

    万次阅读 热门讨论 2019-11-09 18:25:28
    STM32单片机实现连接USB摄像头 如题,本人已经实现STM32连接基于Cypress CY7C68013A的摄像头电路板的方案,具体实现原理如下: 摄像头侧CY7C68013A硬件电路板连接被测试应用的摄像头sensor模块,电路板为摄像头提供...

    STM32单片机实现连接USB摄像头

    如题,本人已经实现STM32连接基于Cypress CY7C68013A的摄像头电路板的方案,具体实现原理如下:
    摄像头侧CY7C68013A硬件电路板连接被测试应用的摄像头sensor模块,电路板为摄像头提供3.3v的电源,通过IIC总线为sensor配置初始化参数,通过USB 2.0高速接口将图像数据传输给STM32单片机,迚行显示。USB摄像头支持多种图像数据流格式RAW、YUV、RGB565等等。支持多种不同的sensor,测试过的sensor有30w像素分辨率的ov7725,130w像素的mt9m001,500w像素带自动对焦的ov5640。这里的IIC sensor参数是通过USB先将配置参数传递到CY7C68013A,再由CY7C68013A通过IIC总线最终将数据配置到sensor端。这样做的好处是可以通过CY7C68013A在STM32单片机端灵活配置各种各样的sensor。硬件连接配置如图所示:

    在这里插入图片描述

    本方案技术难点在于STM32上的USB摄像头驱动的编写,STM32官方给的代码不能驱动这里的USB2.0摄像头。这里的解决方法是重新编写移植了DWC-OTG驱动,以适配USB摄像头传输数据对于USB通信速度和带宽的超高要求。USB2.0两侧数据通信都采用USB BULK块传输的方式,基本上能做到图像数据实时传输的要求,能够满足分辨率VGA(640x480)在10桢/S, QVGA(320x240)在30桢/S,而分辨率小于QVGA的时候60桢/S的要求。

    支持的摄像头Sensor列表:
    在这里插入图片描述
    调试连接成功的图片,开发板是stm32f746-discovery
    在这里插入图片描述
    这种方案实现的优势是:电路板可以做得很小,功耗和成本都可以做得很低,能把设备做得很小,另外可以把摄像头单独集成到别的地方,比如集成到类似智能眼镜的设备当中。适合物联网平台或者监控设备当中使用,能使用锂电池供电工作。
    有需要了解更多的朋友,欢迎博客上留言或者私信联系我。

    展开全文
  • Android Studio 用USB连接到真机调试方法1、在Android Studio中下载必要文件1-1 安装Google USB driver1-2 安装手机中对应Android版本的SDK Platforms2、查看手机端设置2-1 查看手机Android版本号2-2 打开开发者模式...
  • adb 通过USB连接手机

    千次阅读 2020-04-24 16:39:07
    点进去,把开发者选项和USB调试勾选上 会弹出“是否允许USB调试”,点击确定 会再弹出“是否允许USB调试”,点击确定 插曲1:你的开发者选项可能搜索不出来 解决办法: ①设置里搜索关于手机 ②找到版本号,多次...
  • java使用usb4java连接USB 实现数据通讯

    千次阅读 2020-06-22 17:59:06
    java使用usb4java连接USB 实现数据通讯 最近公司接到一个项目,需要连接usb获取/写入数据到数显盒。 查阅了很多资料,发现可以使用usb4java 来实现,然后我就来填坑了! po代码不易,请各位小伙伴多多关注! 先上...
  • 电脑通过USB连接树莓派ZeroW

    千次阅读 2018-10-05 12:13:55
    电脑连接树莓派ZeroW ...   0. 概述 本位介绍两种电脑连接树莓派PiZero W的方法: l 电脑通过USB以太网连接树莓派ZeroW ...l 电脑通过WiFi连接树莓派ZeroW ...Pi Zero W两个micro USB,标PWR IN的是电...
  • 代码实现断开Android手机USB连接

    千次阅读 2015-07-23 17:21:44
    代码 实现了一个小功能:断开android手机USB连接
  • USB数据线的调试方式,大家应该比较常用,今天就专门说说怎么在不使用USB数据线的方式下进行安卓的开发调试。
  • VMWare虚拟机USB连接问题

    千次阅读 2019-06-25 18:05:48
    常用 VMware 虚拟机的有事应该遇到这种情况,就是装完 VMware ,启动时 VMware 下面会个黄框中USB disabled…”之类的提示。当在虚拟机里装完系统后,一切皆正常。除了插入 USB 设备不设别外!到本地电脑的...
  • 安卓设备连接USB打印机

    千次阅读 热门讨论 2019-03-05 18:52:59
    // 在open前判断是否有连接权限;对于连接权限可以静态分配,也可以动态分配权�?? UsbDeviceConnection conn = null; if (usbManager.hasPermission(myUsbDevice)) { // 权限,那么打开 conn = usbManager....
  • 安卓手机通过USB连接到带USB口的定制路由器,在手机上进行设置后可实现有线上网。 这个与普通的”USB网络共享”使用网络的方法是相反的,普通的是电脑共享使用手机的移动网络上网;这个是手机使用路由器接入的...
  • 今天百度了一下如何在在Android studio如何在真机上运行,...2、打开手机的USB调试,选择 传输文件就行 3、在电脑端的应用宝,连接手机,我使用的是扫码连接 4、让后再Android studio 上选择手机运行即可 我的手...
  • 在做自动化测试时,遇到两种情况需要判断usb是否已连接上(注,本文仅针对adb命令来control手机)一种是在开测时(前提是同时要测试多台), 希望等待所有设备usb全部识别后同时进行测试。对于这一种,当然是可以另...
  • 安卓 ADT+Eclipse+USB连接手机进行调试程序 一、简述  记--安卓 ADT+Eclipse+USB连接手机进行调试程序。  ADT版本   二、步骤 1、手机开启USB调试模式  红米1S手机开启方式:"设置"--》关于...
  • java使用usb4java读取usb连接的设备

    万次阅读 热门讨论 2018-07-07 14:28:06
    1、最近在做一个java与usb通信的项目,在我原来的理解中,java是不能读取电脑底层设备信息的,所有就让人C写一个中间程序来传递数据。但是最近在查询资料的时候,看到...2、首先需要查看usb连接的idVendor和idPr...
  • android手机通过usb线与PC连接通信代码
  • 成本便宜,¥1.x,且 SOP8 / MSOP10的小封装型号。 特性 全速 USB 设备接口,兼容 USB V2.0。 仿真标准串口,用于升级原串口外围设备,或者通过 USB 增加额外串口。 计算机端 Windows 操作系统下的串口应用...
  • VMware 虚拟机中的 Ubuntu 16.04 设置 USB 连接 0. VMware USB Arbitration Service 计算机 -> 管理 -> 服务和应用程序 -> 服务 -> VMware USB Arbitration Service VMware -> 启动 / 自动启动 ...
  • 一个USB HUB连接多个摄像头同时工作问题处理 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 目录 一个USB HUB连接多个摄像头同时工作问题处理 1.起源 2.问题 3.解决思路 ...
  • 但是,手机与电脑是通过ADB模式连接,想要将手机连接到电脑,我们需要先激活开发者选项,然后打开手机上的USB调试。然而,不同版本的安卓手机,打开USB调试模式也有所不同,但是大致步骤是一样的,以下是如何打开...
  • android usb连接打印机,打印各种格式

    千次阅读 2017-12-25 10:44:41
    // 发微薄 bmp.compress(Bitmap.CompressFormat. JPEG , 75 , bos); } else if (quality == 5 ) { // jpg bmp.compress(Bitmap.CompressFormat. JPEG , 100 , bos); } try { bos.flush(); bos....
  • 获取STM32 USB连接状态

    千次阅读 2019-08-13 14:03:48
    STM32CubeMX生成的STM32F042的USB工程,通讯连接都没问题。但是想要获取USB连接状态,发现USBD_HandleTypeDef结构体里面个dev_connection_status变量,以为这个变量就是指示USB状态的。 但是实际调试中发现...
  • 使用USB连接HoloLens,首先输入网址此时可能会出现的问题是,浏览器无法连接到设备,这通常是由于缺少win10 SDK,影响HoloLens及Windows 浏览器的连接;解决方法如下:手动安装win10 SDK到VS2017的安装目录下,使用...
  • Android USB默认连接模式为MTP

    万次阅读 热门讨论 2017-06-13 21:06:16
    USB的默认连接方式 MTP Android 7.0
  • Android 检测USB连接状态

    千次阅读 2017-02-27 11:21:59
    Android 4.4上发现采用原来的什么Intent.ACTION_UMS_CONNECTED完全不能够检测到USB连接状态, 翻看了一下源码,找到一个方法: [java] view plain copy private final static ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 162,970
精华内容 65,188
关键字:

usb连接有什么用