什麼是ZaiBo
ZaiBo分為兩種模式:
第一種為完整版,使用USB Display提供觸控功能、自動澆水並且有遠端監控等功能。
第二種為精簡版,精簡版雖然沒有自動澆水功能,但它可以提醒使用者澆水,並且採用TFT LCD做為簡易的螢幕,而網站功能皆相同。
其主要功能為:
Ø 自動澆水
使用者可以依據不同品種的盆栽來設定土壤濕度低於多少才澆水。
Ø 即時檢視
使用者可以在ZaiBo上的觸控螢幕進行互動。
Ø 遠端監控
使用者可以開啟ZaiBo網站進行即時監控,支援即時影像與資料顯示,也可以使用網站功能進行遠端控制。
Ø 提醒通知
使用者可以設定土壤濕度過低時寄信提醒使用者澆水,也可以開啟自動澆水模式,並設定水桶水量不足時可以寄信提醒使用者補水。
Ø 記錄圖表
ZaiBo也有記錄功能,使用者可以在網站上看到過往的圖表資料。
事前準備材料:
- 86Duino Zero
- MicroSD 卡
- USB Wifi
- USB Display / TFT LCD
- USB Camera
- USB HUB
- 超音波模組
- 沉水馬達與開關控制電路
- 土壤濕度分壓電路
如何架設環境
首先,可以依照官方教學在SD卡上安裝L86duntu作業系統:
登入後首先解決開機的問題,L86duntu在不正常關機後重開機會在下面看到的選單上等待:
首先將
/etc/grub.d/00_header 檔案裡的
-> make_timeout() {... set timeout = -1
...}
修改為
-> make_timeout() {... set timeout = 10
...}
﹝我們可以直接使用vim的搜尋功能 /make_timeout直接找到該列﹞
再將 /etc/default/grub 檔案中新增一列
-> GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT
$
update-grub
修改完後就不會出現選單的問題囉!
接下來我們要安裝SMTP Server,因為ZaiBo的提醒功能是利用寄信來提醒通知的,所以我們需要有一個可以寄送郵件的伺服器。
先接上網路線後執行下面這一行指令來安裝相關套件:
$ sudo
apt-get install mailutils
接下來可以依照你的喜好設定信箱名稱,然後一樣按Tab選到OK按Enter鍵:
之後會看到完成畫面:
解壓縮後,之後到各個目錄輸入指令開始安裝:
$ tar zxvf filename.tar.gz
$ cd filename
$ ./configure
&& make && make install
在此以SDL-1.2.15為例:
$ tar zxvf
SDL-1.2.15.tar.gz
$ cd
SDL-1.2.15
$
./configure && make && make install
擴充1G的swap
由於我們安裝了L86duntu又使用了很多的周邊裝置,所以128M的記憶體或許稍顯不足,所以我們可以將swap擴充,讓硬碟的一些空間拿來當作虛擬記憶體,指令如下:
$ cd /var
$ fallocate
-l 1G swapfile
$ chmod 600
swapfile
$ mkswap
/var/swapfile
$ swapon
/var/swapfile
$ /var/swapfile none
swap sw
0 0
修改完後我們可以重開機,輸入指令
free –m 來確認是否有變成2G的swap。
如何使用USB Wifi
在86Duino上使用USB Wifi很簡單,如果各位也是使用同一個USB Wifi晶片的話就可以照著官網的教學建立Wifi。
我在此有將指令稍做修改,因為我們的ZaiBo必須要自動連線,所以要自己辨識自己的網路編號:
$ cd
/home/dmp
$ modprobe
rt2800usb
$ echo 148f
5370 | tee /sys/bus/usb/drivers/rt2800usb/new_id
$ sleep 1
$ ID=$(exec
iwconfig | grep -o -P "wlan[0-9]*")
$ echo $ID
> /tmp/usbwifiID
$ ifconfig
$ID up
$ killall
wpa_supplicant
$ killall
wpa_supplicant
$ killall
wpa_supplicant
$ killall
wpa_supplicant
$ killall wpa_supplicant
$ killall
wpa_supplicant
$ killall
wpa_supplicant
$ wpa_supplicant
-i $ID -D nl80211 -c /etc/wpa_supplicant.conf -B
$ sleep 1
$ udhcpc -i
$ID
在這段指令中,會將網卡的名稱存到
/tmp/usbwifiID 中,而在UI顯示的程式中也有來存取這個名稱,所以此一修改是必要的。
如何使用USB Display
和USB Wifi一樣,USB Display在86duino的官網一樣有詳盡的教學,但我們不需要進入圖形介面,所以可以自行修改run_usbdisp.sh內的內容:
$ modprobe
rp_usbdisplay
$ sleep 1
$ modprobe
-r rp_usbdisplay
$ modprobe
rp_usbdisplay
$ sleep 1
$ modprobe
-r rp_usbdisplay
$ modprobe
rp_usbdisplay
$ cp
/home/dmp/rpusbdisp-master/drivers/linux-driver/xserver_conf/10-disp.conf
/usr/share/X11/xorg.conf.d/
如何開機時自動啟動所有的裝置
首先我們在 /etc/init.d/ 下建立一個檔案,在此我以plant為例。
建立完後在裡面輸入內容:﹝可能因裝置不同需要做更動﹞
#! /bin/sh
#
/etc/init.d/plant
#
### BEGIN
INIT INFO
#
Provides: plant
#
Required-Start: $remote_fs $syslog
#
Required-Stop: $remote_fs $syslog
#
Default-Start: 1 2 3 4 5 6
#
Default-Stop: 0
#
Short-Description: Start daemon at boot time
#
Description: Enable service
provided by daemon.
### END INIT
INFO
# setting
usbwifi
# Some
things that run always
touch
/var/lock/plant
# Carry out
specific functions when asked to by the system
case
"$1" in
start)
export PATH=$PATH:/usr/local/bin
# Starting usb wifi
cd /home/dmp
modprobe rt2800usb
echo 148f 5370 | tee
/sys/bus/usb/drivers/rt2800usb/new_id
sleep 1
ID=$(exec iwconfig | grep -o -P
"wlan[0-9]*")
echo $ID > /tmp/usbwifiID
ifconfig $ID up
killall wpa_supplicant
killall wpa_supplicant
killall wpa_supplicant
killall wpa_supplicant
killall wpa_supplicant
#wpa_supplicant -i $ID -D nl80211 -c
/etc/wpa_supplicant.conf -B
iwconfig $ID key 0C04E5B3CD3C9A00DC825FB64B
iwconfig $ID essid 3Com
sleep 1
udhcpc -i $ID
# Starting plant website
sleep 1
chmod 755 /home/dmp/plant/start.sh
nohup /home/dmp/plant/start.sh
if [$(exec lsusb | grep
"fccf:a001") == ""]; then
# Starting TFT display
sleep 1
chmod 755 /home/dmp/TFT_display/TFT_display
cd /home/dmp/TFT_display
./TFT_display
else
# Starting usbdisp
modprobe rp_usbdisplay
sleep 1
modprobe -r rp_usbdisplay
modprobe rp_usbdisplay
sleep 1
modprobe -r rp_usbdisplay
modprobe rp_usbdisplay
cp
/home/dmp/rpusbdisp-master/drivers/linux-driver/xserver_conf/10-disp.conf
/usr/share/X11/xorg.conf.d/
sleep 3
chmod 755
/home/dmp/UI_display/UI_display
cd /home/dmp/UI_display/
xinit ./UI_display
fi
;;
stop)
echo "Stopping 86Duino Planter"
echo "Stopping usbdisp"
;;
*)
echo "Usage: /etc/init.d/plant
{start|stop}"
exit 1
;;
esac
exit 0
儲存完成後,我們要先將此檔案的權限修改為可執行:
$ chmod 755
/etc/init.d/plant
然後使用update-rc.d更新開機script
$ update-rc.d
plant start 99 1 2 3 4 5 6 . stop 80 0 .
設定完後每次重新開機就會啟動這隻script,而我在這隻script中也有做判斷是否使用USB display的裝置,若是沒有接上USB display的話就會啟用TFT LCD來做顯示。
如何建設硬體設備
首先我們需要兩根可以導電的鐵棒﹝我使用露營用的鐵棒﹞:
然後將線焊上,再焊上一顆200Ω的可變電阻﹝方便依據土壤品質調整分壓阻值﹞,再分別接到3.3V、A4、Gnd腳位上:
如此一來就可以使用兩根鐵棒簡單的量測土壤目前的濕度。
因為一般直流抽水馬達會有很多的雜訊,如果要做過濾雜訊的電路會麻煩許多,所以澆水功能的沉水馬達建議使用電腦水冷系統用的馬達。
而開關電路甚至可以很簡單的使用電晶體解決。﹝當然不是好辦法,各位也可以使用繼電器來作開關﹞
而開關電路甚至可以很簡單的使用電晶體解決。﹝當然不是好辦法,各位也可以使用繼電器來作開關﹞
網站功能
在ZaiBo開機後會自動開啟網站功能,各位可以看到簡單易懂的介面:
Current State也就是當前所有的狀態,分別是水箱水量、土壤濕度、空氣濕度、溫度以及大氣壓力。
而下方可以看到歷史記錄的圖表,讓使用者快速掌握近期的狀況。
Live Stream也就是即時串流,使用者可以在直接連上網站,就可以透過Camera知道目前的狀態。
Settings中提到的兩種模式,Warning mode也就是精簡版,只會在該澆水時寄信提醒你,而Watering mode則是完整功能版,也就是將抽水馬達澆水的功能也加進去了,會在水箱沒水時提醒補水。