树莓派4和LabVIEW 2020的连接,最难的不是软件安装,也不是硬件接线,而是很多人卡在“明明设备都准备好了,却怎么也连不上”这一步。上一篇我们聊完了准备阶段,这次直接进入正题——正式连接怎么走、每一步点什么菜单、填什么参数,以及连不上时该用什么顺序排查。
我先说个整体思路:树莓派4本质上是一台迷你Linux电脑,LabVIEW跑在Windows主机上,两者之间没有USB直连的关系,全部通信都走网络。所以整个连接过程的核心就三个字:能ping通、能SSH、能部署。只要顺着这个逻辑往下走,连接这件事其实很机械,一步步来就能搞定。
1. 连接前必须想清楚的三件事
1.1 网络通信才是树莓派连接的本质
新手最容易犯的错,是把树莓派当成一个“大型Arduino”——以为插上USB线,LabVIEW就能直接识别设备。实际上LabVIEW和树莓派之间没有USB链路,树莓派不是NI的USB采集卡,它不会出现在MAX设备列表里。两者唯一的通道是TCP/IP网络。
想通这一点,后续所有操作都顺了:LabVIEW通过以太网或Wi-Fi找到树莓派的IP地址,使用SSH协议登录,把程序部署到树莓派内存中,再通过专用的通信协议读写GPIO。也就是说,连接的本质就是在网络上建立一个远程目标。
在LabVIEW 2020里实现这个目标,最省力的路径是用MakerHub出品的LINX工具包。LINX做了两件重要的事:底层自己实现了和树莓派GPIO、I2C、SPI、UART等外设的Linux驱动通信,上层把接口包装成了类似Arduino风格的LabVIEW VI。使用者不用碰底层Linux一行代码,就能在LabVIEW中直接拖“Digital Write”“Analog Read”来操控树莓派引脚。
当然,如果你不想依赖LINX,后期也可以自己写TCP客户端和树莓派上跑一个Python Socket服务端,这样也能通信。但作为正式连接的第一步,我建议先用LINX跑通流程,后面再按需求折腾原生TCP方案。
1.2 树莓派端的基础运行环境
连接之前,树莓派至少要满足三个条件,缺一个都会导致半路卡壳:
- 系统正常运行,推荐Raspberry Pi OS(32位桌面版或精简版都行)。
- 已开启SSH服务。
- 树莓派和Windows主机在同一个局域网内,IP之间能互相ping通。
树莓派的IP地址,最好设成静态IP,不建议依赖DHCP自动分配。有两个原因:一是路由器重启或设备重连后IP会变,LabVIEW项目里绑定的地址就会失效;二是LabVIEW和LINX在部署时需要通过固定IP维护长期连接,IP漂移极易导致连接中断。
我一般习惯把树莓派固定为192.168.1.188这个IP,掩码24位,网关和DNS都填路由器地址。这个地址没有特殊含义,只为了避免和局域网内其他设备冲突。你可以依据自己路由器的网段来改,比如网段是192.168.31.x,就设成192.168.31.188。
1.3 LabVIEW端的组件清单
LabVIEW这端需要准备的东西不多,但版本对应关系必须看清楚:
- 主程序:LabVIEW 2020(32位版本即可,社区版完全够用)。
- 包管理器:VIPM(VI Package Manager),用来安装LINX工具包。
- LINX工具包:MakerHub LINX,当前常用版本是2.1.x,通过VIPM安装。
很多人问要不要装NI Linux Real-Time工具包。这里要分清:NI Linux Real-Time是NI官方支持树莓派实时目标的一种方案,但它要求烧录特定的NI Linux实时镜像,配置更复杂,一般配合FPGA和RT组件使用。咱们做常规GPIO控制和数据采集,用LINX就够了,不需要额外装它。
如果你看到网上教程说“要装VISA、要装NI Web服务”,那是针对其他连接方式的内容,别混着看。
2. 让树莓派在网络中“现形”:网络准备细节
2.1 设置固定IP,不要指望DHCP
树莓派默认使用DHCP自动获取IP,第一次开机后,你可以在路由器后台看到它分到的地址。但这个地址不是永恒的,尤其是树莓派重启后,很可能换一个IP。所以我建议在树莓派的dhcpcd.conf里写入静态配置。
具体操作:在树莓派终端里输入:
sudo nano /etc/dhcpcd.conf在文件末尾追加:
interface eth0 static ip_address=192.168.1.188/24 static routers=192.168.1.1 static domain_name_servers=192.168.1.1如果你用的是Wi-Fi而不是网线,把interface eth0改成interface wlan0即可。
保存后重启网络:
sudo systemctl restart dhcpcd这时候用ifconfig确认一下树莓派的IP是不是192.168.1.188。如果变了,说明配置文件写错了,检查网段或接口名。
这里有个容易忽略的点:static routers必须填你路由器的管理地址,一般是192.168.1.1。DNS和路由器地址一致没问题,不填也可以,但填上更稳,避免树莓派联网解析域名时出问题。
2.2 开启SSH与首次连接验证
树莓派默认是关闭SSH的。如果你用的是烧录完的官方镜像,第一次开机前,在SD卡根目录新建一个名为ssh的空文件(注意没有扩展名),开机后SSH服务就会自动开启。
然后打开Windows的命令提示符,执行:
ping 192.168.1.188能收到回复,说明物理链路上没问题。再用SSH登录验证:
ssh pi@192.168.1.188默认密码是raspberry(注:不同版本的官方镜像可能要求你首次登录时修改密码,以实际为准)。能登录进去,说明树莓派的网络和SSH服务都正常。
到这一步,树莓派在网络里“现形”了,LabVIEW连接的前置条件全部满足。
2.3 Windows防火墙与网络发现的注意事项
很多连接不畅的案例,最后都出在Windows防火墙上。Windows默认会拦截来自局域网设备的入站连接,尤其是LabVIEW创建的端口和SSH端口。
我在第一次连接时踩过这个坑:树莓派能ping通,SSH也能用,但LabVIEW项目里添加目标时就是超时。后来一查,是私网防火墙拦截了LabVIEW的进程通信。
处理方式有两种:
- 在“允许应用通过防火墙”里,把LabVIEW 2020对应的exe文件添加进来,并勾选“专用”网络。
- 如果你所在网络环境安全,可以直接临时关闭防火墙做快速验证,等连接畅通后再把防火墙开回来并配置例外规则。
另外,确认Windows和树莓派在同一个子网里。假如树莓派是192.168.1.188,而Windows主机是192.168.2.50,那就不在同一网段,三层路由不通,后面全部白搭。
3. 安装并配置LINX工具箱:让LabVIEW认识树莓派
3.1 VIPM安装准备
VIPM是老牌LabVIEW包管理器,很多开源组件都通过它分发。下载安装时注意版本匹配:VIPM安装时会自动识别你电脑上的LabVIEW版本,只要LabVIEW 2020是正常安装的,VIPM就能找到它。
装完之后,打开VIPM主界面,右上角搜索“LINX”。
搜索结果里会出现“LabVIEW LINX”包,一般由MakerHub发布。点击安装按钮,会弹出一个确认窗口,显示要安装到哪个LabVIEW版本下,确认后等待完成即可。
安装完成后,打开LabVIEW 2020,随便新建一个VI,在函数面板里就能看到“MakerHub LINX”分类。看到这个分类,说明LINX装好了。
3.2 LabVIEW LINX包的安装步骤
如果你用的是全新VIPM,有一点值得注意:LINX包依赖链里包含JKI VI Package Manager基础库和OpenG几个组件。VIPM会自动处理依赖关系,所以你不用手动装这些前置组件。
但有时候网络不好,VIPM拉取包列表会超时,导致安装界面一直转圈或提示“Unable to resolve dependency”。这时候别急着重试,去VIPM的Options里把网络超时时间调大,然后重新加载包列表。多数情况都能解决。
安装完成后,建议做一个简单的自检:打开LabVIEW,新建一个VI,在函数面板中依次找到“MakerHub LINX”->“Raspberry Pi”子面板,确认里面有“Digital Read”“Digital Write”“Open”“Close”这几个基础VI。
3.3 测试目标连接
这是正式连接的第一步实操。打开LabVIEW 2020,点击创建项目,选择“空项目”。
在项目根节点“我的电脑”上点鼠标右键,按下图路径操作:
我的电脑 -> 新建 -> 目标 -> LINX -> Raspberry Pi会弹出“LINX Target Configuration”窗口。
这个窗口里有几个关键输入:
- Device Alias:给树莓派起个名字,比如“我的树莓派”或“RPi4”。
- Hostname/IP:填入192.168.1.188。
- Username:默认pi。
- Password:树莓派登录密码,如果没改过就是raspberry。
- LINX Firmware Version:一般保持自动。
填完之后点“Deploy”或“Test Connection”。这时候LabVIEW会通过SSH登录树莓派,把LINX运行需要的服务文件传输上去,然后尝试启动通信。
如果成功,项目左侧会出现一个带树莓派图标的设备条目。如果失败,会弹出一个错误弹窗,里面通常包含超时、权限、连接拒绝等信息。
这一步是正式连接的关键节点,把这里跑通了,后面所有的VI都只是时间问题。
4. 实操:从连接验证到第一个LED闪烁程序
4.1 在LabVIEW中创建树莓派目标
前面项目里成功添加了树莓派目标后,你会在项目浏览器中看到类似这样的结构:
项目:项目名称.lvproj └── 我的电脑 └── 树莓派目标 (192.168.1.188) ├── 主程序.vi ├── LINX资源 └── 支持的模块右键点击树莓派目标,选择“设为启动项”,这样后续运行VI时就会默认部署到树莓派。
很多人会忽略这一步,结果在“我的电脑”下面写参数,运行VI时提示找不到设备。把树莓派目标设为启动项是最直接有效的规避方式。
4.2 初次自动部署与连接确认
新建一个空白VI,保存路径无所谓,但建议放到项目文件夹里。这个VI后续就是部署到树莓派上的主程序。
双击打开空白VI,在前面板和程序框图里,先别急着拖线。可以先用模板来验证一下部署链路。
在项目树里展开树莓派目标下的“LINX资源”,找到“Main.vi”或“Default.vi”,把它拖到项目窗口中,这是LINX自带的主程序模板。双击打开,然后点击运行按钮,选择“运行到树莓派”。
这里有一步很容易让新手误解:点击运行后,LabVIEW会先编译VI,再通过SSH传送到树莓派,最后在树莓派系统内启动运行。这个过程会花几秒到十几秒不等,取决于网络和树莓派性能。
如果运行正常,这个VI会保持循环,你可以在LINX自带的前面板上看板载状态。当然这个模板里没有可视化输出,它只是建立了一个与树莓派通信的基础调度循环。
看到它正常运行,说明树莓派目标已经“活”了。
4.3 编写第一个数字输出VI(LED闪烁)
现在开始写第一个真正有意义的外设控制程序——LED闪烁。
硬件接线最简单:树莓派40针排针中,物理引脚第7脚(对应BCM编号GPIO4),串联一个220欧姆限流电阻,接LED正极,LED负极接排针第6脚(GND)。如果手边没有面包板,直接把杜邦线怼上也能用。
为什么用GPIO4?纯粹是因为它旁边就是GND,接线方便。用其他空闲GPIO完全没问题。
在VI程序框图中编写以下逻辑:
- 使用
LINX OpenVI初始化树莓派通信。 - 进入While循环。
- 在循环内使用
LINX Digital Write,将引脚号填为4,写入逻辑值True。 - 延时500毫秒。
- 再次使用
LINX Digital Write,写入逻辑值False。 - 再延时500毫秒。
- 循环结束条件设为False,这样就无限循环。
如果你想多路控制,可以把LINX Digital Write复制出来,换不同的引脚号。但要注意:树莓派引脚编号有BCM模式和物理模式之分,LINX里默认使用的是BCM编号。填错引脚号不会烧硬件,但灯不会亮,排查时先确认编号模式。
引脚号的对应关系可以参照这张表:
| 物理引脚 | BCM编号 | 物理引脚 | BCM编号 |
|---|---|---|---|
| 7 | GPIO4 | 11 | GPIO17 |
| 8 | GPIO14 | 12 | GPIO18 |
| 10 | GPIO15 | 13 | GPIO27 |
| 16 | GPIO23 | 15 | GPIO22 |
| 18 | GPIO24 | 29 | GPIO5 |
这张表只列出常用引脚,完整对应关系建议查看树莓派官方引脚图。
4.4 部署到树莓派并运行
VI编写完成并保存后,确认树莓派目标被设为启动项。点击运行按钮,LabVIEW会先弹出一个确认框,提示“正在部署VI到目标”,稍等片刻,树莓派上的GPIO4就会开始输出高低电平,LED以亮灭各0.5秒的频率闪烁。
如果你想要程序在树莓派上脱离电脑独立运行,可以右键树莓派目标,选择“构建”→“应用程序(EXE)”,把VI打包成树莓派系统内的可执行程序,再用SSH设置开机自启。这是后续部署优化的话题,这里先不展开。
第一次看到树莓派上的LED按LabVIEW程序节奏闪烁,那种“连上了”的感觉还是很直观的,尤其是从零搭起整个链路的人,成就感十足。
5. 调试锦囊:连接失败时按这个顺序查
正式连接过程中,失败概率最高的几个环节,我按排查顺序列出来。按这个顺序查,比乱试要有效率高得多。
5.1 ping通但连不上目标
这是最典型的“灯都亮但没信号”场景。树莓派能ping通,但LabVIEW添加LINX目标时超时。
排查顺序:
- 确认用户名密码是否正确。树莓派默认用户是pi,密码是raspberry。如果你在系统安装或首次登录时改过密码,必须用新密码。
- 确认SSH服务是否独占端口22,且没有其他端口占用冲突。
- 确认Windows防火墙是否拦截LabVIEW进程。直接把防火墙临时关掉再试一次。
- 确认路由器AP隔离是否开启。部分路由器默认开启“访客网络隔离”,如果树莓派连的是访客Wi-Fi,而Windows连的是主Wi-Fi,两者其实是不通的三层网络。
- 确认是否反复输错过密码。多次输错后,树莓派会暂时锁住SSH登录,等几分钟再试。
5.2 LINX目标初始化失败的典型原因
错误提示如果包含“Firmware not found”或“Device not ready”,通常是树莓派上已经存在一个不完整的LINX服务目录。这时候不要懒,直接用SSH登录树莓派,删除LINX存放的缓存目录,再回到LabVIEW重新部署。
我通常用这条命令清理:
ssh pi@192.168.1.188 "rm -rf ~/.linx; rm -rf /tmp/linx*"执行完重新测试连接,绝大多数情况都能恢复。
还有一种情况是LINX版本与LabVIEW版本不兼容。比如LabVIEW 2020上装了太老的LINX 1.x版本,功能接口不完整。建议升级到2.1.x或更高。
5.3 部署运行卡死/掉线的处理
树莓派目标运行VI时,偶尔会出现在前面板窗口上看不到任何状态,也没报错,但程序好像死了一样。
常见原因有两个:第一,VI里某个读取操作没有设置超时,导致程序阻塞在等待响应上;第二,树莓派系统负载过高或USB供电不足。
处理方式很简单:
- 在VI中给所有LINX通信、TCP通信、延时操作都设定明确的超时时间。
- 检查树莓派供电,建议使用官方或支持5V/3A的电源,避免USB供电波动。
- 按下LabVIEW的“中止执行”按钮停止目标程序,重新部署。
如果你经常写长任务程序,别把主循环和通信逻辑全部放在一个循环里,建议拆成生产者-消费者结构,避免一个阻塞点拖死全局。
5.4 常见问题速查表
| 症状 | 最可能原因 | 排查动作 |
|---|---|---|
| 添加目标时超时 | IP填错/网络隔离/防火墙拦截 | 先ping通,再临时关防火墙,确认同一网段 |
| SSH能登录但部署失败 | 权限不足或残留服务缓存 | 清理~/.linx目录,检查用户名密码 |
| 运行VI后无反应 | 目标未设为启动项/引脚号错误 | 右键设为启动项,确认BCM引脚编号 |
| LED不亮 | 接线限流电阻问题/引脚模式错误 | 用万用表查电压,核对GPIO4物理位置 |
| 运行一会掉线 | 供电不足/无线信号弱/Wi-Fi掉包 | 改用网线,更换电源,降低程序运行速率 |
| 在“我的电脑”下运行VI | 没把树莓派目标设为启动项 | 右键目标,设为启动项,确认项目树层级 |
这条表我建议截图收藏,实际调试时对照着来,真能省不少时间。
6. 一条不走寻常路的实时连接方案(可选)
如果你不想安装LINX,或者想更自由地控制树莓派上的Python生态,可以自建一条TCP通信链路。原理很简单:树莓派上运行一个Python Socket服务端程序,监听某个端口,接收LabVIEW发来的命令字符串,解析后控制GPIO。
我这里给一个极简示例。
树莓派端Python代码(假设监听5000端口,收到字符“on”则点亮GPIO4,收到“off”则熄灭):
import socket import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(4, GPIO.OUT) server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind(('0.0.0.0', 5000)) server.listen(1) while True: conn, addr = server.accept() data = conn.recv(32).decode().strip() if data == 'on': GPIO.output(4, GPIO.HIGH) conn.send(b'led on') elif data == 'off': GPIO.output(4, GPIO.LOW) conn.send(b'led off') else: conn.send(b'unknown command') conn.close()在树莓派上运行这个脚本后,可以通过终端先自测:
echo "on" | nc 192.168.1.188 5000返回led on说明服务正常。
LabVIEW端再使用TCP相关VI:TCP Open Connection指定IP 192.168.1.188和端口5000,TCP Write发送字符串“on”或者“off”,TCP Read读取服务端返回内容,最后TCP Close Connection关闭连接。
这个方案的优势是完全可控,不依赖第三方工具包,并且可以很方便地整合树莓派的摄像头、传感器、PWM等高阶功能。缺点是必须自己维护通信协议,要处理断线重连、粘包拆包等问题,适合后期进阶使用。
就实用性而言,我的建议是:**第一次做树莓派连接项目,无脑用LINX;项目做到后期,功能需求复杂了,再考虑原生TCP方案混合使用。**两者不冲突,LinX也能和原生TCP通信共存,完全可以先用LINX跑通基础GPIO,再用Python做复杂计算,通过TCP接口送回LabVIEW展示。这种混合架构在我做过的模拟项目X里非常稳定,也是我推荐给身边朋友用得最多的一种组合。
根据我个人经验,连接树莓派和LabVIEW这件事,路数对了其实很顺,最怕的是东抄一句西改一段,最后连问题出在哪都不知道。把网络链路、目标部署、模块接口这三层理顺,树莓派在LabVIEW世界里就是一个普通的网络目标,和连一台远程工控机的逻辑没有本质区别。接下来你可以继续研究它的I2C传感器读取、PWM电机控制或者Web前端面板,基础架构都不用变。