树莓派物联网服务器搭建流程:集成 Node.js、InfluxDB、Grafana 和 MQTT 协议
目录
一、搭建准备
1. 硬件要求
2. 软件要求
二、技术栈概述
三、搭建步骤
1. 安装操作系统
2. 启动树莓派
3. 更新系统
4. 安装必要的软件
4.1 安装 Python 和 Flask
4.2 安装 Node.js
4.3 安装 Mosquitto(MQTT Broker)
4.4 安装 InfluxDB
4.5 启动 InfluxDB 服务
4.6 安装 Grafana
5. 配置数据源
6. 创建数据库
7. 搭建一个简单的物联网应用
7.1 安装依赖库
7.2 编写 Python 脚本
代码示例
代码说明
8. 运行 Python 脚本
9. 验证数据
9.1 验证 InfluxDB 数据
10. 使用 Grafana 进行数据可视化
10.1 登录 Grafana
10.2 添加数据源
10.3 创建仪表板
10.4 监控数据
11. 总结
随着物联网(IoT)技术的快速发展,使用树莓派搭建自己的物联网服务器成为了许多开发者和爱好者的热门选择。树莓派不仅价格低廉,而且功能强大,适合从简单项目到复杂应用的各种需求。本文将详细介绍如何在树莓派上搭建物联网服务器,涵盖所需的技术栈、搭建步骤以及代码示例。
一、搭建准备
1. 硬件要求
- 树莓派(推荐树莓派 3B+ 或 4B)
- SD卡(至少16GB,推荐使用Class 10)
- 电源适配器(5V/2.5A 或 5V/3A)
- 网络连接(Wi-Fi 或以太网)
2. 软件要求
- Raspbian(或其他支持的操作系统,如 Ubuntu)
- Python 3
- Node.js
- MQTT Broker(Mosquitto)
- InfluxDB
- Grafana
二、技术栈概述
在搭建物联网服务器时,通常会涉及多种技术,包括编程语言、数据库、消息传递协议、数据可视化工具和操作系统。以下是常见技术栈的简要介绍:
-
编程语言:
- Python:用于数据收集和处理,常用框架如 Flask。
- JavaScript:用于前端开发,Node.js 用于服务器端开发。
- Java:用于开发基于 Java 的物联网平台(如 ThingsBoard)。
-
操作系统:
- Raspbian:树莓派的官方操作系统。
- Ubuntu:适用于树莓派的另一个常见 Linux 发行版。
-
数据库:
- InfluxDB:时序数据库,适合存储传感器数据。
- MySQL/MariaDB:关系型数据库。
- SQLite:轻量级数据库,适用于小型项目。
-
消息传递协议:
- MQTT:轻量级的消息队列协议。
- HTTP/HTTPS:基于 REST API 的数据传输协议。
-
服务器软件:
- Node-RED:流式开发工具,用于图形化编程。
- Mosquitto:MQTT Broker。
-
数据可视化工具:
- Grafana:分析与监控平台,用于数据可视化。
- Matplotlib:Python 库,用于生成图表。
三、搭建步骤
1. 安装操作系统
首先,您需要在 SD 卡上安装 Raspbian 操作系统。可以使用 Raspberry Pi Imager 工具。
- 下载并安装 Raspberry Pi Imager。
- 选择操作系统(推荐选择 Raspbian)。
- 选择 SD 卡,点击“写入”。
2. 启动树莓派
- 将 SD 卡插入树莓派,连接电源和网络。
- 使用 HDMI 线连接显示器,启动树莓派。
- 完成初始设置,包括语言、时区、网络配置等。
3. 更新系统
打开终端,运行以下命令更新系统:
sudo apt update
sudo apt upgrade -y
4. 安装必要的软件
4.1 安装 Python 和 Flask
sudo apt install python3 python3-pip -y
pip3 install Flask
4.2 安装 Node.js
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs
4.3 安装 Mosquitto(MQTT Broker)
sudo apt install mosquitto mosquitto-clients -y
启动 Mosquitto 服务:
sudo systemctl enable mosquitto
sudo systemctl start mosquitto
4.4 安装 InfluxDB
添加 InfluxDB 的仓库:
wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/debian stretch stable main" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt update
sudo apt install influxdb -y
4.5 启动 InfluxDB 服务
安装完成后,启动 InfluxDB 服务,并设置其在启动时自动运行:
sudo systemctl start influxdb
sudo systemctl enable influxdb
您可以使用以下命令检查 InfluxDB 的状态:
sudo systemctl status influxdb
4.6 安装 Grafana
Grafana 是一个强大的数据可视化工具,可以与 InfluxDB 集成。安装 Grafana 的步骤如下:
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:grafana/grafana
sudo apt update
sudo apt install -y grafana
启动 Grafana 服务并设置为开机自启:
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
5. 配置数据源
在 Grafana 中配置 InfluxDB 作为数据源:
- 打开浏览器,输入
http://<树莓派的IP地址>:3000访问 Grafana(默认用户名和密码均为admin)。 - 登录后,系统会提示您修改密码,建议立即更改。
- 点击左侧菜单中的“Configuration”(配置)图标,然后选择“Data Sources”(数据源)。
- 点击“Add data source”(添加数据源),选择“InfluxDB”。
- 输入以下配置:
- URL:
http://localhost:8086 - Database: 输入您想要使用的数据库名称(可以在后面创建)。
- User 和 Password: 如果没有设置,可以留空。
- URL:
- 点击“Save & Test”确认配置是否成功。
6. 创建数据库
在 InfluxDB 中创建一个用于存储物联网数据的数据库,例如 iot_data:
influx
进入 InfluxDB 的命令行界面后,运行以下命令:
CREATE DATABASE iot_data
使用以下命令查看创建的数据库:
SHOW DATABASES
7. 搭建一个简单的物联网应用
接下来,我们将创建一个简单的 Python 应用,用于模拟传感器数据并将其发送到 InfluxDB 和 MQTT Broker。
7.1 安装依赖库
在终端中安装 paho-mqtt 和 influxdb Python 库:
pip3 install paho-mqtt influxdb
7.2 编写 Python 脚本
我们将创建一个名为 sensor.py 的 Python 文件,该脚本将模拟传感器数据,并将这些数据发送到 InfluxDB 和 MQTT Broker。下面是完整的代码示例以及相应的说明。
代码示例
import time
import random
import paho.mqtt.client as mqtt
from influxdb import InfluxDBClient# MQTT 配置
MQTT_BROKER = "localhost" # MQTT Broker 地址
MQTT_PORT = 1883 # MQTT Broker 端口
MQTT_TOPIC = "iot/sensor" # MQTT 主题名称# InfluxDB 配置
INFLUXDB_HOST = "localhost" # InfluxDB 地址
INFLUXDB_PORT = 8086 # InfluxDB 端口
INFLUXDB_DATABASE = "iot_data" # InfluxDB 数据库名称# 创建 InfluxDB 客户端
influx_client = InfluxDBClient(INFLUXDB_HOST, INFLUXDB_PORT, database=INFLUXDB_DATABASE)# 创建 MQTT 客户端
mqtt_client = mqtt.Client()# 连接到 MQTT Broker
mqtt_client.connect(MQTT_BROKER, MQTT_PORT)# 发送传感器数据的函数
def send_sensor_data():while True:# 模拟传感器读取数据temperature = random.uniform(20.0, 30.0) # 模拟温度数据(20.0 到 30.0 摄氏度之间)humidity = random.uniform(30.0, 50.0) # 模拟湿度数据(30% 到 50% 之间)# 构建 InfluxDB 数据点json_body = [{"measurement": "sensor_data", # 数据测量的名称"tags": {"device": "raspberry_pi" # 标签,用于标识设备},"fields": {"temperature": temperature, # 温度字段"humidity": humidity # 湿度字段}}]# 写入数据到 InfluxDBinflux_client.write_points(json_body)# 将数据发送到 MQTTmqtt_client.publish(MQTT_TOPIC, f"Temperature: {temperature:.2f}, Humidity: {humidity:.2f}")# 打印发送的数据到控制台print(f"Sent data - Temperature: {temperature:.2f}, Humidity: {humidity:.2f}")time.sleep(5) # 每5秒发送一次if __name__ == "__main__":send_sensor_data()
代码说明
-
导入模块:
import time import random import paho.mqtt.client as mqtt from influxdb import InfluxDBClienttime:用于控制发送数据的时间间隔。random:用于生成模拟的温度和湿度数据。paho.mqtt.client:用于与 MQTT Broker 进行通信的库。influxdb:用于与 InfluxDB 数据库进行交互的库。
-
配置 MQTT 和 InfluxDB:
MQTT_BROKER = "localhost" MQTT_PORT = 1883 MQTT_TOPIC = "iot/sensor"INFLUXDB_HOST = "localhost" INFLUXDB_PORT = 8086 INFLUXDB_DATABASE = "iot_data"- 这里定义了 MQTT 和 InfluxDB 的连接配置。
localhost表示运行在同一台机器上。
- 这里定义了 MQTT 和 InfluxDB 的连接配置。
-
创建 InfluxDB 客户端:
influx_client = InfluxDBClient(INFLUXDB_HOST, INFLUXDB_PORT, database=INFLUXDB_DATABASE)- 创建一个 InfluxDB 客户端对象,用于后续的数据写入。
-
创建 MQTT 客户端:
mqtt_client = mqtt.Client() mqtt_client.connect(MQTT_BROKER, MQTT_PORT)- 创建一个 MQTT 客户端对象并连接到指定的 MQTT Broker。
-
发送传感器数据的函数:
def send_sensor_data():while True:# 模拟传感器读取数据temperature = random.uniform(20.0, 30.0) # 模拟温度数据(20.0 到 30.0 摄氏度之间)humidity = random.uniform(30.0, 50.0) # 模拟湿度数据(30% 到 50% 之间)while True:循环将不断运行,模拟持续读取传感器数据。random.uniform(20.0, 30.0)生成一个介于 20.0 和 30.0 之间的随机浮点数,模拟温度读数。random.uniform(30.0, 50.0)生成一个介于 30.0 和 50.0 之间的随机浮点数,模拟湿度读数。
-
构建 InfluxDB 数据点:
json_body = [{"measurement": "sensor_data", # 数据测量的名称"tags": {"device": "raspberry_pi" # 标签,用于标识设备},"fields": {"temperature": temperature, # 温度字段"humidity": humidity # 湿度字段}} ]- 这里构建一个 JSON 格式的数据点,包含:
- measurement:数据测量的名称(在 InfluxDB 中的表名)。
- tags:用于对数据进行标记的键值对,可以用于过滤和分组。
- fields:实际存储的数据,包括温度和湿度。
- 这里构建一个 JSON 格式的数据点,包含:
-
写入数据到 InfluxDB:
influx_client.write_points(json_body)- 使用
write_points方法将构建的数据点写入 InfluxDB。
- 使用
-
将数据发送到 MQTT:
mqtt_client.publish(MQTT_TOPIC, f"Temperature: {temperature:.2f}, Humidity: {humidity:.2f}")- 使用
publish方法将数据发送到指定的 MQTT 主题。这里使用了格式化字符串,将温度和湿度格式化为两位小数。
- 使用
-
打印发送的数据到控制台:
print(f"Sent data - Temperature: {temperature:.2f}, Humidity: {humidity:.2f}")- 在控制台输出发送的数据,方便调试和查看。
-
设置发送间隔:
time.sleep(5) # 每5秒发送一次- 使用
time.sleep(5)使程序每 5 秒钟发送一次数据,模拟定时的传感器读取。
- 使用
-
主程序入口:
if __name__ == "__main__":send_sensor_data()- 这部分代码确保当脚本作为主程序运行时,调用
send_sensor_data函数开始数据发送。
- 这部分代码确保当脚本作为主程序运行时,调用
8. 运行 Python 脚本
在终端中,您可以使用以下命令运行 Python 脚本:
python3 sensor.py
确保您已经安装了所有必要的依赖库,并且已经启动了 InfluxDB 和 MQTT Broker。运行脚本后,您将看到每 5 秒生成并发送一次的温度和湿度数据,如下所示:
Sent data - Temperature: 24.56, Humidity: 35.78
9. 验证数据
9.1 验证 InfluxDB 数据
您可以在终端中进入 InfluxDB 的命令行界面验证数据是否成功写入:
influx
在 InfluxDB 命令行中,选择数据库并查询数据:
USE iot_data;
SELECT * FROM sensor_data;
这将显示您发送的传感器数据。
使用以下命令行工具来订阅 MQTT 主题:
mosquitto_sub -h localhost -t "iot/sensor"
运行此命令后,您应该能够看到类似以下的输出,显示通过 MQTT 发送的传感器数据:
Temperature: 24.56, Humidity: 35.78
Temperature: 22.34, Humidity: 40.12
Temperature: 25.01, Humidity: 30.45
这表明您的 Python 脚本成功将模拟的温度和湿度数据通过 MQTT Broker 发送出去。
10. 使用 Grafana 进行数据可视化
在成功发送和存储数据后,我们可以使用 Grafana 来可视化这些数据。以下是如何在 Grafana 中创建仪表板以显示传感器数据的步骤。
10.1 登录 Grafana
打开浏览器,访问 Grafana 的界面,通常地址为 http://<树莓派的IP地址>:3000。使用默认的用户名和密码(均为 admin)登录。
10.2 添加数据源
- 登录后,点击左侧菜单中的“Configuration”(配置)图标,然后选择“Data Sources”(数据源)。
- 点击“Add data source”(添加数据源),选择“InfluxDB”。
- 在配置页面中,输入以下信息:
- URL:
http://localhost:8086 - Database: 输入
iot_data(我们之前创建的数据库名称)。 - User 和 Password: 如果没有设置,留空即可。
- URL:
- 点击“Save & Test”确认配置是否成功。
10.3 创建仪表板
- 在 Grafana 左侧菜单中,选择“+”图标,然后选择“Dashboard”(仪表板)。
- 点击“Add new panel”(添加新面板)。
- 在查询部分选择数据源为刚刚添加的 InfluxDB。
- 输入查询语句:
SELECT mean("temperature") AS "Average Temperature" FROM "sensor_data" WHERE $timeFilter GROUP BY time($interval) fill(null)- 此查询将计算传感器数据的平均温度。
- 在“Visualization”选项卡中选择您想要的图表类型(例如,图形、单值等)。
- 点击“Apply”保存面板设置。
- 您可以重复以上步骤以添加更多面板,例如显示湿度数据、实时数据等。
10.4 监控数据
完成以上步骤后,您将能够在 Grafana 中监控和可视化传感器数据。您可以根据需要自定义仪表板,以便更好地展示您感兴趣的数据。
11. 总结
在本篇文章中,我们详细介绍了如何在树莓派上搭建一个物联网服务器,步骤包括:
- 准备工作:选择合适的硬件和软件环境。
- 安装操作系统:在树莓派上安装 Raspbian 操作系统。
- 安装必要的软件:包括 Python、MQTT Broker(Mosquitto)、InfluxDB 和 Grafana。
- 编写数据收集脚本:使用 Python 编写脚本以模拟传感器数据,并将数据发送到 InfluxDB 和 MQTT Broker。
- 验证数据:通过 InfluxDB 和 MQTT 客户端验证数据是否成功存储和发送。
- 使用 Grafana 可视化数据:设置 Grafana,创建仪表板以实时监控传感器数据。
非常感谢您阅读到这里!您的关注和支持是我不断前进的动力。跟随着我探索嵌入式领域,希望因为兴趣而成为嵌入式领域的专家。
在这个快速发展的技术时代,嵌入式系统无处不在,从智能家居到医疗设备,从自动驾驶汽车到工业控制,每一个领域都离不开嵌入式技术的支持。对我来说,嵌入式不仅仅是一门技术,更是一种激情和追求。通过不断学习和实践,我深深爱上了这个充满挑战和机遇的领域。每一次调试成功,每一个创新的实现,都是我继续前行的动力。
——by 极客小张
相关文章:
树莓派物联网服务器搭建流程:集成 Node.js、InfluxDB、Grafana 和 MQTT 协议
目录 一、搭建准备 1. 硬件要求 2. 软件要求 二、技术栈概述 三、搭建步骤 1. 安装操作系统 2. 启动树莓派 3. 更新系统 4. 安装必要的软件 4.1 安装 Python 和 Flask 4.2 安装 Node.js 4.3 安装 Mosquitto(MQTT Broker) 4.4 安装 InfluxDB…...
typescript 断言
/* 断言 确定后期一定是某种格式 可用于表单大对象初始化是空,赋值时有具体字段。前期断言是会是某种格式 */interface obj {name: stringlocation: stringage?: number }// 会报错 // let data: obj { // // } let data: obj {} as obj; // 断言data会有obj里…...
期刊评价指标及其查询方法
1、期刊评价体系一 科睿唯安《期刊引证报告》(Journal Citation Reports, JCR) 科睿唯安每年发布的《期刊引证报告》(Journal Citation Reports, JCR)是一个独特的多学科期刊评价工具。JCR数据库提供基于引文数据的统计信息的期…...
巴斯勒相机(Basler) ACE2 dart 系列说明和软件
巴斯勒相机(Basler) ACE2 dart 系列说明和软件...
【Pycharm中anaconda使用介绍】
在安装好anaconda之后,首先打开anaconda界面,执行以下操作 1.查看Anaconda中当前存在的环境 conda info -e 或者 conda-env list 查看–安装–更新–删除包 conda list: conda search package_name 查询包 conda install package_name conda …...
2024下半年,前端的技术风口来了
“ 你近期有体验过哪些大模型产品呢? 你有使用大模型API做过一些实际开发吗? 在你日常开发中,可以与大模型相关应用结合来完成工作吗? ” **最近,一直在和同事聊,关于前端可以用大模型干点啥ÿ…...
Spock Unit Test in Java
优质博文:IT-BLOG-CN 一、简介 Spock是一个基于Groovy语言的测试和规范框架,使得测试代码更简介,得益于JUnit Runner,Spock兼容大部分IDE和测试框架JUnit/JMock/Powermock等。基于BDD行为驱动开发,功能非常强大。提…...
:= 符号python
在 Python 3.8 及更高版本中,引入了一种新的语法特性,称为"海象运算符"(Walrus Operator),它使用 : 符号。这个运算符的主要目的是在表达式中同时进行赋值和返回赋值的值。 使用海象运算符可以在一些情况下…...
UPLOAD-LABS靶场[超详细通关教程,通关攻略]
---------------------------------------- 靶场环境: 下载链接: https://codeload.github.com/c0ny1/upload-labs/zip/refs/heads/master 使用小皮集成环境来完成这个靶场 将文件放到WWW目录下就可以进行访问 ------------------------------------…...
测试面试宝典(三十七)—— 接口测试中的加密参数如何处理?
1)先了解接口使用的加密方式(md5、rsa...) 2)检查接口测试工具是否支持这种加密方式,如果支持的话,直接使用对应功能就行了(比如Jmeter支持md5);如果加密方式是公司内部特有的算法,可以在接口测试工具中调…...
秋招突击——7/23——百度提前批面试准备和正式面试
文章目录 引言一面准备面试预演一1、讲一下hashcode()和equals()关系2、equals()和有什么区别3、讲一下重载和重写的区别4、讲一下深拷贝、浅拷贝的区别5、讲一下Java异常的基类,运行时异常举几个例子,什么情况下会出现?6、讲一下Java中线程的…...
学习日记:数据类型2
目录 1.转义字符 2.隐式类型转换 2.1 强制类型转换 2.2 不同类型间赋值 3.运算符 表达式 3.1 算术运算符 3.2 算术运算优先级 3.3 赋值运算 3.3.1 不同类型间混合赋值 3.4 逗号运算 4.生成随机数 5. 每日一练 1.转义字符 \n 表示换行 \t …...
Django Web框架——05
文章目录 admin 后台数据库管理注册自定义模型类修改自定义模型类的展现样式模型管理器类再谈Meta类 数据表关联关系映射一对一映射一对多映射多对多映射 cookies 和 sessioncookiessessionCookies vs session admin 后台数据库管理 django 提供了比较完善的后台管理数据库的接…...
【React】项目的目录结构全面指南
文章目录 一、React 项目的基本目录结构1. node_modules2. public3. src4. App.js5. index.js6. .gitignore7. package.json8. README.md 二、React 项目的高级目录结构1. api2. hooks3. pages4. redux5. utils 三、最佳实践 在开发一个 React 项目时,良好的目录结构…...
Django学习(二)
get请求 练习: views.py def test_method(request):if request.method GET:print(request.GET)# 如果链接中没有参数a会报错print(request.GET[a])# 使用这个方法,当查询不到参数时,不会报错而是返回你设置的值print(request.GET.get(c,n…...
Java引用类型
强软弱虚 以 ZGC 为例,谈一谈 JVM 是如何实现 Reference 语义的 SoftReference 到底在什么时候被回收 ? 如何量化内存不足 ? PhantomReference 和 WeakReference 究竟有何不同 ThreadLocal 和 Netty ByteBuf中使用到的引用类型 https://w…...
ubunto安装redis
更新包管理工具 sudo apt update 安装Redis sudo apt install redis-server Redis已经安装并且服务已启动 sudo systemctl status redis-server Redis开机启动项 sudo systemctl enable redis-server 可以编辑配置文件 /etc/redis/redis.conf,然后重启Redis服务 比如…...
【odoo17 | Owl】前端js钩子调用列表选择视图
概要 在我们选择多对一或者多对多字段的时候,经常看到可以弹出列表弹窗让人一目了然的效果,效果如下: 那么,这种效果是odoo本身封装好的组件,我们在平时的前端界面开发的时候,既不是后端视图的情况下&#…...
MATLAB基础:函数与函数控制语句
今天我们继续学习Matlab中函数相关知识。 API的查询和调用 help 命令是最基本的查询方法,可查询所有目录、指定目录、命令、函数。 我们直接点击帮助菜单即可查询所需的API函数。 lookfor 关键字用于搜索相关的命令和函数。 如,我们输入lookfor inpu…...
2024.7.30 搜索插入位置(二分法)
题解 二分法 left和right标记二分区间 ans标记n,因为存在大于所有数的可能。 var searchInsert function(nums, target) {const n nums.length;let left 0, right n - 1, ans n;while (left < right) {//计算中位数let mid ((right - left) >> 1)…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
