在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于XIAO ESP32C6的HA空氣質(zhì)量檢測儀設(shè)計(jì)

柴火創(chuàng)客空間 ? 來源:柴火創(chuàng)客空間 ? 2025-03-21 14:09 ? 次閱讀

今天小編給大家?guī)淼氖莵碜訫IT的Jason的基于XIAO ESP32C6的HA空氣質(zhì)量檢測儀項(xiàng)目,作為一名程序員,Jason經(jīng)常自己連續(xù)幾個小時坐在辦公桌前,沉浸在一行行代碼中。后來意識到周圍的空氣質(zhì)量,尤其是二氧化碳水平不斷上升。

制作背景

保持健康的工作空間至關(guān)重要,但我們需要一個既實(shí)用又美觀的解決方案。如果有一種緊湊型設(shè)備,不僅可以監(jiān)測空氣質(zhì)量,還可以作為美觀的辦公桌裝飾品,那不是很棒嗎?有了這個想法,Jason就開始著手實(shí)現(xiàn)它。Zigbee 是一種出色的智能家居低功耗通信協(xié)議。

使用 Seeed Studio 的 XIAO ESP32 C6 模塊作為主控。它擁有小巧的外形和全面的 Arduino Zigbee 教程開發(fā)者節(jié)省了大量開發(fā)時間。此外,還增加了 XIAO 擴(kuò)展板和 Grove VOC 和 eCO2 氣體傳感器 (SGP30) 以獲得準(zhǔn)確的讀數(shù)。

由于不喜歡傳統(tǒng)的方形桌面擺件,所以Jason設(shè)計(jì)了一個小型站立機(jī)器人造型。至于細(xì)節(jié),對 XIAO 擴(kuò)展板的引腳排列進(jìn)行了布線,以便在 XIAO 系列內(nèi)的不同 MCU 之間輕松切換。這讓Jason在組件選擇上有了更大的靈活性。在結(jié)構(gòu)件內(nèi),我將傳感器放在右側(cè),用打印材料與MCU 隔開,確保最佳性能和時尚的設(shè)計(jì)。

材料清單

硬件列表

Grove-VOC and CO2 Gas Sensor SGP30

Seeed Studio XIAO ESP32C6Seeed Studio

XIAO Expansion Board

軟件列表

Arduino IDE

Autodesk Fusion

Home Assistant

項(xiàng)目演示

1.連接帶 OLED 顯示屏的設(shè)備

在 OLED 屏幕上,我們將顯示連接狀態(tài),可以輕松查看 Zigbee 與 Home Assistant 的連接是否成功。此外,UI 設(shè)計(jì)中還會有一些小驚喜!

OLED 顯示屏將包含三個內(nèi)容區(qū)域:

啟動 Zigbee 連接

連接成功狀態(tài)

CO2 和 eVOC 數(shù)據(jù)

我們還可以通過打開 Arduino 串行監(jiān)視器來監(jiān)視 XIAO ESP32 C6 的 Zigbee 連接狀態(tài)和數(shù)據(jù)輸出。

2cdaff5c-0573-11f0-9310-92fbcf53809c.png

Arduino 串行監(jiān)視器

2.HomeAssistant 帶二氧化碳傳感器界面效果截圖

將購買的 Home Assistant Connect ZBT-1 插入我的 HA 設(shè)置后,我通過 Zigbee Home Automation 添加了我們的 Zigbee 終端設(shè)備。隨后,在對 XIAO ESP32 C6 進(jìn)行編程后,設(shè)備名稱出現(xiàn)在 OLED 顯示屏上。

2cf1ad4c-0573-11f0-9310-92fbcf53809c.png

HomeAssistant 查找 Zigbee 集成

2d0553e2-0573-11f0-9310-92fbcf53809c.png

HomeAssistant 連接 Zigbee 設(shè)備

訪問 Homeassistant 后,我們可以看到顯示的數(shù)據(jù)隨時間的變化

成功連接到 HomeAssistant 后,我們在 Zigbee 中找到了我們的設(shè)備,它提供了兩個主要功能:

實(shí)時數(shù)據(jù)顯示

