当前位置: 首页 > news >正文

【搭建Node-RED + MQTT Broker实现AI大模型交互】

搭建Node-RED + MQTT Broker实现AI大模型交互

  • 搭建Node-RED + MQTT Broker实现AI大模型交互
    • 一、系统架构
    • 二、环境准备与安装
      • 1. 安装Node.js
      • 2. 安装Mosquitto MQTT Broker
      • 3. 配置Mosquitto
      • 4. 安装Node-RED
      • 5. 配置Node-RED监听所有网络接口
      • 6. 启动Node-RED
    • 三、Node-RED流程配置
      • 1. 创建新流程
      • 2. 添加并配置MQTT In节点
      • 3. 添加并配置处理数据Function节点
      • 4. 添加并配置HTTP Request节点
      • 5. 添加并配置处理响应Function节点
      • 6. 添加并配置MQTT Out节点
      • 7. 添加错误处理
      • 8. 连接节点
      • 9. 部署流程
    • 四、测试系统
      • 1. 创建测试脚本
      • 2. 安装MQTT客户端库
      • 3. 运行测试
    • 五、在其他Linux客户端使用MQTT与系统交互
      • 1. 安装MQTT客户端工具
      • 2. 订阅消息(接收响应)
      • 3. 发送消息(请求AI处理)
      • 4. 使用Python进行交互(可选)
    • 六、系统安全与扩展
      • 安全配置
      • 系统扩展
    • 七、故障排除
    • 八、总结

搭建Node-RED + MQTT Broker实现AI大模型交互

本文档详细记录了使用Node-RED和MQTT Broker构建一个可与DeepSeek AI大模型交互的物联网平台的完整过程。

一、系统架构

[接收设备消息] --> [处理数据] --> [调用DeepSeek API] --> [处理API响应] --> [MQTT Out]
| ^
| |
v |
[错误消息] --> [错误消息接收] --> [MQTT err]

系统主要组件:

  1. 设备/客户端:向MQTT Broker发送请求消息
  2. MQTT Broker:消息代理,处理发布/订阅
  3. Node-RED:流程编排引擎,处理逻辑和API交互
  4. DeepSeek API:AI大模型服务

数据流向:

  1. 设备发布消息到device/data主题
  2. Node-RED订阅并处理消息
  3. Node-RED调用DeepSeek API
  4. Node-RED将响应发布到device/response主题
  5. 设备接收响应

二、环境准备与安装

1. 安装Node.js

首先确保安装了Node.js v18或更高版本:

curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt-get install -y nodejs

验证安装:

node -v

2. 安装Mosquitto MQTT Broker

apt-get update
apt-get install -y mosquitto mosquitto-clients

3. 配置Mosquitto

创建配置文件,允许匿名连接:

cat > /etc/mosquitto/conf.d/default.conf << EOF
listener 1883
allow_anonymous true
EOF

重启Mosquitto服务:

systemctl restart mosquitto

4. 安装Node-RED

npm install -g --unsafe-perm node-red

5. 配置Node-RED监听所有网络接口

修改配置文件:

cat > /root/.node-red/settings.js << EOF
module.exports = {uiPort: process.env.PORT || 1880,uiHost: "0.0.0.0",
}
EOF

6. 启动Node-RED

nohup node-red > node-red.log 2>&1 &

三、Node-RED流程配置

访问Node-RED界面:http://服务器IP:1880/

1. 创建新流程

  1. 点击"+"按钮创建新的流程
  2. 将流程命名为"DeepSeek AI交互"

2. 添加并配置MQTT In节点

  1. 从节点面板中拖动"mqtt in"节点到工作区
  2. 双击节点进行配置:
    • 服务器:点击编辑按钮添加新的MQTT Broker
      • 名称:本地MQTT Broker
      • 服务器:localhost
      • 端口:1883
    • 主题:device/data
    • QoS:2
    • 输出:自动检测(JSON对象、字符串或buffer)
    • 名称:接收设备消息

3. 添加并配置处理数据Function节点

  1. 从节点面板中拖动"function"节点到工作区
  2. 双击节点进行配置:
    • 名称:处理数据
    • 函数代码:
