教學直擊!LinkIt™ 7697空氣品質偵測並上傳MCS(空氣盒子)

撰寫/攝影 郭俊廷
難度

★★☆☆☆

材料表 空氣品質監測基本材料包(使用LinkIt™ 7697)

新增使用Grove – VOC與eCO2 氣體感測器增加讀取VOC與CO2功能,如需要請電話連絡或電子郵件通知聯絡我們。


Grove – VOC與eCO2 氣體感測器VOC and eCO2 Gas Sensor (SGP30)

聯絡我們– 機器人王國商城

更新感測器有使用SGP30感測器的OLED螢幕顯示畫面:
相關程式下載點請在下方程式說明處下載

 

首先先看我們使用的材料跟完成品是甚麼樣子

 

組裝前

組裝後

1.使用材料

我們使用的材料有以下材料需要購買的空氣品質監測基本材料包(使用LinkIt™ 7697)(欲購買,請洽機器人王國)

 

  • LinkIt™ 7697開發板 *1
  • LinkIt™ 7697 NANO 擴充板 *1
  • Micro USB線 *1
  • 5V 2.1A USB充電器 x 1
  • 攀藤 G5 PMS5003 粉塵濃度感測器(已改成杜邦母座) *1
  • 按鈕模組 *1
  • 0.96 吋 OLED液晶螢幕模組 *1
  • 科易KEYES DHT11温濕度感測器 *1
  • 3pin杜邦線 27CM*2
  • 彩色母母杜邦線20CM *10
  • 束線帶 *3
  • 空氣盒子外殼壓克力 *6
  • 螺絲、螺帽、塑膠柱零件包 *1

 

 

螺絲、螺帽、塑膠柱零件包包含以下之數量:

  • M2*6塑膠螺絲*4
  • M2*6塑膠柱*4
  • M2塑膠螺帽*4
  • M2*10十字螺絲*4
  • M3*12十字螺絲*4
  • M3螺帽*4
  • M3*6塑膠柱*8
  • M3*6十字塑膠螺絲*8
  • M3塑膠螺帽*8

2.接線說明

LinkIt™ 7697 NANO 擴充板與攀藤 PMS5003 粉塵濃度感測器接線表、接線圖

LinkIt™ 7697 NANO 擴充板 攀藤 PMS5003 粉塵濃度感測器
5V VCC(紫色)
GND GND(橘色)
D2 TX(綠色)
D3 RX(藍色)

 

 

LinkIt™ 7697 NANO 擴充板與按鈕模組接線表、接線圖

LinkIt™ 7697 NANO 擴充板 按鈕模組
5V VCC
GND GND
D7 S

LinkIt™ 7697 NANO 擴充板與DHT11温濕度感測器接線表、接線圖

LinkIt™ 7697 NANO 擴充板 DHT11温濕度感測器
5V VCC
GND GND
D5 S

LinkIt™ 7697 NANO 擴充板與OLED液晶螢幕模組接線表、接線圖

LinkIt™ 7697 NANO 擴充板 攀藤 PMS5003 粉塵濃度感測器
VCC VCC
GND GND
SDA SDA
SCL SCL

LinkIt™ 7697 NANO 擴充板與SGP30VOC與eCO2 氣體感測器接線表、接線圖

LinkIt™ 7697 NANO 擴充板 SGP30VOC與eCO2 氣體感測器
VCC VCC
GND GND
SDA SDA
SCL SCL

 

3.程式說明

使用軟體為BlocklyDuino裡內建的arduino-1.8.5,此版本已把相關函式庫預先下載好,不需再另外下載相關函式庫套件。

只需下載並安裝 CP2102N 驅動程式。相關下載點及安裝說明請參考以下網址。

https://docs.labs.mediatek.com/linkit-7697-blocklyduino/v3-12883405.html

https://github.com/MediaTek-Labs/BlocklyDuino-for-LinkIt/releases/tag/3.0.312b

 

開啟BlocklyDuino裡內建的arduino-1.8.5即可編譯並燒錄程式。(位置如下圖)

沒有MCS版的程式

#include "PMS.h"
#include <SoftwareSerial.h>
#include "U8g2lib.h"
#include <DHT.h>
#include <LWiFi.h>
#include "MCS.h"


SoftwareSerial PMSSerial(2, 3); //設定7697RX,TX腳位。接到PMS5003的TX,RX
PMS pms(PMSSerial);
PMS::DATA data;
U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

