找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3793|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于MQTT技術(shù)的環(huán)境溫濕度可視化系統(tǒng)設(shè)計(jì)思路

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
#
ID:716857 發(fā)表于 2020-3-27 13:58 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
第一章 背景與需求分析
1.1項(xiàng)目開發(fā)背景
1.2需求分析
第二章 通信協(xié)議與溫度實(shí)時(shí)監(jiān)控系統(tǒng)設(shè)計(jì)              2
2.1 服務(wù)器端設(shè)計(jì)              2
2.2 客戶端設(shè)計(jì)              3
2.2.1 樹莓派              3
2.2.2  PC端              3
2.3元器件選擇與系統(tǒng)設(shè)計(jì)              5
2.4通信過程設(shè)計(jì)
第三章 mosquitto實(shí)現(xiàn)與部署
3.1 通信協(xié)議選擇
3.2 中間件平臺(tái)選型              6
3.3. 實(shí)現(xiàn)代碼,關(guān)鍵代碼,算法
3.4部署與運(yùn)行過程
第四章 體會(huì)與總結(jié)

第一章 背景與需求分析1.1項(xiàng)目開發(fā)背景

智慧農(nóng)業(yè)是智慧經(jīng)濟(jì)的重要內(nèi)容,是依托物聯(lián)網(wǎng)、云計(jì)算以及3S 技術(shù)等現(xiàn)代信息技術(shù)與農(nóng)業(yè)生產(chǎn)相融合的產(chǎn)物,可以通過對(duì)農(nóng)業(yè)生產(chǎn)環(huán)境的智能感知和數(shù)據(jù)分析,實(shí)現(xiàn)農(nóng)業(yè)生產(chǎn)精準(zhǔn)化管理和可視化診斷。

隨著微電子技術(shù)和微型計(jì)算機(jī),云計(jì)算的迅猛發(fā)展,微機(jī)測量和控制技術(shù)以其邏輯簡單、控制靈活、使用方便及性能價(jià)格比高的優(yōu)點(diǎn)得到了迅猛發(fā)展和廣泛應(yīng)用。它不僅在航天、航空、鐵路交通、冶金、電力、電訊、石油化、制造業(yè)等領(lǐng)域獲得了廣泛應(yīng)用,而且其技術(shù)在日常生活中也具有廣闊的應(yīng)用前景。尤其是許多智能儀器和測控系統(tǒng)中電腦控制技術(shù)的引入,使得傳統(tǒng)儀器、儀表設(shè)備發(fā)生了根本變化,為工業(yè)生產(chǎn)的自動(dòng)化、智能化奠定了堅(jiān)實(shí)的技術(shù)基礎(chǔ)。
  在智慧農(nóng)業(yè)、工業(yè)生產(chǎn)、石油化工、電力、國防、科研領(lǐng)域和日常生活中,溫濕度是極為普遍又極有意義的參數(shù)之一,溫濕度是與我們的生活,工作息息相關(guān)的物理參數(shù)。自然界中任何物理的,化學(xué)的變化過程都與溫度緊密聯(lián)系。溫濕度的測量與控制直接和產(chǎn)品質(zhì)量、提高生產(chǎn)率、節(jié)約能源、安全生產(chǎn)等重要經(jīng)濟(jì)技術(shù)指標(biāo)相關(guān)聯(lián),因此溫濕度測量是一個(gè)具有重要意義的技術(shù)領(lǐng)域。

而對(duì)于溫濕度的實(shí)時(shí)測量,遠(yuǎn)端可視化分析,更是利于各種以溫濕度為指標(biāo)系統(tǒng)的應(yīng)用。


1.2需求分析

