即插即用USB开关

时间:2013-07-31 20:51:58

标签: usb arduino toggle electronics

我目前正在开发硬件电子应用程序,我希望能够使用USB电缆轻松切换电路。我想做的就是有一个arduino或其他设备,我可以插入任何计算机,运行一个小应用程序并切换到5v的一根电线。这对于许多小型应用来说非常实用。

问题:

- 我想要一个小型设备,我可以将其插入任何计算机并使用小型应用程序切换5v电线来控制电子设备。我该怎么做?

2 个答案:

答案 0 :(得分:0)

如果你的MCU没有USB前端,你可以使用汇编程序,例如。 http://www.cesko.host.sk/IgorPlugUSB/IgorPlug-USB%20%28AVR%29_eng.htm这允许实现简单的USB1.1低速设备。如果您需要高速,您的MCU应该内置USB引擎,然后您可能会从MCU的制造商处找到适当的USB应用说明。

让我们注意到,您需要或不使用自己的设备类来编写自己的驱动程序。您可以使用HID,串行或CDCACM类。最后,您可以使用FTDI的桥接芯片http://www.ftdichip.com/

答案 1 :(得分:0)

我在这里有一些代码。我使用一个简单的晶体管IRFU5305,其中我将一根引线连接到arduino的引脚,另一根连接usb的电源线。

根据您使用的是n或p通道晶体管,您可能需要调整代码。

ArduinoCode:

String inputString = "";         // a string to hold incoming data
boolean stringComplete = false;  // whether the string is complete

void setup() 
{                
  pinMode(8, OUTPUT);
  Serial.begin(9600);
  // reserve 20 bytes for the inputString (input is max 20 chars long)
  inputString.reserve(20);
  Serial.print("waitingforinput");
  digitalWrite(8,true);
}

void loop() 
{
  if (stringComplete) 
  {
    Serial.println(inputString);
    inputString.trim();
    if(inputString=="F8")    
    {
      digitalWrite(8,true);
    }
    else if(inputString=="T8")
    {
      digitalWrite(8,false);
    }
    inputString = "";
    stringComplete = false;
  }
  delay(500);
}

void serialEvent() 
{
  while (Serial.available()) 
  {
    Serial.println("inputreceived");
    char inChar = (char)Serial.read();
    inputString += inChar;
    // if the incoming character is a newline, set a flag
    // so the main loop can do something about it:
    if (inChar == '\n') 
    {
      stringComplete = true;
      Serial.println(inputString);
    }    
  }
}

Python代码:

import serial
import time
import os

ARDUINOPORT = os.getenv('ARDUINOPORT', None)

def send_string_to_arduino(cmd):
    """sends a certain command string to the arduino over Serial"""
    print ARDUINOPORT
    ser = serial.Serial()
    ser.port = ARDUINOPORT
    ser.baudrate = 9600
    ser.parity = serial.PARITY_NONE
    ser.bytesize = serial.EIGHTBITS
    ser.stopbits = serial.STOPBITS_ONE
    ser.timeout = 10
    ser.xonxoff = False
    ser.rtscts = False
    ser.dsrdtr = False
    ser.open()
    time.sleep(2)
    ser.readline()
    ser.write(cmd+"\n")
    ser.close()

def switch_pin_on(pinnumber):
    """switches the pin with pinnumber(int) of the connected Arduino on"""
    cmd = "T"+str(pinnumber)
    print cmd
    send_string_to_arduino(cmd)
    return

def switch_pin_off(pinnumber):
    """switches the pin with pinnumber(int) of the connected Arduino off"""
    cmd = "F"+str(pinnumber)
    print cmd
    send_string_to_arduino(cmd)
    return

def set_arduino_port(comport):
    """sets to which comport the arduino is connected to, comport should be a string ("COM2")"""
    global ARDUINOPORT
    ARDUINOPORT = comport
    return

if __name__ == '__main__':
    set_arduino_port("COM17")
    switch_pin_off(8)
    switch_pin_on(8)