// 处理接收到的设备数据
const deviceData = msg.payload;// 构建发送给DeepSeek API的请求
msg.payload = {"model": "deepseek-chat","messages": [{"role": "system", "content": "你是一个助手。"},{"role": "user", "content": deviceData.message}]
};// 设置请求头
msg.headers = {"Content-Type": "application/json"
};// 设置超时时间为60秒
msg.requestTimeout = 60000;return msg;

4. 添加并配置HTTP Request节点

  1. 从节点面板中拖动"http request"节点到工作区
  2. 双击节点进行配置:
    • 名称:调用DeepSeek API
    • 方法:POST
    • URL:https://api.deepseek.com/chat/completions
    • 返回:解析为JSON对象
    • 在认证选项卡中:
      • 使用:Bearer Authentication
      • Token:您的DeepSeek API Token (例如: sk-b30b58c4056e4149872d87eb9228ed54)
    • 添加请求头:
      • Content-Type: application/json

5. 添加并配置处理响应Function节点

  1. 从节点面板中拖动"function"节点到工作区
  2. 双击节点进行配置:
    • 名称:处理API响应
    • 函数代码:
// 处理DeepSeek API的响应
const response = msg.payload;// 提取AI回复内容
let aiResponse = "";
if (response && response.choices && response.choices.length > 0) {aiResponse = response.choices[0].message.content;
} else {aiResponse = "无法获取有效回复";node.warn("API响应格式不符合预期: " + JSON.stringify(response));
}// 构建回复消息
msg.payload = {"status": "success","response": aiResponse,"timestamp": new Date().toISOString()
};return msg;

6. 添加并配置MQTT Out节点

  1. 从节点面板中拖动"mqtt out"节点到工作区
  2. 双击节点进行配置:
    • 服务器:选择之前创建的本地MQTT Broker
    • 主题:device/response
    • QoS:1
    • 保留:否
    • 名称:MQTT Out

7. 添加错误处理

  1. 从节点面板中拖动"catch"节点到工作区

  2. 双击节点进行配置:

    • 名称:错误消息
  3. 添加处理错误的Function节点:

    • 名称:错误消息接收
    • 函数代码:
// 记录错误
node.error("处理错误: " + JSON.stringify(msg.error));// 构建错误响应
msg.payload = {"status": "error","message": msg.error ? (msg.error.message || "未知错误") : "处理请求时发生错误","code": msg.statusCode || 500,"timestamp": new Date().toISOString()
};// 设置主题(确保错误消息发送到正确的主题)
msg.topic = "device/error";return msg;
  1. 添加用于错误的MQTT Out节点:
    • 服务器:选择之前创建的本地MQTT Broker
    • 主题:device/error
    • QoS:1
    • 保留:否
    • 名称:MQTT err

8. 连接节点

按照以下顺序连接节点:

  1. 接收设备消息 → 处理数据
  2. 处理数据 → 调用DeepSeek API
  3. 调用DeepSeek API → 处理API响应
  4. 处理API响应 → MQTT Out
  5. 错误消息 → 错误消息接收
  6. 错误消息接收 → MQTT err

9. 部署流程

点击右上角的"部署"按钮使配置生效。

四、测试系统

1. 创建测试脚本

创建一个简单的Node.js脚本来测试系统:

cat > /root/test-mqtt.js << EOF
const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://localhost:1883');client.on('connect', function () {console.log('已连接到MQTT Broker');client.subscribe('device/response');client.subscribe('device/error');const testMessage = { deviceId: 'test-001', message: '介绍一下Node-RED的基本功能', timestamp: new Date().toISOString() };console.log('发送测试消息:', testMessage);client.publish('device/data', JSON.stringify(testMessage));
});client.on('message', function (topic, message) {console.log('收到消息,主题:', topic);try { console.log(JSON.parse(message.toString())); } catch(e) { console.log(message.toString()); }
});setTimeout(function() { client.end(); console.log('测试完成,已断开连接'); 
}, 120000);
EOF

2. 安装MQTT客户端库

npm install mqtt

3. 运行测试

node /root/test-mqtt.js

输出结果示例:

