-1

我经常使用 Powershell 作为我可以管理的所有内容的多合一命令行界面。我已经设法在 Windows 中使用“cl”来编译库存 Powershell 中的 C 代码,而不是下载完整的 VisualStudio IDE 和他们试图让我使用的特殊 Powershell 终端。我通过在 Windows 中编辑环境变量来做到这一点。我还为 SSH 设置了 Powershell,因此我可以直接从 Powershell 登录到我的 Raspberry Pi,而不需要 PuTTY。我一直在尝试实现的最新功能是让 Powershell 作为串行终端工作,以取代 Thonny(我用于 Raspberry Pi Pico)和 Arduino IDE 之类的东西。我已经设法弄清楚如何让它与这些命令进行一些基本的通信:

$port= new-Object System.IO.Ports.SerialPort COM#,Baudrate,None,8,one
$port.open()
$port.WriteLine("some string")
$port.ReadLine()
$port.Close()

但是,这有点蹩脚,因为我必须逐行手动读取行,而且我似乎无法让它像其他串行终端那样工作,它具有换行符/无行尾等功能以及其他功能终端更人性化。我在网上看到了一些声称将 Powershell 变成适当的串行终端的“脚本”,但我似乎无法让我玩过的少数几个按照我的预期工作。有谁知道我怎么能做到这一点?“脚本”是做到这一点的唯一方法,还是可以将 Powershell 配置为像功能更齐全的串行终端一样?

编辑:我在网上找到了这个脚本,它与我想要的很接近,但它贯穿整个程序并且从不停止等待我的输入。我认为我需要在 Arduino IDE 中使用与“无行尾”等效的东西才能使其正常运行。如果有人可以建议我可以添加到此代码中以实现“无行结尾”,我将非常感激。

$port = New-Object System.IO.Ports.SerialPort
$port.PortName = "COM4"
$port.BaudRate = "9600"
$port.Parity = "None"
$port.DataBits = 8
$port.StopBits = 1
$port.ReadTimeout = 9000 # 9 seconds
$port.DtrEnable = "true"

$port.open() #opens serial connection

Start-Sleep 2 # wait 2 seconds until Arduino is ready

$port.Write("93c") #writes your content to the serial connection

try
{
   while($myinput = $port.ReadLine())
   {
   $myinput
   }
}

catch [TimeoutException]
{
# Error handling code here
}

finally
{
# Any cleanup code goes here
} 

$port.Close() #closes serial connection
4

1 回答 1

0

我一直使用 plink 对我的 Pi 执行此操作。如果您可以从 Putty 做您需要的事情,那么 plink 将让您在批处理文件或 Powershell 中自动化它。

下载: https ://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

文档: https ://documentation.help/PuTTY/plink-usage.html

此外,如果您可以忍受必须按回车键的情况,本文提供了一个更简单的解决方案。

https://batchloaf.wordpress.com/2013/02/12/simple-trick-for-sending-characters-to-a-serial-port-in-windows/

于 2022-03-01T09:38:27.070 回答