国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

QT學(xué)習(xí)開發(fā)筆記(項(xiàng)目實(shí)戰(zhàn)之智能家居物聯(lián) UI 界面開發(fā) )

這篇具有很好參考價(jià)值的文章主要介紹了QT學(xué)習(xí)開發(fā)筆記(項(xiàng)目實(shí)戰(zhàn)之智能家居物聯(lián) UI 界面開發(fā) )。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

智能家居物聯(lián) UI 界面開發(fā)

項(xiàng)目路徑為 4/01_smarthome/01_smarthome/01_smarthome.pro,先看項(xiàng)目界面。項(xiàng)目界面如
下,采用暗黑主題設(shè)計(jì),結(jié)合黃色作為亮色,讓用戶一目了然。界面筆者從一些智能家居界面
中找到靈感的,編寫設(shè)計(jì)完成的效果不錯(cuò)!請(qǐng)自行查閱源碼,掌握了本教程前面第七章的內(nèi)容,
就可以理解這個(gè)界面是如何設(shè)計(jì)的。

qt ui開發(fā),QT開發(fā)學(xué)習(xí)筆記,qt,ui,學(xué)習(xí)

原子云 API 接口

我們想要與原子云通信,那么必須先了解原子云平臺(tái)的 API 接口。請(qǐng)參閱原子云平臺(tái) API

文檔 V1.2.pdf 文檔。原子云平臺(tái) API 寫的非常詳細(xì)了,請(qǐng)自行翻閱。需要我們從原子云平臺(tái)了
解原子云 API 的通信流程。

下圖是原子云平臺(tái) API 的使用流程圖。 qt ui開發(fā),QT開發(fā)學(xué)習(xí)筆記,qt,ui,學(xué)習(xí)
我們寫 Qt 應(yīng)用就應(yīng)該重點(diǎn)放在 HTTPS 與 WebSocket 方向上。查閱原子云平臺(tái) API 可以知
道,下面是重點(diǎn)!一些帳號(hào)信息,與設(shè)備信息是通過 HTTPS 協(xié)議接口獲取的,通信用 WebSocket

協(xié)議接口。那么我們就按原子云平臺(tái)的協(xié)議流程編寫應(yīng)用程序。
源碼路徑為 4/01_smarthome/webapi/webapi.cpp。內(nèi)容如下。

 /****************************************************************** 
 Copyright ? Deng Zhimao Co., Ltd. 1990-2021. All rights reserved. 
 * @projectName webapi 
 * @brief webapi.cpp 
 * @author Deng Zhimao 
 * @email 1252699831@qq.com 
 * @net www.openedv.com 
 * @date 2021-05-27 
 *******************************************************************/ 

1 #include "webapi.h" 

2 #include <QUuid> 

3 #include <QRegularExpression> 

4 

5 Webapi::Webapi(QObject *parent) 

6 { 

7 this->setParent(parent); 

8 /* 數(shù)組清空 */ 

9 groupID.clear(); 

10 deviceID.clear(); 

11 deviceNumber.clear(); 

12 

13 timer = new QTimer(); 
14 connect(timer, SIGNAL(timeout()), this, SLOT(onTimerTimeOut())); 

15 

16 networkAccessManager = new QNetworkAccessManager(this); 

17 

18 orgURL = "https://cloud.alientek.com/api/orgs"; 

19 /* 請(qǐng)?zhí)顚懽约旱?token 信息?。?! */ 

20 api_token = "bf591984c8fa417584d18f6328e0ef73"; 

21 

22 /* 獲取賬號(hào)機(jī)構(gòu)列表 */ 

23 getOrgURL(); 

24 

25 QUuid uuid = QUuid::createUuid(); 

26 random_token = uuid.toString(); 

27 

28 webSocket = new QWebSocket(); 

29 /* 需要加一些安全配置才能訪問 https */ 

30 QSslConfiguration config; 

31 config.setPeerVerifyMode(QSslSocket::VerifyNone); 

32 config.setProtocol(QSsl::TlsV1SslV3); 

33 webSocket->setSslConfiguration(config); 

34 

35 connect(webSocket, SIGNAL(connected()), 

36 this, SLOT(webSocketConnected())); 

37 connect(webSocket, SIGNAL(binaryMessageReceived(QByteArray)), 

38 this, SLOT(onBinaryMessageReceived(QByteArray))); 

39 } 