在工業(yè)、農(nóng)業(yè)、日常生活等諸多方面,對(duì)于溫濕度的實(shí)時(shí)測量,并進(jìn)行遠(yuǎn)端可視化分析具有極為重要的意義,這在很大程度上節(jié)省遠(yuǎn)程硬件的連接,可通過云端進(jìn)行實(shí)時(shí)的測量數(shù)據(jù)傳輸,利于對(duì)溫濕度信息的實(shí)時(shí)監(jiān)控,并根據(jù)監(jiān)控的信息進(jìn)行系統(tǒng)調(diào)控,到達(dá)遠(yuǎn)程控制溫濕度的效果。由此,我們基于Mosquitto,使用MQTT協(xié)議進(jìn)行相關(guān)的數(shù)據(jù)傳輸及控制,設(shè)計(jì)了一個(gè)溫濕度的可視化系統(tǒng)。將DHT11傳感器采集到的實(shí)時(shí)數(shù)據(jù)可視化,用于用戶分析。整套系統(tǒng)的信息傳遞協(xié)議選擇使用MQTT協(xié)議,通過在網(wǎng)頁上提交查詢申請(qǐng),后臺(tái)程序訂閱所需街道傳感器發(fā)布的信息,并將數(shù)據(jù)進(jìn)行合適的處理返回給網(wǎng)頁進(jìn)行可視化,提供給用戶查看。

  • 通信協(xié)議與溫度實(shí)時(shí)監(jiān)控系統(tǒng)設(shè)計(jì)
2.1 服務(wù)器端設(shè)計(jì)
MQTT 是一個(gè)基于發(fā)布/訂閱模式的消息傳輸協(xié)議。它具有輕量級(jí)、開放、簡單,易于實(shí)現(xiàn),通信帶寬要求低等特點(diǎn)。這些特點(diǎn)使得它對(duì)機(jī)器與機(jī)器的通信(M2M)以及物聯(lián)網(wǎng)應(yīng)用(IoT)來說是很好的選擇。它還被應(yīng)用到手機(jī)APP和Web應(yīng)用中。 MQTT于1999年由Andy Stanford-Clark(IBM)和Arlen Nipper(Arcom,現(xiàn)為Cirrus Link)發(fā)明,最初的應(yīng)用是為了以最小的電池?fù)p耗和最小網(wǎng)絡(luò)帶寬將石油管道數(shù)據(jù)通過衛(wèi)星進(jìn)行傳輸。在MQTT最初版本發(fā)布3年后,OASIS開源組織接管MQTT的標(biāo)準(zhǔn)化制定工作。
搭建MQTT服務(wù)選擇開源軟件Mosquitto,下載地址及各系統(tǒng)安裝方法見https://mosquitto.org/download/ ,此實(shí)例安裝于Mac系統(tǒng),利用brew安裝,安裝命令brew install mosquitto
1、安裝完成后,文件目錄位于/usr/local/Cellar/mosquitto/1.4.11_2/
配置文件位于目錄/usr/local/etc/mosquitto/
  • 設(shè)置 mosquitto MQTT服務(wù)啟動(dòng)websoc監(jiān)聽,修改配置文件/usr/local/etc/mosquitto/mosquitto.conf
  3、創(chuàng)建一個(gè)MQTT服務(wù)器賬戶
假設(shè)用戶名為:user1
在命令行運(yùn)行:mosquitto_passwd -c /etc/mosquitto/pwfile.txt user1
回車后連續(xù)輸入2次用戶密碼即可
4、重新啟動(dòng)mosquitto  sudo service mosquitto start      #啟動(dòng)服務(wù)
2.2 客戶端設(shè)計(jì)

2.2.1 樹莓派

樹莓派主要功能包括數(shù)據(jù)的采集和發(fā)送。

數(shù)據(jù)的采集需要使用溫濕度傳感器和樹莓派上的數(shù)據(jù)采集程序。溫濕度傳感器主要用于采集實(shí)時(shí)的溫濕度數(shù)據(jù),數(shù)據(jù)采集程序負(fù)責(zé)將將傳感器接受的溫濕度數(shù)據(jù)采集到樹莓派中,用于下一步的數(shù)據(jù)發(fā)送。

數(shù)據(jù)采集程序采用高效的Python編程,使用Python中的RPI.GPIO庫,可以輕松的控制樹莓派上的GPIO管腳,將傳感器采集的數(shù)據(jù)接收至樹莓派中。

數(shù)據(jù)發(fā)送程序依然采用Python編寫,由于整個(gè)過程我們使用的是MQTT通信協(xié)議,故數(shù)據(jù)發(fā)送程序使用了Python中的paho.mqtt庫,向訂閱的主題發(fā)送數(shù)據(jù)。

