android - 树莓派和android之间通过wifi的两种方式通信
问题描述
我正在做一个家庭自动化项目,我在这个项目上使用 Python 通过 LAN 连接控制从我的手机(Android)连接到树莓派的灯和继电器。我在我的第一个版本中使用烧瓶 Webserver(Pi) 并在我的手机上请求和 kivy 取得了成功。
然而,对于我的第二个版本,我想要一个更多的双向通信协议,因为目前从 pi 获取数据到手机的唯一方法是通过对请求的响应。第二个版本的目标之一是允许更多的自动化和其他设备切换,因此我希望我的手机在状态变化时得到通知。一种方法是定期检查更改,但我想知道是否可以改为对 pi 进行编程以通知我状态更改。这将更类似于主机-主机网络而不是主机-客户端。目前我能想到的唯一方法是在我的手机和 pi 上安装一个网络服务器。
谢谢您的帮助。
解决方案
另一种可能性是使用MQTT。这是一个轻量级的发布-订阅协议,设计时考虑到了小型设备。
它也运行在 TCP/IP 层上,但是当用于具有功率限制或带宽限制的设备时,它往往是比传统 Web 服务更好的选择。
您可以根据需要添加任意数量的订阅者,以实现双向通信功能。
这是它的一个基本示例:https ://medium.com/@gaikwadchetan93/android-real-time-communication-using-mqtt-9ea42551475d
推荐阅读
- typescript - 如何确保 T['someDynamicField'] 是 K 类型
- android - MediatorLiveData 直接从 ViewModel 绑定到 View
- php - 使用 Imagick 加载 PDF 文件:ERR_CONNECTION_RESET
- datatables - 数据表不保留更新记录的页面
- javascript - 有没有更好的方法来减少多个 if 语句?
- html - 如何在用户将鼠标悬停在具有特定类的 div 上而不显示在其他类上时显示工具提示
- postgresql - 列类型不一致:字符变化和字符变化(30)
- powershell - Powershell WMI 触发器 - 插入特定设备时的操作
- kubernetes - 使用带有 gitlab runner helm chart 和 ci job 的 helm 拉取私有注册表映像时访问被拒绝
- hadoop - Hive/Impala - 在层次结构表中查找结束子节点