近日手邊取得了一個linksprite出產的玩具,名字叫做Weather Station
基本上就是小型氣象預報站,利用D1板子控制氣壓,溫濕度sensor
並量測目前所在空間的溫度,濕度和氣壓
--------------------------------------------------------------------------------------------------------
原則上參考下列網址的步驟依序進行即可完成這個小型預報站:
http://linksprite.com/wiki/index.php5?title=LinkSprite_weather_station
但網站沒有提供Source Code,只好另外搜尋,好不容易終於找到了,並下載zip檔:
http://www.instructables.com/id/LinkSprite-Weather-Station-Kit-With-Solar-Panel-Po/step4/3-Software-programming/
--------------------------------------------------------------------------------------------------------
盒子內附贈的2條黏土主要用來固定元件,這個部分網站上沒有特別說明,導致剛開始組裝時對固定方式感到許多疑惑,不過少數幾個螺絲固定的位置本人覺得僅供參考,要不要用螺絲鎖或是用黏土接,基本上以個人喜好決定
硬體接線的部分參考如下圖,雖然網站說明有提供實際接線圖,但細節拍得太模糊,反而示意圖較有用...
實際接線如下:
由於在測試階段,所以電池和太陽能電池先擺著不接,省得浪費電池壽命,用usb接電腦除了燒錄D1板子的功用外,也能當作D1的電源使用
LCD的部分因為開發版上的
GPIO14只有顯示在4PIN插座及SCK,不過SCK有標示註明和GPIO14導通,所以直接插在
SCK上
其餘像按鈕開關,SENSOR等示意圖只有標示1 2根接線位置,要注意實際上標示的PIN腳都在4PIN插座內,只要4PIN插座有對上接腳即可,每個插座的VCC,GND都和各自的SENSOR,開關上面4PIN插座VCC和GND的接腳有對上,所以就盡管接吧,不用怕接錯把板子燒壞
裝好之後開開心心的啟動預報站,結果沒想到LCD螢幕竟然沒有顯示字幕
這個問題從昨天一直找到今天下午,原來是從某個角度看LCD時字體顏色太淡,難怪找了半天都找不到...
下圖中橘色方框標示的腳位是控制LCD的字體顏色深度,0V時為最亮
所以先把紅色方框內的可變電阻逆時針轉到底
但實際上0V時字體就會變成黑色方框,所以逆時針轉到底後再往順時針慢慢轉,
直到出現字體就停止,在轉下去的話字會變得太淺,肉眼會看不見
另外寫一個測試LCD螢幕的code來測試,終於解決問題了
Weather Station的運作方式如下:
按鈕短按時,LCD螢幕背景會亮5秒後消失
按鈕長按時(不用太久,只要短按的時間久一點約1秒左右),切換到時間與溫濕度顯示
再長按一次,切換到氣壓值顯示
再長按一次,換回標題畫面
我們先看以下程式碼中和預報站運作相關的內容:
if(digitalRead(button)==0)
{
delay(10);
if(digitalRead(button)==0)
{
backlightOn();
diffentime = 0;
}
delay(140);
if(digitalRead(button)==0)
{
flag++;
if(flag==4) flag = 1 ;
while(!digitalRead(button));
clearLCD();
}
--------------------------------------------------------------------------
以上部分代表按鈕按下去時所做的動作(button==0)
在0.01~0.14秒之間(也就是短按的一瞬)就只會作LCD螢幕背景發亮的動作而已
但稍微久按一點,也就是0.14秒後(長按約1秒),之前flag常數會開始做+1的動作(前面設置flag為0),接下來我們看flag每+1後會做什麼事:
--------------------------------------------------------------------------
switch(flag)
{
case 1 :
display_logo();
break;
當flag=1時,一樣顯示LCD的logo,然後跳出switch迴圈
case 2 :
display_RTC();
display_dht22();
break;
當flag=2時,LCD顯示溫溼度與時間訊息,並跳出switch迴圈
case 3 :
display_bmp180();
break;
當flag=3時,LCD顯示大氣壓力等訊息,並跳出switch迴圈
當flag=4時讓flag=1,回到LCD的LOGO介面
--------------------------------------------------------------------------
上傳資料到雲端的部分會慢個幾十秒才更新,不過不用擔心,這是正常的現象
~By Bill