2.2.2 PC端

PC端分為三個(gè)部分,數(shù)據(jù)的接收,數(shù)據(jù)的處理,數(shù)據(jù)的可視化,均采用Python編寫。數(shù)據(jù)的接收:使用Python中的paho.mqtt庫,連接創(chuàng)建的Apollo服務(wù)器,訂閱穿件的主題,接收樹莓派發(fā)布的主題消息。

數(shù)據(jù)的處理:將接收的到來自主題訂閱的數(shù)據(jù)進(jìn)行處理,得到我們需要的數(shù)據(jù)格式。

數(shù)據(jù)的可視化:采用Python的flask動(dòng)態(tài)網(wǎng)頁框架和D3.js,將溫濕度數(shù)據(jù)用折線圖動(dòng)態(tài)的展示在網(wǎng)頁上

2.3元器件選擇與系統(tǒng)設(shè)計(jì)

開發(fā)所需元器件:

D1  WiFi UNO開發(fā)面板 :基于ESP-8266EX Arduino 兼容,使用 Arduino IDE進(jìn)行編程引腳。

DHT11 溫濕度傳感器 :DHT11是一款有已校準(zhǔn)數(shù)字信號(hào)輸出的溫濕度傳感器

元器件與線路板連接:

2.4通信過程設(shè)計(jì)
發(fā)布/訂閱模式解耦了客戶端,客戶端分為2種角色:發(fā)布者(Publisher)和訂閱者(Subscriber)。每一個(gè)發(fā)布者(Publisher)可以發(fā)送不同類型的消息,我們把消息的類型叫做主題(topic),MQTT通信中的消息都屬于某一個(gè)主題  ,而只有訂閱了這個(gè)主題的訂閱者(Subscriber)才能收到屬于這個(gè)主題的消息。發(fā)布者和訂閱者不需要在意和知道對(duì)方的存在(不需要知道對(duì)方的IP和端口),也不需要直接與對(duì)方建立連接。因?yàn)橥ㄐ胖写嬖谥粋(gè)叫代理(MQTT broker)的第三種角色,也可以叫MQTT服務(wù)器(MQTT server)。
發(fā)布者、訂閱者只需要知道MQTT 服務(wù)器的IP和端口即可,并和它直接建立連接通信。MQTT代理作為消息的中轉(zhuǎn),它過濾所有接受到的消息,并按照一定的機(jī)制(MQTT標(biāo)準(zhǔn)規(guī)定是基于主題的消息過濾派發(fā)方式,而具體的MQTT服務(wù)器軟件也提供了其他的派發(fā)方式)分發(fā)它們,使得所有注冊到MQTT代理的訂閱者只接收到他們訂閱了的消息,而不會(huì)收到他不關(guān)心的消息。當(dāng)發(fā)布者發(fā)布一條消息的時(shí)候,他必須同時(shí)指定消息的主題和消息的負(fù)載。MQTT代理在收到發(fā)布者發(fā)過來的消息時(shí),無需訪問消息負(fù)載,他只是訪問消息的主題信息,然后根據(jù)這主題派發(fā)給訂閱者。需要注意的是,一個(gè)客戶端可以同時(shí)既當(dāng)發(fā)布者又當(dāng)訂閱者。比如一個(gè)開發(fā)板連接了一盞LED燈,它可以發(fā)布燈的暗/亮狀態(tài)信息,也可以從其他節(jié)點(diǎn)訂閱對(duì)燈的控制消息。

利用手機(jī)熱點(diǎn)建立局域網(wǎng),將樹莓派和電腦終端及作為服務(wù)器的電腦連接到同一個(gè)局域網(wǎng),通信使用MQTT協(xié)議,利用mosquitto進(jìn)行數(shù)據(jù)的傳輸。

第三章 mosquitto實(shí)現(xiàn)與部署3.1 通信協(xié)議選擇

