Raspberry pi0w的USB口只能用数据线传输串口数据吗?
Can I transmit serial data only using a data cable via Raspberry pi 0 w's USB port?
我最近一直在尝试寻找一种方法,是否可以使用 ttyGS0 仅通过 Rpi w 0 的微型 USB 端口发送串行数据(大文件,如图像数据)。但是当我在网上搜索时,我只找到了通过串行和其他东西设置无头的方法,这不是我想要的。但是我确实按照教程看了一半
我去了'/boot/config.txt',在文件末尾留下一行后设置'dtoverlay=dwc2'
我去了“/boot/cmdline.txt”并在 'rootwait' 之后放了 'modules-load=dwc2,g_serial' 留下了 space
我想我可以在 Rpi 上的串行程序中使用 /dev/ttyGS0 并发送正在发送数据的数据,但是在我的 PC 上,当我尝试访问位于 comport 12 上的 Rpi 时,它说找不到端口,无法打开它。但它在设备管理器中显示为 'PI USB to Serial(COM12)'
然后我想知道是否可以通过这种方式访问 Rpi 的 com 端口。
如果是这样,我想知道是否有任何其他方法可以仅使用 USB 线访问 Rpi 的 USB 端口
备注
- 我不想使用 Rpi 的 USB 作为记录方式,即。 'headless setup'。我只想像Arduino一样接收串行数据。
- 我不想使用 GPIO 引脚(我试过),因为它们一次只能发送有限的字符,而我想发送图像文件。很快。
- 我手边没有任何串行转换器,所以我可以将它路由到 arduino 并使用 /dev/ttyUSB0
然后在电脑上阅读。我只想使用 USB 数据线。
- 如果需要此信息:-
- 我的电脑是probook 6560b 运行 windows 7
我在测试时发现的东西:-
- 我确实执行了 -lsusb 命令,但我无法在该列表中找到我的设备
- 我尝试了 'ls /dev/ttyGS0' 并找到了“/dev/ttyGS0”
- 我查了很多论坛,有些人想使用这个命令 'dmesg | grep tty'并向他们展示代码。所以我执行了它,我不明白这段文字中的很多是什么意思,但如果它有帮助,我将它粘贴在这里:-
pi@aloypi:~ $ dmesg | grep tty
[ 0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 bcm2708_fb.fbwidth=1366 bcm2708_fb.fbheight=768 bcm2708_fb.fbswap=1 smsc95xx.macaddr=B8:27:EB:6D:50:77 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000 console=tty1 root=PARTUUID=4ab8bcad-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_serial
[ 0.001496] printk: console [tty1] enabled
[ 2.543414] 20201000.serial: ttyAMA0 at MMIO 0x20201000 (irq = 81, base_baud = 0) is a PL011 rev2
[ 2.561791] 20215040.serial: ttyS0 at MMIO 0x20215040 (irq = 53, base_baud = 50000000) is a 16550
[ 6.716694] systemd[1]: Created slice system-getty.slice.
- 出于好奇我也尝试了这个 'dmesg | grep dwc2' 并且得到了这个但是我不能说任何判断所以你
pi@aloypi:~ $ dmesg | grep dwc2
[ 0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 bcm2708_fb.fbwidth=1366 bcm2708_fb.fbheight=768 bcm2708_fb.fbswap=1 smsc95xx.macaddr=B8:27:EB:6D:50:77 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000 console=tty1 root=PARTUUID=4ab8bcad-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_serial
[ 2.379190] dwc_otg: version 3.00a 10-AUG-2012 (platform bus)
[ 2.386185] dwc_otg: FIQ enabled
[ 2.386205] dwc_otg: NAK holdoff enabled
[ 2.386219] dwc_otg: FIQ split-transaction FSM enabled
[ 2.386245] Module dwc_common_port init
[ 2.968203] modules-load=dwc2,g_serial
[ 8.344134] dwc2 20980000.usb: supply vusb_d not found, using dummy regulator
[ 8.367130] dwc2 20980000.usb: supply vusb_a not found, using dummy regulator
[ 8.626751] dwc2 20980000.usb: EPs: 8, dedicated fifos, 4080 entries in SPRAM
[ 8.647109] dwc2 20980000.usb: DWC OTG Controller
[ 8.653810] dwc2 20980000.usb: new USB bus registered, assigned bus number 1
[ 8.726672] dwc2 20980000.usb: irq 33, io mem 0x20980000
[ 8.787097] usb usb1: Manufacturer: Linux 5.10.17+ dwc2_hsotg
[ 9.371395] dwc2 20980000.usb: bound driver g_serial
[ 194.158373] dwc2 20980000.usb: new device is high-speed
[ 194.189677] dwc2 20980000.usb: new device is high-speed
[ 194.225164] dwc2 20980000.usb: new address 3
好的,看来我取得了一些进展
直到现在我都这样做了
我去了'/boot/config.txt',在文件末尾留下一行后设置'dtoverlay=dwc2'
我去了“/boot/cmdline.txt”并在 'rootwait' 之后放了 'modules-load=dwc2,g_serial' 留下了 space
我这样做了 'sudo nano /etc/rc.local' 并在 'exit 0'
之前放置了 'modeprobe g_serial use_acm=0'
然后我执行了这个命令'sudo systemctl stop getty@ttyGS0.service'
然后这个 'sudo systemctl disable getty@ttyGS0.service'
(我认为禁用 getty@ttyGS0.service 并将 'modeprobe g_serial use_acm=0' 放在上面提到的文件夹中允许 rpi 和 pc 进行通信,但我又可能错了)
然后执行了 'sudo reboot'
这似乎解决了我的问题
但我现在还有一个问题
无论从 rpi 发送什么,我都只能在 coolterm 串口读取软件中接收
由于某种原因,我似乎无法使用从处理中读取端口
(我正在使用处理稍后读取正在发送的图像文件)
这是我当前正在处理的串行阅读程序
import processing.serial.*;
Serial myPort; // Create object from Serial class
String val; // Data received from the serial port
void setup()
{
myPort = new Serial(this, "COM13", 115200);
}
void draw()
{
if ( myPort.available() > 0)
{ // If data is available,
val = myPort.readStringUntil('\n'); // read it and store it in val
}
if (val!=null)
{
println(val); //print it out in the console
}
}
我有点卡在这里了:P
编辑
算了,我解决了
我终于让它工作了 yaaaaaaaayyy
好的,现在记住所有在使用 /dev/ttyGS0 时寻求答案的人,它使用 CTS 和 RTS protocall
(现在不知道它是否可以禁用,但请让我知道你们)
- 这就像 pi 询问你的电脑是否可以发送数据,当电脑说是的,可以发送数据时,pi 会发送数据
因此,无论何时使用此方法,请启用 rts 或 cts
这是我在处理接收数据时使用的
import processing.serial.*;
Serial myPort;
void setup()
{
//remember to set the COM port to which your pi is set
size(200, 200);
myPort = new Serial(this, "COM13", 115200);
}
void draw()
{
if ( myPort.available() > 0)
{
if(myPort.getCTS()==true){
myPort.setRTS(true);
print(myPort.read());
}
}
}
我希望这对你们有帮助,但如果需要更正,请告诉我yall:D
谢谢
我最近一直在尝试寻找一种方法,是否可以使用 ttyGS0 仅通过 Rpi w 0 的微型 USB 端口发送串行数据(大文件,如图像数据)。但是当我在网上搜索时,我只找到了通过串行和其他东西设置无头的方法,这不是我想要的。但是我确实按照教程看了一半
我去了'/boot/config.txt',在文件末尾留下一行后设置'dtoverlay=dwc2'
我去了“/boot/cmdline.txt”并在 'rootwait' 之后放了 'modules-load=dwc2,g_serial' 留下了 space
我想我可以在 Rpi 上的串行程序中使用 /dev/ttyGS0 并发送正在发送数据的数据,但是在我的 PC 上,当我尝试访问位于 comport 12 上的 Rpi 时,它说找不到端口,无法打开它。但它在设备管理器中显示为 'PI USB to Serial(COM12)'
然后我想知道是否可以通过这种方式访问 Rpi 的 com 端口。
如果是这样,我想知道是否有任何其他方法可以仅使用 USB 线访问 Rpi 的 USB 端口
备注
- 我不想使用 Rpi 的 USB 作为记录方式,即。 'headless setup'。我只想像Arduino一样接收串行数据。
- 我不想使用 GPIO 引脚(我试过),因为它们一次只能发送有限的字符,而我想发送图像文件。很快。
- 我手边没有任何串行转换器,所以我可以将它路由到 arduino 并使用 /dev/ttyUSB0 然后在电脑上阅读。我只想使用 USB 数据线。
- 如果需要此信息:-
- 我的电脑是probook 6560b 运行 windows 7
我在测试时发现的东西:-
- 我确实执行了 -lsusb 命令,但我无法在该列表中找到我的设备
- 我尝试了 'ls /dev/ttyGS0' 并找到了“/dev/ttyGS0”
- 我查了很多论坛,有些人想使用这个命令 'dmesg | grep tty'并向他们展示代码。所以我执行了它,我不明白这段文字中的很多是什么意思,但如果它有帮助,我将它粘贴在这里:-
pi@aloypi:~ $ dmesg | grep tty
[ 0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 bcm2708_fb.fbwidth=1366 bcm2708_fb.fbheight=768 bcm2708_fb.fbswap=1 smsc95xx.macaddr=B8:27:EB:6D:50:77 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000 console=tty1 root=PARTUUID=4ab8bcad-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_serial
[ 0.001496] printk: console [tty1] enabled
[ 2.543414] 20201000.serial: ttyAMA0 at MMIO 0x20201000 (irq = 81, base_baud = 0) is a PL011 rev2
[ 2.561791] 20215040.serial: ttyS0 at MMIO 0x20215040 (irq = 53, base_baud = 50000000) is a 16550
[ 6.716694] systemd[1]: Created slice system-getty.slice.
- 出于好奇我也尝试了这个 'dmesg | grep dwc2' 并且得到了这个但是我不能说任何判断所以你
pi@aloypi:~ $ dmesg | grep dwc2
[ 0.000000] Kernel command line: coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 bcm2708_fb.fbwidth=1366 bcm2708_fb.fbheight=768 bcm2708_fb.fbswap=1 smsc95xx.macaddr=B8:27:EB:6D:50:77 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000 console=tty1 root=PARTUUID=4ab8bcad-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait modules-load=dwc2,g_serial
[ 2.379190] dwc_otg: version 3.00a 10-AUG-2012 (platform bus)
[ 2.386185] dwc_otg: FIQ enabled
[ 2.386205] dwc_otg: NAK holdoff enabled
[ 2.386219] dwc_otg: FIQ split-transaction FSM enabled
[ 2.386245] Module dwc_common_port init
[ 2.968203] modules-load=dwc2,g_serial
[ 8.344134] dwc2 20980000.usb: supply vusb_d not found, using dummy regulator
[ 8.367130] dwc2 20980000.usb: supply vusb_a not found, using dummy regulator
[ 8.626751] dwc2 20980000.usb: EPs: 8, dedicated fifos, 4080 entries in SPRAM
[ 8.647109] dwc2 20980000.usb: DWC OTG Controller
[ 8.653810] dwc2 20980000.usb: new USB bus registered, assigned bus number 1
[ 8.726672] dwc2 20980000.usb: irq 33, io mem 0x20980000
[ 8.787097] usb usb1: Manufacturer: Linux 5.10.17+ dwc2_hsotg
[ 9.371395] dwc2 20980000.usb: bound driver g_serial
[ 194.158373] dwc2 20980000.usb: new device is high-speed
[ 194.189677] dwc2 20980000.usb: new device is high-speed
[ 194.225164] dwc2 20980000.usb: new address 3
好的,看来我取得了一些进展 直到现在我都这样做了
我去了'/boot/config.txt',在文件末尾留下一行后设置'dtoverlay=dwc2'
我去了“/boot/cmdline.txt”并在 'rootwait' 之后放了 'modules-load=dwc2,g_serial' 留下了 space
我这样做了 'sudo nano /etc/rc.local' 并在 'exit 0'
之前放置了 'modeprobe g_serial use_acm=0'然后我执行了这个命令'sudo systemctl stop getty@ttyGS0.service' 然后这个 'sudo systemctl disable getty@ttyGS0.service' (我认为禁用 getty@ttyGS0.service 并将 'modeprobe g_serial use_acm=0' 放在上面提到的文件夹中允许 rpi 和 pc 进行通信,但我又可能错了)
然后执行了 'sudo reboot'
这似乎解决了我的问题
但我现在还有一个问题 无论从 rpi 发送什么,我都只能在 coolterm 串口读取软件中接收 由于某种原因,我似乎无法使用从处理中读取端口 (我正在使用处理稍后读取正在发送的图像文件) 这是我当前正在处理的串行阅读程序
import processing.serial.*;
Serial myPort; // Create object from Serial class
String val; // Data received from the serial port
void setup()
{
myPort = new Serial(this, "COM13", 115200);
}
void draw()
{
if ( myPort.available() > 0)
{ // If data is available,
val = myPort.readStringUntil('\n'); // read it and store it in val
}
if (val!=null)
{
println(val); //print it out in the console
}
}
我有点卡在这里了:P
编辑 算了,我解决了 我终于让它工作了 yaaaaaaaayyy 好的,现在记住所有在使用 /dev/ttyGS0 时寻求答案的人,它使用 CTS 和 RTS protocall (现在不知道它是否可以禁用,但请让我知道你们)
- 这就像 pi 询问你的电脑是否可以发送数据,当电脑说是的,可以发送数据时,pi 会发送数据 因此,无论何时使用此方法,请启用 rts 或 cts 这是我在处理接收数据时使用的
import processing.serial.*;
Serial myPort;
void setup()
{
//remember to set the COM port to which your pi is set
size(200, 200);
myPort = new Serial(this, "COM13", 115200);
}
void draw()
{
if ( myPort.available() > 0)
{
if(myPort.getCTS()==true){
myPort.setRTS(true);
print(myPort.read());
}
}
}
我希望这对你们有帮助,但如果需要更正,请告诉我yall:D 谢谢