資料介紹
描述
車庫水培
專業水培數據庫管理
因為你真的不知道你的水培系統發生了什么而感到沮喪?
然后使用您的水培控制系統收集數據,并使用它來監控和做出更明智的決策。查看趨勢并了解實際情況!
在讀取溫度、濕度、土壤濕度或任何水培數據后,我們需要首先使用 WiFi 連接將數據發布到數據庫。這是通過使用簡單的 REST API 完成的。REST 或具象狀態傳輸是使用帶有 JSON(JavaScript 對象表示法)格式的有效負載的 HTTP 方法 (POST)。
void HttpPost(const char *url, String &post_data)
{
HTTPClient http;
http.begin(url);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int http_code = http.POST(post_data); // Send the request
String payload = http.getString(); // Get the response payload
SerialDebug.println(http_code); // Print HTTP return code
SerialDebug.println(payload); // Print request response payload
if (payload.length() > 0) {
int index = 0;
do
{
if (index > 0) index++;
int next = payload.indexOf('\n', index);
if (next == -1) break;
String request = payload.substring(index, next);
if (request.substring(0, 9).equals(")) break;
SerialDebug.println(request);
StaticJsonDocument<100> doc;
DeserializationError error = deserializeJson(doc, request);
if (!error) {
if (doc["OVERRIDE_LIGHTS_TIME"]) OVERRIDE_LIGHTS_TIME = doc["OVERRIDE_LIGHTS_TIME"];
if (doc["OVERRIDE_LIGHTS"]) OVERRIDE_LIGHTS = doc["OVERRIDE_LIGHTS"];
if (doc["OVERRIDE_VENT_FAN_TIME"]) OVERRIDE_VENT_FAN_TIME = doc["OVERRIDE_VENT_FAN_TIME"];
if (doc["OVERRIDE_VENT_FAN"]) OVERRIDE_VENT_FAN = doc["OVERRIDE_VENT_FAN"];
}
index = next;
} while (index >= 0);
}
http.end(); // Close connection
}
...
void loop() {
...
char buffer[80];
strftime(buffer, sizeof(buffer), "%m/%d/%Y %H:%M:%S", &rtc);
// Allocate JsonDocument
// Use arduinojson.org/assistant to compute the capacity
StaticJsonDocument<500> doc;
// Create the root object
doc["ReadingTime"] = buffer;
doc["InsideTemp"] = (inside.error) ? ERROR_READ : inside.temp;
doc["InsideRelative"] = (inside.error) ? ERROR_READ : inside.relative;
doc["InsideAbsolute"] = (inside.error) ? ERROR_READ : inside.absolute;
doc["OutsideTemp"] = (outside.error) ? ERROR_READ : outside.temp;
doc["OutsideRelative"] = (outside.error) ? ERROR_READ : outside.relative;
doc["OutsideAbsolute"] = (outside.error) ? ERROR_READ : outside.absolute;
doc["VentFan"] = vent_fan;
doc["Lights"] = lights;
doc["Power"] = power;
doc["DailyCost"] = cost;
doc["ColorTemp"] = color_temp;
doc["Lux"] = lux;
doc["CO2"] = co2;
doc["CO2Temp"] = co2_temp;
doc["CO2Relative"] = co2_relative;
doc["GerminationTemp"] = germination_temp;
doc["ChillerTemp"] = chiller_temp;
doc["pH"] = pH;
doc["DO"] = DO;
JsonArray array = doc.createNestedArray("GrowBed");
for (i = 0; i < sizeof(grow_bed_table) / sizeof(GROWBED_t); i++) {
JsonObject object = array.createNestedObject();
object["WaterTemp"] = (grow_bed_table[i].water_temp_error) ? ERROR_READ : grow_bed_table[i].water_temp;
object["WaterTDS"] = grow_bed_table[i].water_tds;
object["WaterLevel"] = grow_bed_table[i].water_level;
}
String json_data;
serializeJson(doc, json_data);
post_data = "data=" json_data;
SerialDebug.println(post_data);
#ifdef MySQL
HttpPost(mysql_url, post_data);
#endif
#ifdef MSSQL
HttpPost(mssql_url, post_data);
#endif
...
}
服務器/數據庫
您可以使用兩種不同的流行的用戶控制的數據庫平臺。
- 使用 Microsoft SQL 數據庫服務器的 Windows 虛擬主機。
- 使用 MySQL 數據庫服務器的本地 Raspberry Pi 4 服務器。
您還可以使用 MQTT 客戶端使用任何 IoT 服務,但此處不解釋該方法。
使用 Microsoft SQL 數據庫服務器的 Windows 虛擬主機
對于 Windows 虛擬主機,我一直在使用WinHost。他們提供每月只需 3.95 美元的基本計劃,應該適合包括我自己在內的大多數家庭愛好者的預算,但您可以使用任何您喜歡的 Windows 虛擬主機。我已經使用了多年,對他們的產品和服務非常滿意。
優點
- 基于網絡,可在任何計算機網絡瀏覽器的任何地方訪問。
- 無需維護硬件。
- 使用 Windows/數據庫安全性更安全。
- 比 MySQL 快。
- 可擴展。需要更多性能訂閱更大的平臺,甚至專用服務器。
缺點
- 在 Web 上,如果未實施安全性(SSL 等),則可被黑客入侵。安全成本為 $$$。
- 如果您的互聯網連接中斷,您將無法訪問您的系統。
- 基本計劃限制為 500MB SQL。電源計劃最大為 10GB。較大的費用為$$。
使用SQL Server Management Studio連接到您的 Microsoft SQL Server 并使用以下 SQL 腳本創建數據庫和表。
CREATE TABLE [dbo].[Hydroponics](
[ReadingTime] [datetime] NOT NULL,
[InsideTemp] [DECIMAL](9, 2) NULL,
[InsideRelative] [DECIMAL](9, 2) NULL,
[InsideAbsolute] [DECIMAL](9, 2) NULL,
[OutsideTemp] [DECIMAL](9, 2) NULL,
[OutsideRelative] [DECIMAL](9, 2) NULL,
[OutsideAbsolute] [DECIMAL](9, 2) NULL,
[VentFan] [bit] NULL,
[Lights] [bit] NULL,
[POWER] [SMALLINT] NULL,
[GrowBed1WaterTemp] [DECIMAL](9, 2) NULL,
[GrowBed1WaterTDS] [SMALLINT] NULL,
[GrowBed1WaterLevel] [bit] NULL,
[GrowBed2WaterTemp] [DECIMAL](9, 2) NULL,
[GrowBed2WaterTDS] [SMALLINT] NULL,
[GrowBed2WaterLevel] [bit] NULL,
[DailyCost] [DECIMAL](9, 2) NULL,
[ColorTemp] [INT] NULL,
[Lux] [INT] NULL,
[CO2] [DECIMAL](9, 2) NULL,
[CO2Temp] [DECIMAL](9, 2) NULL,
[CO2Relative] [DECIMAL](9, 2) NULL,
[GerminationTemp] [DECIMAL](9,2) NULL,
[ChillerTemp] [DECIMAL](9,2) NULL,
[pH] [DECIMAL](9,2) NULL,
[DO] [DECIMAL](9,2) NULL,
PRIMARY KEY CLUSTERED
(
[ReadingTime] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[Request](
[RequestTime] [DATETIME] NOT NULL,
[JsonData] [VARCHAR](MAX) NULL,
[Processed] [BIT] NULL,
PRIMARY KEY CLUSTERED
(
[RequestTime] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
使用Microsoft IIS 管理器設置和管理您的網站。使用以下 Active Server Page Extended 'adddata.aspx' 連接和傳輸數據負載。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Script;
using System.Web.Script.Serialization;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
namespace Hydroponics
{
public partial class adddata : System.Web.UI.Page
{
class GrowBed
{
public decimal WaterTemp { get; set; }
public int WaterTDS { get; set; }
public bool WaterLevel { get; set; }
}
class HydroponicsData
{
public DateTime ReadingTime { get; set; }
public decimal InsideTemp { get; set; }
public decimal InsideRelative { get; set; }
public decimal InsideAbsolute { get; set; }
public decimal OutsideTemp { get; set; }
public decimal OutsideRelative { get; set; }
public decimal OutsideAbsolute { get; set; }
public bool VentFan { get; set; }
public bool Lights { get; set; }
public int Power { get; set; }
public decimal DailyCost { get; set; }
public int ColorTemp { get; set; }
public int Lux { get; set; }
public decimal CO2 { get; set; }
public decimal CO2Temp { get; set; }
public decimal CO2Relative { get; set; }
public decimal GerminationTemp { get; set; }
public decimal ChillerTemp { get; set; }
public List GrowBed { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
var data = new JavaScriptSerializer().Deserialize(Request["data"].ToString());
String strSQL = "INSERT INTO Hydroponics (ReadingTime,"
"InsideTemp,InsideRelative,InsideAbsolute,"
"OutsideTemp,OutsideRelative,OutsideAbsolute,"
"VentFan,Lights,Power,DailyCost,"
"ColorTemp,Lux,"
"CO2,CO2Temp,CO2Relative,"
"GerminationTemp,ChillerTemp,"
"GrowBed1WaterTemp,GrowBed1WaterTDS,GrowBed1WaterLevel,"
"GrowBed2WaterTemp,GrowBed2WaterTDS,GrowBed2WaterLevel)"
" VALUES ("
"'" data.ReadingTime.ToString() "',";
if (data.InsideTemp >= 0) strSQL += data.InsideTemp.ToString() "," data.InsideRelative.ToString() "," data.InsideAbsolute.ToString() ",";
else strSQL += "NULL,NULL,NULL,";
if (data.OutsideTemp >= 0) strSQL += data.OutsideTemp.ToString() "," data.OutsideRelative.ToString() "," data.OutsideAbsolute.ToString() ",";
else strSQL += "NULL,NULL,NULL,";
strSQL += ((data.VentFan) ? "1" : "0") "," ((data.Lights) ? "1" : "0") "," data.Power.ToString() "," data.DailyCost.ToString() ",";
if (data.ColorTemp >= 0) strSQL += data.ColorTemp.ToString() "," data.Lux.ToString() ",";
else strSQL += "NULL,NULL,";
if (data.CO2 >= 0) strSQL += data.CO2.ToString() "," data.CO2Temp.ToString() "," data.CO2Relative.ToString() ",";
else strSQL += "NULL,NULL,NULL,";
if (data.GerminationTemp >= 0) strSQL += data.GerminationTemp.ToString() ",";
else strSQL += "NULL,";
if (data.ChillerTemp >= 0) strSQL += data.ChillerTemp.ToString() ",";
else strSQL += "NULL,";
if (data.GrowBed[0].WaterTemp >= 0) strSQL += data.GrowBed[0].WaterTemp.ToString() ",";
else strSQL += "NULL,";
if (data.GrowBed[0].WaterTDS >= 0) strSQL += data.GrowBed[0].WaterTDS.ToString() ",";
else strSQL += "NULL,";
strSQL += ((data.GrowBed[0].WaterLevel) ? "1" : "0") ",";
if (data.GrowBed[1].WaterTemp >= 0) strSQL += data.GrowBed[1].WaterTemp.ToString() ",";
else strSQL += "NULL,";
if (data.GrowBed[1].WaterTDS >= 0) strSQL += data.GrowBed[1].WaterTDS.ToString() ",";
else strSQL += "NULL,";
strSQL += ((data.GrowBed[1].WaterLevel) ? "1" : "0") ")";
try
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ServerConnectionString"].ConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand(strSQL, con);
cmd.ExecuteNonQuery();
strSQL = "SELECT * FROM Request WHERE Processed IS NULL ORDER BY RequestTime ASC";
SqlCommand req = new SqlCommand(strSQL, con);
SqlDataAdapter sda = new SqlDataAdapter(req);
DataTable dtRequest = new DataTable();
sda.Fill(dtRequest);
if (dtRequest.Rows.Count > 0)
{
for (int rows = 0; rows < dtRequest.Rows.Count; rows++)
{
if (dtRequest.Rows[0]["JsonData"] != DBNull.Value)
{
Response.Write(dtRequest.Rows[0]["JsonData"].ToString());
Response.Write("\n");
}
}
DateTime dt = (DateTime)dtRequest.Rows[dtRequest.Rows.Count-1]["RequestTime"];
strSQL = "UPDATE Request SET Processed=1 WHERE Processed IS NULL AND RequestTime <='" dt.ToString("yyyy-MM-dd HH:mm:ss.fff") "'";
SqlCommand upd = new SqlCommand(strSQL,con);
upd.ExecuteNonQuery();
}
con.Close();
}
catch (SqlException sqlex)
{
Response.Write(sqlex.Message.ToString() "\r\n");
}
}
}
}
使用 IIS 管理器添加一個連接字符串“ServerConnectionString”,它將允許 .aspx 網頁連接到您的數據庫。
到目前為止,我們應該每分鐘都在捕獲數據。為了動態查看數據庫數據,我們將使用Grafana。 這個動態圖形工具將允許您修改和添加圖表,幫助您查看時間序列數據以管理您的水培系統。

在您的計算機上下載并安裝 Grafana或獲取免費的托管 Grafana 實例并創建 localhost 服務器。
登錄到 Grafana 后,使用 MSSQL 創建數據庫連接,然后導入以下腳本以創建 Garage Hydroponics 儀表板。
要允許來自 grafana 的請求,例如打開燈或風扇,請添加以下“addrequest.aspx”,以便在下次發送有效負載時做出響應。這意味著一旦選擇了該選項,可能需要一分鐘的時間才能處理該操作。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;
namespace Hydroponics
{
public partial class addrequest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request["data"] != null)
{
String strSQL = "INSERT INTO Request (RequestTime, JsonData) VALUES (GETUTCDATE(),'" + Request["data"].ToString() + "')";
try
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ServerConnectionString"].ConnectionString);
con.Open();
SqlCommand cmd = new SqlCommand(strSQL, con);
cmd.ExecuteNonQuery();
con.Close();
}
catch (SqlException sqlex)
{
Response.Write(sqlex.Message.ToString() + "\r\n");
}
}
ClientScript.RegisterStartupScript(typeof(Page), "closePage", "window.close();", true);
}
}
}
使用 MySQL 數據庫服務器的本地 Raspberry Pi 4 服務器
使用新的 Raspberry Pi 4 作為服務器。隨著 4GB RAM、USB 3.0 和 1Gb 以太網的加入,Raspberry Pi 4 終于成為低成本家庭服務器的真正競爭者。
優點
- 在本地家庭網絡上。所有數據都被收集并留在家中。
- 不依賴互聯網連接來收集數據。
- 數據庫大小受限于您??的驅動器大小。
- 沒有月費。
缺點
- 在您的本地家庭網絡上,因此除非打開,否則無法通過網絡訪問它。
- 硬件維護。
- 數據庫性能比 Microsoft SQL 慢。
- 不可擴展。
- 安全性不強。

服務器部件
x1 CanaKit Raspberry Pi2 4GB 入門套件 - 4GB RAM。
x1東芝 HDTB410EK3AA 1TB 2.5" USB 3.0 黑色。
服務器軟件安裝
下載并安裝最新版本的 Raspberry Pi OS。
確保操作系統從 USB 3.0 硬盤啟動。
使用 PHP 下載并安裝 Apache Web 服務器。
下載并安裝 MySQL 數據庫服務器。
下載并安裝 PHPMyAdmin 以輕松管理 MySQL。
下載并安裝 Grafana 服務器。
將以太網設置為您的家庭靜態 IP 地址。
下載并安裝用于遠程訪問的 VNC 查看器。
將您的 Raspberry Pi 4 設置為無頭服務器(無鍵盤/鼠標/顯示器)。
使用 phpMyAdmin 創建一個名為“mydata”的新數據庫,并使用 SQL 腳本創建下表。
CREATE TABLE Hydroponics(
ReadingTime DATETIME NOT NULL,
InsideTemp DECIMAL(9, 2) NULL,
InsideRelative DECIMAL(9, 2) NULL,
InsideAbsolute DECIMAL(9, 2) NULL,
OutsideTemp DECIMAL(9, 2) NULL,
OutsideRelative DECIMAL(9, 2) NULL,
OutsideAbsolute DECIMAL(9, 2) NULL,
VentFan BIT NULL,
Lights BIT NULL,
Power SMALLINT NULL,
GrowBed1WaterTemp DECIMAL(9, 2) NULL,
GrowBed1WaterTDS SMALLINT NULL,
GrowBed1WaterLevel BIT NULL,
GrowBed2WaterTemp DECIMAL(9, 2) NULL,
GrowBed2WaterTDS SMALLINT NULL,
GrowBed2WaterLevel BIT NULL,
DailyCost INT NULL,
ColorTemp INT NULL,
Lux INT NULL,
CO2 DECIMAL(9, 2) NULL,
CO2Temp DECIMAL(9, 2) NULL,
CO2Relative DECIMAL(9, 2) NULL,
GerminationTemp DECIMAL(9,2) NULL,
ChillerTemp DECIMAL(9,2) NULL,
pH DECIMAL(9,2) NULL,
DO DECIMAL(9,2) NULL,
PRIMARY KEY(ReadingTime)
);
CREATE TABLE Request(
RequestTime DATETIME NOT NULL,
JsonData VARCHAR(4096) NULL,
Processed BIT NULL,
PRIMARY KEY(RequestTime)
);
在 Apache Web 服務器中使用以下 PHP 文件“adddata.php”連接到 MySQL 并注入 JSON 數據負載。
$servername = "localhost";
$dbname = "mydata";
$username = "admin";
$password = "password";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$data = json_decode($_POST["data"]);
// Create database connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
ini_set("date.timezone", "UTC");
$sql = "INSERT INTO Hydroponics (ReadingTime," .
"InsideTemp,InsideRelative,InsideAbsolute," .
"OutsideTemp,OutsideRelative,OutsideAbsolute," .
"VentFan,Lights,Power,DailyCost," .
"ColorTemp,Lux," .
"CO2,CO2Temp,CO2Relative," .
"GerminationTemp,ChillerTemp," .
"pH,DO," .
"GrowBed1WaterTemp,GrowBed1WaterTDS,GrowBed1WaterLevel," .
"GrowBed2WaterTemp,GrowBed2WaterTDS,GrowBed2WaterLevel) " .
"VALUES (" .
"STR_TO_DATE('" . $data->ReadingTime . "','%m/%d/%Y %H:%i:%s'),";
if ($data->InsideTemp >= 0) $sql .= $data->InsideTemp . "," . $data->InsideRelative . "," . $data->InsideAbsolute . ",";
else $sql .= "NULL,NULL,NULL,";
if ($data->OutsideTemp >= 0) $sql .= $data->OutsideTemp . "," . $data->OutsideRelative . "," . $data->OutsideAbsolute . ",";
else $sql .= "NULL,NULL,NULL,";
$sql .= ($data->VentFan ? "1":"0") . "," . ($data->Lights ? "1":"0") . "," . $data->Power . "," . $data->DailyCost . ",";
if ($data->ColorTemp >= 0) $sql .= $data->ColorTemp . "," . $data->Lux . ",";
else $sql .= "NULL,NULL,";
if ($data->CO2 >= 0) $sql .= $data->CO2 . "," . $data->CO2Temp . "," . $data->CO2Relative . ",";
else $sql .= "NULL,NULL,NULL,";
if ($data->GerminationTemp >= 0) $sql .= $data->GerminationTemp . ",";
else $sql .= "NULL,";
if ($data->ChillerTemp >= 0) $sql .= $data->ChillerTemp . ",";
else $sql .= "NULL,";
if ($data->pH >= 0) &sql .= $data->pH . ",";
else $sql .= "NULL,";
if ($data->DO >= 0) &sql .= $data->DO . ",";
else $sql .= "NULL,";
if ($data->GrowBed[0]->WaterTemp >= 0) $sql .= $data->GrowBed[0]->WaterTemp . ",";
else $sql .= "NULL,";
if ($data->GrowBed[0]->WaterTDS >= 0) $sql .= $data->GrowBed[0]->WaterTDS . ",";
else $sql .= "NULL,";
$sql .= ($data->GrowBed[0]->WaterLevel ? "1":"0") . ",";
if ($data->GrowBed[1]->WaterTemp >= 0) $sql .= $data->GrowBed[1]->WaterTemp . ",";
else $sql .= "NULL,";
if ($data->GrowBed[1]->WaterTDS >= 0) $sql .= $data->GrowBed[1]->WaterTDS . ",";
else $sql .= "NULL,";
$sql .= ($data->GrowBed[1]->WaterLevel ? "1":"0") . ")";
if ($conn->query($sql) == FALSE) {
echo "Error: " . $sql . "\r\n" . $conn->error . "\r\n";
}
$sql = "SELECT * FROM Request WHERE Processed IS NULL ORDER BY RequestTime ASC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$lasttime = "";
while($row = $result->fetch_assoc()) {
echo $row["JsonData"] . "\n";
$lasttime = $row["RequestTime"];
}
$sql = "UPDATE Request SET Processed=1 WHERE Processed IS NULL AND RequestTime <= '" . $lasttime . "'";
$conn->query($sql);
}
$conn->close();
}
else {
echo "No data posted with HTTP POST.";
}
在 Pi 4 上的端口 3000 登錄 Grafana 后,創建與 MySQL 的數據庫連接,然后導入以下腳本以創建 Garage Hydroponics 儀表板。
注意:為了讓 Grafana 檢索正確的時間序列數據,請確保將 MySQL 中的默認時區設置為 UTC。
要允許來自 grafana 的請求,例如打開燈或風扇,請添加以下 PHP 文件“addrequest.php”,該文件將允許在下次發送有效負載時做出響應。這意味著一旦選擇了該選項,可能需要一分鐘的時間才能處理該操作。
$servername = "localhost";
$dbname = "mydata";
$username = "admin";
$password = "mysql";
if ($_SERVER["REQUEST_METHOD"] == "GET") {
// Create database connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
ini_set("date.timezone", "UTC");
$sql = "INSERT INTO Request (RequestTime,JsonData) " .
"VALUES (" .
"UTC_TIMESTAMP(),'" . $_GET["data"] . "')";
if ($conn->query($sql) == FALSE) {
echo "Error: " . $sql . "\r\n" . $conn->error;
}
$conn->close();
echo "";
}
else {
echo "No data posted with HTTP POST.";
}
echo "\r\n";
有關完整的車庫水培解決方案,請參閱我們的其他項目
車庫水培 水
培 深水培養 斗系統
水培 種植傳感器/顯示模塊
水培 冷水機
水培 水/養分控制
水培 數據庫管理
水培 發芽控制
水培 CO2 監測
水培 光照監測
水培 pH 和 DO 監測
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
- 基于树莓派的开源库存管理系统和MySQL数据库0次下载
- 专业水培水/养分控制系统开源2次下载
- 专业的水培控制系统开源分享2次下载
- ACS数据库与RSC数据库比较研究5次下载
- 数据库的设计资料概述10次下载
- 数据库管理与应用的复习题及答案免费下载4次下载
- 数据库教程之SQL Server数据库管理的详细资料说明26次下载
- 数据库教程之数据库的设计过程资料说明10次下载
- 数据库教程之信息管理网络数据库应用系统实例资料概述8次下载
- 数据库系统概论之数据库管理系统详细资料概述0次下载
- 数据库学习教程之数据库的发展状况如何数据库有什么新发展5次下载
- 数据库教程之数据库的创建与管理详细资料免费下载18次下载
- 数据库教程之如何进行数据库设计21次下载
- 如何进行数据库设计?数据库设计介绍和需求分析及结构设计资料概述0次下载
- UDAT4.0数据库管理工具3次下载
- 如何使用cmp进行数据库管理的技巧339次阅读
- 数据库事件触发的设置和应用403次阅读
- 无模式数据库的利与弊592次阅读
- 数据库分区、分库和分表3127次阅读
- 多平台的关系数据库管理和开发工具1075次阅读
- Oracle:数据库开发和管理的工具798次阅读
- OpenHarmony关系型数据库概述1226次阅读
- MongoDB开源文档数据库的安装1194次阅读
- 常见的数据库管理2231次阅读
- 详谈一些主流开源数据库及工具2657次阅读
- 云数据库和自建数据库的区别及应用4759次阅读
- 干货:20个MySQL开源数据库架构设计原则3519次阅读
- oracle数据库应用领域26405次阅读
- 目前流行的数据库_构建数据库系统的流程7226次阅读
- 数据库的基本概念和应用领域2951次阅读
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論