从 Android 手机设备访问 RaspberryPi (Linux)

从 Android 手机设备访问 RaspberryPi (Linux)

通过使用 Spring,我在 RaspberryPi 上制作了一个应用程序,当我在浏览器中输入“rspi_ip/light”时,它总是会打开 LED。它工作得很好,但我想通过网络从我的另一个 Android 应用程序打开这个 LED。当树莓派和手机位于同一网络时它可以工作,但我想从任何网络打开它。如何使其可以从任何地方访问并确保其安全?我不想在我的路由器上制定任何规则,该系统必须是即插即用的,只需将树莓派连接到任何网络,并且能够从我的手机连接到它,而无需任何其他应用程序(如果可能)。

答案1

这听起来像是 MQTT 的完美用例(类似 HTTP,但具有发布/订阅功能,非常适合物联网项目)。您需要使用 MQTT“代理”,这是一种服务器,您可以将其用作设备之间通信的中间人。我建议研究 MQTT 以获得其工作原理概述

它就像 ngrok 一样,您不必配置任何防火墙设置即可让您的手机和 Raspberry Pi 相互访问。需要通过公共互联网访问经纪人(如果您使用公共经纪人,那么这是有保证的)。

MQTT 客户端库可用于几乎任何常见的编程语言,因此您可以将 Java 用于 Raspberry Pi 应用程序,尽管使用 Python 可能会更简单(有一个很棒的 MQTT 客户端,称为泛美卫生组织)。

无论您选择哪种语言,Raspberry Pi 上的程序都会从​​ MQTT 代理“订阅”“主题”。该主题是从另一台设备发布的,并且包含您想要告诉 LED 的“消息”(例如,/directive/powerState带有消息 的主题ON)。

代理管理和传输消息,并负责确保消息得到传递。您通常通过经纪商拥有的网站上的仪表板设置帐户,他们通常要求您创建用户名和密码(有时是 API 令牌),您可以使用它们将设备连接到经纪商。您可能需要在代理上创建一个“设备”,专门用于为 Raspberry Pi 上的 LED 程序发布/订阅主题和消息。如果您决定将您的项目转换为使用更轻的东西(例如ESP8266),您将能够使用通过经纪人创建的相同凭证和设备。看这一页获取公共经纪人名单。

您的网络浏览器使用 HTTP,这是与 MQTT 不同的协议,因此您需要使用可以连接到 MQTT 的应用程序(iOS 和 Android 上都有许多此类应用程序,以及 Siri/Google Assistant 快捷方式/集成) )。您可以将通过经纪商网站创建的帐户和设备信息放入应用程序中,然后您就可以从手机(任何地方!)控制 Raspberry Pi 上的 LED。

关于安全性,就像 HTTP(使用端口 80)有一个安全版本(HTTPS over TLS 使用端口 443)一样,MQTT(使用端口 1883)也有一个安全版本使用端口 8883 通过 TLS 的安全版本。 MQTT 不应该让您的网络/设备遭受“黑客攻击”,但就像使用纯 HTTP 一样,使用不安全的 MQTT 会让坚定的黑客更容易中间人您的 MQTT 流量(我认为这极不可能)。

相关内容