相信使用過Linkit 7697的人都知道除了可以使用Arduino IDE作為開發環境之外,BlocklyDuino也是一個很好的選擇。

本次將會介紹BlocklyDuino中AM7020積木使用方式,並實作一個物聯網裝置作為操作範例;Linkit7697則會搭配DHT11(溫溼度感測器)及WS2812 RGB環形LED,將收集到的溫濕度資料上傳至Adafruit IO平台,並透過Adafruit IO平台遠端控制WS2812 環形RGB LED燈顏色。

 

關於BlocklyDuino及AM7020專屬積木

BlocklyDuino 是一個視覺化程式語言編輯器,能透過拖拉方塊來產出 Arduino 程式;它是一個開源專案,基於Google 提供的 Blockly (視覺化語言編輯程式庫)之上。

為了讓AM7020這款NBIOT模組既能順利運行在Linkit 7697之上,更能使用BlocklyDuino作為開發環境,我們特別設計了BlocklyDuino的AM7020專屬積木以及相容的AM7020 Library。

 

所需材料

  • Linkit7697開發版

  • AM7020 NB-IoT模組(含SIM Card、天線)

  • WS2812 RGB環形LED(8顆LED)

  • DHT11 溫溼度感測器

  • 杜邦線數條

 

Linkit7697

Linkit7697是由聯發科所推出的物聯網開發板,同時具有WiFi及Bluetooth功能;MCU為 ARM Cortex-M4、RAM為352KB、Flash為4MB。

 

AM7020

AM7020是一款NBIoT模組,模組本身支援HTTP(S)、MQTT(S)、TLS等多項Protocol,加上專屬AM7020的Arduino Library,讓使用門檻大大降低,對初學者相當親切的一款模組。

 

WS2812

WS2812 RGB LED是具有內建驅動晶片功能的LED,亦是使用5050 LED封裝加入驅動晶片,驅動方式採串列進出,因此可獨立控制串接LEDs的每一顆LED;每個一R/G/B顏色可獨立控制,且每一個顏色可調整0~255階調,因此每一個顏色需用到8bit控制,每一顆LED需用到24bit控制。

 

DHT11

DHT11是一款單線式雙向串列控制的溫溼度感測器,只需要用到一條線即可溝通;並且使用數位輸出,比起類比式穩定性更好更為精準。DHT11溫度量測範圍為0~50°C±2℃,濕度為20-90%RH ±5%RH,若需要更為精準的感測可使用DHT22。

 

架構

Linkit7697作為主控版使用one wire i2c與DHT11溝通、使用數位訊號控制WS2812 LED,並使用HW UART(Serial1)與AM7020溝通。AM7020則使用MQTT Protocol將溫濕度感測資料上傳至Adafruit IO平台,並且可以透過MQTT訂閱Adafriot IO主題達到控制WS2812 RGB LED顏色功能。

 

步驟

  1. 安裝AM7020擴充積木

  2. 設定Adafruit IO平台

  3. 硬體配置

  4. 程式設計

 

1.安裝AM7020擴充積木

請先下載聯發科BlocklyDuino Editor 3.0.312b的版本(依自己的系統選擇32或64位元的版本),解壓縮會得到「BlocklyDuino3」資料夾。

之後下載AM7020的擴充積木BlocklyDuino_1231擴充程式.zip,解壓縮後會得到名為「arduino-1.8.5」及「package.nw」的資料夾,將這兩個資料夾覆蓋掉原本「BlocklyDuino3」資料夾裡面的同名資料夾。

 

AM7020積木介紹

AM7020的擴充積木是以聯發科BlocklyDuino Editor 3.0.312b的版本加上「ICShop 1212擴充程式」的版本所編製出來的積木,「ICShop 1212擴充程式」已包含「吉哥自製積木」。

執行BlocklyDuino.exe後,即可在左下方「其他元件」中發現「AM7020」,裡面包含AM7020基本連線積木以及相容AM7020的MQTT程式積木。

