我目前正在开发硬件电子应用程序,我希望能够使用USB电缆轻松切换电路。我想做的就是有一个arduino或其他设备,我可以插入任何计算机,运行一个小应用程序并切换到5v的一根电线。这对于许多小型应用来说非常实用。
问题:
- 我想要一个小型设备,我可以将其插入任何计算机并使用小型应用程序切换5v电线来控制电子设备。我该怎么做?
答案 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)