Raspberry Pi 3 [Temperature & Humidity Data Chart]

จากตอนที่แล้ว เราได้เขียนคำสั่งเพื่อที่จะดึงค่าจากเซนเซอร์แล้ว

ครั้งนี้จะเป็นการใช้วิธีดังค่าดังกล่าว มาเก็บไว้เป็นไฟล์ csv จากนั้นนำไปแสดงเป็นกราฟ โดยแสดงผลผ่าน Web Interface

ด้วยวิธีดังต่อไปนี้ครับ

 

สร้างที่เก็บไฟล์ด้วยคำสั่งต่อไปนี้

mkdir p /home/pi/projects/tempandhumidity
mkdir p /home/pi/projects/tempandhumidity/sensorvalues
cd /home/pi/projects/tempandhumidity

(หากใครไม่ต้องการสร้าง directory เพื่อเก็บข้อมูลตามตัวอย่างนี้ ให้แก้ไฟล์ temp_hud_csv_log.py ด้วยครับ)

จากนั้นดาวน์โหลดสคริปด้วยคำสั่งนี้

wget https://sysadmin.psu.ac.th/wp-content/uploads/2018/03/temp_hud_csv_log.txt
mv temp_hud_csv_log.txt temp_hud_csv_log.py

(เนื่องจาก sysadmin นี้ไม่รองรับการอัพโหลดไฟล์ .py จึงต้องอัพโหลดเป็น .txt ไปก่อน แล้วค่อยเอามา rename เอาเอง)

 

ตรวจสอบและติดตั้ง dependencies ด้วยคำสั่งนี้ sudo easy_install apscheduler และรอจนเสร็จ

      

 

โดยค่า default สคริปนี้จะถูกเซ็ตให้เป็นเซนเซอร์ AM2302 และใช้ GPIO 4 ซึ่งถ้าหากเราใช้เซนเซอร์และขาคนละขากัน ให้เข้าไปแก้ไฟล์ temp_hud_csv_log.py

จากนั้นเริ่มต้นการทำงานด้วยคำสั่ง sudo python temp_hud_csv_log.py

รอซัก 2-3 นาที เราจะเห็นว่ามีไฟล์เกิดขึ้นใน sub folder ชื่อ sensor-values

 

ต่อไปเราจะทำการอ่านค่าใน csv files ไปแสดงผลเป็นกราฟด้วย NVD3 charts for d3.js ใช้งานร่วมกับ node.js JavaScript ซึ่งรวมเว็บเซอร์เวอร์ node.js Express เอาไว้ในตัว (ซึ่ง node.js ได้ถูกติดตั้งเป็น official ใน raspberry pi image os file ซึ่งสามารถเช็คเวอร์ชั่นได้จากคำสั่ง node –version)

 

ทำการดาวน์โหลด html file ใส่ไว้ในโฟลเดอร์ย่อย public ด้วยคำสั่งต่อไปนี้

mkdir p /home/pi/projects/tempandhumidity/public
cd /home/pi/projects/tempandhumidity/public
wget https://sysadmin.psu.ac.th/wp-content/uploads/2018/03/index.txt
mv index.txt index.html

ท่านสามารถแก้ไขไฟล์ index.html ได้ ไม่ว่าจะเป็น Title, DateTime Format, สีตัวอักษร, สีพื้นหลัง และอื่นๆ ได้เลย

 

จากนั้นติดตั้ง node.js script ด้วยคำสั่งต่อไปนี้

cd /home/pi/projects/tempandhumidity
wget https://sysadmin.psu.ac.th/wp-content/uploads/2018/03/nodejs_webserver_soapws.txt
mv nodejs_webserver_soapws.txt nodejs_webserver_soapws.js

 

และทำการติดตั้ง dependencies ของ node.js ด้วยคำสั่งต่อไปนี้

npm install express
npm install bodyparser
npm install csvparse@1.1.0
npm install glob

** ถ้ามีปัญหาในการเรียก npm เช่น command not found. ให้ติดตั้งด้วยคำสั่ง sudo apt-get install npm ได้เลย **
 ** เป็นการติดตั้งใน home folder ของตัวเอง เพราะงั้นไม่ต้องใช้ sudo นำหน้า npm ครับ **
** csv-parse ผมใช้เป็นเวอร์ชั่น 1.1.0 เนื่องจากเวอร์ชั่นใหม่ ลองคอมไพล์แล้วไม่ผ่าน **

 

เมื่อเรียบร้อยแล้วลอง start web server service ด้วยคำสั่ง sudo node nodejswebserverwithsoapservices.js

และลองเปิดเว็บด้วย http://[ไอพีของ Raspberry Pi]:9999/


** รูปนี้ผมเปิดจาก gui บน raspberry pi เลย จึงใช้ 127.0.0.1 **

 

จากนั้นทำการแก้ไขให้รันสคริปอัตโนมัติเมื่อ boot ขึ้นมา

ติดตั้ง forever เพื่อให้รัน background ด้วยคำสั่ง sudo npm g install forever

จากนั้นแก้ไขไฟล์ /etc/rc.local ด้วยคำสั่ง sudo nano /etc/rc.local และเพิ่มบันทัดเหล่านี้ลงไป

cd /home/pi/projects/tempandhumidity

/usr/bin/sudo /usr/bin/python temp_hud_csv_log.py & /usr/bin/sudo /usr/local/bin/forever start nodejs_webserver_soapws.js

 

เรียบร้อยครับ นอกนั้นจะเป็นการแก้ไข gui ซึ่งสามารถแก้เป็น html syntax ที่ไฟล์ index.html ได้เลย

ในตัวอย่างด้านล่างนี้ ลองทิ้งไว้ 2-3 วัน (รวมเสาร์/อาทิตย์) จากนั้นเปิดกราฟดู จะเห็นว่าเป็นกราฟเริ่มมีข้อมูลเยอะแล้ว

(ในตัวอย่าง เริ่มเก็บ 9 มีนาคม 13.54 น. – 12 มีนาคม 12.56 น.)

 

เมื่อเอาเมาส์ไปชี้ที่กราฟ จะปรากฎค่านั้นๆ ด้วย

 

และเมื่อลองเลือกช่วงวันดู จะปรากฎเป็นดังนี้


วันที่ 10 มีนาคม ความชื้นจะลดลงในช่วงกลางวัน ตั้งแต่ประมาณ 7.15 น. เป็นต้นไป
ซึ่งสวนทางกับอุณหภูมิที่เพิ่มขึ้นจาก 27.9 องศา ไปสูงสุดที่ประมาณ 32 องศา

วันที่ 12 มีนาคม (วันทำงาน) พบว่าอุณหภูมิและความชื้นลดลงอย่างรวดเร็วเมื่อเปิดแอร์ ที่เวลาประมาณ 8.45 น.
จากนั้นจะสวิงตามรอบการทำงานของคอมเพรสเซอร์แอร์ (แอร์ธรรมดา มิใช่ inverter แต่อย่างใด) ระหว่าง 22.4 – 25 องศา

 

ผิดพลาดประการใดขออภัยมา ณ โอกาสนี้ครับ ขอบคุณครับ