MQTT是IBM開發(fā)的一個(gè)即時(shí)通訊協(xié)議。MQTT是面向M2M和物聯(lián)網(wǎng)的連接協(xié)議,采用輕量級(jí)發(fā)布和訂閱消息傳輸機(jī)制。Mosquitto是一款實(shí)現(xiàn)了 MQTT v3.1 協(xié)議的開源消息代理軟件,提供輕量級(jí)的,支持發(fā)布/訂閱的的消息推送模式,使設(shè)備對(duì)設(shè)備之間的短消息通信簡單易用。

MQTT協(xié)議是為大量計(jì)算能力有限,且工作在低帶寬、不可靠的網(wǎng)絡(luò)的遠(yuǎn)程傳感器和控制設(shè)備通訊而設(shè)計(jì)的協(xié)議,它具有以下主要的幾項(xiàng)特性:
1、使用發(fā)布/訂閱消息模式,提供一對(duì)多的消息發(fā)布,解除應(yīng)用程序耦合;
2、對(duì)負(fù)載內(nèi)容屏蔽的消息傳輸;
3、使用 TCP/IP 提供網(wǎng)絡(luò)連接;
4、有三種消息發(fā)布服務(wù)質(zhì)量:
“至多一次”,消息發(fā)布完全依賴底層 TCP/IP 網(wǎng)絡(luò)。會(huì)發(fā)生消息丟失或重復(fù)。這一級(jí)別可用于如下情況,環(huán)境傳感器數(shù)據(jù),丟失一次讀記錄無所謂,因?yàn)椴痪煤筮會(huì)有第二次發(fā)送。
“至少一次”,確保消息到達(dá),但消息重復(fù)可能會(huì)發(fā)生。
“只有一次”,確保消息到達(dá)一次。這一級(jí)別可用于如下情況,在計(jì)費(fèi)系統(tǒng)中,消息重復(fù)或丟失會(huì)導(dǎo)致不正確的結(jié)果。
5、小型傳輸,開銷很。ü潭ㄩL度的頭部是 2 字節(jié)),協(xié)議交換最小化,以降低網(wǎng)絡(luò)流量;

實(shí)現(xiàn)MQTT協(xié)議需要:客戶端和服務(wù)器端。 MQTT協(xié)議中有三種身份:發(fā)布者(Publish)、代理(Broker)、訂閱者(Subscribe)。其中,消息的發(fā)布者和訂閱者都是客戶端,消息代理是服務(wù)器,消息發(fā)布者可以同時(shí)是訂閱者。 MQTT傳輸?shù)南⒎譃椋褐黝}(Topic)和負(fù)載(Payload)兩部分。Topic可以理解為消息的類型,訂閱者訂閱(Subscribe)后,就會(huì)收到該主題的消息內(nèi)容(Payload),Payload可以理解為消息的內(nèi)容,是指訂閱者具體要使用的內(nèi)容。 訂閱(Subscription):訂閱包含主題篩選器(Topic Filter)和最大服務(wù)質(zhì)量(QoS)。訂閱會(huì)與一個(gè)會(huì)話(Session)關(guān)聯(lián)。一個(gè)會(huì)話可以包含多個(gè)訂閱。每一個(gè)會(huì)話中的每個(gè)訂閱都有一個(gè)不同的主題篩選器。 會(huì)話(Session):每個(gè)客戶端與服務(wù)器建立連接后就是一個(gè)會(huì)話,客戶端和服務(wù)器之間有狀態(tài)交互。會(huì)話存在于一個(gè)網(wǎng)絡(luò)之間,也可能在客戶端和服務(wù)器之間跨越多個(gè)連續(xù)的網(wǎng)絡(luò)連接。 主題名(Topic Name):連接到一個(gè)應(yīng)用程序消息的標(biāo)簽,該標(biāo)簽與服務(wù)器的訂閱相匹配。服務(wù)器會(huì)將消息發(fā)送給訂閱所匹配標(biāo)簽的每個(gè)客戶端。 主題篩選器(Topic Filter):一個(gè)對(duì)主題名通配符篩選器,在訂閱表達(dá)式中使用,表示訂閱所匹配到的多個(gè)主題。 負(fù)載(Payload):消息訂閱者所具體接收的內(nèi)容。

3.2 中間件平臺(tái)選型

