开发者社区 问答 正文

使用app inventor通过url向Paho MQTT python发送消息

我通过app inventor发送http消息 通过发送url像图片和下面的代码 我想知道MQTT是否可以接收相同类型的url或JSON 连接客户端并发送消息

from http.server import BaseHTTPRequestHandler, HTTPServer
class RequestHandler_httpd(BaseHTTPRequestHandler):
    def do_GET(self):
        global Request, test, data1, data2, state, case
        messagetosend = bytes('test', "utf")
        self.send_response(200)
        self.send_header('Content-Type', 'text/plain')
        self.send_header('Content-Length', len(messagetosend))
        self.end_headers()
        self.wfile.write(messagetosend)
        Request = self.requestline
        Request = Request[5: int(len(Request)-9)]
        return
    server_address_httpd = ('192.168.66.19', 8080)
    httpd = HTTPServer(server_address_httpd, RequestHandler_httpd)
    httpd.serve_forever()

下面是我尝试使用的带有MQTT客户机的python代码

mqtt.Client(transport="websockets")

但我不确定这是否有效

import paho.mqtt.client as mqtt
from test1 import abc
import datetime

def on_connect(clien, userdata, flags, rc):
    print("connected with" + str(rc))
    client.subscribe("epaper/headphoto")
def on_message(client, userdata, msg):
    print(msg.topic + "" + str(msg.payload))
if __name__ == '__main__':
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    client.connect("loclhost", 1883, 60)
    client.loop_forever()

问题来源StackOverflow 地址:/questions/59384586/using-app-inventor-sending-message-to-paho-mqtt-python-by-url

展开
收起
kun坤 2019-12-26 14:35:12 2586 分享 版权
阿里云 AI 助理回答

在您的场景中,您想通过App Inventor发送HTTP请求,并探讨是否能用MQTT协议以类似方式接收这些消息。实际上,HTTP和MQTT是两种不同的通信协议,分别用于不同的目的和场景。

HTTP(超文本传输协议)是一种基于请求与响应模型的、无状态的、应用层协议,常用于客户端和服务器之间的数据交换。而MQTT(Message Queuing Telemetry Transport)是一个轻量级的消息协议,设计用于设备间(尤其是低带宽、高延迟或不可靠的网络)的高效通信,它基于发布/订阅模式。

要实现从App Inventor发送的数据通过MQTT被Python客户端接收,您需要一个桥梁服务来转换这两种协议的交互。这个桥梁可以是一个简单的服务器应用程序,监听HTTP请求并将其转换为MQTT消息发布到MQTT broker上,或者反过来,监听MQTT主题并在接收到消息时通过HTTP发送出去。

对于您的需求,您可以采取以下步骤:

  1. 建立MQTT Broker:首先确保您有一个MQTT Broker正在运行,比如Mosquitto。这将是所有MQTT客户端连接并交换消息的中心点。

  2. 开发HTTP到MQTT的桥接服务:编写一个简单的Web服务(可以使用Flask等轻量级框架),该服务接收来自App Inventor的HTTP请求,解析请求中的数据(如URL或JSON),然后作为发布者将这些数据发布到MQTT Broker上的特定主题。例如,当App Inventor发送图片URL时,这个服务会捕获URL并将其作为MQTT消息发布。

  3. 修改Python MQTT客户端:您的Python代码已经基本正确设置了MQTT客户端,但需要确保订阅的是与HTTP桥接服务发布的相同主题。同时,确保client.connect的地址是正确的MQTT Broker地址,而非"loclhost"的拼写错误。

  4. App Inventor端:在App Inventor中,构造HTTP请求发送到您刚刚创建的HTTP桥接服务的URL,携带您想要通过MQTT传递的数据。

综上所述,直接让MQTT客户端像HTTP Server那样接收URL或处理HTTP请求是不可能的,因为它们遵循不同的协议。但是,通过构建一个中间件(HTTP-MQTT桥接服务),您可以实现这两个系统间的通信。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答