我可以仅使用数据线通过 Raspberry pi 0 w 的 USB 端口传输串行数据吗?[]

问题描述

首先我是一个迷路的菜鸟

我最近一直在尝试找出一种方法,我只能使用 ttyGS0 通过 Rpi w 0 的微型 USB 端口发送串行数据(如图像数据之类的大文件)。但是当我在网上搜索时,我只找到了设置方法通过连续剧和其他东西无头,这不是我想要的。但我确实按照教程进行了一半

  • 我去'/boot/config.txt'并在最后设置'dtoverlay=dwc2' 离开一行后的文件

  • 我去了 '/boot/cmdline.txt' 并在 'rootwait' 留下了一个空格之后确实放置了 'modules-load=dwc2,g_serial'

认为我可以在 Rpi 上的串行程序中使用 /dev/ttyGS0 并发送正在发送的数据,但是在我的 PC 上,当我尝试访问位于 12 端口的 Rpi 时,它说找不到端口并且无法打开它。但它在设备管理器中显示为“PI USB to Serial(COM12)”

然后我想知道天气是否可以通过这种方式访问​​ Rpi 的通信。

如果是这样的话,我想知道是否有其他方法可以仅使用 USB 电缆访问 Rpi 的 USB 端口

注意:-

  • 我不想使用 Rpi 的 USB 作为登录方式,即。 “无头设置”。我只想像 arduino 一样接收串行数据。
  • 我不想使用 GPIO 引脚(我尝试过),因为它们一次只能发送有限的字符,而我想发送图像文件。很快。
  • 我手头没有任何串行转换器,因此我可以将其路由到 arduino 并使用 /dev/ttyUSB0 然后在PC上阅读。我只想使用 USB 数据线。
  • 如果需要此信息:-
    • 我的电脑是运行 Windows 7 的 probook 6560b

我在测试时发现的东西:-

  • 我确实执行了 -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

如果有人可以帮助我,将不胜感激 你的帮助可以帮助更多人开始他们的 RaspBerry 之旅,因为很多人似乎和我一样迷失在这个话题上。

再次感谢兄弟

解决方法

好吧,看来我取得了一些进展 直到现在我做到了

  • 我去'/boot/config.txt' 并在离开一行后在文件末尾设置'dtoverlay=dwc2'

  • 我去了 '/boot/cmdline.txt' 并在 'rootwait' 留下了一个空格之后确实放置了 'modules-load=dwc2,g_serial'

  • 我做了这个 'sudo nano /etc/rc.local' 并在 'exit 0' 之前放置了 'modeprobe g_serial use_acm=0'

  • 然后我执行了这个命令'sudo systemctl stop [email protected]' 然后这个'sudo systemctl disable [email protected]' (我认为禁用 [email protected] 并将 '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

编辑 welp 没关系我解决了它 我终于让它工作了 yaaaaaaaayyy 好的,现在记住所有在使用 /dev/ttyGS0 时寻求答案的人,它使用 CTS 和 RTS protocall (现在不知道是否可以禁用,但请让我知道你们)

  • 就像 pi 询问您的 pc 是否可以发送数据,当 pc 说可以发送数据时,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,115200);
  
}
void draw()
{
  
  if ( myPort.available() > 0)
  {
    if(myPort.getCTS()==true){
      myPort.setRTS(true);
      print(myPort.read());
    }
  } 
}

我希望这对你们有帮助,但如果需要一些更正,请让我知道你们:D 谢谢