unsigned long time_1 = 0;

int pms1_0, pms2_5, pms10_0;
int t;
int h;
int D7;
DHT dht11_p5(5, DHT11); //定義dht11腳位在P5



void setup()
{
pinMode(7, INPUT);
dht11_p5.begin();
Serial.begin(9600);
PMSSerial.begin(9600);
u8g2.begin();
u8g2.setFont(u8g2_font_6x10_tf);
u8g2.setFontRefHeightExtendedText();
u8g2.setDrawColor(1);
u8g2.setFontPosTop();
u8g2.setFontDirection(0);

}

void loop()
{
D7 = digitalRead(7);
t = dht11_p5.readTemperature();
h = dht11_p5.readHumidity();



while (!pms.read(data)) {} //PM2.5開始讀取資料
pms1_0 = data.PM_AE_UG_1_0;
pms2_5 = data.PM_AE_UG_2_5;
pms10_0 = data.PM_AE_UG_10_0;
Serial.print("PM 1.0 (ug/m3): ");
Serial.println(pms1_0);
Serial.print("PM 2.5 (ug/m3): ");
Serial.println(pms2_5);
Serial.print("PM 10.0 (ug/m3): ");
Serial.println(pms10_0);
Serial.println("溫度:");
Serial.println(t);
Serial.println("濕度:");
Serial.println(h);
if (D7 == HIGH) {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_8x13_mf);
u8g2.drawStr(15, 0, String("CAVE_AIR_BOX").c_str());
u8g2.drawStr(0, 15, String(String() + "PM2.5: " + pms2_5 + "ug/m3").c_str());
u8g2.drawStr(0, 30, String(String() + "TEMP: " + t + "C").c_str());
u8g2.drawStr(0, 45, String(String() + "HUMID: " + h + "%").c_str());
} while (u8g2.nextPage());
//delay(1000);
} else {
u8g2.clearDisplay();
}


}

有使用MCS版本的程式(需要輸入自己的WiFi帳號密碼、MCS的ID跟KEY,建立自己的MCS通道)

#include "PMS.h"
#include <SoftwareSerial.h>
#include "U8g2lib.h"
#include <DHT.h>
#include <LWiFi.h>
#include "MCS.h"
#define MCS_INTERVAL_TIME 30000 //設定MCS多少秒傳一次資料

SoftwareSerial PMSSerial(2, 3); //設定7697RX,TX腳位。接到PMS5003的TX,RX
PMS pms(PMSSerial);
PMS::DATA data;
U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

unsigned long time_1 = 0;

int pms1_0, pms2_5, pms10_0;
int t;
int h;
int D7;
DHT dht11_p5(5, DHT11); //定義dht11腳位在P5

/***************WIFI帳號密碼******************************/
char _lwifi_ssid[] = "自己的WiFi帳號"; //填入自己的WiFi帳號
char _lwifi_pass[] = "自己的WiFi密碼"; //填入自己的WiFi密碼
/********************************************************/


/***********MCS DeviceId、DeviceKey***********************/
MCSDevice mcs("DeviceId", "DeviceKey"); //需改成自己的MCS (DeviceId,DeviceKey)
/*********************************************************/

/************MCS通道**************************************/
MCSDisplayInteger temp("temp");
MCSDisplayInteger humid("humid");
MCSDisplayInteger PM25("PM25");
/*********************************************************/

void setup()
{
pinMode(7, INPUT);
dht11_p5.begin();
Serial.begin(9600);
PMSSerial.begin(9600);
u8g2.begin();
u8g2.setFont(u8g2_font_8x13_mf);
u8g2.setFontRefHeightExtendedText();
u8g2.setDrawColor(1);
u8g2.setFontPosTop();
u8g2.setFontDirection(0);
/************MCS通道**************************************/
mcs.addChannel(temp);
mcs.addChannel(humid);
mcs.addChannel(PM25);
/*********************************************************/
Serial.println("WiFi開始連線");
u8g2.firstPage();
do {
u8g2.drawStr(0, 0, String("WiFi Connecting.....").c_str());
} while (u8g2.nextPage());
while (WiFi.begin(_lwifi_ssid, _lwifi_pass) != WL_CONNECTED) {
delay(1000);
}
Serial.println("WIFI連線成功");
u8g2.firstPage();
do {
u8g2.drawStr(0, 15, String("WiFi Connected").c_str());
} while (u8g2.nextPage());
while (!mcs.connected()) {
mcs.connect();
}
Serial.println("MCS連線成功");
u8g2.firstPage();
do {
u8g2.drawStr(0, 30, String("MCS Connected").c_str());
} while (u8g2.nextPage());
delay(1000);


}

