Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236

Как сделать более надежное и простое соединение arduino с компьютером

24.07.2022, 17:52. Показов 2050. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос такой. Предположим есть некая поделка сделанная на платформе ардуино+ программа на компьютере которая обменивается сообщениями с ардуино. При обычном использовании для того чтобы все это работало человек должен подключить ардуино, установить для него драйвера, затем установить программу на компьютер, в этой программе подключиться к серийному порту к которому подключена ардуина, после этого можно пользоваться.
Мало того что эта процедура длинная и непреодолимая для простого пользователя так еще возможно целое семейство глюков Например:
1) ардуина может конфликтовать с другим устройством потому что случается так что серийный порт занят другим устройством тем не менее дрова ардуины кинули ее на тот же порт.
2) известен глюк когда серийный порт просто занят хотя никакая программа его не использует , для исправления ситуации порт приходется отключать и включать в диспетчере устройств.

Есть ли какой-то другой способ связи программы на windows и ардуины подключенной к USB?
Например связаться с ардуиной не как с серийным портом а как с usb устройством, да ещё и чтобы программа могла узнать что это та самая ардуина именно для нее а не что либо ещё.
Ну тоечть чтобы человек уствновил дрова для ардуины установил программу и мог сразу работать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.07.2022, 17:52
Ответы с готовыми решениями:

Не удается установить надежное соединение с сервером
Хочу запустить на компьютере эмулятор ОС Андроид. Уже попробовал Bluestacks, Nox, Andy... Итог одинаковый - при добавлении аккаунта гугл...

Как установить соединение с другим компьютером?
В C++ есть функция system(), которая выполняет тоже самое, что если открыть консоль и выполнить там одну из консольных команд (например cls...

Связь Arduino с компьютером через с#
Доброго времени суток!! В попытках сделать программу которая будет с компа отправлять сигнал на ардуинку и в ответ получать зажатую...

21
Эксперт .NET
 Аватар для Rius
13026 / 7591 / 1662
Регистрация: 25.05.2015
Сообщений: 23,092
Записей в блоге: 14
27.07.2022, 10:32
Студворк — интернет-сервис помощи студентам
Get COM PORT of USB Serial Device using the VID and PID on Windows
C++
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include "stdafx.h"
#include <initguid.h>
#include <windows.h>
#include <Setupapi.h>
//Buffer length
#define BUFF_LEN 20
void GetComPort(TCHAR *pszComePort, TCHAR * vid, TCHAR * pid)
{
    HDEVINFO DeviceInfoSet;
    DWORD DeviceIndex =0;
    SP_DEVINFO_DATA DeviceInfoData;
    PCWSTR DevEnum = L"USB";
    TCHAR ExpectedDeviceId[80] = {0}; //Store hardware id
    BYTE szBuffer[1024] = {0};
    DEVPROPTYPE ulPropertyType;
    DWORD dwSize = 0;
    DWORD Error = 0;
    //create device hardware id
    wcscpy_s(ExpectedDeviceId,L"vid_");
    wcscat_s(ExpectedDeviceId,vid);
    wcscat_s(ExpectedDeviceId,L"&pid_");
    wcscat_s(ExpectedDeviceId,pid);
    //SetupDiGetClassDevs returns a handle to a device information set
    DeviceInfoSet = SetupDiGetClassDevs(
                        NULL,
                        DevEnum,
                        NULL,
                        DIGCF_ALLCLASSES | DIGCF_PRESENT);
    if (DeviceInfoSet == INVALID_HANDLE_VALUE)
        return;
    //Fills a block of memory with zeros
    ZeroMemory(&DeviceInfoData, sizeof(SP_DEVINFO_DATA));
    DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
    //Receive information about an enumerated device
    while (SetupDiEnumDeviceInfo(
                DeviceInfoSet,
                DeviceIndex,
                &DeviceInfoData))
    {
        DeviceIndex++;
        //Retrieves a specified Plug and Play device property
        if (SetupDiGetDeviceRegistryProperty (DeviceInfoSet, &DeviceInfoData, SPDRP_HARDWAREID,
                                              &ulPropertyType, (BYTE*)szBuffer,
                                              sizeof(szBuffer),   // The size, in bytes
                                              &dwSize))
        {
            HKEY hDeviceRegistryKey;
            //Get the key
            hDeviceRegistryKey = SetupDiOpenDevRegKey(DeviceInfoSet, &DeviceInfoData,DICS_FLAG_GLOBAL, 0,DIREG_DEV, KEY_READ);
            if (hDeviceRegistryKey == INVALID_HANDLE_VALUE)
            {
                Error = GetLastError();
                break; //Not able to open registry
            }
            else
            {
                // Read in the name of the port
                wchar_t pszPortName[BUFF_LEN];
                DWORD dwSize = sizeof(pszPortName);
                DWORD dwType = 0;
                if( (RegQueryValueEx(hDeviceRegistryKey,L"PortName", NULL, &dwType, (LPBYTE) pszPortName, &dwSize) == ERROR_SUCCESS) && (dwType == REG_SZ))
                {
                    // Check if it really is a com port
                    if( _tcsnicmp( pszPortName, _T("COM"), 3) == 0)
                    {
                        int nPortNr = _ttoi( pszPortName + 3 );
                        if( nPortNr != 0 )
                        {
                            _tcscpy_s(pszComePort,BUFF_LEN,pszPortName);
                        }
                    }
                }
                // Close the key now that we are finished with it
                RegCloseKey(hDeviceRegistryKey);
            }
        }
    }
    if (DeviceInfoSet)
    {
        SetupDiDestroyDeviceInfoList(DeviceInfoSet);
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
    //Store com port information
    TCHAR pszPortName[BUFF_LEN] = {0};
    //function to get com id
    GetComPort(pszPortName,L"2341",L"0042");
    //Print available com port
    wprintf (L"\n\n COM Port ID = %s\n",pszPortName);
    return 0;
}
0
33 / 28 / 8
Регистрация: 17.02.2014
Сообщений: 122
27.07.2022, 14:47
Так что конкретно изобретает автор?
В Arduino, в примерах есть Firmata.

"Firmata is a generic protocol for communicating with microcontrollers
from software on a host computer. It is intended to work with
any host computer software package."

Сам фирматой не пользовался. Баловался с Telemetrix. На ПК, на питоне, сам находит на каком порту висит Arduino с заданным arduino_instance_id, но может цепляться и конкретному COM порту, если указать.

Цитата Сообщение от Святогор Посмотреть сообщение
глюк когда серийный порт просто занят хотя никакая программа его не использует
Обычно случается, если программа закончила работу и не закрыла за собой порт (вероятно завершилась аварийно).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.07.2022, 14:47
Помогаю со студенческими работами здесь

Arduino Pro Micro не распознаётся компьютером
Добрый день! Собственно, при подключении посредством кабеля (USB(m) - Micro-USB(m)) платы Arduino Pro Micro к компьютеру ничего не...

Соединение с компьютером
как соединиться с компьютером? В windows я делаю так \\ac20-39\prt20 Как сделать это из builder?

Соединение с удаленным компьютером по TELNET
Доброе время суток! Вопросик появился, не могу справиться с телнетом. Нужно соединиться в режиме командной строки с компом. На компе...

Соединение с удалённым компьютером по Телнет
Помогите и мне, пожалуйста. Я не могу понять, в чём дело. проблема такая: Я имею возможность подключиться к удалённому рабочему столу...

Прямое соединение с другим компьютером
Здравствуйте, интересует вопрос связанный с передачей данных в интернете с одного компьютера на другой используя C#. По сути для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru