micro:bit X MbitBot空汙偵查戰(上篇)

Updated: Jul 27





2019/10/07 更新(因之前的寫法已無法運行, 故作出更動)


前言:

前陣子小編對製作空氣盒子頗有興趣,用Arduino 、NodeMCU 與LinkIt7697 各製作了可以偵測PM2.5、溫度與濕度的版本,並將資料透過Wi-Fi 放在ThingSpeak 上。最近想說能不能用micro:bit也製作一個呢?擴充板當然是選用MbitBot ,於是開始上網找資料,不過馬上就發現PMS3003 好像沒人用micro:bit 讀過呀!

只好再去挖寶咱們強大的工程師,吸收他們腦袋中的程式碼精華功力,於是習得看Datasheet 撰寫程式碼的技能。幾經波折終於能讓micro:bit 讀取資料,放了一段時間觀察,雖然有時資料會異常,但久久才一次,算是ok啦!


解決了空氣感測後,接下來就是溫濕度與顯示螢幕啦,溫濕度是使用常見較為便宜且淘寶一堆的DHT11(請慎選不多解釋,這邊選用保障100%的自家DHT11 ),顯示螢幕是用0.96 寸的OLED (雙色單色都可),螢幕顯示的程式可以在網路上找到就不自己寫啦(其實是已經超過小編能理解的程度了QQ )。


基礎配備準備齊全,當然還是少不了上傳資料囉,這邊拿了一個ESP-12F 模組來擔當上傳大使的角色,隨附的轉板方便焊接排針與更改使用電壓為5V,畢竟MbitBot 是供給感測器接近5V的電壓,ESP-12F 模組預設是3.3V 怕接上去會壞掉。


因為MbitBot 的感測器接口還有位子,也擔心如果只靠電池的耗電問題,跟我們老大討論後決定逗趣的加上振動感測器,最後定案是空氣盒子會每隔一段時間才打開耗電較大的PMS3003 與ESP-12F ,待幾秒讓感測器讀值後再顯示螢幕與上傳資料,上傳完成後維持幾秒隨即關閉螢幕,並將最耗電的兩位進入低功耗模式。螢幕關閉的時候若偵測到外部振動,也會開啟螢幕讓使用者觀測。這樣總算是完成了呢!

好像有點說太多了~接下來就進入主題教大家如何使用micro:bit 製作空氣盒子吧!



所需材料:

1. micro:bit x1

2. MbitBot x1

3. 0.96 OLED 顯示螢幕 x1

4. ESP-12F 模組(需改成5V) x1

5. 震動感應器 x1

6. PMS3003(G3) x1(需將VCC、GND、SET與TXD的線拉出製成杜邦公端)

7. Micro USB 數據線

8. DHT11


下列線材與螺絲請視自己使用的各模組接口與螺絲孔而定。

8. Grove 母座雙頭線 x2

9. Grove 母座 to 母端杜邦線 x3

10. 固定用螺絲螺帽與外殼(可自行設計)



注意事項:

在所需材料中有特別提到要將ESP-12F 修改成5V ,因為MbitBot IO 的電壓接近5V ,直接接上ESP-12F 可能會損壞。修改非常簡單~一般購買的ESP-12F會附贈一個轉板,將ESP-12F 焊在轉板後,在轉板的背面焊上一顆AMS1117(3..3V ) ,並將正面中間那顆電組解焊就完成了,記得將轉板焊上連接用的排針。

至於空氣品質感測器PMS3003 的部份,需將線拉出製成杜邦公端,只需將VCC 、GND 、SET 與TXD 的線拉出即可,PMS3003 的接口標示如下:

VCC、GND是用於供電,TXD的線是傳輸偵測值,SET可設定是否進入低功耗模式。



連接時間:

MbitBot 上面有八個接口,分別將各個模組如下圖位置連接,程式示範將會以下圖接的位置來撰寫。


每個模組除了VCC 與GND 接在MbitBot 各個接口的5V 與G 的位置外,其餘訊號線的連接如下描述:

PMS3003 的TXD 接在MbitBot 的P1 ,SET接在P2 。

DHT11 的訊號接在MbitBot 的P5 。

ESP-12F 的RXD 接在MbitBot 的P15 ,TXD 接在P16 。

OLED 的SDA 接在MbitBot 的SDA,SCL 接在SCL 。

震動感應器的訊號接在MbitBot 的P13 。

線亂亂的~看起來像一隻章魚!