2d243e9c-0573-11f0-9310-92fbcf53809c.png

查看歷史二氧化碳趨勢。值得注意的是,我的設(shè)備在此期間并未持續(xù)運(yùn)行。

3.桌面上的最終設(shè)置

最后,我們可以看到 OLED 屏幕上顯示的傳感器數(shù)據(jù),以及 Home Assistant 儀表板上的數(shù)據(jù)。

2d3e33d8-0573-11f0-9310-92fbcf53809c.png

最終展示效果

程序代碼

#ifndef ZIGBEE_MODE_ED
#error "Zigbee end device mode is not selected in Tools->Zigbee mode"
#endif
#include "Zigbee.h"
#include "sensirion_common.h"
#include "sgp30.h"
#include 
#include 
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
uint8_t HugoUI_Animation_EasyOut(float *a, float *a_trg, uint16_t n) {
if (*a == *a_trg)
return 0;
float cz = fabs(*a - *a_trg);
if (cz <= 1)
*a = *a_trg;
else {
if (cz < 10)
n = n * cz * 0.1f;
if (n < 10)
n = 10;
*a += (*a_trg - *a) / (n * 0.1f);
}
return 1;
}
uint8_t HugoUI_Animation_EasyIn(float *a, float *a_trg, uint16_t n) {
if (*a == *a_trg)
return 0;
float cz = fabs(*a - *a_trg);
if (cz <= 1)
*a = *a_trg;
else if (cz > 20)
n = n * 3;
else if (cz > 15)
n = n * 2;
else if (cz > 5)
n = n * 1;
if (*a != *a_trg)
*a += (*a_trg - *a) / (n * 0.1f);
else
return 0;
return 1;
}
void Oled_DrawSlowBitmapResize(int x, int y, const uint8_t *bitmap, int w1, int h1, int w2, int h2) {
uint8_t color = u8g2.getDrawColor();
float mw = (float)w2 / w1;
float mh = (float)h2 / h1;
uint8_t cmw = ceil(mw);
uint8_t cmh = ceil(mh);
int xi, yi, byteWidth = (w1 + 7) / 8;
for (yi = 0; yi < h1; yi++) {
for (xi = 0; xi < w1; xi++) {
if (*(uint8_t *)(bitmap + yi * byteWidth + xi / 8) & (1 << (xi & 7)))
{
u8g2.drawBox(x + xi * mw, y + yi * mh, cmw, cmh);
} else if (color != 2) {
u8g2.setDrawColor(0);
u8g2.drawBox(x + xi * mw, y + yi * mh, cmw, cmh);
u8g2.setDrawColor(color);
}
}
}
}
const unsigned char gImage_humidity[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xF0,
0x07, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x7C, 0x3F, 0x00, 0x00, 0x3E, 0x7C, 0x00,
0x00, 0x1F, 0xF8, 0x00, 0x80, 0x07, 0xF0, 0x01, 0xC0, 0x07, 0xE0, 0x01, 0xC0, 0x03,
0xC0, 0x03, 0xE0, 0x81, 0x81, 0x07, 0xE0, 0xC1, 0x83, 0x07, 0xE0, 0xD0, 0x03, 0x07,
0xF0, 0xF8, 0x03, 0x0F, 0xF0, 0xF8, 0x0B, 0x0F, 0xF0, 0xF0, 0x1F, 0x0F, 0xF0, 0xE0,
0x1F, 0x0F, 0xE0, 0xC0, 0x0F, 0x07, 0xE0, 0xC0, 0x07, 0x07, 0xE0, 0xC1, 0x83, 0x07,
0xC0, 0xC3, 0xC3, 0x03, 0xC0, 0xC7, 0xE3, 0x03, 0x80, 0x8F, 0xF3, 0x01, 0x00, 0xFF,
0xFF, 0x00, 0x00, 0xFE, 0x7F, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xC0, 0x03, 0x00,
0x00, 0xC0, 0x03, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00
};
const unsigned char gImage_homeassistant[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xC0, 0x03, 0x00, 0x00, 0xE0, 0x07, 0x00,
0x00, 0xF0, 0x0F, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xFC, 0xBF, 0x07, 0x00, 0xFE, 0xFF, 0x07,
0x00, 0xFF, 0xFF, 0x07, 0x80, 0xFF, 0xFF, 0x07, 0xC0, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0x07,
0xF0, 0xFF, 0xFF, 0x0F, 0xF8, 0xFF, 0xFF, 0x1F, 0xFC, 0xFF, 0xFF, 0x3F, 0xFE, 0xF8, 0x1F, 0x7F,
0x7F, 0xF7, 0xEF, 0xFE, 0x7F, 0xF7, 0xEF, 0xFE, 0xF8, 0xFF, 0xFF, 0x1F, 0xF8, 0xFF, 0xFF, 0x1F,
0xF8, 0xEF, 0xF7, 0x1F, 0xF8, 0xCF, 0xF3, 0x1F, 0xF8, 0x9F, 0xF9, 0x1F, 0xF8, 0x7F, 0xFE, 0x1F,
0xF8, 0xFF, 0xFF, 0x1F, 0xF8, 0xFF, 0xFF, 0x1F, 0xF8, 0xFF, 0xFF, 0x1F, 0xF8, 0xFF, 0xFF, 0x1F,
0xF8, 0xFF, 0xFF, 0x1F, 0xF8, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};  // 32x32
#define CARBON_DIOXIDE_SENSOR_ENDPOINT_NUMBER 10
uint8_t button = BOOT_PIN;
ZigbeeCarbonDioxideSensor zbCarbonDioxideSensor = ZigbeeCarbonDioxideSensor(CARBON_DIOXIDE_SENSOR_ENDPOINT_NUMBER);
int16_t err = 0;
uint16_t tvoc_ppb, co2_eq_ppm;
uint16_t carbon_dioxide_value;
static uint32_t timeCounter = 0;
static float img_a = 4, img_a_trg = 24;
static float img_b = -2, img_b_trg = 24;
static float img_c = -10, img_c_trg = 13;
static float img_d = 5, img_d_trg = 90;
static void carbon_sensor_update(void *arg) {
for (;;) {
if (!(timeCounter++ % 20)) {
err = sgp_measure_iaq_blocking_read(&tvoc_ppb, &co2_eq_ppm);
if (err == STATUS_OK) {
Serial.printf("tVOC Concentration: %d ppb
", tvoc_ppb);
Serial.printf("CO2eq Concentration: %d ppm
", co2_eq_ppm);
carbon_dioxide_value = co2_eq_ppm;
zbCarbonDioxideSensor.setCarbonDioxide(carbon_dioxide_value);
} else {
Serial.println("Error reading IAQ values
");
}
zbCarbonDioxideSensor.report();
delay(6000);
}
}
}
void setup() {
int16_t err;
uint16_t scaled_ethanol_signal, scaled_h2_signal;
Serial.begin(115200);
u8g2.begin();
// Init RF
pinMode(WIFI_ENABLE, OUTPUT);
digitalWrite(WIFI_ENABLE, LOW);
delay(100);
pinMode(WIFI_ANT_CONFIG, OUTPUT);
digitalWrite(WIFI_ANT_CONFIG, LOW);
// Init button switch
pinMode(button, INPUT_PULLUP);
// Init SGP30
while (sgp_probe() != STATUS_OK) {
Serial.println("SGP failed");
while (1)
;
}
err = sgp_measure_signals_blocking_read(&scaled_ethanol_signal, &scaled_h2_signal);
if (err == STATUS_OK) {
Serial.println("get ram signal!");
} else {
Serial.println("error reading signals");
}
err = sgp_iaq_init();
zbCarbonDioxideSensor.setManufacturerAndModel("Espressif", "ZigbeeCarbonDioxideSensor");
zbCarbonDioxideSensor.setMinMaxValue(0, 1500);
Zigbee.addEndpoint(&zbCarbonDioxideSensor);
Serial.println("Starting Zigbee...");
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.drawStr(0, 30, "Connecting to Zigbee...");
u8g2.sendBuffer();
if (!Zigbee.begin()) {
Serial.println("Zigbee failed to start!");
Serial.println("Rebooting...");
ESP.restart();
} else {
Serial.println("Zigbee started successfully!");
}
Serial.println("Connecting to network");
while (!Zigbee.connected()) {
Serial.print(".");
delay(100);
}
u8g2.clearBuffer();
u8g2.drawStr(0, 30, "Successfully connect");
u8g2.drawStr(0, 50, "Zigbee network!");
u8g2.sendBuffer();
Serial.println();
delay(5000);
// Start carbon sensor reading task
xTaskCreate(carbon_sensor_update, "carbon_sensor_update", 2048, NULL, 10, NULL);
zbCarbonDioxideSensor.setReporting(0, 30, 0);
}
void loop() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.drawXBM(0, 0, 32, 32, gImage_homeassistant);
u8g2.drawStr(43, img_b, " Air  Monitor");
u8g2.setDrawColor(2);
u8g2.drawRBox(36, img_c, img_d, 15, 1);
u8g2.setDrawColor(1);
u8g2.drawStr(0, 45, "CO2: ");
u8g2.setCursor(30, 45);
u8g2.print(carbon_dioxide_value);
u8g2.drawStr(55, 45, "ppb");
u8g2.drawStr(0, 60, "TVOC: ");
u8g2.setCursor(38, 60);
u8g2.print(tvoc_ppb);
u8g2.drawStr(55, 60, "ppm");
if (img_a == img_a_trg) {
if (img_a == 4) {
img_a_trg = 24;
} else if (img_a == 24)
img_a_trg = 4;
}
HugoUI_Animation_EasyOut(&img_b, &img_b_trg, 100);
HugoUI_Animation_EasyIn(&img_a, &img_a_trg, 115);
HugoUI_Animation_EasyOut(&img_c, &img_c_trg, 100);
HugoUI_Animation_EasyOut(&img_d, &img_d_trg, 100);
Oled_DrawSlowBitmapResize(118 - img_a / 2, 50 - img_a / 4, gImage_humidity, 32, 32, img_a, img_a);
u8g2.sendBuffer();
if (digitalRead(button) == LOW) {
delay(100);
int startTime = millis();
while (digitalRead(button) == LOW) {
delay(50);
if ((millis() - startTime) > 3000) {
Serial.println("Resetting Zigbee to factory and rebooting in 1s.");
delay(1000);
Zigbee.factoryReset();
}
}
}
}

改進(jìn)計(jì)劃

得益于 Seeed Studio XIAO 擴(kuò)展板提供的眾多 Grove 接口,Jason計(jì)劃將其他傳感器集成到這個機(jī)器人中來收集更多數(shù)據(jù)。這將可以通過自動化設(shè)備來控制其他的智能家居設(shè)備,例如當(dāng)空氣太干燥時啟動除濕機(jī),或者當(dāng)二氧化碳水平上升時運(yùn)行空氣循環(huán)裝置。總而言之,Jason說這個智能二氧化碳監(jiān)測器項(xiàng)目是一次受益匪淺的創(chuàng)新和學(xué)習(xí)之旅。通過將技術(shù)與設(shè)計(jì)相結(jié)合,他創(chuàng)造了一種不僅可以跟蹤空氣質(zhì)量還可以增強(qiáng)工作空間美感的設(shè)備。接下來他會逐步利用 Zigbee 連接不同的傳感器,打造智能家居生態(tài)系統(tǒng)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2557

    文章

    51814

    瀏覽量

    759447
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17523

    瀏覽量

    355282
  • 機(jī)器人
    +關(guān)注

    關(guān)注

    212

    文章

    28991

    瀏覽量

    209943
  • 空氣質(zhì)量檢測儀

    關(guān)注

    0

    文章

    11

    瀏覽量

    1271

原文標(biāo)題:創(chuàng)客項(xiàng)目秀|基于XIAO ESP32C6的HA空氣質(zhì)量檢測儀

文章出處:【微信號:ChaiHuoMakerSpace,微信公眾號:柴火創(chuàng)客空間】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 0人收藏

    評論

    相關(guān)推薦

    【GoKit申請】空氣質(zhì)量檢測儀

    申請理由:開發(fā)使用,公司正在做一個空氣質(zhì)量檢測儀,需要一個平臺項(xiàng)目描述:1.需要wifi模塊,與手機(jī)直連,并且也要發(fā)送數(shù)據(jù)到互聯(lián)網(wǎng)。2.檢測參數(shù)有溫度,濕度,TVOC,CH2O,CO3.手機(jī)端可以用app查看數(shù)據(jù)。4.有l(wèi)cd直
    發(fā)表于 11-02 10:48

    Pm2.5空氣質(zhì)量檢測的小問題

    畢業(yè)設(shè)計(jì)需要用stm32做個PM2.5空氣質(zhì)量檢測儀,打算用夏普gp2y1010au0f的傳感器,可是stm32io口輸入電壓標(biāo)準(zhǔn)為3.3v,傳感器輸出的電壓可能超過3.3v,我該咋辦,各位大神幫幫忙!!
    發(fā)表于 01-18 17:14

    空氣質(zhì)量測試的原理

    32位高精度CPU處理計(jì)算,然后轉(zhuǎn)化為污染物濃度值,并在液晶屏上加以顯示。空氣質(zhì)量測試可同時檢測儀裝修污染所產(chǎn)生的有害氣體,被很多家庭所采用。那么你了解空氣質(zhì)量測試
    發(fā)表于 03-07 16:04

    什么是壓縮空氣質(zhì)量檢測儀

    壓縮空氣檢測儀最早起源于歐洲EN12021標(biāo)準(zhǔn)中對于呼吸壓縮空氣的要求,目前壓縮空氣質(zhì)量檢測儀最好品牌是德國德爾格,也是壓縮
    發(fā)表于 09-10 10:42

    基于STM32空氣質(zhì)量檢測儀原理圖

    STM32空氣質(zhì)量檢測儀原理圖STM32空氣質(zhì)量檢測儀原理圖STM32空氣質(zhì)量檢測儀原理圖
    發(fā)表于 10-29 18:22 ?355次下載

    德爾格壓縮空氣質(zhì)量檢測儀6種型號的詳細(xì)介紹

    在武漢聚舟科技供應(yīng)的德爾格氣體檢測儀器里面,有6款德爾格壓縮空氣質(zhì)量檢測儀,其主要對場景中各種壓縮空氣中的
    發(fā)表于 06-07 16:51 ?3303次閱讀

    空氣質(zhì)量檢測儀的簡單介紹

    空氣質(zhì)量狀況是目前人們最為關(guān)注的話題,空氣質(zhì)量檢測儀【恒美 HM-Q06】是構(gòu)成環(huán)境空氣質(zhì)量監(jiān)測網(wǎng)絡(luò)系統(tǒng)的基本要素,只有有效的環(huán)境監(jiān)測,才能夠切實(shí)認(rèn)識和把握當(dāng)下的環(huán)境
    發(fā)表于 06-30 09:24 ?1154次閱讀

    空氣質(zhì)量檢測儀的特點(diǎn)介紹

    空氣質(zhì)量檢測儀【恒美 HM-Q06】是我公司生產(chǎn)的新型空氣質(zhì)量在線多參數(shù)監(jiān)測系統(tǒng),空氣質(zhì)量檢測儀【恒美 HM-Q06】主要監(jiān)測PM2.5、P
    發(fā)表于 07-13 09:54 ?737次閱讀

    網(wǎng)格化空氣質(zhì)量監(jiān)測站的特點(diǎn)

    網(wǎng)格化空氣質(zhì)量監(jiān)測站【霍爾德儀器HED-AQ1】空氣質(zhì)量檢測儀有哪些強(qiáng)大功能呢?以前我們只顧及科技的快速進(jìn)步,工業(yè)生產(chǎn)的加快發(fā)展,往往忽視了我們的生活環(huán)境,很多地方的空氣質(zhì)量并不好,我
    發(fā)表于 08-11 16:12 ?493次閱讀

    空氣質(zhì)量檢測儀使用方法是怎樣的

    空氣質(zhì)量對我們的生活影響是非常大的,當(dāng)我們需要測量某個環(huán)境的空氣質(zhì)量時,就需要采用到空氣質(zhì)量檢測儀,為了可以保證測量的準(zhǔn)確性,在使用這款裝置之前就應(yīng)該先了解它的使用方法是哪些,今天就一
    的頭像 發(fā)表于 01-31 15:58 ?3132次閱讀

    空氣質(zhì)量檢測儀優(yōu)勢特點(diǎn)介紹

    當(dāng)我們需要測量某個環(huán)境的空氣質(zhì)量時,可以借助空氣質(zhì)量檢測儀,而我們在使用這款儀器過程中,它可以表現(xiàn)出一定的優(yōu)勢特點(diǎn),我們可以通過這些優(yōu)勢來更好的使用它。但是大部分人員在使用這款儀器時對它的了解可能
    發(fā)表于 02-01 16:12 ?867次閱讀

    空氣質(zhì)量檢測儀原理與應(yīng)用介紹

    我們都知道,不同類型的儀器所采用的原理是不同的,所以它們可以應(yīng)用在不同的環(huán)境中。我們常說的空氣質(zhì)量檢測儀是屬于一款檢測環(huán)境空氣質(zhì)量的設(shè)備,并且具有較快的響應(yīng)速度,對于我們分析某地的
    發(fā)表于 02-03 16:09 ?1022次閱讀

    ONETEST-100AQL空氣質(zhì)量檢測儀工作原理介紹

    空氣質(zhì)量對我們的生活會造成一定的影響,通常需要借助一些專業(yè)的檢測儀器,而我們在使用一款儀器之前,需正確了解它采用的嚴(yán)原理是什么。ONETEST-100AQL空氣質(zhì)量檢測儀是一種用于分析
    的頭像 發(fā)表于 05-17 16:42 ?917次閱讀
    ONETEST-100AQL<b class='flag-5'>空氣質(zhì)量</b><b class='flag-5'>檢測儀</b>工作原理介紹

    空氣質(zhì)量監(jiān)測:了解您周圍空氣質(zhì)量的最佳選擇

    監(jiān)測的種類 空氣質(zhì)量監(jiān)測有多種類型,包括室內(nèi)空氣質(zhì)量監(jiān)測、室外空氣質(zhì)量監(jiān)測儀和移動
    的頭像 發(fā)表于 06-21 11:15 ?923次閱讀

    室內(nèi)空氣質(zhì)量檢測儀的工作原理與應(yīng)用

    隨著人們對健康的關(guān)注度日益提高,室內(nèi)空氣質(zhì)量檢測儀已成為越來越多家庭和企業(yè)關(guān)注的焦點(diǎn)。本文將介紹室內(nèi)空氣質(zhì)量檢測儀的工作原理和應(yīng)用場景。 一、室內(nèi)
    的頭像 發(fā)表于 06-30 13:39 ?3166次閱讀
    主站蜘蛛池模板: 最近新韩国hd视频 | 四虎国产永久在线观看 | 欧美精品区 | 久久夜色精品 | 色综合天天射 | 四虎永久在线精品2022 | 深爱五月网 | 91色视频网站 | 中文字幕一区二区三区 精品 | 你懂的网站在线观看 | 日本黄色大片免费观看 | 夜色综合 | 天堂bt资源新版在线 | 午夜亚洲国产 | 天天舔天天干 | 亚洲一区二区在线视频 | 一个人看的www片免费高清视频 | 久久综合欧美 | 大片毛片女女女女女女女 | 91华人在线视频 | 男人的天堂在线视频 | 五月桃花网婷婷亚洲综合 | 三级黄网站 | 在线黄色大片 | 亚洲午夜影视 | 一区卡二区卡三区卡视频 | 国产三级影院 | 小雪被老外黑人撑破了视频 | 丁香在线| 末发育女一区二区三区 | 凹凸福利视频导航 | 国产伦精品一区二区三区免 | 视频在线播放免费 | 狠狠色网| 国产成人三级视频在线观看播放 | 亚洲欧美综合一区二区三区四区 | 欧美三级手机在线 | 午夜寂寞影 | 国模在线视频一区二区三区 | 国产片翁熄系列乱在线视频 | 色天天干 |

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品