40 

41 Webapi::~Webapi() 

42 { 

43 delete timer; 

44 delete webSocket; 

45 webSocket = nullptr; 

46 } 

47 

48 void Webapi::getOrgURL() 

49 { 

50 getDataFromWeb(QUrl(orgURL)); 

51 } 

52 

53 /* 獲取設(shè)備分組列表 */ 

54 void Webapi::getGroupListUrl() 

55 { 

56 getDataFromWeb(QUrl(groupListUrl)); 

57 } 

58 

59 /* 獲取設(shè)備的信息 */ 

60 void Webapi::getDevOfGroupUrl() 

61 { 

62 getDataFromWeb(QUrl(devOfGroupUrl)); 

63 } 

64 

65 /* 獲取設(shè)備連接狀態(tài) */ 

66 void Webapi::getConStateUrl() 

67 { 

68 getDataFromWeb(QUrl(conStateUrl)); 

69 } 

70 

71 /* 從云服務(wù)器獲取數(shù)據(jù) */ 

72 void Webapi::getDataFromWeb(QUrl url) 

73 { 

74 /* 網(wǎng)絡(luò)請(qǐng)求 */ 

75 QNetworkRequest networkRequest; 

76 

77 /* 需要加一些安全配置才能訪問 https */ 

78 QSslConfiguration config; 

79 config.setPeerVerifyMode(QSslSocket::VerifyNone); 

80 config.setProtocol(QSsl::TlsV1SslV3); 

81 networkRequest.setSslConfiguration(config); 

82 

83 /* 設(shè)置訪問的地址 */ 

84 networkRequest.setUrl(url); 

85 

86 /* 網(wǎng)絡(luò)響應(yīng) */ 

87 networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, 

88 "application/json;charset=UTF-8"); 

89 

90 /* 參數(shù)二為原子云帳號(hào)的 token 信息,填寫自己的 */ 

91 networkRequest.setRawHeader("token", api_token.toLatin1()); 

92 

93 QNetworkReply *newReply = 

94 networkAccessManager->get(networkRequest); 

95 

96 connect(newReply, SIGNAL(finished()), 

97 this, SLOT(replyFinished())); 

98 connect(newReply, SIGNAL(readyRead()), 

99 this, SLOT(readyReadData())); 

100 

101 } 

102 void Webapi::replyFinished() 

103 { 

104 QNetworkReply *reply = (QNetworkReply *)sender(); 

105 

106 if (reply->url() == QUrl(orgURL)) { 

107 /* 設(shè)備分組列表 ID */ 

108 getID(dataString, reply); 

109 } 

110 

111 if (reply->url() == QUrl(groupListUrl)) { 

112 /* 列表 ID */ 

113 getID(dataString, reply); 

114 

115 /* 獲取到組 ID 再開啟定時(shí)器 */ 

116 if (!timer->isActive()) 

117 timer->start(2000); 

118 } 

119 

120 /* 設(shè)備的信息 */ 

121 if (reply->url() == QUrl(devOfGroupUrl)) { 

122 getID(dataString, reply); 

123 getNumber(dataString); 

124 getName(dataString); 

125 } 

126 

127 /* 設(shè)備的連接狀態(tài) */ 

128 if (reply->url() == QUrl(conStateUrl)) { 

129 getConnectState(dataString); 

130 } 

131 

132 reply->deleteLater(); 

133 reply = nullptr; 

134 } 

135 void Webapi::readyReadData() 

136 { 

137 QNetworkReply *reply = (QNetworkReply *)sender(); 

138 QByteArray data = reply->readAll(); 

139 dataString = QString(data); 

140 qDebug()<<dataString<<endl; 

141 } 

142 

143 /* 獲取 ID,包括分組 id,設(shè)備 id */ 

144 void Webapi::getID(QString data, QNetworkReply *reply) 