已连接到MQTT Broker
发送测试消息: { deviceId: 'test-001',message: '介绍一下Node-RED的基本功能',timestamp: '2025-05-15T06:51:24.069Z' }
收到消息,主题: device/response
{status: 'success',response: 'Node-RED 是一个基于 Node.js 开发的低代码/可视化编程工具,主要用于连接硬件设备、API 和在线服务,构建物联网(IoT)应用或自动化工作流。其核心特点是通过拖放节点(Nodes)和连线(Flows)快速实现数据流处理,无需深入编码。以下是它的基本功能:\n\n1. 可视化流程编排\n   - 节点(Nodes):预置了大量功能模块\n   - 连线(Flows):用连线将节点按逻辑顺序连接\n\n2. 丰富的节点类型\n   - 输入节点:如 HTTP 请求、MQTT 订阅等\n   - 处理节点:函数、延迟、切换等\n   - 输出节点:数据库、API 调用、邮件通知等\n\n3. 易于集成和扩展\n   - 支持各种协议和服务的集成\n   - 可通过npm安装扩展节点',timestamp: '2025-05-15T06:51:42.361Z'
}
测试完成,已断开连接

五、在其他Linux客户端使用MQTT与系统交互

1. 安装MQTT客户端工具

# Debian/Ubuntu系统
sudo apt-get install mosquitto-clients# RHEL/CentOS系统
sudo yum install mosquitto-clients# Arch系统
sudo pacman -S mosquitto

2. 订阅消息(接收响应)

# 订阅响应主题
mosquitto_sub -h 服务器IP -t "device/response" -v# 订阅错误主题
mosquitto_sub -h 服务器IP -t "device/error" -v

3. 发送消息(请求AI处理)

# 发送消息
mosquitto_pub -h 服务器IP -t "device/data" -m '{"deviceId":"linux-001","message":"什么是物联网?","timestamp":"'$(date -Iseconds)'"}'

4. 使用Python进行交互(可选)

import paho.mqtt.client as mqtt
import json
import time
from datetime import datetime# MQTT服务器信息
broker_address = "服务器IP"
port = 1883
pub_topic = "device/data"
sub_topics = ["device/response", "device/error"]# 回调函数 - 连接成功
def on_connect(client, userdata, flags, rc):print("已连接到MQTT Broker")# 订阅主题for topic in sub_topics:client.subscribe(topic)print(f"已订阅主题: {topic}")# 回调函数 - 接收消息
def on_message(client, userdata, msg):print(f"\n收到消息 主题: {msg.topic}")try:payload = json.loads(msg.payload.decode())print(json.dumps(payload, indent=2, ensure_ascii=False))except:print(msg.payload.decode())# 创建客户端
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message# 连接到Broker
client.connect(broker_address, port, 60)# 启动网络循环
client.loop_start()# 发送测试消息
def send_message(message_text):msg = {"deviceId": "python-device-001","message": message_text,"timestamp": datetime.now().isoformat()}print(f"发送消息: {json.dumps(msg, ensure_ascii=False)}")client.publish(pub_topic, json.dumps(msg))# 等待连接建立
time.sleep(1)# 示例查询
send_message("请解释什么是物联网?")# 保持脚本运行以接收响应
try:while True:user_input = input("\n输入问题(输入'exit'退出): ")if user_input.lower() == 'exit':breaksend_message(user_input)time.sleep(1)
except KeyboardInterrupt:print("程序被用户中断")# 断开连接
client.loop_stop()
client.disconnect()

六、系统安全与扩展

安全配置

  1. MQTT安全加强

    • 添加用户名密码认证:修改/etc/mosquitto/conf.d/default.conf
    • 启用TLS加密:配置证书
  2. Node-RED安全加强

    • 添加登录认证:修改settings.js
    • 部署HTTPS:配置证书

系统扩展

  1. 添加Dashboard

    • 安装Node-RED Dashboard节点
    • 创建可视化界面监控系统
  2. 添加数据存储

    • 连接数据库(MySQL/MongoDB)存储交互历史
  3. 支持多种AI模型

    • 扩展Function节点支持其他AI模型API
  4. 设备认证与管理

    • 开发设备注册和认证机制