void loop()
{
D7 = digitalRead(7);
t = dht11_p5.readTemperature();
h = dht11_p5.readHumidity();

while (!mcs.connected()) {
mcs.connect();
if (mcs.connected()) {
Serial.println("MCS Reconnected.");
u8g2.firstPage();
do {
u8g2.drawStr(0, 30, String("MCS Reconnected").c_str());
} while (u8g2.nextPage());
}
}


while (!pms.read(data)) {} //PM2.5開始讀取資料
pms1_0 = data.PM_AE_UG_1_0;
pms2_5 = data.PM_AE_UG_2_5;
pms10_0 = data.PM_AE_UG_10_0;
Serial.print("PM 1.0 (ug/m3): ");
Serial.println(pms1_0);
Serial.print("PM 2.5 (ug/m3): ");
Serial.println(pms2_5);
Serial.print("PM 10.0 (ug/m3): ");
Serial.println(pms10_0);
Serial.println("溫度:");
Serial.println(t);
Serial.println("濕度:");
Serial.println(h);
if (D7 == HIGH) {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_8x13_mf);
u8g2.drawStr(15, 0, String("CAVE_AIR_BOX").c_str());
u8g2.drawStr(0, 15, String(String() + "PM2.5: " + pms2_5 + "ug/m3").c_str());
u8g2.drawStr(0, 30, String(String() + "TEMP: " + t + "C").c_str());
u8g2.drawStr(0, 45, String(String() + "HUMID: " + h + "%").c_str());
} while (u8g2.nextPage());
//delay(1000);
} else {
u8g2.clearDisplay();
}
mcs.process(100);

if (millis() > time_1 + MCS_INTERVAL_TIME) {
time_1 = millis();
temp.set(t);
humid.set(h);
PM25.set(pms2_5);
}

}

建立MCS通道的方法如下:

登入MCS網站 https://mcs.mediatek.com/v2console/zh-TW/
沒有帳號的人請註冊一個帳號

 

按下開發->原型

再按下創建

按下藍字匯入JSON檔.(JSON檔請去上方程式載點下載CAVEDU_AirBox_MCS.zip解壓縮後就可看見)

按下藍字瀏覽

選擇CAVEDU_AirBox_MCS資料夾裡的json檔上傳至MCS

儲存之後可以發現建立了一個CAVE_AIR_BOX的原型,這就完成匯入,再按詳情點進去。

可以發現資料通道都已建立好,按下列表裡的測試裝置,這時候就可以建立我們的測試裝置得到MCS的ID跟KEY。

按下藍字新增測試裝置

接著輸入裝置名稱,可以跟我一樣輸入CAVE_AIR_BOX或修改為自己想命名的名稱皆可,接著按藍色的按鈕創建就可建立一個裝置了。

創建完成後可以看到測試裝置已成功產生的訊息,接著按下方藍色的按鈕詳細資訊。

這時候會跑到該測試裝置的畫面,右上角紅框處可以看到自己的deviceId 和 deviceKey,將他複製到程式碼裡面就可以將你的感測器數值上傳至MCS裡囉。

4.組裝說明

在組裝之前建議先將感測器的接線接好程式都測試完畢沒有問題再來組裝,避免組裝後發現程式或接線有問題會不好拆裝。(感測器的接線請看2.接線說明)

首先先準備好各一隻M2、M3的十字螺絲起子用來鎖接下來的所有螺絲。

接著我們來看我們的壓克力外殼總共有六片,把黏在上面貼紙撕下來後可以看到以下圖片的六塊。

中間黃色那塊是底板,上下兩塊黃色是固定DHT11跟PMS5003 粉塵濃度感測器的固定處,左方黃色的是設計成可掛在牆壁上等地方的掛孔,右邊兩塊透明的壓克力分別是按鈕模組跟OLED固定處還有上蓋。

螺絲、螺帽、塑膠柱分別有以下數量(如下圖)

  • M2*6塑膠螺絲*4
  • M2*6塑膠柱*4
  • M2塑膠螺帽*4
  • M2*10十字螺絲*4
  • M3*12十字螺絲*4
  • M3螺帽*4
  • M3*6塑膠柱*8
  • M3*6十字塑膠螺絲*8
  • M3塑膠螺帽*8

