智慧大棚数据库版

创建一个SMartBigHouse数据库

在数据库创建一个表用来存储数据 这边将id设为主键并将标识增量设为1

搭建Winfrom

搭建历史查询界面

串口数据,(这边是用的一个虚拟的串口工具,需要的话私)

 ModbusSerialMaster master;DataPointCollection wenduValues; //温度DataPointCollection shiduValues; //湿度DataPointCollection yangqiValues; //氧气DataPointCollection fengsuValues; //风速public Form1(){InitializeComponent();#region 串口数据serialPort1.PortName = "COM2";serialPort1.BaudRate = 9600;serialPort1.Parity = System.IO.Ports.Parity.None;serialPort1.DataBits = 8;serialPort1.StopBits =(StopBits)1;#endregion//使用nmodbus4第三方进行数据读取master = ModbusSerialMaster.CreateRtu(serialPort1);serialPort1.Open();//初始化图表数据wenduValues = chart1.Series[0].Points;shiduValues = chart1.Series[1].Points;yangqiValues = chart1.Series[2].Points;fengsuValues = chart1.Series[3].Points;//设置数据点文本 #VALY :Y轴的数据值chart1.Series[0].Label = "#VALY℃";chart1.Series[1].Label = "#VALY%RH";chart1.Series[2].Label = "#VALY%VOL";chart1.Series[3].Label = "#VALYM/S";// 设置鼠标悬浮时候显示文本,chart1.Series[0].XValueType = ChartValueType.String;chart1.Series[1].XValueType = ChartValueType.String;chart1.Series[2].XValueType = ChartValueType.String;chart1.Series[3].XValueType = ChartValueType.String;chart1.Series[0].ToolTip = "#VALX:#VALY℃";//11-12-30:28℃chart1.Series[1].ToolTip = "#VALX:#VALY%RH";chart1.Series[2].ToolTip = "#VALX:#VALY%VOL";chart1.Series[3].ToolTip = "#VALX:#VALYM/S";//设置x可以使用鼠标选中进行局部放大效果chart1.ChartAreas[0].CursorX.IsUserEnabled = true;//是否允许用户操作x轴chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;//是否允许用户选择滚动条;//设置滚动条样式chart1.ChartAreas[0].AxisX.ScrollBar.BackColor = Color.Red; //滚动条的整体颜色chart1.ChartAreas[0].AxisX.ScrollBar.ButtonColor = Color.Green;//滚动条按钮的颜色}