七、故障排除

  1. 无法连接MQTT Broker

    • 检查防火墙是否开放1883端口
    • 检查Mosquitto服务状态
  2. 无法访问Node-RED

    • 检查防火墙是否开放1880端口
    • 检查Node-RED进程是否运行
  3. API调用失败

    • 检查API Token是否正确
    • 检查网络连接和API地址
    • 检查HTTP Request节点配置
    • 增加请求超时时间
  4. 消息格式错误

    • 确保发送JSON格式消息
    • 确保包含message字段

八、总结

通过本文档,我们就完成了一个基于Node-RED和MQTT Broker的AI交互系统搭建,实现了:

  1. 接收来自设备的MQTT消息
  2. 处理消息并调用DeepSeek AI API
  3. 将AI响应通过MQTT返回给设备
  4. 错误处理和日志记录

这个系统可以作为物联网设备与AI大模型交互的基础平台,可根据实际需求进行扩展和优化。

相关文章:

【搭建Node-RED + MQTT Broker实现AI大模型交互】

搭建Node-RED MQTT Broker实现AI大模型交互 搭建Node-RED MQTT Broker实现AI大模型交互一、系统架构二、环境准备与安装1. 安装Node.js2. 安装Mosquitto MQTT Broker3. 配置Mosquitto4. 安装Node-RED5. 配置Node-RED监听所有网络接口6. 启动Node-RED 三、Node-RED流程配置1. …...

小结: js 在浏览器执行原理

浏览器多进程与多线程 现代浏览器的标签环境隔离主要通过多进程架构和多线程机制实现&#xff0c;以确保安全、性能和稳定性。以下是浏览器实现标签环境隔离的多进程和多线程交互架构的详细解析&#xff1a; ------------------- ------------------- -----------…...

C++核心编程--2 引用

引用就是给变量起别名&#xff0c;操作引用就等于操作原始变量。 2.1 引用基本用法 int var 10; int & r_var var; 2.2 注意事项 声明时必须初始化不允许更改引用指向的原始变量 2.3 引用作为函数参数传递 简化指针修饰函数参数 2.4 引用作为函数返回值 不要返回…...

音频/AI/BLE/WIFI/玩具/商业等方向的论坛网站总结

我爱音频网 我爱音频网 - 我们只谈音频&#xff0c;丰富的TWS真无线蓝牙耳机拆解报告 (52audio.com) 中国人工智能学会 中国人工智能学会 (caai.cn) AIIA人工智能网 https://www.aiiaw.com/ 世界人工智能论坛 世界人工智能论坛 - (amtbbs.org) 36氪 36氪_让一部分人先…...

告别碎片化!MCP 带来 AI Agent 开发生态的革命性突破

引言&#xff1a; 在当今的智能客服系统开发中&#xff0c;开发者常常面临一个棘手的挑战&#xff1a;需要整合用户的 CRM 数据、知识库和实时聊天记录。然而&#xff0c;由于缺乏统一的标准&#xff0c;每个团队都不得不手动实现这些集成。这不仅延长了开发周期&#xff0c;还…...

centos7部署mysql5.7

1.下载mysql的官方yum源 wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm2.安装yum源 yum -y install mysql57-community-release-el7-11.noarch.rpm3.安装秘钥文件 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-20224.安装mysql5.7…...

linux dbus

Linux D-Bus(Desktop Bus)是一种进程间通信(IPC)机制,主要用于Linux桌面环境和系统服务之间的消息传递。它允许不同的应用程序或系统组件以高效、安全的方式相互通信,是现代Linux桌面(如GNOME、KDE)的核心基础设施之一。 1. D-Bus 的核心概念 消息总线(Message Bus):…...

计量——异方差的检验及其修正

目录 1.异方差的检验 1 BP检验 2white检验 2.异方差的修正 1.异方差的检验 1 BP检验 选择检验方法&#xff1a;BP BP检验的实际步骤&#xff08;非机器&#xff09;&#xff1a; 1.y对所有x进行回归&#xff0c;得到残差u。计算残差的平方u^2 2.u^2对所有x进行回归&#…...

操作系统学习笔记第3章 内存管理(灰灰题库)

1. 单选题 某页式存储管理系统中&#xff0c;主存为 128KB&#xff0c;分成 32 块&#xff0c;块号为 0、1、2、3、…、31。某作业有 5 块&#xff0c;其页号为 0、1、2、3、4&#xff0c;被分别装入主存的 3、8、4、6、9 块中。有一逻辑地址为 [3, 70]&#xff08;其中方括号中…...