組裝步驟1.底板固定LinkIt™ 7697 NANO 擴充板

首先拿出底板跟LinkIt™ 7697 NANO 擴充板

使用四個M3*6塑膠柱和四個M3塑膠螺帽架起固定住7697 NANO 擴充板的固定柱

接著使用四個M3*6十字塑膠螺絲來固定7697 NANO 擴充板

組裝步驟2.固定按鈕模組跟OLED模組

首先拿出固定模組的板子跟按鈕模組跟OLED模組

接著使用四個M2*6塑膠柱跟四個M2塑膠螺帽鎖上OLED

接著在用四個M2*6塑膠螺絲固定在板子上

同樣的方法使用兩個M3*6塑膠柱跟兩個M2塑膠螺帽鎖上按鈕模組後在用兩個M3*6塑膠螺絲固定在板子上

全部固定後的樣子如下圖

組裝步驟3.固定DHT11温濕度感測器(新增SGP30VOC與eCO2 氣體感測器固定方法)

首先拿出固定DHT11模組的板子跟DHT11温濕度感測器

接著使用兩個M3*6塑膠柱跟兩個M2塑膠螺帽鎖上DHT11

接著將兩個M3*6塑膠螺絲將DHT11固定在板子上(DHT11在開孔裡面)

固定好的樣子如下圖

SGP30VOC與eCO2 氣體感測器使用M2*8塑膠柱三個,塑膠螺絲M2*6三個、M2塑膠螺帽三個來固定。

 

三個M2塑膠螺帽固定位置

M2*8塑膠柱與塑膠螺帽固定位置

三個塑膠螺絲M2*6固定位置

 

組裝步驟4.固定PMS5003 粉塵濃度感測器

首先拿出固定PMS5003的板子跟PMS5003 粉塵濃度感測器

接著使用四個M2*10十字螺絲將PMS5003 粉塵濃度感測器固定在板子上

固定好的樣子如下圖(注意PMS5003的出風口需朝板子開孔的地方擺放,接線處在下方)

組裝步驟5.將所有模組跟LinkIt™ 7697 NANO 擴充板接線,並將7697插入擴充板上

此時所有感測器跟開發版都已固定完畢,由於將盒子組裝起來後會不好接線,所以這裡就先把所有感測器跟其他模組先接線完畢,另外也要將7697插入擴充版。

接線說明請參考2.接線說明

接完所有感測器的線的樣子如下圖。

組裝步驟6.將空氣盒子組裝起來

首先先把盒子立起來使用M3螺帽放進底板跟DHT11側邊的板子,再用M3*12十字螺絲鎖起來固定住。

接著將另一邊有PMS5003板子跟底板一樣使用M3螺帽跟M3*12十字螺絲鎖起來。

接著再蓋上上蓋之前要先用束線帶將過長的線收起來。

蓋上上蓋時要注意的地方是有孔的地方要朝PMS5003粉塵濃度感測器的那邊擺放,這樣粉塵濃度感測器的出風口才可以正確排出粉塵。

接著使用M3螺帽跟M3*12十字螺絲將兩邊上蓋連接處鎖起來。

全部鎖好組裝完成的成品圖如下。

以下是各個角度的成品圖。

5.功能說明

以有使用MCS版本的程式來說明功能

首先一開始會顯示WiFi連線中:WiFi Connecting…..

如果WiFi連上後會顯示WiFi Connected,如果沒有顯示這段文字,代表你沒有正確連線上WiFi ,請檢查你的網路設備是否可正常連線,或是檢查程式裡的WiFi帳號密碼是否輸入正確。

接著會連線MCS,如果連線成功會顯示MCS Connected,如果沒有顯示這段文字,代表你沒有正確連線上MCS,請檢查MCS網站是否可正常連線或是維修中,或是檢查程式裡的MCS的ID跟KEY是否輸入正確。

正常連線WiFi跟MCS後螢幕上就會顯示CAVE_AIR_BOX訊息會依序顯示PM2.5、溫度、濕度的數值。

按下螢幕旁邊按鈕後,螢幕會清空,放開按鈕會顯示螢幕內容,如果發現螢幕沒有正常顯示可以按下按鈕清空螢幕嘗試看看。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *