如何自动检测Arduino的COM端口? [英] How to auto-detect Arduino COM port?

查看:769
本文介绍了如何自动检测Arduino的COM端口?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用一个Arduino与Firmata库通讯C#应用程序,我想消除一个COM端口配置组件,因为它可以从一台机器换到机...

有没有可能:


  1. 枚举系统中的COM端口的列表? (在我的谷歌搜索我已经看到了一些相当丑陋的Win32 API的code,希望也许有一个更清洁的版本了)

  2. 自动检测的COM端口连接到一个Arduino?


解决方案

这code的点点表现一直非常好这个(返回COM口弦,即COM12如果检测到的Arduino):

 私人字符串AutodetectArduinoPort()
        {
            管理范围connectionScope =新的管理范围();
            SelectQuery serialQuery =新SelectQuery(SELECT * FROM Win32_SerialPort);
            ManagementObjectSearcher搜索=新ManagementObjectSearcher(connectionScope,serialQuery);            尝试
            {
                的foreach(在searcher.Get的ManagementObject项目())
                {
                    desc字符串=项目[说明]的ToString()。
                    。字符串的DeviceID =项目[的DeviceID]的ToString();                    如果(desc.Contains(Arduino的))
                    {
                        返回的DeviceID;
                    }
                }
            }
            赶上(ManagementException E)
            {
                /* 没做什么 */
            }            返回null;
        }

I'm using an Arduino with the Firmata library for communication to a C# application, and I want to eliminate a COM port configuration component since it can change from machine to machine...

Is it possible to:

  1. Enumerate list of COM ports in the system? (In my googling I've seen some fairly ugly Win32 API code, hoping there's maybe a cleaner version now)
  2. Auto-detect which COM port(s) are connected to an Arduino?

解决方案

This little bit of code has performed very well for this (returns the COM port string, i.e. "COM12" if Arduino is detected):

private string AutodetectArduinoPort()
        {
            ManagementScope connectionScope = new ManagementScope();
            SelectQuery serialQuery = new SelectQuery("SELECT * FROM Win32_SerialPort");
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(connectionScope, serialQuery);

            try
            {
                foreach (ManagementObject item in searcher.Get())
                {
                    string desc = item["Description"].ToString();
                    string deviceId = item["DeviceID"].ToString();

                    if (desc.Contains("Arduino"))
                    {
                        return deviceId;
                    }
                }
            }
            catch (ManagementException e)
            {
                /* Do Nothing */
            }

            return null;
        }

这篇关于如何自动检测Arduino的COM端口?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