本組實(shí)驗(yàn)選用的中間件平臺(tái)是mosquitto。mosquitto是一款實(shí)現(xiàn)了消息推送協(xié)議 MQTT v3.1 的開源消息代理軟件,提供輕量級(jí)的,支持可發(fā)布/可訂閱的的消息推送模式,使設(shè)備對(duì)設(shè)備之間的短消息通信變得簡單,比如現(xiàn)在應(yīng)用廣泛的低功耗傳感器,手機(jī)、嵌入式計(jì)算機(jī)、微型控制器等移動(dòng)設(shè)備。

3.3. 實(shí)現(xiàn)代碼,關(guān)鍵代碼,算法
mosquitto MQTT服務(wù)啟動(dòng)websoc監(jiān)聽,修改配置文/usr/local/etc/mosquitto/mosquitto.conf

啟動(dòng)服務(wù)
連接MQTT服務(wù),設(shè)置Arduino MQTT客戶端連接
Arduino 發(fā)送數(shù)據(jù)到MQTT服務(wù)采用Arduino Ciao Library
  1. #include "DHT.h"
  2. #include <Wire.h>
  3. #include <UnoWiFiDevEd.h>

  4. #define CONNECTOR "mqtt"
  5. #define TOPIC "DHT11_TOPIC"

  6. // what digital pin we're connected to
  7. #define DHTPIN 7   
  8. // Uncomment whatever type you're using!
  9. #define DHTTYPE DHT11   // DHT 11

  10. // Initialize DHT sensor.
  11. // Note that older versions of this library took an optional third parameter to
  12. // tweak the timings for faster processors.  This parameter is no longer needed
  13. // as the current DHT reading algorithm adjusts itself to work on faster procs.
  14. DHT dht(DHTPIN, DHTTYPE);

  15. void setup() {
  16.   Serial.begin(9600);
  17.   //DHT11 begin
  18.   dht.begin();
  19.   //Ciao begin
  20.   Ciao.begin();
  21. }

  22. void loop() {
  23.   // Wait a few seconds between measurements.
  24.   delay(6000);
  25.   // Reading temperature or humidity takes about 250 milliseconds!
  26.   // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  27.   float h = dht.readHumidity();
  28.   // Read temperature as Celsius (the default)
  29.   float t = dht.readTemperature();

  30.   // Check if any reads failed and exit early (to try again).
  31.   if (isnan(h) || isnan(t)) {
  32.     Serial.println("Failed to read from DHT11 sensor!");
  33.     return;
  34.   }

  35.   Serial.print("Humidity: ");
  36.   Serial.print(h);
  37.   Serial.print(" %\t");
  38.   Serial.print("Temperature: ");
  39.   Serial.println(t);
  40.   String data = "{\"H\":" + String(h) +",\"T\":" + String(t)+"}";
  41.   // pushes data into a channel
  42.   Ciao.write(CONNECTOR, TOPIC,data);溫
  43. }
復(fù)制代碼

濕度web可視化
瀏覽器客戶端展示數(shù)據(jù),需要與MQTT服務(wù)通訊,這里采用MQTT client mqtt.js
可視化展示采用實(shí)時(shí)數(shù)據(jù)圖表可視化epoch.js

  1. <!DOCTYPE HTML>

  2. <html>

  3. <head>

  4.   <title>epoch.js mqtt.js</title>

  5.               <script src="https://unpkg.com/mqtt/dist/mqtt.min.js" type="text/javascript"></script>

  6.               <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

  7.     <script src="http://d3js.org/d3.v3.js" charset="utf-8"></script>

  8.     <script src="http://epochjs.github.io/epoch/js/epoch.js" charset="utf-8"></script>

  9.     <link rel="stylesheet" href="http://epochjs.github.io/epoch/css/epoch.css">

  10. </head>

  11. <body>

  12. <div id="container" style="min-width: 310px; height: 200px; margin: 30 auto" class="epoch"></div>



  13. <script>

  14.    $(function(){

  15.      var temperatureData = {

  16.        label: "temperature",

  17.        values:[]

  18.      };

  19.      var humidityData = {

  20.        label: "humidity",

  21.        values:[]

  22.      };

  23.      var chartData = [temperatureData,humidityData];

  24.      var temperature,humidity,nextData = [];

  25.      var mychart = $('#container').epoch({

  26.        type: 'time.line',

  27.        data: chartData,

  28.        ticks:{ right: 5, bottom: 50, left: 5 },

  29.        axes: ['left', 'bottom', 'right']

  30.      });

  31.      var client = mqtt.connect('http://192.168.31.175:9001'); // you add a ws:// url here

  32.      client.subscribe("DHT11_TOPIC")

  33.      client.on("message", function (topic, msg) {

  34.        nextData = [];

  35.        //console.log([topic, msg].join(": "));

  36.        var jsonData = JSON.parse(msg);

  37.        // console.log(jsonData);

  38.        time = parseInt(new Date().getTime() / 1000);

  39.        temperature = {time:time,y:jsonData.T};

  40.        humidity = {time:time,y:jsonData.H};

  41.        nextData.push(temperature);

  42.        nextData.push(humidity);

  43.        mychart.push(nextData);

  44.      })

  45.    });



  46. </script>

  47. </body>

  48. </html>
