【问题标题】:Can I send python script outputs to a Raspberry Pi over SSH/WiFi?我可以通过 SSH/WiFi 将 python 脚本输出发送到 Raspberry Pi 吗?
【发布时间】:2023-03-10 20:28:01
【问题描述】:

我正在组装一架无人机,并且我在 Raspberry Pi 上运行了一个 Python 脚本,它获取 Xbox 控制器输入并将它们转换为我可以使用的 Python 输出:

if (event.code == 'ABS_Y'):
    if event.state in range(25001,32768):
        print("Full Throttle Reverse Left")
        kit.motor1.throttle = -1

但是,控制器需要连接到 Raspberry Pi,这限制了我的范围。我可以将控制器连接到笔记本电脑并通过路由器将这些输出发送到 Raspberry Pi 以执行 Python 命令吗?

我是整个编程的新手,我确信有更聪明的方法可以做到这一点,因此欢迎任何帮助或替代建议。

【问题讨论】:

  • 通过网络发送字节是微不足道的,但设计一个满足您要求的协议栈却不是。也许考虑在要接受远程连接的系统上运行 SSH 服务器。就目前的形式而言,这对于 Stack Overflow 来说可能过于宽泛。

标签: python raspberry-pi xbox


【解决方案1】:

这是怎么做的:

在 Raspberry Pi 中,确保您有 OpenSSH(可能有,如果无法连接,请尝试运行 apt install openssh-server),并且您还需要计算机上的 OpenSSH 客户端(“ssh”命令)。

  1. 首先,让我们看看您的脚本。在您的 Python 脚本上,您可以编写如下内容来输出 JSON:

print(json.dumps(your message here....))

  1. 在您的 Raspberry Pi 上,找出您的私有 IP。你可以这样做:ifconfig | grep 192

  2. 在您的计算机上,键入: ssh pi@<your private IP> 'python <your script path, example: /home/pi/Desktop/script.py>'

    您可能需要将 pi 更改为您在 Raspberry Pi 上使用的用户名。

  3. 脚本将在您的 Raspberry Pi 上运行,您将在计算机上获得 JSON 输出!您可以使用 subprocessjson.loads 轻松自动执行此操作。这种方式也很安全,因为 SSH 使用加密。

【讨论】:

    【解决方案2】:

    我建议为您的应用程序使用套接字。 客户端(在笔记本电脑上运行)可以获取 xbox 控制器输入并将其发送到服务器(在树莓派上运行)。

    这是一个简单的套接字应用程序:

    客户:

    import socket
    
    ip = "192.168.xxx.yyy" # IP of Raspberry Pi
    
    # connect to server
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect((ip, 8080))
    print("CLIENT: connected")
    
    # send a message
    msg = "I am CLIENT"
    client.send(msg.encode())
    
    # recive a message and print it
    from_server = client.recv(4096).decode()
    print("Recieved: " + from_server)
    
    # exit
    client.close()
    

    服务器:

    import socket
    
    ip = "192.168.xxx.yyy" # IP of Raspberry Pi
    
    # start server
    serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    serv.bind((ip, 8080))
    serv.listen(5)
    print("SERVER: started")
    
    while True:
        # establish connection
        conn, addr = serv.accept()
        from_client = ''
        print("SERVER: connection to Client established")
    
        while True:
            # receive data and print
            data = conn.recv(4096).decode()
            if not data: break
            from_client += data
            print("Recieved: " + from_client)
    
            # send message back to client
            msg = "I am SERVER"
            conn.send(msg.encode())
    
        # close connection and exit
        conn.close()
        break
    

    更多信息可以在here找到。

    【讨论】:

    • 没有加密和认证,任何可以连接到套接字的人都可以控制系统。
    猜你喜欢
    • 2017-05-11
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多