开始停止
private void button2_Click(object sender, EventArgs e)
{if (timer1.Enabled){timer1.Stop();}else{timer1.Start();}
}
定时器的事件
 double? lastWendu = null; //上一个温度double? lastShiDu = null;double? lastYangQi = null;double? lastFengSu = null;private void timer1_Tick(object sender, EventArgs e){DateTime d1 = DateTime.Now;string time = d1.ToString("HH-mm-ss");double ? nowWendu = null; //当前温度double ? nowShiDu = null;double ? nowYangQi = null;double? nowFengSu = null;if (checkBox1.Checked) //温度选中{//ReadHoldingRegisters 读取寄存器的数据ushort[] values =  master.ReadHoldingRegisters(1, 0x000, 1);nowWendu = values[0] / 10;//当前温度wenduValues.AddXY(time, nowWendu);lastWendu = nowWendu ?? lastWendu; //记录当前温度,}else //温度未选中{int index =  wenduValues.AddXY(time,lastWendu); //添加x轴时间 y轴数据 index添加点的索引值DataPoint point =  wenduValues[index]; //找到隐藏点point.Color = Color.Transparent;//设置为透明颜色}if (wenduValues.Count == 11){wenduValues.RemoveAt(0); //保留界面只有20个点}if (checkBox2.Checked) //湿度选中{//ReadHoldingRegisters 读取寄存器的数据ushort[] values = master.ReadHoldingRegisters(1, 0x001, 1);nowShiDu = values[0] / 10;shiduValues.AddXY(time, nowShiDu);lastShiDu = nowShiDu ?? lastShiDu;}else //湿度选中{int index = shiduValues.AddXY(time, lastShiDu); //添加x轴时间 y轴数据 index添加点的索引值DataPoint point = shiduValues[index]; //找到隐藏点point.Color = Color.Transparent;//设置为透明颜色}if (shiduValues.Count == 11){shiduValues.RemoveAt(0); //保留界面只有20个点}if (checkBox3.Checked) //湿度选中{//ReadHoldingRegisters 读取寄存器的数据ushort[] values = master.ReadHoldingRegisters(1, 0x002, 1);nowYangQi = values[0] / 10;yangqiValues.AddXY(time, nowYangQi);lastYangQi = nowYangQi ?? lastYangQi;}else //湿度选中{int index = yangqiValues.AddXY(time, lastYangQi); //添加x轴时间 y轴数据 index添加点的索引值DataPoint point = yangqiValues[index]; //找到隐藏点point.Color = Color.Transparent;//设置为透明颜色}if (yangqiValues.Count == 11){yangqiValues.RemoveAt(0); //保留界面只有20个点}if (checkBox4.Checked) //湿度选中{//ReadHoldingRegisters 读取寄存器的数据ushort[] values = master.ReadHoldingRegisters(1, 0x003, 1);nowFengSu = values[0] / 10;fengsuValues.AddXY(time, nowFengSu);lastFengSu = nowFengSu ?? lastFengSu;}else //湿度选中{int index = fengsuValues.AddXY(time, lastFengSu); //添加x轴时间 y轴数据 index添加点的索引值DataPoint point = fengsuValues[index]; //找到隐藏点point.Color = Color.Transparent;//设置为透明颜色}if (fengsuValues.Count == 11){fengsuValues.RemoveAt(0); //保留界面只有20个点}//添加到数据库里面//1 连接数据库 数据库的配置在App.config进行配置//2 创建数据库操作文件,sqlhelper文件 把数据库的增删改查操作封装的sqlhelper文件//3 在使用数据库操作的时候调用sqlhelper方法即可//组织sql语句  update("")string sql = "insert into Log (time,wendu,shidu,o2,fengsu) values('{0}',{1},{2},{3},{4})";string w = nowWendu is null?"NULL":((nowWendu??0)*10).ToString(); //string s = nowShiDu is null ? "NULL" : ((nowShiDu ?? 0) * 10).ToString();string y = nowYangQi is null ? "NULL" : ((nowYangQi ?? 0) * 10).ToString();string f = nowFengSu is null ? "NULL" : ((nowFengSu ?? 0) * 10).ToString();sql = string.Format(sql, d1.ToString(), w, s, y, f);SqlHelper.Update(sql);}

//添加到数据库里面
//1 连接数据库 数据库的配置在App.config进行配置
//2 创建数据库操作文件,sqlhelper文件 把数据库的增删改查操作封装的sqlhelper文件
//3 在使用数据库操作的时候调用sqlhelper方法即可

 //组织sql语句  update("")string sql = "insert into Log (time,wendu,shidu,o2,fengsu) values('{0}',{1},{2},{3},{4})";string w = nowWendu is null?"NULL":((nowWendu??0)*10).ToString(); //string s = nowShiDu is null ? "NULL" : ((nowShiDu ?? 0) * 10).ToString();string y = nowYangQi is null ? "NULL" : ((nowYangQi ?? 0) * 10).ToString();string f = nowFengSu is null ? "NULL" : ((nowFengSu ?? 0) * 10).ToString();sql = string.Format(sql, d1.ToString(), w, s, y, f);SqlHelper.Update(sql);
