msg MQTT message

main
zart 5 months ago
parent 780350d444
commit 9ed7712c25

@ -1,5 +1,9 @@
import paho.mqtt.client as mqtt import paho.mqtt.client as mqtt
import time import time
import os
# 全局变量,用于标记是否收到响应
os.system("bash get_user.sh")
broker = '121.40.129.71' broker = '121.40.129.71'
port = 48835 port = 48835
@ -34,12 +38,14 @@ client.loop_start()
with open("user.txt", "r") as f: with open("user.txt", "r") as f:
user = f.read().strip() user = f.read().strip()
# 发布消息 # # 发布消息
client.publish("request/topic", user, qos=2) # client.publish("request/topic", user, qos=2)
# 等待响应 # 等待响应
response_received = False response_received = False
while not response_received: while not response_received:
# 发布消息
client.publish("request/topic", user, qos=2)
print("等待响应...") print("等待响应...")
time.sleep(1) time.sleep(1)

@ -0,0 +1,4 @@
#!/usr/bin/bash
libcamera-still -o image.jpg --timeout 1000

@ -0,0 +1,57 @@
import os
import paho.mqtt.client as mqtt
import time
broker = '121.40.129.71'
port = 48835
with open("../user.txt", "r") as f:
user_id = f.read().strip()
user_id = user_id.split("=")[-1]
# 回调函数,当客户端收到连接响应时被调用
def on_connect(client, userdata, flags, rc, properties=None):
print("连接结果: " + str(rc))
# 订阅请求主题
client.subscribe("request/{}".format(user_id), qos=2)
# 回调函数,当客户端收到消息时被调用
def on_message(client, userdata, msg):
print("收到消息: " + msg.topic + " " + str(msg.payload))
os.system("cp user.txt user.bak")
# 全局变量,用于标记是否收到响应
global response_received
response_received = True
# 创建客户端实例
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2,)
# 设置回调函数
client.on_connect = on_connect
client.on_message = on_message
# 连接到MQTT代理
client.connect(broker, port, 60)
# 启动一个后台线程来处理网络流量和回调
client.loop_start()
# 发布消息
# 等待响应
response_received = False
while not response_received:
print("等待响应...")
time.sleep(1)
client.publish("response/topic", "Set user.txt success!", qos=2)
# 停止网络循环并断开连接
client.loop_stop()
client.disconnect()
print("收到响应,客户端退出。")

@ -227,4 +227,57 @@ sudo apt-get install <package-name>
这将确保 Redis 在系统启动时自动运行。 这将确保 Redis 在系统启动时自动运行。
通过这些步骤,您应该能够在您的 Raspberry Pi 上成功安装并运行 Redis。 通过这些步骤,您应该能够在您的 Raspberry Pi 上成功安装并运行 Redis。
拍照时间较长可能由以下几个原因造成:
1. **系统性能限制**:树莓派的性能相对于现代桌面计算机较弱,处理图像可能需要更多时间。
2. **图像分辨率设置较高**:较高的分辨率会增加处理时间,尤其是在较慢的存储设备上。
3. **存储设备性能**使用较慢的存储卡例如低速的SD卡会影响写入速度。
4. **摄像头驱动和固件问题**:摄像头的驱动和固件可能不完全优化。
5. **软件设置**:某些软件设置可能会导致额外的处理时间。
### 优化拍照时间的方法
1. **降低图像分辨率**
- 拍照时使用较低的分辨率可以加快处理速度。可以在命令中指定分辨率:
```bash
libcamera-still -o image.jpg -r 640x480
```
2. **使用更快的存储设备**
- 确保使用高速的SD卡建议使用Class 10或更高的SD卡。
3. **优化系统性能**
- 关闭不必要的后台服务和应用程序,释放更多的系统资源给拍照进程。
4. **检查和更新驱动**
- 确保使用最新版本的驱动和固件。您可以运行以下命令更新系统:
```bash
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
```
5. **减少预览时间**
- 拍照前的预览时间可以通过调整参数减少。例如,使用 `--timeout` 参数设置拍照前的延迟时间(单位为毫秒):
```bash
libcamera-still -o image.jpg --timeout 1000
```
6. **避免使用过多处理选项**
- 拍照时避免使用过多的处理选项,例如多次采样、降噪等。
### 示例命令
降低分辨率和减少预览时间的拍照命令:
```bash
libcamera-still -o image.jpg -r 640x480 --timeout 1000
```
通过这些方法,您应该能显著减少拍照的时间。如果问题仍然存在,建议查看摄像头模块的文档,或在树莓派的支持论坛上寻求更多帮助。
Loading…
Cancel
Save