dailiboy 2023-03-18 16:38 采纳率: 14.3%
浏览 18

想做一个智能插座,遇到了一些问题,请有经验的朋友给点帮助。

首先说明,我是个初学者,有些错误的想法,还请各位指点。

准备做一个智能插座,想要达到的目的:能实时获取插座的状态,通过手机对插座的通电与断电进行操作。

我原来的思想是:插座采用ESP8266芯片进行通讯管理,首先通过手机对ESP8266芯片进行配网。配网成功后,链接MQTT服务器,订阅主题,像MQTT服务器发送芯片及用户信息。MQTT服务器收到信息后,请求服务器的API接口,对用户信息和插座信息进行配对添加。

这样无法实现,因为插座订阅的主题必须是已有的,如果都去订阅同一个主题,发送的消息,订阅了的都能收到,也不知道是谁发的。服务器也无法监听MQTT服务器收到的消息。

后来我就换了一个想法:插座采用ESP8266芯片进行通讯管理,首先通过手机对ESP8266芯片进行配网。配网成功后,芯片请求HTTP API接口,像服务器发送 插座和用户信息。服务器添加用户和插座信息,然后服务器调取EMQX提供的API接口,添加对应的主题。添加主题成功后,服务器将主题名称返回给芯片,芯片链接MQTT服务器,订阅对应的主题。实现服务器对插座的指令操作,也可以通过MQTT服务器获取插座的状态。
这个也遇到问题,我采用的是EMQX5.2,它没有提供添加主题的API。

我这两种思想可能存在很大的问题。请有经验的朋友指点一下。给一个解决思路和解决办法。感激不尽。
  • 写回答

1条回答 默认 最新

  • 追cium 2023-03-18 16:44
    关注

    参考GPT和自己的思路:

    首先,针对你的第一个想法,你的困惑确实是有合理性的,因为MQTT通信的确是基于不同主题的消息传递,而不能通过订阅相同主题的方式实现一对一通信。针对这个问题,你可以考虑使用MQTT的QoS(服务质量)特性,通过将消息的QoS设为1或2来确保消息的可靠传送,并通过消息标识(Message Identifier)来区分不同的消息,实现一对一通信。但是,这种方式可能需要你自己实现一些额外的逻辑。

    针对你的第二个想法,使用HTTP API接口来实现插座与服务器的交互确实是一种可行的思路。但是,你提到了服务器需要通过EMQX的API接口来添加主题。虽然EMQX提供了比较丰富的API接口,但是确实不包括添加主题的功能。不过,你可以考虑使用EMQX的Webhook功能,通过配置Webhook来实现自定义添加主题的逻辑。具体来说,你可以将插座和用户信息以及需要订阅的主题信息都发送给服务器,然后服务器根据这些信息创建对应的主题和订阅关系,并通过Webhook发送到EMQX,完成主题添加的操作。这个解决方案需要你对EMQX和Webhook有一定的了解,但是实现起来应该也不是很困难。

    总之,无论采用哪种方案,对于一个初学者来说,芯片和服务器的交互逻辑都是比较复杂的,需要一定的技术功底和实践经验。建议你可以先了解一下MQTT和HTTP通信的基本原理,然后根据具体的需求和技术条件选择适合自己的方案。同时,多查阅一些相关的资料和开源代码,可以帮助你更好地理解和实践。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月18日

悬赏问题

  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本