如何用Python 3在macOS下与Raspberry Pi 3通信?求分步方案
在macOS用Python 3与Raspberry Pi 3通信的可行方案
当然可以!我帮你整理了两种最实用的实现方式,都是用Python 3在macOS和树莓派3之间建立通信的靠谱方案,一步步来肯定能解决你的问题:
方案1:通过SSH远程执行代码/传输数据
这种方式适合远程控制树莓派运行脚本、传输文件,是最常用的远程交互方式。
步骤1:开启树莓派的SSH功能
- 如果树莓派接了显示器:打开终端,输入
sudo raspi-config,依次选择Interfacing Options→SSH→Enable,重启树莓派生效。 - 如果没接显示器:烧录系统镜像后,在SD卡的
boot分区新建一个无后缀名的空白文件ssh,插入树莓派开机后会自动开启SSH。
步骤2:获取树莓派的局域网IP
在树莓派终端输入hostname -I,记下输出的IP地址(比如192.168.1.100),后续会用到。
步骤3:macOS上用Python实现SSH通信
我们用paramiko这个Python库来实现SSH连接:
- 先安装库:打开macOS终端,输入
pip3 install paramiko - 示例代码(远程执行命令+传输文件):
import paramiko # 替换成你的树莓派信息 raspi_ip = "192.168.1.100" raspi_user = "pi" # 默认用户名是pi raspi_password = "raspberry" # 默认密码是raspberry # 建立SSH连接 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(raspi_ip, username=raspi_user, password=raspi_password) # 远程执行命令,比如查看树莓派CPU温度 stdin, stdout, stderr = ssh.exec_command("vcgencmd measure_temp") print("树莓派CPU温度:", stdout.read().decode()) # 传输文件(从macOS传到树莓派) sftp = ssh.open_sftp() local_file = "/Users/你的用户名/Desktop/test.txt" # macOS本地文件路径 remote_file = "/home/pi/test.txt" # 树莓派目标路径 sftp.put(local_file, remote_file) print("文件传输完成") # 关闭连接 sftp.close() ssh.close()
方案2:基于TCP/IP套接字的实时网络通信
这种方式适合自定义实时数据交互(比如传感器数据传输、远程控制指令发送),需要分别在树莓派和macOS上运行服务端/客户端代码。
步骤1:树莓派上运行服务端代码
打开树莓派的Python编辑器,输入以下代码并运行(先不要关闭):
import socket # 监听所有可用的网络接口,端口自定义(比如65432) HOST = '0.0.0.0' PORT = 65432 # 创建TCP套接字 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((HOST, PORT)) s.listen() print("树莓派服务端已启动,等待连接...") conn, addr = s.accept() with conn: print(f"已连接macOS设备:{addr}") while True: # 接收macOS发送的数据 data = conn.recv(1024) if not data: break print(f"收到macOS消息:{data.decode('utf-8')}") # 回复消息给macOS conn.sendall(b"消息已收到!来自树莓派的回复")
步骤2:macOS上运行客户端代码
打开macOS的Python编辑器,输入以下代码(替换树莓派IP)并运行:
import socket # 替换成你的树莓派局域网IP HOST = '192.168.1.100' PORT = 65432 # 连接树莓派服务端 with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((HOST, PORT)) # 发送消息给树莓派 s.sendall(b"你好!来自macOS的测试消息") # 接收树莓派的回复 data = s.recv(1024) print(f"收到树莓派回复:{data.decode('utf-8')}")
注意事项
- 确保树莓派和macOS连接在同一个局域网(比如同一WiFi)
- 如果连接失败,检查树莓派的防火墙:可以临时关闭防火墙
sudo ufw disable,或者开放指定端口sudo ufw allow 65432
常见问题排查
- SSH连接失败:
- 用macOS终端ping树莓派IP,看是否能通:
ping 192.168.1.100 - 确认树莓派的SSH功能确实开启
- 检查路由器是否开启了设备隔离功能,导致无法互相访问
- 用macOS终端ping树莓派IP,看是否能通:
- 套接字连接失败:
- 确保树莓派的服务端代码先启动
- 检查端口是否被占用:树莓派终端输入
sudo lsof -i :65432,如果有进程占用,换个端口即可
内容的提问来源于stack exchange,提问作者Gabor Soter
相关产品推荐
相关产品推荐