vue3项目中使用CanvasEditor开箱即用(组件的形式,组件封装好了)

canvas-editor-vue 这是canvas-editor项目的vue版本,我封装成组建了,当然了这是个已经把canvas-editor封装好的的Vue项目 项目地址GitHub地址:GitHub - aini-aini/canvas-editor-vue: this is a project than can be used in vue project as Componentthis is a project than…...

人体肢体工作识别-一步几个脚印从头设计数字生命——仙盟创梦IDE

人体肢体识别是借助计算机视觉、传感器等技术&#xff0c;对人体各肢体的位置、动作、姿态等进行检测与分析的技术。其在医疗健康、智能交互、运动训练、安全监控等多个领域具有重要价值&#xff0c; 示例代码 import cv2 import mediapipe as mp import numpy as np import c…...

【重磅】配电网智能软开关和储能联合规划

目录 1 主要内容 目标函数 数据说明 节点系统图 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现《具有源荷不平衡特性的配电网智能软开关和储能联合规划》部分模型&#xff0c;未考虑聚类分析和分布鲁棒部分&#xff0c;就智能软开关和储能联合规划部分进行了…...

实验6 电子邮件

实验6 电子邮件 1、实验目的 理解电子邮件系统基本结构 理解客户端和服务器端&#xff0c;以及服务器之间的通信 分析理解SMTP&#xff0c;POP3协议 2、实验环境 硬件要求&#xff1a;阿里云云主机ECS 一台。 软件要求&#xff1a;Linux/ Windows 操作系统 3、实验内容…...

NHANES指标推荐:OBS

文章题目&#xff1a;Association between oxidative balance score and all-cause and cancer-specific mortality among cancer survivors DOI&#xff1a;10.3389/fimmu.2025.1541675 中文标题&#xff1a;癌症幸存者氧化平衡评分与全因死亡率和癌症特异性死亡率之间的关联 …...

python-修改图片背景色

在Python中&#xff0c;可以使用图像处理库&#xff08;如OpenCV或Pillow&#xff09;来修改图片的背景色。通常&#xff0c;修改背景色的流程包括以下步骤&#xff1a; 1、对图片进行分割&#xff0c;识别前景和背景。 2、对背景区域进行颜色替换。 下面是两种实现方法&#x…...

数据结构与算法--顺序表--单链表

一 顺序表 需要指向存储位置的基地址分配一段连续的内存用length记录实际的元素的个数&#xff0c;也即顺序表的长度&#xff0c;因为顺序表是允许删除和插入元素的不需要定义数组 1.1 普通结构体数组实现版本&#xff0c;实现白色的点以一定的步长移除画面&#xff0c;大量fo…...

MATLAB安装全攻略:常见问题与解决方案

MATLAB安装常见问题与解决方案 一、系统兼容性验证 安装前需确认操作系统满足MATLAB版本要求&#xff1a; Windows 10版本1903及以上&#xff08;64位&#xff09;macOS Monterey 12.6及以上Ubuntu 22.04 LTS及以上 验证命令示例&#xff1a; # Linux系统验证 lsb_release…...

constexpr 关键字的意义(入门)

author: hjjdebug date: 2025年 05月 15日 星期四 16:03:33 CST description: constexpr 关键字的意义(入门) constexpr 是c11 引入的一个关键字, 代表了一种属性. 文章目录 1. constexpr 修饰的变量, 在编译期间就可以得到其数值.2. constexpr 修饰的函数, 可以在编译期间被调…...

aptitude 深度教程:从基础到生产实践

目录 一、aptitude 基础:核心概念与环境准备 1.1 aptitude 是什么? 1.2 安装与环境配置 二、aptitude 核心操作:从命令行到交互式界面 2.1 命令行基础操作 2.2 交互式界面(TUI)入门 三、高级功能:依赖管理与版本控制 3.1 依赖冲突解决实战 3.2 版本锁定与降级 3…...

嵌入式开发学习日志(数据结构--双链表)Day21