程式示範:

確認接線無誤就可以來撰寫程式囉,首先打開MakeCode 並安裝MbitBot 的程式庫,沒使用過MbitBot 的夥伴可以參考:

https://www.makerlab.tw/blog/categories/micro-bit%E7%B3%BB%E5%88%97


目前安裝最新的MbitBot程式庫同時也會自動搜尋並安裝OLED 與Neopixel 兩個程式庫。



第一步先讓感測器的值顯示在螢幕上吧,點選OLED 並拉出初始化設定的積木

「init OLED with addr 60」 這個積木,並放到當啟動時。


拖曳Read PMS3003 pin 出來,這個功能會讀取數值,新增五個變數並點選MbitBot 拉出Get PMS3003 與DHT11 的值,將數值放入變數內,再放到重複無限次,這一步是為了一口氣將所有數值讀取出來,記得選擇所接的接口編號喔。


接下來將感測器數值透過螢幕顯示出來,點選OLED 並拖曳出如下圖所示的程式積木,內容是設定文字大小(ZOOM<true>是指選擇較大的字體)並拉出顯示文字的程式新增標題為”AirBox”,並依序新增標題與數值,因為我們要讓顯示的文字大一些,所以單個螢幕畫面塞不下這些訊息,顯示完空氣品質的數值後會清除,再顯示溫濕度的數值。


接下來我們就將感測器的數值送上ThingSpeak 吧!不想傳到網路上的夥伴可以跳過這段,關於ThingSpeak 的註冊與使用這邊就不贅述了,不知道的夥伴可以Google 一下。因為我們總共有5個數值(PM1.0、PM2.5、PM10、溫度與濕度),所以要在自己的Channel 增5 個Chart ,我的排序是PM1.0、PM2.5、PM10、溫度、濕度。

回到MakeCode ,先刪除暫停一秒的程式,點選MbitBot 並拖曳出如下圖的兩個積木,第一個ESP8266 程式積木記得選擇連接的接口,並在SSID 與KEY 填入您的Wi-Fi 帳號密碼,第二個Upload ThingSpeak 程式積木請在API Keys 的位置填入您ThingSpeak Channel 的Write API Key ,並依照Chart 的排序在下方欄位放入感測器讀值,因為我們只有5個,其餘的空著即可。



因為連接與上傳需要時間,所以程式積木本身已內含所需的延遲時間,所以不需要再額外新增暫停的積木。將上述程式下載到micro:bit ,耐心等待一段時間後應該就能在ThingSpeak 上看到自己的資料囉!


如果您過了幾分鐘都看不到資料,或許您的Wi-Fi 跟小編所處的環境一樣弱,程式內建的時間太短,還來不及連不上Wi-Fi ,程式就執行下一步了。可以在剛剛新增的ESP8266 程式積木下方加入暫停時間,小編加了4 秒才讓空氣盒子連上,如下圖所示。



除了顯示與上傳,當然也要亮個燈讓Micro:bit 直覺的告訴我們空氣品質概況囉,畢竟我們選用的是0.96 寸的OLED 嘛!字還是有點小。我們就以PM2.5 的值來作為顯示什麼顏色的依據吧!

首先點選左邊選單的Neopixel 並拉出如下圖的積木新增到當啟動時,並設定pin 為P12 (因為MbitBot 上的RGB 燈是連接在P12 喔),後方輸入4是因為我們有4個RGB LED ,並拉出設定亮度的積木「strip set brightness」將光線調弱一點。


接下來新增一系列的如果…否則…邏輯積木,將透過偵測PM2.5 的數值大小分為4種顏色,顯示顏色的積木「strip show color 」在左側積木列的Neopixel 裡。


您也可以新增micro:bit 的表情讓空氣盒子的表達更生動。



新增完成後下載到micro:bit 裡就能如下圖般顯示囉!

本篇的完整範例程式:

https://makecode.microbit.org/_WsLYb4AF4C0h


2020/07/27 因MakeCode改版導致部分功能無法使用, 請使用下列網址程式.

https://makecode.microbit.org/_5CzfmTDeiLbv




結論:

這次的上篇就到這裡,基本上該有的功能我們都已經在本篇完成了,下篇將教大家如何使用PMS3003 與ESP-12F 的低功號模式,並加入震動感測器的功能,那麼我們下篇再見囉!



創客萊吧MakerLab

高雄市左營區博愛二路202號B1F

0989-250-580