跳转功能
private void button4_Click(object sender, EventArgs e)
{Form2 f2 = new Form2();f2.Show();
}
这边添加一个SqlHelper封装方法
internal class SqlHelper
{// 数据库连接信息,需要读取项目配置中的数据库连接信息//点击引用 ---》添加引用---》搜索ConfigurationManager ---》找到system.ConfigurationManager --->确定即可private static string connString = ConfigurationManager.ConnectionStrings["Serial"].ConnectionString;/// <summary>/// 根据传入的Sql执行第一行第一列的查询操作/// </summary>/// <param name="sql">要执行的Sql</param>/// <returns>第一行第一列的结果,其他数据将会被忽略,如果没有查询到任何数据返回null</returns>public static object GetSingleValue(string sql){using (SqlConnection conn = new SqlConnection(connString)){using (SqlCommand cmd = new SqlCommand(sql, conn)){try{conn.Open();object res = cmd.ExecuteScalar();return res;}catch (Exception ex){// 记录日志File.AppendAllText("sqlError.log", $"[{DateTime.Now}] (SQL:{sql}) {ex.Message}");throw ex;}}}}/// <summary>/// 根据传入的Sql执行第一行第一列的查询操作/// </summary>/// <param name="sql">要执行的Sql</param>/// <param name="parameters">给Sql中添加的参数列表</param>/// <returns>第一行第一列的结果,其他数据将会被忽略,如果没有查询到任何数据返回null</returns>public static object GetSingleValue(string sql, SqlParameter[] parameters){using (SqlConnection conn = new SqlConnection(connString)){using (SqlCommand cmd = new SqlCommand(sql, conn)){// 添加参数cmd.Parameters.AddRange(parameters);try{conn.Open();object res = cmd.ExecuteScalar();return res;}catch (Exception ex){// 记录日志File.AppendAllText("sqlError.log", $"[{DateTime.Now}] (SQL:{sql}) {ex.Message}");throw ex;}}}}/// <summary>/// 执行增删改操作/// </summary>/// <param name="sql">要执行的Sql</param>/// <returns>受影响的行数</returns>/// Update("insert into")public static int Update(string sql){using (SqlConnection conn = new SqlConnection(connString)){using (SqlCommand cmd = new SqlCommand(sql, conn)){try{conn.Open();int res = cmd.ExecuteNonQuery();return res;}catch (Exception ex){// 记录日志File.AppendAllText("sqlError.log", $"[{DateTime.Now}] (SQL:{sql}) {ex.Message}");throw ex;}}}}/// <summary>/// 执行增删改操作/// </summary>/// <param name="sql">要执行的Sql</param>/// <param name="parameters">Sql中携带的参数</param>/// <returns>受影响的行数</returns>public static int Update(string sql, SqlParameter[] parameters){using (SqlConnection conn = new SqlConnection(connString)){using (SqlCommand cmd = new SqlCommand(sql, conn)){cmd.Parameters.AddRange(parameters); // 添加参数try{conn.Open();int res = cmd.ExecuteNonQuery();return res;}catch (Exception ex){// 记录日志File.AppendAllText("sqlError.log", $"[{DateTime.Now}] (SQL:{sql}) {ex.Message}");throw ex;}}}}/// <summary>/// 执行查询操作/// </summary>/// <param name="sql">要执行的sql</param>/// <returns>查询结果的SqlDataReader</returns>public static SqlDataReader GetValue(string sql){SqlConnection conn = new SqlConnection(connString);SqlCommand cmd = new SqlCommand(sql, conn);try{conn.Open();SqlDataReader res = cmd.ExecuteReader();return res;}catch (Exception ex){// 记录日志File.AppendAllText("sqlError.log", $"[{DateTime.Now}] (SQL:{sql}) {ex.Message}");throw ex;}}
}

历史查询界面