復(fù)制代碼

溫度可視化
實(shí)物圖
3.4部署與運(yùn)行過程
第4章   體會(huì)與總結(jié)

次基于MQTT與ESP8266的實(shí)時(shí)溫濕度采集系統(tǒng)的制作,讓我們增加了對(duì)從最低端傳感器的數(shù)據(jù)采集到頂端客戶端的數(shù)據(jù)顯示的過程,以及對(duì)MQTT協(xié)議的傳輸模式的了解。

到了物聯(lián)網(wǎng)時(shí)代,由于智能硬件的差異,相比互聯(lián)網(wǎng)終端,硬件配置要低得多,而且環(huán)境也復(fù)雜。在網(wǎng)絡(luò)不穩(wěn)定的情況下,保證數(shù)據(jù)的傳輸沒有問題、保證數(shù)據(jù)不被重復(fù)發(fā)送、連接斷開后重新連接,使用MQTT最適合物聯(lián)網(wǎng)數(shù)據(jù)的傳輸。

在制作過程中有以下一些注意事項(xiàng):

  • WiFi模塊需要通過連接網(wǎng)絡(luò)構(gòu)建TCP環(huán)境,而判定連接哪個(gè)網(wǎng)絡(luò)是根據(jù)用戶名和密碼確定的,路由器的用戶名和密碼在程序中是固定的,想要連接其他網(wǎng)絡(luò)必須修改程序中用戶名和密碼的內(nèi)容才能實(shí)現(xiàn)。
  • MQTT消息的發(fā)送和訂閱都是依賴MQTT服務(wù)器的,沒有MQTT服務(wù)器,客戶端是無法訂閱和發(fā)送消息的。所以在最開始的時(shí)候,我們選擇了開放的云平臺(tái)阿里云作為服務(wù)器,阿里云能夠支持MQTT的接入,并且與MQTT.fx一起使用可以省去很多麻煩。
  • 整個(gè)過程需要考慮多種情況,服務(wù)器的連接有兩種情況,發(fā)送端是否滿足發(fā)送的條件,接收端接接收到的是什么樣的報(bào)文等。
  • 當(dāng)與服務(wù)器建立連接后并不是能立即發(fā)送數(shù)據(jù),首先需要判斷發(fā)送緩沖區(qū)有數(shù)據(jù),然后是滿足三種情況能開始發(fā)送數(shù)據(jù):連接報(bào)文、訂閱報(bào)文和連接和訂閱均成功。
  • 由于室內(nèi)溫濕度處在變化中,而我們接收到的數(shù)據(jù)不能實(shí)時(shí)地顯示變化的溫度濕度,于是我們給數(shù)據(jù)發(fā)送加了定時(shí)器,通過串口控制,每10s鐘發(fā)送一次數(shù)據(jù)。

完整的Word格式文檔51黑下載地址:
基于MQTT技術(shù)的環(huán)境溫濕度可視化系統(tǒng).doc (1.72 MB, 下載次數(shù): 21)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表