我通过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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在您的场景中,您想通过App Inventor发送HTTP请求,并探讨是否能用MQTT协议以类似方式接收这些消息。实际上,HTTP和MQTT是两种不同的通信协议,分别用于不同的目的和场景。
HTTP(超文本传输协议)是一种基于请求与响应模型的、无状态的、应用层协议,常用于客户端和服务器之间的数据交换。而MQTT(Message Queuing Telemetry Transport)是一个轻量级的消息协议,设计用于设备间(尤其是低带宽、高延迟或不可靠的网络)的高效通信,它基于发布/订阅模式。
要实现从App Inventor发送的数据通过MQTT被Python客户端接收,您需要一个桥梁服务来转换这两种协议的交互。这个桥梁可以是一个简单的服务器应用程序,监听HTTP请求并将其转换为MQTT消息发布到MQTT broker上,或者反过来,监听MQTT主题并在接收到消息时通过HTTP发送出去。
对于您的需求,您可以采取以下步骤:
建立MQTT Broker:首先确保您有一个MQTT Broker正在运行,比如Mosquitto。这将是所有MQTT客户端连接并交换消息的中心点。
开发HTTP到MQTT的桥接服务:编写一个简单的Web服务(可以使用Flask等轻量级框架),该服务接收来自App Inventor的HTTP请求,解析请求中的数据(如URL或JSON),然后作为发布者将这些数据发布到MQTT Broker上的特定主题。例如,当App Inventor发送图片URL时,这个服务会捕获URL并将其作为MQTT消息发布。
修改Python MQTT客户端:您的Python代码已经基本正确设置了MQTT客户端,但需要确保订阅的是与HTTP桥接服务发布的相同主题。同时,确保client.connect
的地址是正确的MQTT Broker地址,而非"loclhost"的拼写错误。
App Inventor端:在App Inventor中,构造HTTP请求发送到您刚刚创建的HTTP桥接服务的URL,携带您想要通过MQTT传递的数据。
综上所述,直接让MQTT客户端像HTTP Server那样接收URL或处理HTTP请求是不可能的,因为它们遵循不同的协议。但是,通过构建一个中间件(HTTP-MQTT桥接服务),您可以实现这两个系统间的通信。