145 { 

146 /* 多個(gè)匹配,因?yàn)榭赡苡卸鄠€(gè)合適的字段 */ 

147 QRegularExpression pattern("\"id\":(\\d+)"); 

148 

149 QRegularExpressionMatchIterator i = pattern.globalMatch(data); 

150 while (i.hasNext()) { 

151 QRegularExpressionMatch match = i.next(); 

152 if (match.hasMatch()) { 

153 if (reply->url() == QUrl(orgURL)) { 

154 org_id = match.captured(1); 

155 groupListUrl = "https://cloud.alientek.com/api/orgs/" 

156 + org_id + "/grouplist"; 

157 getGroupListUrl(); 

158 /* Socket 連接 */ 

159 
webSocket->open(QUrl(QString("wss://cloud.alientek.com/connection/%1/or
g/%2?token=%3") 

160 .arg(api_token).arg(org_id).arg(rando
m_token))); 

161 } 

162 

163 if (reply->url() == QUrl(groupListUrl)) { 

164 group_id = match.captured(1); 

165 /* 存儲(chǔ)組 ID,再由定時(shí)器根據(jù)組的 ID 獲取設(shè)備信息 */ 

166 groupID.append(group_id); 

167 qDebug()<<"組 ID:"<<group_id<<endl; 

168 

169 } 

170 

171 if (reply->url() == QUrl(devOfGroupUrl)) { 

172 device_id = match.captured(1); 

173 /* 存儲(chǔ)設(shè)備 ID,再由定時(shí)器根據(jù)設(shè)備的 ID 獲取連接狀態(tài) */ 

174 deviceID.append(device_id); 

175 qDebug()<<"設(shè)備 ID:"<<device_id<<endl; 

176 } 

177 } 

178 } 

179 } 

180 

181 void Webapi::getNumber(QString data) 

182 { 

183 QRegularExpression pattern("\"number\":\"(\\d+)\""); 

184 

185 QRegularExpressionMatchIterator i = pattern.globalMatch(data); 

186 while (i.hasNext()) { 

187 QRegularExpressionMatch match = i.next(); 

188 if (match.hasMatch()) { 

189 device_number = match.captured(1); 

190 deviceNumber.append(device_number); 

191 qDebug()<<"設(shè)備編號(hào):"<<device_number<<endl; 

192 } 

193 } 

194 } 

195 

196 void Webapi::getName(QString data) 

197 { 

198 /* 匹配中文字符,設(shè)備起名需要為中文 */ 

199 QRegularExpression pattern("\"name\":\"([\u4e00-\u9fa5]*)"); 

200 

201 QRegularExpressionMatchIterator i = pattern.globalMatch(data); 

202 while (i.hasNext()) { 

203 QRegularExpressionMatch match = i.next(); 

204 if (match.hasMatch()) { 

205 device_name = match.captured(1); 

206 deviceName.append(device_name); 

207 qDebug()<<"設(shè)備名稱:"<<device_name<<endl; 

208 } 

209 } 

210 } 

211 

212 /* 獲取設(shè)備的連接狀態(tài) */ 

213 void Webapi::getConnectState(QString data) 

214 { 

215 QString pattern = "\"data\":\"(\\S*)\""; 

216 QRegularExpression regularExpression(pattern); 

217 QRegularExpressionMatch match = regularExpression.match(data, 0); 

218 if(match.hasMatch()) { 

219 qDebug()<<"設(shè)備連接狀態(tài)"<<match.captured(1); 

220 deviceConnectState.append(match.captured(1)); 

221 } 

222 } 

223 

224 void Webapi::webSocketConnected() 

225 { 

226 qDebug()<<"webSocket 連接原子云成功"<<endl; 

227 } 

228 

229 void Webapi::onBinaryMessageReceived(QByteArray str) 

230 { 

231 

232 QString temp(str); 

233 if (temp.contains("online")) { 

234 for (int i = 0; i < deviceNumber.count() ; i++) { 

235 if (temp.contains(deviceNumber[i])) { 

236 /* 發(fā)送如客廳燈在線信號(hào)*/ 

237 emit deviceStateChanged(deviceName[i] + "|在線"); 

238 qDebug()<<deviceName[i] + "|在線"<<endl; 

239 break; 

240 } 

241 } 

242 } 

243 } 

244 

245 /* 延時(shí)函數(shù) */ 

246 void Webapi::sleep(double second) 

247 { 

248 usleep(second * 1000000); 

249 } 

250 

251 void Webapi::onTimerTimeOut() 

252 { 

253 static int i = 0; 

254 if (i < groupID.count()) { 

255 /* 獲取分組下的設(shè)備列表 */ 

256 devOfGroupUrl = "https://cloud.alientek.com/api/orgs/" 

257 + org_id + "/groups/" 

258 + groupID[i] + "/devices"; 

259 dataString.clear(); 

260 getDevOfGroupUrl(); 

261 } else if (i >= groupID.count() 

262 && i < groupID.count() + deviceID.count() ) { 

263 timer->start(1000); 

264 conStateUrl = "https://cloud.alientek.com/api/orgs/" 

265 + org_id + "/devicestate/" 

266 + deviceID[i - groupID.count()]; 

267 getConStateUrl(); 

268 

269 } else { 

270 /* 訂閱設(shè)備的消息 */ 

271 for (int j = 0; j < deviceNumber.count(); j++) { 

272 QByteArray cmd; 

273 cmd[0] = 0x01; 

274 sendCmd(deviceNumber[j], cmd); 

275 } 

276 

277 timer->stop(); 

278 } 

279 

280 i++; 

281 } 

282 

283 /* 訂閱指定設(shè)備的消息,cmd = 0x01 */ 

284 void Webapi::sendCmd(QString number, QByteArray cmd) 

285 { 

286 QStringList list = number.split(""); 

287 for (int i = 0; i < list.count(); i++) { 

288 if (!list[i].isEmpty()) { 

289 cmd.append(list[i]); 

290 } 

291 } 

292 

293 webSocket->sendBinaryMessage(cmd); 

294 } 

295 

296 /* 發(fā)送消息到指定設(shè)備,cmd = 0x03 */ 

297 void Webapi::sendCmdMessage(QString number, 

298 QByteArray cmd, QString message) 

299 { 

300 QStringList list = number.split(""); 

301 for (int i = 0; i < list.count(); i++) { 

302 if (!list[i].isEmpty()) { 

303 cmd.append(list[i]); 

304 } 

305 } 

306 

307 cmd.append(message); 

308 

309 webSocket->sendBinaryMessage(cmd); 

310 } 

311 

312 void Webapi::whichDeviceNameSendCmd(QString name, 

313 QString message) { 

314 

315 for (int i = 0; i < deviceName.count(); i++) { 

316 if (name == deviceName[i]) { 

317 QByteArray cmd; 

318 cmd[0] = 0x03; 

319 sendCmdMessage(deviceNumber[i], cmd, message); 

320 break; 

321 } 

322 } 

323 } 

第 20 行,需要填寫自己的原子云平臺(tái)帳號(hào) api_token 信息,請(qǐng)?jiān)谠釉啤穾ぬ?hào)信息中查看!
剩余的代碼都按照原子云平臺(tái) API 文檔編寫,首先是通過網(wǎng)絡(luò)請(qǐng)求 networkRequest,訪問
需要訪問的地址,然后通過網(wǎng)絡(luò)回應(yīng)對(duì)象 newReply 來接收網(wǎng)絡(luò)回復(fù)的結(jié)果。結(jié)果是 JSION 格
式的文本,筆者使用正則表達(dá)式提取回復(fù)的內(nèi)容,作為下一個(gè)地址的參數(shù),如此反復(fù),就可以
將原子云服務(wù)器的帳號(hào)下的設(shè)備信息提取出來。
第 159 行,提取出來的信息轉(zhuǎn)交 webSocket 對(duì)象,讓 webSocket 獲取原子云平臺(tái)的鑒權(quán),
就可以實(shí)現(xiàn)通信了。
流程都是按照原子云平臺(tái) API 文檔的走,剩下的就是 webSocket 通信了,與 TCP,UDP 的

