可以在网站上使用 pySerial 打开并将数据发送到本地计算机上的串行端口吗?

Posted

技术标签:

【中文标题】可以在网站上使用 pySerial 打开并将数据发送到本地计算机上的串行端口吗?【英文标题】:Can pySerial be used on a website to open and send data to serial port on local computer? 【发布时间】:2016-08-01 11:18:46 【问题描述】:

我认为这是不可能的,但在阅读了这篇文章后认为它可能是:

How can I send data from a web page to a serial port?

所以我添加了serial 的代码,如下所示,只是希望会发生某种魔法:

import serial
ser = serial.Serial('/dev/ttyACM0', 9600)

不出所料,我收到了一个错误:

[Mon Aug 01 07:01:44.513340 2016] [wsgi:error] [pid 16:tid 140515737831488]     raise SerialException(msg.errno, "could not open port %s: %s" % (self._port, msg))
[Mon Aug 01 07:01:44.513367 2016] [wsgi:error] [pid 16:tid 140515737831488] SerialException: [Errno 2] could not open port /dev/ttyACM0: [Errno 2] No such file or directory: '/dev/ttyACM0'

代码在本地运行良好,在线环境通过requirements.txt 模拟本地可用的模块。

【问题讨论】:

听起来您正试图从服务器端打开端口。为了实现您的目标,我建议寻找客户端工具。有一堆js解决方案,即***.com/questions/5640953/… 【参考方案1】:

不是你想直接听到的。但答案是否定的。除非您的 Web 服务在目标计算机上本地运行,否则您不能远程使用 pySerial

但无论如何,您仍然可以使用以下方法之一来实现您的目标(按照客户的复杂性排序)

    Java applet 或 Java Web Start 应用程序(例如有一个很好的跨平台库RXTX) 浏览器插件,例如用于 google chrome 的 jUART、browser-serialport 或 serial,甚至是 ActiveX 组件 串行端口到网络代理(如ser2net)。

唯一的问题是您的客户仍需要执行其他步骤才能使您的网站正常工作(安装 java/native 库/允许小程序/浏览器插件或其他软件)。这样做的原因是因为浏览器的限制非常严格,并且出于安全原因,默认情况下所有文件系统操作都会被沙盒化。

【讨论】:

如果可能的话,您能否提供一个详细的解决方案来回答赏金的请求并且是跨平台/浏览器的?由于 chrome 扩展要求的变化,jUART 不再作为跨平台解决方案进行维护。不确定对 Java 小程序的一般参考是否适合 200 点赏金? @user1063287 有很多关于如何制作具有串行端口访问权限的 java 小程序的示例。例如,有一个 howto 的 rxtx 库使用情况。但是,您仍然必须确保您的客户有适当的环境才能使事情正常进行。如果您正在为某种可以控制软件的 pos 终端提供服务,那么您的目标是可以实现的。你能多谈谈你的项目吗? 它只是一个标准的网站,在 Python 上运行(使用 html、CSS 和 jQuery)。在本地运行站点时,我可以将 RGB 值从 jQuery 前端发送到 Python 中的路由,该路由将值传递给 pyserial,后者将它们发送到 Arduino。您可以在这个探索 jUART 选项(不再维护或正常工作)的问题中查看具体细节:***.com/questions/38841959/… @user1063287 啊哈。知道了。好吧......仍然没有那么多选择:(问题是浏览器安全性。Java小程序仍然需要加载本机库。其他解决方案是构建浏览器插件(我猜这不是你想要的)。还有一个更简单的 javaws 解决方案,但仍需要用户执行额外的步骤 @user1063287 我为我的答案添加了几个替代方案。但我觉得最靠谱的方式还是javaws

以上是关于可以在网站上使用 pySerial 打开并将数据发送到本地计算机上的串行端口吗?的主要内容,如果未能解决你的问题,请参考以下文章

PySerial 丢失数据

无法使用 python 和 pyserial 打开 /dev/ttyusb0

如何使用 pySerial 从 serialException 中恢复

Python PySerial.How 知道一个端口是不是已经打开?

python中Pyserial如何实现RS485串口通讯

使用 pyserial 将数据发送到串行 - 在 Razor 9DOF IMU 上工作