一、双链表 1.定义 双向链表是在单链表的每个结点中&#xff0c;再设置一个指向其钱去节点的指针域。 2、声明文件 3、创建表头 4、头插 5、 遍历 6、尾插、 7、指定插 8、查找 9、修改 10.、删除 11、逆序 12、销毁链表 13、main.c 三、扩展&#xff1a;工程管理工具&#…...

抢购Python代码示例与技术解析

引言&#xff1a;抢购系统的技术挑战 在当今电子商务高度发达的时代&#xff0c;抢购活动已成为各大电商平台吸引用户的重要手段。然而&#xff0c;高并发、低延迟的抢购场景对系统设计提出了严峻挑战。本文将提供一个完整的Python抢购代码示例&#xff0c;并深入分析其技术实…...

undefined reference to CPUAllocatorSingleton::instance

它发生的原因是你声明了 CPUAllocatorSingleton 类中的 instance 变量&#xff0c;但没有提供它的定义。 这个错误是链接器无法找到 CPUAllocatorSingleton::instance 的定义。它发生的原因是你声明了 CPUAllocatorSingleton 类中的 instance 变量&#xff0c;但没有提供它的定…...

【c语言】动态内存分配

文章标题 一、为什么要进行动态内存管理二、malloc和free2.1. malloc2.2. free2.3. 举例 三、calloc和realloc3.1. calloc3.2. realloc 四、常见的动态内存错误4.1. 对NULL指针的解引用操作4.2. 对动态开辟空间的越界访问4.3. 对非动态开辟内存使用free释放4.4. 使用free释放⼀…...

深入理解JavaScript中的闭包:原理、应用与常见问题

引言 闭包(Closure)是JavaScript中一个既强大又容易让人困惑的概念。理解闭包对于成为一名优秀的JavaScript开发者至关重要。本文将深入探讨闭包的工作原理、实际应用场景以及常见问题&#xff0c;帮助你彻底掌握这一重要概念。 什么是闭包&#xff1f; 闭包是指那些能够访问…...

IPLOOK | 2025 MVNOs 世界大会:从Wi-Fi通话到卫星覆盖

2025 MVNOs 世界大会于5月12日至14日在奥地利维也纳举行&#xff0c;汇聚了来自50多个国家的550余位行业领袖&#xff0c;共同探讨移动虚拟网络运营商&#xff08;MVNO&#xff09;领域的变革趋势。本届大会聚焦数字化转型、技术创新与战略合作&#xff0c;其中IPLOOK凭借其创新…...

为什么elasticsearch配置文件JVM配置31G最佳

Elasticsearch的JVM堆内存配置为32GB被视为最佳实践&#xff0c;主要基于以下综合技术原理和性能优化考量&#xff1a; 1. ‌JVM指针压缩机制优化内存效率‌ 当堆内存≤32GB时&#xff0c;JVM启用‌对象指针压缩&#xff08;Compressed Ordinary Object Pointers, COOP&#…...

单片机开发软件

目录 纯编码 vscode Ardunio Keil 1. 集成化开发环境&#xff08;IDE&#xff09; 2. 多架构芯片支持 3. 高效的代码生成与优化 4. 强大的调试与仿真功能 5. 丰富的库函数与生态系统 6. 教育与企业级适用性 典型应用场景 半编码半图形化 STM32CUBEIED 1. 图形化配置…...

Java随机生成邀请码 (包含字母大小写+数字)