socket 通信相似,這里就不多解釋了,和第十一章的 TCP/UDP Socket 通信內(nèi)容相似。重點(diǎn)是流
程,再參考代碼看。文章來源地址http://www.zghlxwxcb.cn/news/detail-595104.html

到了這里,關(guān)于QT學(xué)習(xí)開發(fā)筆記(項(xiàng)目實(shí)戰(zhàn)之智能家居物聯(lián) UI 界面開發(fā) )的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【嵌入式Linux項(xiàng)目】基于Linux的全志H616開發(fā)板智能家居項(xiàng)目(語音控制、人臉識(shí)別、安卓APP和PC端QT客戶端遠(yuǎn)程操控)有視頻功能展示

    【嵌入式Linux項(xiàng)目】基于Linux的全志H616開發(fā)板智能家居項(xiàng)目(語音控制、人臉識(shí)別、安卓APP和PC端QT客戶端遠(yuǎn)程操控)有視頻功能展示

    目錄 一、功能需求 二、開發(fā)環(huán)境 1、硬件: 2、軟件: 3、引腳分配: 三、關(guān)鍵點(diǎn) 1、設(shè)計(jì)模式之工廠模式 2、線程 3、wiringPi庫下的相關(guān)硬件操作函數(shù)調(diào)用 4、語音模塊的串口通信 5、攝像頭的實(shí)時(shí)監(jiān)控和拍照功能 6、人臉識(shí)別 7、qt程序跨平臺(tái)運(yùn)行(編譯成安卓APP) 四、編譯和

    2024年02月15日
    瀏覽(24)
  • 合肥中科深谷嵌入式項(xiàng)目實(shí)戰(zhàn)——基于ARM語音識(shí)別的智能家居系統(tǒng)(二)

    合肥中科深谷嵌入式項(xiàng)目實(shí)戰(zhàn)——基于ARM語音識(shí)別的智能家居系統(tǒng)(二)

    目錄 基于ARM語音識(shí)別的智能家居系統(tǒng) 練習(xí)一 一、程序編譯 練習(xí)二: 二、文件IO 三、文件IO常用API接口函數(shù) 1、打開文件 open() 2、將數(shù)據(jù)內(nèi)容寫入文件 write() 3、關(guān)閉(保存)文件 四、編程示例 總結(jié) 我們上一篇講了,關(guān)于Linux系統(tǒng)的一些質(zhì)量,今天,我們實(shí)現(xiàn)在Linux系統(tǒng)

    2024年02月04日
    瀏覽(648)
  • 合肥中科深谷嵌入式項(xiàng)目實(shí)戰(zhàn)——基于ARM語音識(shí)別的智能家居系統(tǒng)(三)

    合肥中科深谷嵌入式項(xiàng)目實(shí)戰(zhàn)——基于ARM語音識(shí)別的智能家居系統(tǒng)(三)

    我們上一篇,我們實(shí)現(xiàn)在Linux系統(tǒng)下編譯程序,我們首先通過兩個(gè)小練習(xí)來熟悉一下如何去編譯。今天,我們來介紹一下LCD屏幕基本使用。 如何使用LCD屏幕? ?? ?1、打開開發(fā)板LCD設(shè)備驅(qū)動(dòng)文件。 ?(/dev/fb0) ?? ?2、準(zhǔn)備顏色數(shù)據(jù)。 ?? ?3、寫入顏色像素點(diǎn)數(shù)據(jù)。 ?? ?4、關(guān)閉

    2024年02月04日
    瀏覽(96)
  • 智能家居系統(tǒng) QT

    智能家居系統(tǒng) QT

    (1)界面添加新控件 在mainwindow.ui 添加控件: 控件的類型 文本內(nèi)容 對(duì)象名(唯一) 是否有槽函數(shù) QLabel 溫度 lable_隨意 否 QLabel 濕度 lable_隨意 否 QLabel 光照度 lable_隨意 否 QPushButton 更新范圍 PushButton_range 是 clicked() 控件的類型 當(dāng)前值 最大值 最小值 對(duì)象名(唯一) 是否有槽

    2023年04月08日
    瀏覽(24)
  • qt實(shí)現(xiàn)智能家居系統(tǒng)

    qt實(shí)現(xiàn)智能家居系統(tǒng)

    一、項(xiàng)目介紹 ? ????????通過TCP/IP協(xié)議實(shí)現(xiàn)客戶端和和服務(wù)端的鏈接,服務(wù)端和下位機(jī)通過串口通信的方式鏈接,傳遞信息,客戶端通過賬號(hào)登錄進(jìn)入進(jìn)入智能家居服務(wù)系統(tǒng),賬號(hào)登錄和QQ登錄類似,我采用的是數(shù)據(jù)庫的方式實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)和調(diào)用,界面使用qt-ui的方式進(jìn)

    2024年02月11日
    瀏覽(28)
  • 計(jì)算機(jī)畢業(yè)設(shè)計(jì) 基于大數(shù)據(jù)的智能家居銷量數(shù)據(jù)分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) Java實(shí)戰(zhàn)項(xiàng)目 附源碼+文檔+視頻講解

    計(jì)算機(jī)畢業(yè)設(shè)計(jì) 基于大數(shù)據(jù)的智能家居銷量數(shù)據(jù)分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) Java實(shí)戰(zhàn)項(xiàng)目 附源碼+文檔+視頻講解

    博主介紹:?從事軟件開發(fā)10年之余,專注于Java技術(shù)領(lǐng)域、Python人工智能及數(shù)據(jù)挖掘、小程序項(xiàng)目開發(fā)和Android項(xiàng)目開發(fā)等。CSDN、掘金、華為云、InfoQ、阿里云等平臺(tái)優(yōu)質(zhì)作者? ??文末獲取源碼聯(lián)系?? ???? 精彩專欄推薦訂閱???? 不然下次找不到喲 ——————————

    2024年02月04日
    瀏覽(104)
  • 【qt】仿寫一個(gè)智能家居頁面

    【qt】仿寫一個(gè)智能家居頁面

    B站大學(xué) 示例圖片: 后面的保持默認(rèn),點(diǎn)擊完成。成功后可以看到: 再將圖片拖入工程文件夾下面。 向頁面添加圖片 前綴名可以是自己設(shè)定,注意添加完畢后一定要先保存(ctrl+s),看文件后面的小星號(hào)*消失就保存成功,否則后面無法添加文件。 回到ui文件,將一個(gè)label拖到

    2024年04月27日
    瀏覽(19)
  • Linux MQTT智能家居項(xiàng)目(智能家居界面布局)

    Linux MQTT智能家居項(xiàng)目(智能家居界面布局)

    1.選擇工程名稱和項(xiàng)目保存路徑 2.選擇QWidget 3.添加保存圖片的資源文件: 在工程目錄下添加Icon文件夾保存圖片: 將文件放入目錄中: 將圖片添加進(jìn)入資源文件中: 這里我們一共顯示4個(gè)界面:LED控制界面,溫度濕度顯示界面,光照強(qiáng)度顯示界面,攝像頭監(jiān)測(cè)界面。 所以這里

    2024年02月13日
    瀏覽(30)
  • 基于QT的智能家居中控系統(tǒng)的簡明設(shè)計(jì)

    基于QT的智能家居中控系統(tǒng)的簡明設(shè)計(jì)

    ??系統(tǒng)采用 “ 主從式架構(gòu) ” ,即一主多從式,該智能居家控制系統(tǒng)的主要功能包括 登錄功能 、 注冊(cè)功能 、 音樂播放功能 、 時(shí)間顯示 、 日歷顯示 、 溫度濕度光照氣壓海拔數(shù)據(jù)等環(huán)境指標(biāo)數(shù)據(jù) 顯示等。 ??該智能居家控制系統(tǒng)的軟硬件環(huán)境如下: ??硬件環(huán)境:

    2024年02月09日
    瀏覽(20)
  • 【基于stm32f103C8T6-小程序智能家居項(xiàng)目實(shí)戰(zhàn)-自繪PCB到實(shí)現(xiàn)功能一條龍+30分鐘解決-各種bug已修復(fù)】

    【基于stm32f103C8T6-小程序智能家居項(xiàng)目實(shí)戰(zhàn)-自繪PCB到實(shí)現(xiàn)功能一條龍+30分鐘解決-各種bug已修復(fù)】

    阿熊智能家居演示 核心板 STM32F103C8T6 WIFI模塊 ESP8266-01s 傳感器 DHT11溫濕度傳感器 BH1750光照傳感器 其他 LED OLED 4腳按鍵開關(guān) CP2102(USB轉(zhuǎn)TTL模塊) 有源蜂鳴器(低電平觸發(fā)) 金屬膜電阻器 面包板(或PCB) 電源和導(dǎo)線 項(xiàng)目 數(shù)量 已購 價(jià)格 STM32F103C8T6 1 ESP8266-01s 1 DHT11溫濕度傳感器

    2024年04月28日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包