DataPointCollection wenduValues; //温度
DataPointCollection shiduValues; //湿度
DataPointCollection yangqiValues; //氧气
DataPointCollection fengsuValues; //风速
public Form2()
{InitializeComponent();DateTime d1 = DateTime.Now;d1 = d1.AddHours(24-d1.Hour); //24-当前小时  d1 = d1.AddMinutes(-d1.Minute);d1 = d1.AddSeconds(-d1.Second);dateTimePicker1.MaxDate = d1;//结束时间最大值的要求 :开始时间的后的一天dateTimePicker2.MaxDate = d1;//首次触发dateTimePicker1_ValueChanged 手动调用一次dateTimePicker1_ValueChanged(null, null);dataGridView1.AutoGenerateColumns = false;// 表格禁止自动生成列//初始化图表数据wenduValues = chart1.Series[0].Points;shiduValues = chart1.Series[1].Points;yangqiValues = chart1.Series[2].Points;fengsuValues = chart1.Series[3].Points;//设置数据点文本 #VALY :Y轴的数据值chart1.Series[0].Label = "#VALY℃";chart1.Series[1].Label = "#VALY%RH";chart1.Series[2].Label = "#VALY%VOL";chart1.Series[3].Label = "#VALYM/S";// 设置鼠标悬浮时候显示文本,chart1.Series[0].XValueType = ChartValueType.String;chart1.Series[1].XValueType = ChartValueType.String;chart1.Series[2].XValueType = ChartValueType.String;chart1.Series[3].XValueType = ChartValueType.String;chart1.Series[0].ToolTip = "#VALX:#VALY℃";//11-12-30:28℃chart1.Series[1].ToolTip = "#VALX:#VALY%RH";chart1.Series[2].ToolTip = "#VALX:#VALY%VOL";chart1.Series[3].ToolTip = "#VALX:#VALYM/S";//设置x可以使用鼠标选中进行局部放大效果chart1.ChartAreas[0].CursorX.IsUserEnabled = true;//是否允许用户操作x轴chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;//是否允许用户选择滚动条;//设置滚动条样式chart1.ChartAreas[0].AxisX.ScrollBar.BackColor = Color.Red; //滚动条的整体颜色chart1.ChartAreas[0].AxisX.ScrollBar.ButtonColor = Color.Green;//滚动条按钮的颜色}
查询功能
清空之前的数据
 wenduValues.Clear();shiduValues.Clear();yangqiValues.Clear();fengsuValues.Clear();
1查询数据
string sql = $"select id,time,wendu,shidu,o2,fengsu from Log where time >='{dateTimePicker1.Value}' and time<='{dateTimePicker2.Value}'";List<Log> list = new List<Log>();
3调用查询数据库方法 进行list添加数据
SqlDataReader sr =  SqlHelper.GetValue(sql); //读取一条之后 放到sr对象中while (sr.Read()) // 如果能读到数据{list.Add(new Log(){id = Convert.ToInt16(sr["id"]),time = Convert.ToDateTime(sr["time"]),// DBNull 数据的null、 如果数据库wendu为空,表格显示未记录,如果不为空 取出除以10wendu = sr["wendu"] is DBNull ? "未记录" : ((Convert.ToInt16(sr["wendu"]) / 10).ToString()),shidu = sr["shidu"] is DBNull ? "未记录" : ((Convert.ToInt16(sr["shidu"]) / 10).ToString()),o2 = sr["o2"] is DBNull ? "未记录" : ((Convert.ToInt16(sr["o2"]) / 10).ToString()),fengsu = sr["fengsu"] is DBNull ? "未记录" : ((Convert.ToInt16(sr["fengsu"]) / 10).ToString()),}); }sr.Close();dataGridView1.DataSource = list; //设置表格数据源
添加图表数据 把查询到list数据添加到图表中
    for(int i = 0; i < list.Count; i++){Log log = list[i]; //遍历string time = log.time.ToString(); //取时间if(log.wendu == "未记录" && wenduValues.Count>0) //温度未被存到数据库里面,{// 设置点为透明颜色//wenduValues[i - 1].YValues 添加前一个点的y坐标 wenduValues.AddXY(time, wenduValues[i - 1].YValues[0]);DataPoint p = wenduValues[i];p.Color = Color.Transparent;// 设置为透明颜色}else  //温度有数据 把数据添加图标上{wenduValues.AddXY(time, log.wendu); //添加点}if (log.shidu == "未记录" && shiduValues.Count > 0) //温度未被存到数据库里面,{// 设置点为透明颜色//wenduValues[i - 1].YValues 添加前一个点的y坐标 shiduValues.AddXY(time, shiduValues[i - 1].YValues[0]);DataPoint p = shiduValues[i];p.Color = Color.Transparent;// 设置为透明颜色}else  //温度有数据 把数据添加图标上{shiduValues.AddXY(time, log.shidu); //添加点}if (log.o2 == "未记录" && yangqiValues.Count > 0) //温度未被存到数据库里面,{// 设置点为透明颜色//wenduValues[i - 1].YValues 添加前一个点的y坐标 yangqiValues.AddXY(time, yangqiValues[i - 1].YValues[0]);DataPoint p = yangqiValues[i];p.Color = Color.Transparent;// 设置为透明颜色}else  //温度有数据 把数据添加图标上{yangqiValues.AddXY(time, log.o2); //添加点}if (log.fengsu == "未记录" && fengsuValues.Count > 0) //温度未被存到数据库里面,{// 设置点为透明颜色//wenduValues[i - 1].YValues 添加前一个点的y坐标 fengsuValues.AddXY(time, fengsuValues[i - 1].YValues[0]);DataPoint p = fengsuValues[i];p.Color = Color.Transparent;// 设置为透明颜色}else  //温度有数据 把数据添加图标上{fengsuValues.AddXY(time, log.fengsu); //添加点}}
}

设置结束时间 最小值是在开始时间的30分钟之后,
            //MinDate 最小值
            // AddMinutes 添加30分钟

private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{//设置结束时间 最小值是在开始时间的30分钟之后,//MinDate 最小值// AddMinutes 添加30分钟dateTimePicker2.MinDate = dateTimePicker1.Value.AddMinutes(30);
}
Log 包含每一条数据信息
public class Log
{public DateTime time { get; set; }public int id { get; set; }public string wendu { get; set; }public string shidu { get; set; }public string o2 { get; set; }public string fengsu { get; set; }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/382792.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

细说MCU用DMA控制ADC采样和串口传送的实现方法

目录 一、建立工程 1.相同的配置 2.配置ADC 3.配置DMA 二、代码修改 1.定义存储ADC采样结果的数组 2.启动ADC与定时器 3.编写主程序代码 4.重定义回调函数 5.查看结果 三、修改DMA模式 1. 修改DMA模式为Circular 2.查看结果 采用DMA(Direct Memory Access&#xf…

WSL2 Centos7 Docker服务启动失败怎么办?

wsl 安装的CentOS7镜像,安装了Docker之后,发现用systemctl start docker 无法将docker启动起来。 解决办法 1、编辑文件 vim /usr/lib/systemd/system/docker.service将13行注释掉,然后在下面新增14行的内容。然后保存退出。 2、再次验证 可以发现,我们已经可以正常通过s…

关于Mysql的面试题(实时更新中~)

一、主键约束与“not null unique”区别 1、作为Primary Key的域/域组不能为null&#xff0c;而Unique Key可以。 2、在一个表中只能有一个Primary Key&#xff0c;而多个Unique Key可以同时存在。unique not null 可以 将表的一列或多列定义为唯一性属性&#xff0c;而prima…

redis的集群模式

目录 1. 为什么使用redis集群 2. 主从模式 2.1修改配置文件 2.2 开启三台redis服务 2.3配置主从关系 3. 哨兵模式 3.1 监控功能 3.2 选举的机制 3.3 准备条件 4. 去中心化模式 4.1 准备三主三从 4.2 启动redis 4.3 分配槽以及主从关系 4.4 命令行的客户端 redis提供…

CAD框架介绍

1、适用范围&#xff1a;矢量编辑软件如 服装模板软件、CAD软件、绘图软件 2、支持PLT,DXF,PDF,GCode&#xff08;服装裁割指令)等矢量文件导入 3、支持简易的自动手动排料 4、直线&#xff0c;曲线等编辑功能 5、分页输出绘图指令 6、良好的框架结构&#xff1a;绘图引擎…

d3d12.dll 文件缺失如何解决?五种修复丢失问题的方法

d3d12.dll 文件缺失如何解决&#xff1f;它为什么会不见呢&#xff1f;今天&#xff0c;我们将探讨 d3d12.dll 文件的重要性、原因以及丢失时的解决策略。本文将全面介绍 d3d12.dll 文件&#xff0c;并提供五种修复丢失问题的方法。 d3d12.dll文件是什么的详细介绍 d3d12.dll …

laravel为Model设置全局作用域

如果一个项目中存在这么一个sql条件在任何情况下或大多数情况都会被使用&#xff0c;同时很容易被开发者遗忘&#xff0c;那么就非常适用于今天要提到的这个功能&#xff0c;Eloquent\Model的全局作用域。 首先看一个示例&#xff0c;有个数据表&#xff0c;结构如下&#xff1…

深入浅出WebRTC—NACK

WebRTC 中的 NACK&#xff08;Negative Acknowledgment&#xff09;机制是实时通信中处理网络丢包的关键组件。网络丢包是常见的现象&#xff0c;尤其是在无线网络或不稳定连接中。NACK 机制旨在通过请求重传丢失的数据包来减少这种影响&#xff0c;从而保持通信的连续性和质量…

vue学习笔记(十一)——开发心得(axios的封装、promise细节、vue-router开发中的使用)

1. axios的网络请求的封装 1.1 为什么要封装api? 代码分层&#xff0c;便于以后的修改&#xff0c;无需触碰逻辑页面 目标&#xff1a; 网络请求&#xff0c;不散落在各个逻辑页面里&#xff0c;封装起来方便以后修改 1.2 封装api步骤 ① 在项目 src 下新建目录 utlis &am…

C++——初识模板

前言 模板是C中的重大板块&#xff0c;是使C真正超越C语言的工具&#xff0c;在C模板没有设计出来之前其实C是没有那么被行业和社会所认可的&#xff0c;本节我们将初步了解C中的模板&#xff08;仅作大致讲解&#xff0c;具体的细枝末节将会再过几节讲解&#xff09;&#xf…

Qt多语言功能实现

本文介绍Qt多语言功能实现。 应用程序多语言支持是常用功能&#xff0c;比如产品需要出口到不同语种的国家。采用Qt的多语言支持工具可以方便实现应用程序的多语言功能。本文以中英文语言切换为例&#xff0c;简要介绍Qt的多语言功能实现。 1.界面设计 界面设计需要考虑使用…

【数据分享】2013-2022年我国省市县三级的逐日SO2数据(excel\shp格式\免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000——2022年的省市县三级的逐日PM2.5数据和2013-2022年的省市县三级的逐日CO数据&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff01; 本次我们分享的是我国2013——2022年的省…

数据隐私保护与区块链技术的结合:新兴趋势分析

在当今数字化时代&#xff0c;数据隐私保护成为了一个备受关注的重要话题。随着个人数据的不断生成和流通&#xff0c;如何有效保护用户的隐私成为了技术创新的一个重要方向。区块链技术作为一种去中心化、安全性高且可追溯的技术手段&#xff0c;正在逐渐成为解决数据隐私保护…

golang 基础 泛型编程

&#xff08;一&#xff09; 示例1 package _caseimport "fmt"// 定义用户类型的结构体 type user struct {ID int64Name stringAge uint8 }// 定义地址类型的结构体 type address struct {ID intProvince stringCity string }// 集合转列表函数&#…

杰发科技Bootloader(2)—— 基于7840的Keil配置地址

序 在7840的sample代码里面有一个简单的Boot跳转APP的示例 PFlash地址从0开始 DFlash的地址从1000000开始 Boot解析 他的boot地址配置为0 Boot的代码主要是这几行&#xff0c;主要作用就是Flash的跳转 int main(void) {SystemClock_Config();InitDebug();printf("demo…

Leetcode 721.账户合并(hash+dfs)☆

思路&#xff1a; 最核心的地方在于如何合并&#xff1f;这里是通过具有相同的email进行账户的合并&#xff0c;这个相同的email类似于图中的共同节点将两个账户连接起来&#xff0c;所以将原来 账户名 -> 邮件1 邮件2.。。变成hash 邮件1 ->账户id1&#xff0c;账户id2…

ModelArts中sinh算子的开发

一、环境配置 1、创建notebook并连接 使用ModelArts新建一个notebook,我这里镜像选择第一个,里面含有cann和Ascend910处理器,我这里环境只能使用ssh连接,创建一个密钥对,保存到C盘中的user/Administrator/目录下。 在网页中选择使用vscode接入,等待vscode打开后,选择密…

【数据结构初阶】一篇文章带你超深度理解【单链表】

hi &#xff01; 目录 前言&#xff1a; 1、链表的概念和结构 2、单链表&#xff08;Single List&#xff0c;简写SList&#xff09;的实现 2.1 定义链表&#xff08;结点&#xff09;的结构 2.2 创建一个链表 2.3 打印链表 2.4 尾插 2.5 头插 2.6 尾删 2.7 头…

PT2262-IR

PT2262是一款很古老的编码芯片&#xff0c;其兼容型号有&#xff1a;SC2262&#xff0c;AD2262&#xff0c;SC2260(需改变匹配电阻)等。 依据其datasheet&#xff0c;PT2262射频模式工作原理: CODE BITS A Code Bit is the basic component of the encoded waveform, and ca…

Docker核心技术:Docker原理之Cgroups

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 Docker核心技术 系列文章&#xff1a;Docker原理之Cgroups&#xff0c;其他文章快捷链接如下&#xff1a; 应用架构演进容器技术要解决哪些问题Docker的基本使用Docker是如何实现的 Docker核心技术&#xff1a;…