AM7020各積木詳細說明

AM7020連線功能

  • AM7020初始化

    初始化AM7020,會強制使用Serial1當作UART溝通介面,需要設定Baudrate、Reset Pin(對應AM7020的EN Pin)。

  • 連線到NB-IOT基地台

    連線到NBIOT基地台,需要選擇電信商,積木會依照所選電信商自動帶入正確的APN、BAND。

  • NB-IOT是否已連線?

  • NB-IOT重新連線

AM7020 MQTT 連線功能

  • 連線到MQTT

    連線到MQTT Broker,需要設定MQTT伺服器、連接埠、ID(MQTT ID);如果有需要帳號密碼也需一併設定,KeepAlive為MQTT連接的保持時間(單位為秒,預設為270秒)。

  • 訂閱Topic

  • 發布訊息

  • 當收到MQTT訊息時

    當收到訊息時會自動呼叫這個方法

  • MQTT是否已連線?

  • MQTT重新連線

  • MQTT handle

    此方法需要放置在loop函數裡面,他會不斷檢查是否收到訊息。

  • 接收到訊息的TOPIC名稱

  • 接收到的訊息

 

2.設定Adafruit IO平台

我們需要為Adafruit IO平台建立一個名為linkit7697的Group及五個Feed,名稱及用途分別如下(若對Adafruit IO設定還不熟悉可參考5步驟輕鬆上手Adafruit IO平台!)。

  1. temperature,(記錄溫度資料)

  2. humidity,(記錄濕度資料)

  3. red,(設定WS2812 R值)

  4. green,(設定WS2812 G值)

  5. blue,(設定WS2812 B值)

 

接著需要為Adafruit IO平台建立一個名稱為Linkit7697的Dashboard,用意是將溫溼度資料以圖形化方式呈現,並且可以透過網頁拉桿控制RGB三色數值,Linkit7697端將會收到相同的數值並顯示在WS2812 LED上。

Temperature及Humidity數值顯示的圖形種類請選擇「Gauge」;三色RGB,red、green及blue的數值顯示圖形種類請選擇「Slider」,因每顆LED顏色數值範圍為0~255,故在設定「Slider」時請將Slider Max Value改為255,完成後會呈現如下圖(位置可能不一樣,可自行調整到適當位置)。

 

3.硬體配置

Linkit7697

AM7020

DHT11

WS2812 LED

5v

V

Vin

Vin

GND

G

Gnd

Gnd

TX1

R

-

-

RX1

T

-

-

P5

EN

-

-

P2

-

Data

-

P3

-

-

Din

4.程式設計

BlocklyDuino程式碼請參閱Github( https://github.com/JiekangHuang/linkit7697_AM7020 ),下載下來後使用BlocklyDuino開啟並燒錄至linkit7697。

 

程式說明

開發版Linkit7697初始化:

依照所選電信商連線對應基地台,連線完成後使用MQTT連線到AdafruitIO平台,並訂閱red、green、blud主題,用以接收RGB數值。

重複執行:

檢查AM7020 NBIOT及MQTT連線狀態,並且每分鐘將溫溼度資料上傳至Adafruit IO平台;使用MQTT handle持續檢查是否收到訊息。

當收到MQTT訊息時:

依照訊息主題設定RGB數值,並且將RGB數值寫入WS2812更改顏色。

 

成品

完成以上步驟即可在Adafruit IO Dashboard上即時查看最新溫溼度數據,並透過Dashboard拉桿控制WS2812 RGB LED顏色。

 

小結

經過以上步驟即可使用BlocklyDuino積木輕鬆完成所有程式碼,用BlocklyDuino積木撰寫程式比起Arduino IDE更為容易,許多教師在教學時也習慣使用LinkIt7697 + BlocklyDuino 積木方式開發,對於初學者或小學生來說是相當友善、易上手的開發方式。