Arduino与本地浏览器扩展之间的通信

0 投票
2 回答
813 浏览
提问于 2025-04-16 01:52

我正在想办法如何从一个Arduino获取串口信息,这个Arduino控制着我在本地电脑上运行的一个JavaScript浏览器扩展。看起来我需要一个中间程序来处理这些串口读取的数据,然后把它们传递给浏览器,以便激活我编写的功能。请问用Python可以做到吗?任何答案、帮助和参考资料都非常感谢。

2 个回答

2

另一种选择是使用浏览器插件,这样你就可以通过JavaScript访问串口了。你可以查看这个链接了解更多信息:http://code.google.com/p/seriality/

0

一个非常简单的HTTP服务器在Python中看起来是这样的:

from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer

class MyServer(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200, 'OK')
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write( "hello" )

HTTPServer(('', 8888), MyServer).serve_forever()

在do_Get方法里,你可以添加访问你的Arduino程序所需的代码。

...
ser = serial.Serial('/dev/tty.usbserial', 9600)
ser.write('5')
ser.readline()
...

另一个选择是用Ruby编写这个程序,使用webrick作为网页服务器的部分。

require "serialport.so"
require 'webrick';

SERIALPORT="/dev/ttyUSB0"

s =  HTTPServer.new( :Port => 2000 )

class DemoServlet < HTTPServlet::AbstractServlet
    def getValue()
        begin
            sp = SerialPort.new( SERIALPORT, 9600, 8, 1, SerialPort::NONE)
            sp.read_timeout = 500
            sp.write( "... whatever you like to send to your arduino" )
            body = sp.readline()
            sp.close
            return body
        rescue
            puts "cant open serial port"
        end
    end

    def do_GET( req, res )

        body = "--.--"
        body = getValue()

        res.body = body
        res['Content-Type'] = "text/plain"
    end
end
s.mount( "/test", DemoServlet )
trap("INT"){ s.shutdown }
s.start

第三个选择是使用Arduino上的以太网扩展板,这样就可以完全省略代理代码。

撰写回答