基于物联网的水质监测系统设计与实现:React前端、Node.js后端与TCP/IP协议的云平台集成(代码示例)
一、项目概述
随着环境保护意识的增强,水质监测在水资源管理和污染防治中变得尤为重要。本项目旨在设计一个基于物联网的水质监测系统,能够实时监测水中的pH值、溶解氧、电导率和浊度等参数,并将数据传输至云端,以便进行分析和可视化。该系统采用低功耗设计,适合在各种环境中长期稳定工作,具有良好的扩展性和用户友好的界面。
二、系统架构
为了满足项目的需求,系统架构选择如下组件和技术:
-
微控制器:采用 ESP32,具备Wi-Fi和蓝牙功能,支持多任务处理。
-
传感器:包括pH传感器、溶解氧传感器、电导率传感器和浊度传感器,能够全面监测水质。
-
通信技术:使用 Wi-Fi 进行数据传输到云端。
-
数据管理与云服务:选择 AWS IoT 作为云平台,使用 DynamoDB 存储数据。
-
前端技术:开发 React 前端应用,提供实时监控和数据可视化功能。
-
后端技术:使用 Node.js 搭建RESTful API,以便与前端和云服务交互。
系统架构图
三、环境搭建
根据系统架构的技术栈,环境搭建的步骤如下:
- ESP32开发环境:
-
安装 Arduino IDE。
-
在Arduino IDE中添加ESP32开发板支持,依次选择
文件 -> 首选项,在“附加开发板管理器网址”中添加以下链接:https://dl.espressif.com/dl/package\_esp32\_index.json -
进入
工具 -> 开发板 -> 开发板管理器,搜索并安装 ESP32。
- AWS IoT 环境:
-
注册AWS账号,并登录AWS管理控制台。
-
创建一个 IoT设备,并下载设备证书和密钥。
-
配置AWS IoT策略,允许设备发布和订阅消息。
- Node.js环境:
-
在本地机器上安装 Node.js。
-
使用npm初始化项目:
mkdir water_quality_monitoring cd water_quality_monitoring npm init -y -
安装所需依赖:
npm install express aws-sdk body-parser cors
- 前端环境:
-
使用
create-react-app创建React项目:npx create-react-app water-quality-frontend cd water-quality-frontend
四、代码实现
在这一部分,我们将实现水质监测系统的代码,涵盖ESP32微控制器的数据采集和传输、Node.js后端API的实现以及React前端应用的基本结构。
1. ESP32微控制器代码
代码示例
以下是ESP32的代码示例,用于读取传感器数据并将其发送到AWS IoT。代码中包含读取pH传感器、溶解氧传感器、电导率传感器和浊度传感器的逻辑。
#include <WiFi.h>
#include <AWS_IOT.h>
#include <DHT.h>// Wi-Fi配置
const char* ssid = "your_SSID"; // Wi-Fi名称
const char* password = "your_PASSWORD"; // Wi-Fi密码// AWS IoT配置
const char* host = "your_aws_iot_endpoint"; // AWS IoT端点
const char* thingName = "your_thing_name"; // IoT设备名称
const char* privateKey = "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"; // 私钥
const char* certificate = "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n"; // 证书AWS_IOT awsIot;// 假设传感器连接在模拟引脚
const int pHSensorPin = 34; // pH传感器引脚
const int doSensorPin = 35; // 溶解氧传感器引脚
const int ecSensorPin = 32; // 电导率传感器引脚
const int turbiditySensorPin = 33; // 浊度传感器引脚void setup() {Serial.begin(115200);WiFi.begin(ssid, password);// 连接到Wi-Fiwhile (WiFi.status() != WL_CONNECTED) {delay(1000);Serial.println("Connecting to WiFi...");}Serial.println("Connected to WiFi");// 连接到AWS IoTawsIot.begin(host, thingName, privateKey, certificate);
}void loop() {// 读取传感器数据float pH = readPHSensor();float doValue = readDOSensor();float ecValue = readECSensor();float turbidity = readTurbiditySensor();// 打印到串口Serial.printf("pH: %.2f, DO: %.2f mg/L, EC: %.2f µS/cm, Turbidity: %.2f NTU\n", pH, doValue, ecValue, turbidity);// 创建JSON字符串String payload = String("{\"pH\":") + pH + ",\"DO\":" + doValue + ",\"EC\":" + ecValue + ",\"Turbidity\":" + turbidity + "}";// 发布到AWS IoTawsIot.publish("water_quality_data", payload.c_str());delay(60000); // 每60秒发送一次数据
}// 读取pH传感器的函数
float readPHSensor() {// 模拟读取传感器值,实际应用中应替换为真实读取逻辑return analogRead(pHSensorPin) * (5.0 / 1023.0); // 示例转换
}// 读取溶解氧传感器的函数
float readDOSensor() {// 模拟读取传感器值return analogRead(doSensorPin) * (5.0 / 1023.0); // 示例转换
}// 读取电导率传感器的函数
float readECSensor() {// 模拟读取传感器值return analogRead(ecSensorPin) * (5.0 / 1023.0); // 示例转换
}// 读取浊度传感器的函数
float readTurbiditySensor() {// 模拟读取传感器值return analogRead(turbiditySensorPin) * (5.0 / 1023.0); // 示例转换
}
代码说明
- Wi-Fi连接:
- 使用
WiFi.begin(ssid, password)连接到指定的Wi-Fi网络,使用循环检查连接状态。
- AWS IoT连接:
- 使用
awsIot.begin(...)初始化与AWS IoT的连接,传入设备的端点、名称、私钥和证书。
- 数据采集:
- 在
loop()函数中,调用readPHSensor()、readDOSensor()、readECSensor()和readTurbiditySensor()函数以读取各个传感器的值。这些函数将模拟读取的传感器值转换为相应的实际数值,示例中使用了一个简单的线性转换公式(实际应用中应根据传感器特性进行相应调整)。
- 数据格式化:
- 使用
String payload创建一个 JSON 字符串,包含 pH、溶解氧 (DO)、电导率 (EC) 和浊度 (Turbidity) 的数据。这个 JSON 字符串将被发送到 AWS IoT。
- 数据发布:
- 使用
awsIot.publish("water_quality_data", payload.c_str())将格式化后的数据发布到指定的主题"water_quality_data"。此主题可以在 AWS IoT 控制台中用于监控和分析数据。
- 数据发送频率:
- 使用
delay(60000)设置每次数据发送之间的间隔为 60 秒。根据需要,可以调整这个时间以满足项目的需求。
2. Node.js 后端 API 实现
为了处理来自 ESP32 的数据,我们需要在 Node.js 中创建一个简单的 RESTful API。该 API 将接收来自 AWS IoT 的数据并存储到 DynamoDB。
代码示例
以下是 Node.js 后端代码的示例:
const express = require('express');
const bodyParser = require('body-parser');
const AWS = require('aws-sdk');
const cors = require('cors');const app = express();
const port = 3000;// AWS DynamoDB配置
AWS.config.update({region: 'us-east-1', // 替换为您的区域accessKeyId: 'your_access_key_id',secretAccessKey: 'your_secret_access_key'
});const dynamoDB = new AWS.DynamoDB.DocumentClient();
const tableName = 'WaterQualityData'; // DynamoDB表名app.use(cors()); // 允许跨域请求
app.use(bodyParser.json()); // 解析JSON请求体// 接收来自ESP32的数据
app.post('/data', (req, res) => {const { pH, DO, EC, Turbidity } = req.body;const params = {TableName: tableName,Item: {id: Date.now(), // 使用时间戳作为唯一IDpH: pH,DO: DO,EC: EC,Turbidity: Turbidity,timestamp: new Date().toISOString() // 添加时间戳}};dynamoDB.put(params, (err) => {if (err) {console.error("Unable to add item. Error JSON:", JSON.stringify(err, null, 2));res.status(500).send("Error saving data");} else {console.log("Added item:", JSON.stringify(params.Item, null, 2));res.status(200).send("Data saved successfully");}});
});app.listen(port, () => {console.log(`Server running at http://localhost:${port}`);
});
代码说明
- 依赖模块:
- 使用
express创建一个简单的 HTTP 服务器,使用body-parser解析 JSON 格式的请求体,使用cors处理跨域请求。
- AWS SDK配置:
- 使用
AWS.config.update设置 AWS 区域和访问密钥,使用DynamoDB.DocumentClient连接到 DynamoDB。
- POST路由:
- 定义一个
/dataPOST 路由,该路由接收 ESP32 发送的水质数据。在路由中,提取请求体中的 pH、DO、EC、Turbidity 数据。
- 数据存储:
- 使用
dynamoDB.put()方法将接收到的数据存储到 DynamoDB 表中。每个数据项包含一个唯一的 ID(使用当前时间戳)和传感器读取值以及时间戳。
- 错误处理:
- 如果存储数据时出现错误,返回 500 状态码并发送错误信息;如果成功,返回 200 状态码并发送成功消息。
3. React 前端应用
前端部分将使用 React 框架开发一个用户界面,允许用户查看水质监测数据。
代码示例
// src/App.js
import React, { useEffect, useState } from 'react';
import axios from 'axios';
import './App.css';function App() {const [data, setData] = useState([]);const [error, setError] = useState('');useEffect(() => {const fetchData = async () => {try {const response = await axios.get('http://localhost:3000/data'); // 假设有一个GET接口返回数据setData(response.data);} catch (err) {setError('Error fetching data');console.error(err);}};fetchData();const interval = setInterval(fetchData, 60000); // 每60秒刷新一次数据return () => clearInterval(interval); // 清理定时器}, []);return (<div className="App"><h1>水质监测数据</h1>{error && <p>{error}</p>}<table><thead><tr><th>时间</th><th>pH值</th><th>溶解氧 (DO)</th><th>电导率 (EC)</th><th>浊度</th></tr></thead><tbody>{data.map((item) => (<tr key={item.id}><td>{item.timestamp}</td><td>{item.pH}</td><td>{item.DO}</td><td>{item.EC}</td><td>{item.Turbidity}</td></tr>))}</tbody></table></div>);
}export default App;
代码说明
- 状态管理:
- 使用
useState钩子管理data和error状态。data用于存储水质监测数据,error用于存储错误信息。
- 数据获取:
-
使用
useEffect钩子在组件挂载时和每次更新时获取数据。通过axios库发送 GET 请求到/data接口(假设后端实现了这个接口以获取存储的数据)。 -
每60秒调用一次
fetchData函数,以确保数据保持最新。
- 错误处理:
- 如果请求失败,设置错误状态,显示错误信息。
- 数据展示:
-
使用 HTML 表格展示水质监测数据,表头包括时间、pH值、溶解氧 (DO)、电导率 (EC) 和浊度。
-
使用
map()方法遍历data数组,生成表格行,显示每个数据项的详细信息。
- 样式:
- 在
src/App.css中可以添加样式以美化界面,例如:
.App {text-align: center;margin: 20px;
}
table {margin: 0 auto;border-collapse: collapse;width: 80%;
}
th, td {border: 1px solid #ddd;padding: 8px;
}
th {background-color: #f2f2f2;
}
4. 数据可视化
为了使数据更具可读性和可视化,可以使用 Chart.js 库绘制图表。以下是如何在上述应用中添加图表的示例:
安装依赖
npm install chart.js react-chartjs-2
更新代码示例以添加图表
下面的代码将绘制 pH 值、溶解氧 (DO)、电导率 (EC) 和浊度的折线图,使用 Chart.js 来可视化数据。
完整代码示例
// src/App.js
import React, { useEffect, useState } from 'react';
import axios from 'axios';
import { Line } from 'react-chartjs-2';
import './App.css';function App() {const [data, setData] = useState([]);const [error, setError] = useState('');useEffect(() => {const fetchData = async () => {try {const response = await axios.get('http://localhost:3000/data'); // 假设有一个GET接口返回数据setData(response.data);} catch (err) {setError('Error fetching data');console.error(err);}};fetchData();const interval = setInterval(fetchData, 60000); // 每60秒刷新一次数据return () => clearInterval(interval); // 清理定时器}, []);// 准备图表数据const chartData = {labels: data.map(item => item.timestamp), // X轴为时间戳datasets: [{label: 'pH值',data: data.map(item => item.pH),borderColor: 'rgba(75,192,192,1)',backgroundColor: 'rgba(75,192,192,0.2)',fill: true,},{label: '溶解氧 (DO)',data: data.map(item => item.DO),borderColor: 'rgba(255,99,132,1)',backgroundColor: 'rgba(255,99,132,0.2)',fill: true,},{label: '电导率 (EC)',data: data.map(item => item.EC),borderColor: 'rgba(54,162,235,1)',backgroundColor: 'rgba(54,162,235,0.2)',fill: true,},{label: '浊度',data: data.map(item => item.Turbidity),borderColor: 'rgba(255,206,86,1)',backgroundColor: 'rgba(255,206,86,0.2)',fill: true,},],};return (<div className="App"><h1>水质监测数据</h1>{error && <p>{error}</p>}<div><h2>水质监测趋势</h2><Line data={chartData} /></div><table><thead><tr><th>时间</th><th>pH值</th><th>溶解氧 (DO)</th><th>电导率 (EC)</th><th>浊度</th></tr></thead><tbody>{data.map((item) => (<tr key={item.id}><td>{item.timestamp}</td><td>{item.pH}</td><td>{item.DO}</td><td>{item.EC}</td><td>{item.Turbidity}</td></tr>))}</tbody></table></div>);
}export default App;
代码说明
- 引入 Chart.js:
- 使用
import { Line } from 'react-chartjs-2'引入折线图组件,允许在应用中绘制图表。
- 准备图表数据:
-
每个数据集都有
label(图例名称)、data(数据点数组)、borderColor(线条颜色)、backgroundColor(填充颜色)和fill(是否填充区域)属性。 -
在组件中创建
chartData对象,该对象包含labels和datasets。 -
labels使用时间戳作为 X 轴的标签。 -
datasets是一个数组,包含不同传感器数据的配置:
- 渲染图表:
- 使用
<Line data={chartData} />组件在应用中渲染图表,显示水质监测数据的趋势。
五、项目总结
本项目设计并实现了一个基于物联网的水质监测系统,旨在实时监测和分析水质参数,以帮助用户及时了解水质状况。通过使用 ESP32 微控制器、多个水质传感器、云服务以及前端可视化技术,系统具备以下几个关键特点:
- 实时数据监测:
- 系统能够实时收集水中的 pH 值、溶解氧、电导率和浊度等重要水质参数。通过编写驱动程序,ESP32 能够稳定地读取传感器数据,并将其通过 Wi-Fi 发送到 AWS IoT 平台。
- 数据存储与分析:
- 通过与 AWS IoT 和 DynamoDB 的结合,系统实现了数据的安全存储和高效管理。后端使用 Node.js 提供 RESTful API,使得数据的接收和存储变得更加灵活可靠。
- 可视化用户界面:
- 前端使用 React 框架开发,提供用户友好的界面,允许用户查看水质数据的历史记录和实时趋势。使用 Chart.js 库进行数据可视化,使得数据更加直观,方便用户进行分析和决策。
- 低功耗设计:
- 系统设计时考虑了低功耗需求,ESP32 的使用使得设备能够长期运行在电池供电或太阳能供电的情况下,适用于各种环境。
- 扩展性与适应性:
- 系统架构具有良好的扩展性,可以根据实际需求添加新的传感器或功能模块。同时,设备设计考虑了防水和耐腐蚀特性,适应水质监测的实际应用场景。
- 安全性:
- 在数据传输过程中实现了数据加密和身份验证,确保系统的安全性和用户隐私。
未来工作方向
尽管本项目已实现基本功能,但仍有若干改进和扩展的方向:
-
增加更多传感器:可以考虑增加新的传感器,例如温度传感器、氨氮传感器等,以提供更全面的水质监测能力。
-
数据分析与机器学习:通过对历史数据进行分析,利用机器学习算法进行异常检测和预测,帮助用户提前预警水质问题。
-
移动应用开发:开发移动端应用,让用户可以随时随地监控水质数据并接收预警信息。
相关文章:
基于物联网的水质监测系统设计与实现:React前端、Node.js后端与TCP/IP协议的云平台集成(代码示例)
一、项目概述 随着环境保护意识的增强,水质监测在水资源管理和污染防治中变得尤为重要。本项目旨在设计一个基于物联网的水质监测系统,能够实时监测水中的pH值、溶解氧、电导率和浊度等参数,并将数据传输至云端,以便进行分析和可…...
Vcpkg安装指定版本包或自定义安装包
在使用 vcpkg 安装特定版本的包或自定义包时,你可以按照以下步骤进行操作: 安装特定版本的包 列出可用的版本: 使用以下命令列出特定包的所有可用版本: vcpkg search <package-name>安装特定版本: 使用 vcpkg …...
【C++深度探索】红黑树实现Set与Map的封装
🔥 个人主页:大耳朵土土垚 🔥 所属专栏:C从入门至进阶 这里将会不定期更新有关C/C的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目录…...
终于有人把客户成功讲明白了
作者:沈建明 对ToB企业来说,只有客户成功才能带来持久增长,在SaaS企业下行大背景下,客户成功是唯一的救命稻草。大家是不是都听过这样的说法? ToB和SaaS企业的老客户贡献对于企业至关重要。因为获取新客户的成本是留…...
[新械专栏] 肾动脉射频消融仪及一次性使用网状肾动脉射频消融导管获批上市
近日,国家药品监督管理局批准了上海魅丽纬叶医疗科技有限公司“肾动脉射频消融仪”和“一次性使用网状肾动脉射频消融导管”两个创新产品注册申请。 肾动脉射频消融仪由主机、脚踏开关、主机连接线、中性电极连接线以及电源线组成。一次性使用网状肾动脉射频消融导…...
leetcode-119-杨辉三角II
原理: 1、初始化每行一维数组nums[1]; 2、从第2行开始,在nums的头插入0(因为杨辉三角每行的第一个1相当于是上一行的1与其前面的0相加之和)后进行相加操作。 代码:...
【第八节】python正则表达式
目录 一、python中的re模块 1.1 基本匹配和搜索 1.2 替换和分割 1.3 编译正则表达式 二、正则表达式对象 2.1 re.RegexObject 和 re.MatchObject 2.2 正则表达式修饰符 - 可选标志 2.3 正则表达式模式 2.4 正则表达式实例 一、python中的re模块 正则表达式是一种独特的…...
三大浏览器Google Chrome、Edge、Firefox内存占用对比
问题 Chrome、Edg、Firefox三家究竟谁的占用少 结论 打开一个页面内存占用 Firefox>Edge>Chrome 打开打量页面内存占用 Firefox>Chrome>Edge 从监视器可以看到Edge增加一个页面增加一个页面不到100M而其它浏览器需要150M左右;Firefox浏览器主线程内存占用800M比…...
【wiki知识库】08.添加用户登录功能--后端SpringBoot部分
目录 一、今日目标 二、SpringBoot后端实现 2.1 新增UserLoginParam 2.2 修改UserController 2.3 UserServiceImpl代码 2.4 创建用户上下文工具类 2.5 通过token校验用户(重要) 2.6 创建WebMvcConfig 2.7 用户权限校验拦截器 一、今日目标 上篇…...
vue中nextTick的作用
nextTick是Vue.js提供的一个非常有用的方法,其主要作用是在DOM更新之后执行延迟回调函数。以下是nextTick的具体作用及其实现原理的详细解析: nextTick的作用 确保DOM更新完成: 当Vue实例的数据发生变化时,Vue会异步地更新DOM。…...
计算机网络面试-核心概念-问题理解
目录 1.计算机网络OSI协议七层结构功能分别是什么?如何理解这些功能 2.物理层、数据链路层、网络层、传输层和应用层,这五个层之间功能的关系,或者说是否存在协调关系 3. 数据链路层功能理解 4.MAC地址和以太网协议 5.以太网协议中的CSMA…...
go语言创建协程
前言 Go 语言中,协程是通过 go 关键字来创建的,这使得 Go 语言成为实现并发程序的一个非常直观和强大的工具。Go 运行时管理着协程,这些协程在内部被称为 goroutine。 协程(goroutines)本身是轻量级的线程,…...
RabbitMQ之基于注解声明队列交换机:使用@RabbitListener实现消息监听
文章目录 什么是RabbitListener?队列和交换机的基本概念使用RabbitListener注解声明队列和交换机代码解析1. QueueBinding2. 消费者方法 运行原理应用场景总结 在现代的微服务架构中,消息队列是一种重要的异步通信机制。RabbitMQ作为一种流行的消息代理软…...
【grafana 】mac端grafana配置的文件 grafana.ini 及login
brew services start grafana 以后,怎么知道mac端的配置文件的路径 brew services restart grafana#brew services start grafana在macOS上使用Homebrew安装并启动Grafana服务后,通常的配置文件路径是在以下两个位置之一: Homebrew默认配置文件路径:/usr/local/etc/grafana…...
程序员如何在人工智能时代保持核心竞争力
目录 1.概述 1.1. 技术深度与广度的平衡 1.2. 软技能的培养 1.3. 持续学习和适应性 1.4. 理解和应用AI 1.5. 伦理和责任意识 2.AI辅助编程对程序员工作的影响 2.1.AI工具对编码实践的积极影响 2.2.AI工具的潜在风险 2.3.如何平衡利与弊 3.程序员应重点发展的核心能力…...
回溯排列+棋盘问题篇--代码随想录算法训练营第二十三天| 46.全排列,47.全排列 II,51. N皇后,37. 解数独
46.全排列 题目链接:. - 力扣(LeetCode) 讲解视频: 组合与排列的区别,回溯算法求解的时候,有何不同? 题目描述: 给定一个不含重复数字的数组 nums ,返回其 所有可能…...
ESXI加入VMware现有集群提示常规性错误
集群内有vSphere6.5和6.7的版本,都开启了EVC 这台老服务器是DELL R710添加时报错,网上查了些资料说要重装ESXI或者关闭EVC等等 最终解决方法是,给这台ESXI配置一个NTP服务器,同步系统时间,之后即可正常加入集群 往期文…...
数字噪音计(声级计)【AR814数字噪音计】
系统介绍 声级计,又叫噪音计,是噪声测量中最基本的仪器。声级计一般由电容式传声器、前置放大器、衰减器、放大器、频率计权网络以及有效值指示表头等组成。 声级计的工作原理是:由传声器将声音转换成电信号,再由前置放大器放大…...
【Vue3】图片未加载成功前占位
背景 在写项目时,加载图片未成功前,会出现空白页面,太影响美观和体验感 解决方案 1. element ui通过slot占位符解决 2. 自定义指令 原生img标签可以通过自定义指令解决,img标签有onload和onerror事件,都是在渲染成…...
AbstractQueuedSynchronizer之AQS
目录 AQS简单入门为什么说AQS是JUC包下的重要基石AQS能干嘛?实际实现原理AQS自身成员变量Node内部类的成员变量源码解读总结 AQS简单入门 AQS是抽象的队列同步器,是用来实现锁或者其它同步器组件的公共基础部分的抽象实现,是重量级基础框架及…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
