Questão:
How does Arduino IDE 'Get Board Info'?
n00dles
2017-06-04 18:46:58 UTC
view on stackexchange narkive permalink

Quero que meu aplicativo C # selecione automaticamente a porta COM correta por meio de uma verificação de igualdade de string em relação a uma solicitação do tipo 'GetInfo' para a placa Arduino.

Eu sei que o IDE do Arduino pode obter informações da placa;

Ferramentas > GetBoardInfo

enter image description here

Mas eu não sei como obter usando um esboço ou se é mesmo possível para esse assunto.

Isso é algo que pode ser lido na placa, ou é uma coisa USB. Se for uma coisa USB, eu teria que obter as informações de GetUSBDevices.DeviceID ou qualquer outro, e obter a porta serial usada pelo dispositivo USB, o que provavelmente funcionaria, mas prefiro tudo por meio de uma serialPort .

Acho que você quer o fornecedor USB e os IDs do dispositivo. É provavelmente assim que os sistemas operacionais escolhem drivers para diferentes dispositivos USB. Mas você pode querer mais se tiver vários USB semelhantes (por exemplo, chips FTDI) conectados ao mesmo sistema operacional / computador. Presumo que seja por isso que você está perguntando sobre as "informações da placa Arduino".
se você mudar a porta de comunicação para uma placa no Windows, ela irá persistir, então você não precisa pesquisar
Estou votando para fechar esta questão como fora do tópico porque é sobre um programa C # em execução no PC.
@LookAlterno _Não sei_, é uma questão que os usuários do Arduino parecem se deparar em algum momento. Não fico incomodado se ele for fechado, mas realmente acho que é uma pergunta útil especificamente para usuários do Arduino, pois tem bons números de visualização aqui. Em sua essência, é uma questão do Arduino, mesmo que a resposta seja mais generalizada. Depende do com e de qualquer precedência.
Dois respostas:
Johnny Mopp
2017-06-05 18:11:12 UTC
view on stackexchange narkive permalink

Olhando o código-fonte do Arduino IDE no github, parece que eles chamam um executável (listComPorts.exe). Então, eu acho que você não pode obter essas informações por meio de serial.

Aqui está um aplicativo C # usando WMI que pode obter porta, vid e pid:

  namespace PortTest { class Program {// Função auxiliar para lidar com regex search static string regex (padrão de string, texto de string) {Regex re = new Regex (padrão); Match m = re.Match (texto); if (m.Sucesso) {return m.Value; } else {return null; }} static void Main (string [] args) {// Use WMI para obter informações ManagementObjectSearcher searcher = new ManagementObjectSearcher ("root \\ CIMV2", "SELECT * FROM Win32_PnPEntity WHERE ClassGuid = \" {4d36e978-e325-11ce-bfc1 -08002be10318} \ ""); // Pesquisar todas as portas seriais foreach (ManagementObject queryObj in searcher.Get ()) {// Analisar os dados if (null! = QueryObj ["Name"]) {Console.WriteLine ("Port =" + regex (@ "( \ (COM \ d + \)) ", queryObj [" Nome "]. ToString ())); } // PNPDeviceID = USB \ VID_1A86&PID_7523 \ 5&1A63D808&0&2 if (null! = QueryObj ["PNPDeviceID"]) {Console.WriteLine + "VID-9 (" fexA-reg-VID ") {Console.WriteLine +" queryObj ["PNPDeviceID"]. ToString ())); Console.WriteLine ("PID =" + regex ("PID _ ([0-9a-fA-F] +)", queryObj ["PNPDeviceID"]. ToString ())); }} Console.WriteLine ("Concluído"); int c = Console.Read (); }}}  

A partir daí, parece que pesquisa um banco de dados online para mais informações. Veja: função getBoardWithMatchingVidPidFromCloud () .

IMHO Desde Arduino IDE 1.6.8 listComPorts não faz mais parte do arduino IDE
@jantje Eles podem estar usando JNI agora, mas acho que o processo subjacente é o mesmo. Platform.java tem 2 funções nativas `resolveDeviceAttachedToNative` e` listSerialsNative`, mas não consigo encontrar a fonte para elas.
editar: Eu não entendi seu comentário. Acho que este é o código https://github.com/arduino/Arduino/blob/master/arduino-core/src/processing/app/Platform.java#L231 que eles estão usando resolveDeviceAttachedToNative
Eu olhei para isso muitas vezes e parece que é este https://github.com/arduino/libserialport, mas, novamente, não
Obrigado Johnny; Na verdade, eu estava pensando em usar o WMI para obter as informações, então é bom vê-lo disposto exatamente como eu preciso :)))) Isso funcionará em qualquer versão do Windows, certo?
@jantje Se for isso que eles estão usando, ele usa chamadas de nível inferior do que o WMI para obter os dados. Já que o manuseio da porta serial do Java não é muito bom, faria sentido usá-lo.
@n00dles Deveria. O WMI existe desde o Win2K.
Faig
2018-01-24 19:49:05 UTC
view on stackexchange narkive permalink

Veja aqui https://todbot.com/blog/2012/03/02/listcomports-windows-command-line-tool-for-usb-to-serial/ O artigo é certo sobre o que você está procurando. Obrigado a @Johnny Mopp, pesquisar a palavra-chave "listComPorts" me ajudou.

Citação desse artigo:

Como funciona

As versões C e VBS utilizam a infraestrutura WMI que existe desde o Windows 2000 para consultar a máquina sobre seus dispositivos PnP configurados. O WMI é uma enorme estrutura de dados de quase todas as informações do Windows. Exceto, ao que parece, boas informações sobre portas COM. Embora haja uma tabela “Win32_SerialPort” no WMI, que contém apenas informações sobre portas seriais de hardware, não adaptadores USB para serial. Em vez disso, essas duas ferramentas procuram na tabela “Win32_PnPEntity”. Embora esta tabela liste os adaptadores USB para serial, ela não contém um mapeamento adequado do USB ou ID do PNP do adaptador para a porta COM. Em vez disso, essas ferramentas fazem uma pesquisa de string no campo “Caption” para a string “(COMn)”, onde “n” é um número. É um hack incrível, mas parece funcionar.



Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
Loading...