树莓派物联网服务器搭建流程:集成 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)…...
运维实战:ESXi主机物理网卡闪断致部分VM网络中断的排查与应急恢复
1. 故障现象与初步判断 那天凌晨2点15分,值班手机突然响起刺耳的告警声。监控系统显示,ESXi主机上的三台关键业务虚拟机网络连接中断,而其他虚拟机却运行正常。这种部分VM断网的情况立刻引起了我的警觉——这通常意味着问题出在物理层而非虚拟…...
【Docker】解放C盘空间:在Win10上利用WSL2迁移Docker镜像存储路径实战
1. 为什么需要迁移Docker镜像存储路径? 很多Windows 10用户在使用Docker进行开发时都会遇到一个头疼的问题:C盘空间莫名其妙就被占满了。我自己就曾经遇到过这种情况,明明没装多少软件,C盘却显示只剩下几个GB的空间。后来发现罪魁…...
保姆级教程:用海思Hi3516EV200的himm命令手动切换IRCUT滤镜(附完整Shell脚本)
海思Hi3516EV200开发板实战:手把手教你用himm命令驱动IRCUT滤镜 在嵌入式视觉项目中,红外截止滤镜(IRCUT)的精准控制往往是决定夜间成像质量的关键。对于使用海思Hi3516EV200开发板的开发者来说,官方文档对GPIO底层操…...
精通SDR++软件定义无线电的3个实战秘籍:从入门到精通的系统指南
精通SDR软件定义无线电的3个实战秘籍:从入门到精通的系统指南 【免费下载链接】SDRPlusPlus Cross-Platform SDR Software 项目地址: https://gitcode.com/GitHub_Trending/sd/SDRPlusPlus SDR作为一款跨平台、开源的软件定义无线电应用,以其简洁…...
从NIST到Interatomic Repository:金属体系L-J势参数高效检索与验证指南
1. 金属模拟中的L-J势参数为何如此重要 我第一次用LAMMPS模拟镁合金拉伸过程时,发现结果和实验数据差了十万八千里。折腾了两周才发现问题出在Lennard-Jones势参数上——当时随便找了个文献值就用,结果模拟出的晶格常数比实际小了15%。这个教训让我明白…...
CAJ转PDF终极指南:3步告别知网格式限制,实现跨平台学术自由
CAJ转PDF终极指南:3步告别知网格式限制,实现跨平台学术自由 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换,成功与否,皆是玄学。 项目地址: https:…...
Cursor Pro自动化工具:跨平台GUI实现与机器码重置技术解析
1. 项目概述:Cursor Pro 自动化工具的诞生与价值作为一名长期与各类开发工具打交道的程序员,我深知一个趁手的“兵器”对效率的提升有多关键。Cursor,这款集成了强大AI能力的代码编辑器,凭借其智能补全、代码解释和重构功能&#…...
AI应用开发模板:基于FastAPI与LangChain的Agent后端快速构建指南
1. 项目概述:一个为AI应用开发者准备的“开箱即用”大脑最近在折腾AI应用开发的朋友,可能都经历过类似的痛苦:想快速验证一个想法,比如做个智能客服、文档问答机器人,或者一个能理解你指令的自动化工具。结果发现&…...
NEO-M9L-20A,支持四系统并发与3D汽车航位推算(ADR)的GNSS模块
简介今天我要向大家介绍的是 u-blox 的模块——NEO-M9L-20A。这是一款基于 u-blox M9 平台的汽车级(AEC-Q104)标准精度GNSS接收模块,专为需要高精度、高可靠性定位的汽车和工业追踪应用而生(如导航、车联网和无人机)。该模块集成了3D惯性测量…...
SpringBoot项目里用Sharding-JDBC做分库分表,这5个配置项最容易踩坑
SpringBoot整合Sharding-JDBC分库分表:五大高频配置陷阱与实战解决方案 当数据库单表数据量突破千万级大关时,分库分表几乎是每个Java开发者必须面对的课题。作为Apache ShardingSphere的核心模块,Sharding-JDBC以其轻量级、低侵入的特性成为…...