前言: 目前我们生成的是6位包含数字和大小写字母的随机邀请码, 并且代码中已经有了处理冲突的机制确保了邀请码的唯一性如(①生成随机邀请码后会检查数据库中是否已存在②如果存在冲突,会尝试最多10次重新生成③如果多次尝试仍失败&#xff0c;会使用"U"用户ID派生的…...

mybatis-plus配置逻辑删除

在实体类中标记软删除字段使用注解 TableLogic 标记该字段为软删除字段 import com.baomidou.mybatisplus.annotation.*;public class YourEntity {// ...其他字段TableLogicprivate Integer isDeleted;// getter/setter }yml配置 # 逻辑已删除值 logicDeleteValue: 2 # 逻辑…...

第二十五天打卡

常见报错类型 try-except-else-finally 语句 首先执行try语句&#xff0c;若正确直接执行else语句 若try语句发生错误&#xff0c;则判断错误类型&#xff0c;执行错误类型对应的except语句&#xff0c;不执行else语句 finally语句无条件执行&#xff0c;多用于资源保存&…...

JESD204 ip核使用与例程分析(一)

JESD204 ip核使用与例程分析(一) JESD204理解JESD204 与JESD204 PHY成对使用原因JESD204B IP核JESD204B IP核特点JESD204B IP核配置第一页第二页第三页第四页JESD204 PHY IP核配置第一页第二页JESD204理解 JESD204B是一种针对ADC、DAC设计的传输接口协议。此协议包含四层, …...

Synchronized详解及高频面试问答

目录 JVM简述 Synchronized详解及面试高频问答 而synchronized是什么&#xff0c;可以解决什么问题&#xff1f; synchronized怎么使用&#xff1f; 锁升级升级了什么&#xff1f; 为什么要这样做锁升级&#xff1f; 锁升级的过程是怎样的&#xff1f;为什么会有偏向锁&…...

【LLIE专题】基于码本先验与生成式归一化流的低光照图像增强新方法

GLARE: Low Light Image Enhancement via Generative Latent Feature based Codebook Retrieval&#xff08;2024&#xff0c;ECCV&#xff09; 专题介绍一、研究背景二、GLARE方法阶段一&#xff1a;正常光照代码本学习&#xff08;Normal-Light Codebook Learning&#xff09…...

26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述

26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述 文章目录 26考研 | 王道 | 计算机组成原理 | 一、计算机系统概述1.1 计算机的发展1.2 计算机硬件和软件1.2.1 计算机硬件的基本组成1.2.2 各个硬件的工作原理1.2.3 计算机软件1.2.4 计算机系统的层次结构1.2.5 计算机系统…...

Linux云计算训练营笔记day08(MySQL数据库)

Linux云计算训练营笔记day08&#xff08;MySQL数据库&#xff09; 目录 Linux云计算训练营笔记day08&#xff08;MySQL数据库&#xff09;数据准备修改更新update删除delete数据类型1.整数类型2.浮点数类型(小数)3.字符类型4.日期5.枚举: 表头的值必须在列举的值里选择拷贝表复…...

从基础到实习项目:C++后端开发学习指南

在当今技术快速迭代的背景下&#xff0c;后端开发作为软件工程的核心支柱持续发挥着关键作用。C凭借其卓越的性能表现和系统级控制能力&#xff0c;依然是构建高性能后端服务的首选语言之一。本文将系统性地解析现代C后端开发的核心技术体系&#xff0c;包括从语言特性精要到架…...

jedis+redis pipeline诡异的链接损坏、数据读取异常问题解决

文章目录 问题现象栈溢出&#xff08;不断的重连&#xff09;读取超时未知响应尝试读取损坏的链接读取到的数据和自己要读的无关&#xff0c;导致空指针、类型转换错误&#xff0c;数据读取错乱 问题写法问题分析修复注意点 问题现象 栈溢出&#xff08;不断的重连&#xff09…...

十、HQL:排序、联合与 CTE 高级查询

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月15日 专栏&#xff1a;Hive教程 Apache Hive 作为大数据领域主流的数据仓库解决方案&#xff0c;其查询语言 HQL (Hive Query Language) 是数据分析师和工程师日常工作的核心。除了基础的 SELECT-FROM-WHERE&#xff0c;HQ…...

数据结构—排序(斐波那契数列,冒泡,选择,插入,快速,归并,图,广度优先算法)

目录 一 斐波那契数列&#xff08;递归算法&#xff09; 定义 原理 二 冒泡排序 定义 排序思路 函数原型 参数详解&#xff1a; 算法分析&#xff1a; 1. 使用函数库的qsort函数 2. 自定义冒泡排序 三 选择排序 定义 排序思路 四 插入排序 定义 排序思路 五 快速…...

NetSuite CSV导入Item Fulfillment的功能测试

上一篇我们说过如何通过CSV导入更新IF上的Department/Class信息&#xff0c;这篇是来测试一下如果SO在Pending Fulfillment的状态下通过CSV导入IF&#xff0c;这个新版本的一个功能&#xff0c;刚好将测试的过程与结果与大家分享~ 准备文件 External ID是外部ID&#xff1b; …...

网络原理 | 网络基础概念复习

目录 网络中的重要概念 IP地址 端口号 协议 五元组 协议分层 OSI七层网络模型 TCP/IP 五层&#xff08;四层&#xff09;模型 网络设备所在的分层 封装和分用 网络中的重要概念 IP地址 IP地址主要用于标识网络主机、其他网络设备的网络地址。在网络数据传输中&#…...

Vsan数据恢复——Vsan上虚拟机不可用,虚拟机组件信息破坏的数据恢复

Vsan数据恢复环境&#xff1a; 一台采用VsSAN分布式文件系统的存储设备由于未知原因关机重启。管理员发现上层的虚拟机不可用&#xff0c;存储内的数据丢失。 Vsan数据恢复过程&#xff1a; 1、将故障存储设备断电&#xff0c;将存储内的硬盘编号后取出。硬件工程师检测后没有发…...

V837s-LAN8720A网口phy芯片调试

目录 前言 一、LAN8720A 芯片概述 二、硬件连接 三、设备树配置 四、内核配置 五、网口调试 总结 前言 在嵌入式系统开发中,网络连接是至关重要的一部分。v837s开发板搭载了LAN8720A系列的网口PHY芯片,用于实现以太网连接。在开发过程中,对于网口的稳定性和性能的调试至…...

C++(12):using声明

目录 一、定义 二、核心用法示例 示例 1:单独引入 std::string 和 std::coun 示例 2:在局部作用域中使用 using 声明 三、对比 using namespace std(不推荐) 四、关键注意事项 1. 名称冲突问题 2. 作用域规则 3. 头文件中的陷阱 五、最佳实践总结 六、完整安全示…...

Xinference 命令大全:从模型部署到管理

Xinference 是一个高性能、分布式的模型推理框架,支持多种大语言模型(LLM)、嵌入模型(Embedding)和图像生成模型。本文将详细介绍 Xinference 的常用命令,涵盖模型启动、管理、监控及 API 调用,帮助你快速掌握其核心功能。 1. 安装与启动 Xinference 1.1 安装 Xinferen…...

如何在线免费压缩PDF文档?

PDF文件太大&#xff0c;通常是因为内部嵌入字体和图片。怎么才能将文件大小减减肥呢&#xff0c;主要有降低图片清晰度和去除相关字体两个方向来实现文档效果。接下来介绍三个免费压缩PDF实用工具。 &#xff08;一&#xff09;iLoveOFD在线转换工具 iLoveOFD在线转换工具&a…...

在Rocky Linux 9.5上部署MongoDB 8.0.9:从安装到认证的完整指南

mongodb 的部署 #安装依赖 yum -y install libcurl openssl #安装mongodb yum -y install https://repo.mongodb.org/yum/redhat/9/mongodb-org/8.0/x86_64/RPMS/mongodb-org-server-8.0.9-1.el9.x86_64.rpm #启动服务 systemctl start mongod.service && system…...

Unix Bourne Shell

本文来源 &#xff1a; 腾讯元宝 Unix Bourne Shell&#xff08;简称sh&#xff09;是Unix系统中最经典的命令行解释器&#xff08;shell&#xff09;&#xff0c;由Stephen Bourne于1977年在贝尔实验室开发&#xff0c;并成为后续众多shell&#xff08;如bash、ksh等&#xff…...

如何在 AWS 上构建支持 AVIF 的前端图片优化方案

一、为什么使用 AVIF 图片格式&#xff1f; 优势点 说明 高压缩率 在相似质量下&#xff0c;AVIF 文件比 JPEG/PNG/WebP 更小&#xff0c;能有效节省带宽和存储空间。 更高画质 即使在低码率下也能保持清晰细节&#xff0c;减少压缩带来的马赛克或模糊问题。 支持透明度 …...

Linux系统进行环境开发环境配置

一. 使用fishros(鱼香肉丝)配置开发环境 对于初学者来说&#xff0c;最难的关卡莫非是开发环境的的搭建&#xff0c;特别是在Ubuntu系统上ROS系统安装时后出现的各种报错以及失败&#xff0c;本篇博客讲述了ROS系统的一键安装过程&#xff0c;适用于18.04及以后的Ubuntu系统版本…...