โครงงาน

โครงงานควบคุมอุปกรณ์ 4 ช่องและเช็คอุณหภูมิความชื้นผ่านอินเทอร์เน็ต

อภิรักษ์ นามแถ่ง

(aphirak@se-ed.com)

 

 

 

 

ยุคนี้หากจะไม่พูดถึง IoT ก็จะเป็นการไม่ทันยุคสมัย โครงงานนี้เป็นการนำเอาบอร์ด Raspberry PI ทำหน้าที่เป็น Server ส่งค่าอุณหภูมิและความชื้นไปเก็บไว้ที่เว็บไซต์ PubNub และแสดงผลผ่าน Freeboard.io ทำให้เราสามารถดูค่าอุณหภูมิและความชื้นขณะนั้นได้ และพร้อมกันนั้นก็สามารถสั่งงานรีเลย์ที่ฝั่ง Server เพื่อเปิด-ปิดอุปกรณ์ได้ถึง 4 ช่องจากที่ใดก็ได้ ขอเพียงมีสัญญาณอินเทอร์เน็ตเท่านั้นพอ

 

 

          โครงงานนี้จะเป็นการใช้บอร์ด Raspberry Pi มาลงปฏิบัติการ Linux ทำหน้าที่เป็น Server สำหรับอ่านค่าอุณหภูมิจากเซนเซอร์ DHT11 และส่งค่าไปเก็บที่เว็บไซต์ PubNub ที่เป็น API สำหรับรับส่งข้อมูลกันระหว่างแอพพลิเคชันแบบ(real time) และที่สำคัญสามารถสมัครและใช้งานได้แบบฟรีๆ แต่ก็จะมีการจำกัดจำนวนข้อมูลที่ส่งขึ้นไป แต่ถึงอย่างนั้นก็ยังถือว่าเยอะมากพอสำหรับการใช้งานทั่วๆ ไป แต่หากท่านต้องการใช้แบนด์วิทธิ์เยอะขึ้นก็สามารถซื้อได้ไม่แพงเพียงหลักร้อยบาทต่อเดือนเท่านั้น ขึ้นอยู่กับความต้องการของผู้ใช้ แต่สำหรับผู้เขียนเองใช้แบบฟรีก็เพียงพอแล้ว

  

          PubNub ที่กล่าวมานั้นเป็นการเก็บข้อมูล ในส่วนของการแสดงข้อมูลจะเป็นหน้าที่ของ Freebord.io ซึ่งเป็นเว็บที่เราสามารถสร้าง Dashboard เพื่อแสดงค่าในรูปแบบต่างๆ ได้อย่างง่ายดาย และที่สำคัญ คือ สามารถสมัครและใช้งานได้แบบฟรีๆ ในส่วนของจำนวนข้อมูลที่สามารถใช้งานได้นั้นจะถูกจำกัดไว้คล้ายกันกับ PubNub หากท่านต้องการใช้งานแบนด์วิทธิ์ที่มากขึ้นก็สามารถซื้อได้เช่นเดียวกัน แน่นอนผู้เขียนใช้แบบฟรีเพราะพื้นที่ทางผู้ให้บริการให้มีก็เยอะมากพออยู่แล้ว

               

          รูปแบบโดยรวมของโครงงานนี้จะมีอยู่ 2 ส่วน คือ ส่วนแรก Raspberry PI จะทำการอ่านค่าจากเซนเซอร์อุณหภูมิและความชื้นจาก DHT11 จากนั้นจะส่งค่าขึ้นไปเก็บไว้บน PubNub และแสดงผลด้วย Freeboard ในส่วนที่สองเป็นการรับค่าจากการสั่งงานเอาต์พุตผ่านหน้าเว็บ Freeboard ไปเก็บไว้ที่ PubNub และสุดท้าย Raspberry PI จะทำการอ่านข้อมูลมาแล้วจัดการกับสภาวะเอาต์พุตเป็นกันเสร็จขึ้นตอนการทำงานทั้งหมด เพื่อไม่เป็นการเสียเวลามาเริ่มกันเลยครับ

 

 

 

 

รูปที่ 1 บอร์ด Raspberry Pi 3 Model B

 

 

การลง Linux และตั้งค่าให้กับ Raspberry Pi

  

          สำหรับโครงงานนี้จะใช้บอร์ด Raspberry Pi 3 Model B ตัวใหม่จาก Raspberry Pi Foundation เป็นผลิตภัณฑ์รุ่นล่าสุดที่รวมเอาหน่วยประมวลผล ARM Cortex-A53 สี่คอร์แบบ 64 บิต แน่นอนว่าประสิทธิภาพนี้สูงกว่ารุ่นที่ผ่านๆ มาอย่างมาก อีกทั้งยังมีการปรับปรุงพัฒนาอย่างส่วนต่างๆ และที่เห็นได้ชัดอีกส่วนหนึ่ง คือ การเพิ่มฮาร์ดแวร์ในส่วนของการเชื่อมต่อ Bluetooth และ Wi-Fi ไว้ในบอร์ด ทำให้สะดวกต่อการใช้งานและการพัฒนาในแง่ของ Internet of Things (IoT) ที่กำลังได้รับความนิยมอยู่ในขณะนี้ และแน่นอนก็ถูกใช้ในโครงงานนี้ด้วยเช่นกัน

 

          ขั้นแรกเป็นลงปฏิบัติการ Linux ให้กับบอร์ด Raspberry Pi เสียก่อน ซึ่งในโครงงานนี้จะใช้ระบบปฏิบัติการ Raspbian ตัวล่าสุด คือ Jessie สามารถเข้าไปดาวน์โหลดได้ที่เว็บไซต์ https://www.raspberrypi.org/downloads/raspbian (ดังรูปที่ 2) เพื่อเตรียมสำหรับติดตั้งใน SD Card ซึ่งรุ่นปัจจุบันจะเป็นเวอร์ชัน 2016-03-18 และเนื่องจากในเวอร์ชันนี้ได้ติดตั้ง Python 2.7 และ RPi.GPIO (โมดูลสำหรับอินเทอร์เฟสกับพอร์ต GPIO ของ Raspberry Pi) มาไว้เรียบร้อยในตัวแล้ว จึงสะดวกกับเราอย่างมาก

 

  

 

รูปที่ 2 หน้าเว็บไซต์สำหรับดาวน์โหลดระบบปฏิบัติการ Raspbian Jessie

 

  

          เนื่องจากบนบอร์ด Raspberry Pi ไม่มีหน่วยความจำแบบแฟลชเมมโมรี่มา ดังนั้น จำเป็นที่จะต้องลงใน SD Card ภายนอก ดังนี้เพื่อให้สามารถใช้งานได้จึงต้องลง Raspbian เพื่อเป็นระบบปฏิบัติการให้กับ Raspberry Pi และเนื่องจากบอร์ด Raspberry Pi เวอร์ชัน 3 นี้มีความเร็วที่มากขึ้นกว่ารุ่นเด่าที่ผ่านมา ดังนั้นทางผู้ผลิตจึงแนะนำให้ SD Card ที่ใช้งานนั้นมีความเร็วในการสื่อสารข้อมูลด้วย โดยกำหนดว่าต้องใช้การ์ดที่เป็น Class 10 และต้องมีความจุมากกว่า 8GB ขึ้นไป เพื่อให้ใช้งาน Raspberry Pi ได้เต็มประสิทธิภาพมากที่สุด

 

 

 

รูปที่ 3 ตัวอย่างหน้าต่างโปรแกรม SD Formatter Version 4.0

 

 

รูปที่ 4 ตัวอย่างโปรแกรม Win32 Disk Imager

 

 

 

 

รูปที่ 5 เลือกตำแหน่งไฟล์ Image เพื่อลงระบบปฏิบัติการ Raspbian Jessie

 

 

รูปที่ 6 ระหว่างการติดตั้งระบบปฏิบัติการ Raspbian ลง SD Card

 

 

 

 

รูปที่ 7 หน้าต่างแสดงเมื่อติดตั้ง Raspbian สำเร็จ

 

 

ขั้นตอนการติดตั้ง Raspbian Jessie

  

  1. โปรแกรม SD Formatter 4.0 ใช้สำหรับ Format Disk สามารถดาวน์โหลดได้จากลิงค์ https://www.sdcard.org/downloads/formatter_4/eula_windows/
  2. โปรแกรม Win32 Disk Imager ใช้สำหรับเขียนไฟล์ระบบปฏิบัติการที่เป็นไฟล์ Image (*.img) ลงบน SD Card สามารถดาวน์โหลดได้จากลิงค์ http://sourceforge.net/projects/win32diskimager/
  3. ดาวน์โหลดไฟล์ระบบปฏิบัติการ Raspbian Jessie เวอร์ชัน 2016-03-18 ที่ถูกปรับแต่งให้ใช้สำหรับบอร์ด Raspberry Pi โดยเฉพาะเป็น Linux ที่ให้ใช้งานได้ฟรี สามารถดาวน์โหลดได้จากลิงค์ https://www.raspberrypi.org/downloads/raspbian/
  4. จากนั้นให้ Browse ไฟล์ Image ระบบปฏิบัติการ Raspbian Jessie เวอร์ชัน 2016-03-18 (*img) และเลือก Device ให้ถูกต้อง แล้วคลิกปุ่ม Write แสดงดังรูป และจะปรากฏหน้าต่างยืนยัน ให้คลิกปุ่ม Yes
  5. เมื่อเสร็จสิ้นขั้นตอนการลง Volumio แล้วให้เสียบ SD Card ที่เตรียมไว้ลงในช่องซ็อกเก็ตของบอร์ด Raspberry Pi
  6. ให้เสียบสาย Ethernet จากโมเด็มเข้าบอร์ด Raspberry Pi
  7. เชื่อมต่อ SD Card ที่ลงปฏิบัติการ Raspbian Jessie เข้าบอร์ด Raspberry Pi
  8. ป้อนแหล่งจ่ายให้กับบอร์ด Raspberry Pi

 

 

 

รูปที่ 8 วงจรสมบูรณ์

 

 

 

รูปที่ 9 หน้าต่างซอฟต์แวร์ TeraTerm โดยเราจะต้องกรอก IP Address ของบอร์ด ลงที่ช่อง Host

 

  

 

รูปที่ 10 หน้าต่าง Login ของซอฟต์แวร์ TeraTerm โดยให้กรอก User name และ Passphrase เป็น pi และ raspberry

 

  

 

รูปที่ 11 หน้าต่าง terminal ของ Raspbian ซึ่งจะถูกเปิดขึ้นมาหลังจาก remote Login ได้แล้ว

  

 

          ขั้นต่อไป ให้นำอุปกรณ์ที่เตรียมมาต่อเข้าด้วยกันดังรูปที่ 8 ที่เครื่องคอมพิวเตอร์ให้ติดตั้ง TeraTerm (ดาวน์โหลดได้ที่เว็บไซต์ https://en.osdn.jp/projects/ttssh2/releases/) สำหรับใช้รีโมต Login (remote login) มายัง Raspberry Pi โดยให้คลิ๊กเปิด TeraTerm ขึ้นมาแล้วให้เติม IP Address ของบอร์ดลงที่ช่อง Host จากนั้นคลิ๊ก Open ดังรูปที่ 9

 

          เมื่อคอมพิวเตอร์เชื่อมเข้ากับบอร์ดได้สำเร็จ ที่หน้าต่าง Login ของ TeraTerm จะถูกเปิดขึ้นมาอย่างอัตโนมัติ (รูปที่ 10) ให้ผู้ใช้เติมที่ช่อง User name และ Passphrase เป็น pi และ raspberry ตามลำดับ จากนั้นคลิ๊ก OK อีกครั้ง ถ้าทุกอย่างถูกต้อง เราก็จะสามารถผ่านไปยังหน้าต่าง Terminal ของ Raspbian ได้แล้ว (รูปที่ 11)

 

 

 

รูปที่ 12 หน้าต่างในการเซตค่าตั้งต้นด้วย raspi-config

 

 

          หลังจากการ Login หากเป็นการใช้งานเป็นในครั้งแรก ก็อาจต้องใช้คำสั่ง sudo raspi-config เพื่อตั้งค่าต่างๆ ให้กับบอร์ด Raspberry Pi ตามรายการต่อไปนี้ด้วยครับ (จากรูปที่ 12 ใช้ปุ่มลูกศรขึ้นลงเพื่อเลื่อนไปยังตัวเลือกที่ต้องการ และเลือกด้วยปุ่ม Enter) สิ่งที่จำเป็นต้องตั้งค่ามีอยู่ 4 ส่วน ได้แก่

 

  1. Expand Filesystem เพื่อขยายพื้นที่ใช้งานใน SD card เพื่อให้ Raspberry Pi สามารถใช้พื้นที่บน SD card ได้ทั้งหมด (หัวข้อที่ 1.)
  2. กำหนดให้บอร์ด Raspberry Pi ทำการ Login โดยอัตโนมัติ (ไม่ต้องป้อน Username และ Password) เพื่อให้บอร์ดเริ่มทำงานทันทีหลังจากป้อนแรงดัน (หัวข้อที่ 3.)
  3. ก่อนจะเข้าระบบให้รอความพร้อมของการเชื่อมต่อกับเครือข่ายเสียก่อน เพื่อให้บอร์ดสามารถส่งข้อมูลได้ตั้งแต่โปรแกรมเริ่มทำงาน (หัวข้อที่ 4.)
  4. Internationalisation Options > Change Timezone เพื่อตั้งค่า Timezone โดยให้เลือก Geographic area เป็น Asia และเลือก Time zone เป็น Bangkok (หัวข้อที่ 5.)

 

          จบการตั้งค่าโดยคลิ๊กปุ่ม Finish จากเมนูหลัก (กดปุ่มลูกศรทางขวา) จากนั้นเพื่อความมั่นใจให้รีบูต (reboot) บอร์ดด้วยคำสั่ง sudo reboot

  

          ขั้นต่อไป (remote login มายัง Raspberry Pi เข้ามาอีกรอบได้แล้ว) ให้ใช้คำสั่ง sudo rpi-update เพื่อตรวจสอบและอัพเดตเฟิร์มแวร์ของบอร์ดเป็นเวอร์ชันล่าสุด หลังจากการอัพเดต ก็จะต้อง reboot บอร์ดด้วยคำสั่ง sudo reboot ด้วยเช่นกัน

 

          จากนั้น จะต้องอัพเดตเครื่องมือที่ชื่อว่า pip ซึ่งเป็นเครื่องมือที่ช่วยให้การติดตั้งไลบรารี (library) สำเร็จรูปให้ไพธอน (Python เป็นภาษาคอมพิวเตอร์ที่ใช้ในการเขียนซอฟต์แวร์ในการทดลองนี้ครับ) นั้นทำได้ง่ายขึ้น โดยการอัพเดตที่ว่าก็ให้ใช้คำสั่ง

 

  • sudo pip install -U pip

 

          ต่อไปก็ติดตั้งไลบรารี PubNub สำหรับให้บอร์ด Raspberry Pi ของเราสามารถเชื่อมต่อได้กับเว็บไซต์ PubNub ได้นั่นเอง

 

  • sudo pip install pubnub

 

          ขั้นตอนต่อไป ให้ดาวน์โหลดส่วนซอร์สโค้ดหลักของโครงงานมาติดตั้ง โดยให้ทำตามขั้นตอนดังนี้

 

 

 

รูปที่ 13 กระเป๋า PubNub ที่มำการโหลดมา

 

 

 

รูปที่ 14 ไฟล์ภายในกระเป๋า PubNub ที่ใช้งานร่วมกับโครงงานนี้

  

 

          หลังจากที่แตกไฟล์ด้วยคำสั่ง tar -xzvf แล้วจะเห็นว่ามีกระเป๋า PubNub ในพาร์ท “/home/pi” สามารถดูโด้โดยใช้คำสั่ง “ls” ดังแสดงในรูปที่ 13 จากนั้นให้ตรวจสอบไฟล์ภายในกระเป๋าที่จะใช้งานร่วมกับโครงงานของเรา โดยใช้คำสั่ง “cd PubNub” เพื่อเข้าไปในกระเป๋า PubNub และสุดท้ายดูรายการไฟล์ในกระเป๋าด้วยคำสั่ง “ls” จะต้องได้ไฟล์ทั้งหมดดังแสดงในรูปที่ 14 ซึ่งจะเห็นว่ามีไฟล์ทั้งหมด 6 ไฟล์ ซึ่งจะแยกออกเป็น 2 ส่วนหลักๆ คือ ไฟล์สำหรับสร้างปุ่มบนเว็บไซต์ Freeboard ได้แก่ไฟล์ blue.html, green.html, red.html และ orange.html (จะกล่าวในภายหลัง) อีกส่วนหนึ่ง คือ ไฟล์สำหรับรันบน Raspberry Pi คือ dht11.py และ SemiPubNub.py เมื่อได้ไฟล์แล้วเราจะพักส่วนของ Raspberry Pi ไว้แค่นี้ก่อน เนื่องจากเรายังไม่มีรหัสของ PubNub รวมถึงหน้าตาของเว็บ Freeboard

 

 

รูปที่ 15 กดปุ่ม “Get Started Now” เพื่อไปยังหน้าต่างสมัครสมาชิกของ PubNub

 

 

รูปที่ 16 การกรอกข้อมูลเพื่อสมัครเพื่อเข้าใช้งานเว็บ PubNub

 

 

 

การสมัครสมาชิกและตั้งค่าสำหรับ PubNub

 

          ดังที่กล่าวไว้ข้างต้นว่าเราจะทำการส่งข้อมูลจาก Raspberry Pi ไปเก็บไว้ที่เว็บ PubNub ก่อนที่จะแสดงผลผ่านเว็บ Freeboard ดังนั้นจึงต้องมีการสมัครเข้าใช้งานเสียก่อน ขั้นต้นให้เข้าไปที่เว็บไซต์ https://www.pubnub.com/ และกดปุ่ม “Get Started Now” เพื่อไปยังหน้าสมัครสมาชิก จากนั้นให้กรอกรายละเอียดของท่านลงในช่องต่างๆ ดังแสดงในรูปที่ 16 ซึ่งในส่วนของรหัสผ่านจะต้องมี 8 ตัวขึ้นไป และในรหัสผ่านจะต้องประกอบด้วย 4 ส่วนด้วยกันได้แก่ ตัวพิมพ์ใหญ่, ตัวพิมพ์เล็ก, ตัวเลข และเครื่องหมายพิเศษ (อาทิเช่น ดอกจัน (*), สี่เหลี่ยม (#) หรือเปอร์เซ็นต์ (%) เป็นต้น) ไม่อย่างนั้นแล้วจะสมัครสมาชิกไม่ผ่าน

 

 

 

รูปที่ 17 กดปุ่ม “NEW APP +” เพื่อสร้างชื่อของ App ของเรา

 

 

รูปที่ 18 การกรอกข้อมูลเพื่อสมัครเพื่อเข้าใช้งานเว็บ PubNub

 

 

          เมื่อสมัครสมาชิกผ่านแล้วขั้นตอนต่อไปให้สร้าง App ของเราขึ้นมา โดยกดปุ่ม “NEW APP +” ดังแสดงในรูปที่ 17 เมื่อได้ชื่อเรียบร้อยแล้วให้กดปุ่ม “CREATE” เป็นอันเสร็จขั้นตอนการสร้าง App ต่อไปให้สร้าง Keyset สำหรับ App ที่เราสร้างไว้ก่อนหน้านี้ โดยกดที่ปุ่ม “NEW KEYSET +” (ดังรูปที่ 18) เมื่อได้ชื่อแล้วให้กดปุ่ม “CREATE” เป็นอันเสร็จขั้นตอนการสร้าง App และ Keyset

               

          ขั้นตอนต่อไปเป็นการสร้าง Channel สำหรับรับ-ส่งค่า App ของเรา ซึ่งในส่วนของ Channel นี้จะเป็นช่องทางสำหรับการส่งค่าต่างๆ ซึ่งในหนึ่ง App สามารถกำหนด Channel ได้มากกว่า 1 ขึ้นอยู่กับการใช้งานของท่าน ยกตัวอย่างเช่นในโครงงานนี้ผู้เขียนได้แยก Channel ออกเป็น 2 ส่วน คือ ส่วนแรกสำหรับรับส่งข้อมูลอุณหภูมิ+ความชื้น และอีก Channel หนึ่งไว้สำหรับการรับส่งข้อมูลของสวิตช์ ทั้งนี้เพื่อแยกเนื้อหาของข้อมูลออกเป็นส่วนๆ และลดความผิดพลาดในการรับ-ส่งข้อมูล รวมถึงง่ายต่อการตรวจสอบความถูกต้องของข้อมูลแต่ละ Channel ด้วย ซึ่งการตั้งค่า Channel สามารถทำได้ง่ายๆ เพียงการพิมพ์ชื่อ Channel ลงในช่องของ “Default Channel” เสร็จแล้วให้กดปุ่ม “ADD CLIENT” ดังแสดงในรูปที่ 19 ในโครงงานนี้จะใช้ชื่อ “Semi-Channel-sensor” และ “Semi-Channel-button” ซึ่งข้อมูลที่ส่งมาจาก Raspberry Pi จะมาแสดงที่ Channel ทั้งสองช่องนี้

 

          มาถึงขั้นตอนนี้แสดงว่าการตั้งค่าเว็บ PubNub ได้เสร็จเรียบร้อยแล้ว ซึ่งสิ่งที่ท่านผู้อ่านต้องนำไปใช้ในการตั้งค่า Freeboard และโปรแกรม SemiPubNub.py ได้แก่ ค่า Publish Key, Subscribe Key (ดังรูปที่ 20) และ Channel ทั้งสอง

 

 

 

รูปที่ 19 การสร้าง Channel สำหรับการรับส่งข้อมูล

 

 

รูปที่ 20 ค่า Publish Key และ Subscribe Key

 

 

 

รูปที่ 21 กดปุ่ม “START NOW” เพื่อไปยังหน้าต่างสมัครสมาชิกของ freeboard.io

 

 

รูปที่ 22 การกรอกข้อมูลเพื่อสมัครเพื่อเข้าใช้งานเว็บ freeboard.io

 

 

  

รูปที่ 23 สร้างบอร์ดสำหรับแสดงผล

 

 

การสมัครสมาชิกและตั้งค่าเว็บไซต์ Freeboard.io

  

          มาถึงขั้นตอนนี้จะเป็นการนสมัครสมาชิกเว็บไซต์ freeboard.io (https://freeboard.io) ไว้สำหรับแสดงข้อมูลอุณหภูมิ, ความชื้นและสภาวะของสวิตช์ทั้ง 4 ตัวของเรา ซึ่งหลายท่านอาจจะสงสัยว่าในเมื่อสามารถดูข้อมูลได้ผ่านทาง Channel ของเว็บ PubNub ได้ทำไมต้องใช้งานเว็บ Freeboard อีกด้วย คำตอบคือ ท่านสามารถดูข้อมูลแบบดังกล่าวได้เช่นเดียวกัน ไม่ผิดกติกาแต่อย่างใด แต่ข้อมูลก็จะเป็นตัวเลขในรูปแบบ JSON ซึ่งอาจจะดูได้ลำบากไปสักหน่อย ดังนั้นผู้เขียนจึงเลือกใช้งานเว็บ Freeboard เพื่อให้การแสดงผลดูง่ายและมีความสวยงามนั่นเอง

 

          เมื่อสมัครสมาชิกเสร็จเรียบร้อยแล้ว ขั้นตอนต่อไปจะเป็นการสร้างบอร์ดของเราได้เลย โดยให้ใส่ชื่อบอร์ดที่เราต้องการลงในช่อง “enter a name” เมื่อได้ชื่อที่ต้องการแล้วให้กดปุ่ม “Create New” (ดังรูปที่ 23) เมื่อเสร็จแล้วจะเห็นว่ามีชื่อบอร์ดที่เราพึ่งสร้างเมื่อสักครู่เพิ่มขึ้นมา ให้คลิ๊กเข้าไปดูข้อมูลภายในบอร์ด จะเห็นว่าว่างเปล่าไม่มีข้อมูล Pane และ Datasources ดังรูปที่ 24

 

 

 

รูปที่ 24 รายละเอียดภายในบอร์ดที่ยังไม่ได้สร้าง Pane และ Datasources

 

 

รูปที่ 25 การกำหนดค่า Datasources ในส่วนของเซนเซอร์

 

 

 

รูปที่ 26 การกำหนดค่า Datasources ในส่วนของสวิตช์

 

 

          ในการสร้างบอร์ดขั้นแรกให้เริ่มจากส่วนของ Datasources ก่อน โดยการคลิ๊กเลือกที่ปุ่ม “ADD” และให้กำหนดค่าในส่วนของเซนเซอร์ดังแสดงในรูปที่ 25 และตั้งค่าส่วนของสวิตช์ดังแสดงในรูปที่ 26 ซึ่งจะเห็นว่าค่า Datasources ทั้งสองนั้นในส่วนขิง TYPE และ SUBSCRIBE จะเหมือนกัน แต่จะแตกต่างกันตรงค่า NAME และ CHANNEL ซึ่งค่าจาก PubNub ที่จะต้องนำมาใช้งานในส่วนนี้มี 2 ส่วน คือ SUBSCRIBE และ CHANNEL นั่นเอง ส่วน TYPE ก็ให้เลือกเป็น PubNub เนื่องจากเราต้องการรับส่งค่าจากเว็บ PubNub และในส่วนของ NAME เป็นชื่อที่เราตั้งขึ้นมาเอง จะต้องเป็นอะไรก็ได้ แต่ผู้เขียนแนะนำว่าควรจะตั้งชื่อให้สอดคล้องกับ Channel ด้วย เพื่อป้องกันไม่ให้สับสนในขั้นตอนการตั้งค่าในขั้นตอนต่อไป

 

 

 

รูปที่ 27 การกำหนดค่า Widget ของอุณหภูมิ

 

 

รูปที่ 28 การกำหนดค่า Widget ของความชื้น

 

 

          เมื่อกำหนด Datasources เสร็จเรียบร้อย ขั้นตอนต่อไปจะเป็นการสร้าง Pane กัน ทำได้โดยกดที่ปุ่ม “ADD PANE” ซึ่ง Pane นี้เป็นที่บรรจุ Widget ต่างๆ ในการแสดงค่าอุณหภูมิและความชื้นนั้นเป็นประเภท Gauge (การตั้ง TYPE) มีการกำหนดย่านไว้ระหว่างค่าต่ำสุด คือ 0 และค่าสูงสุด 100 (MINIMUN และ MAXIMUM ตามลำดับ) เหมือนกันทั้งสองค่า การกำหนดค่า Widget ของอุณหภูมินั้นให้ตั้งค่าดังรูปที่ 27 (TITLE จะกำหนดเป็น TEMP และกำหนด UNITS เป็น C) ในทำนองเดียวกันการกำหนดค่า Widget ของความชื้นให้ตั้งค่าดังรูปที่ 28 (TITLE จะกำหนดเป็น HUMI และกำหนด UNITS เป็น %RH)

 

          การตั้งค่าต่างๆ ที่กล่าวมานั้นผู้ใช้สามารถตั้งชื่อเองได้โดยไม่จำเป็นต้องอ้างอิงกับค่าใดๆ แต่สำหรับค่า VALUE จะไม่สามารถตั้งได้เอง เนื่องจากค่านี้จะต้องตรงกันกับข้อมูลที่รับมาจาก PubHub การกำหนดก็ทำได้ง่ายๆ โดยการกดที่ข้อความ “+ Datasources” ท้ายช่อง VALUE จากนั้นระบบจะขึ้นลิสชื่อ Datasources ที่เรากำหนดไว้ก่อนหน้านี้ (ในโครงงานนี้จะเป็น SemiSensor) จากนั้นก็ตามด้วยข้อความในรูปแบบ JSON ที่รับมาจาก PubNub ซึ่งการอ่านค่าอุณหภูมิจะกำหนดเป็น Temp (ดังรูปที่ 27) และส่วนของความชื้นจะเป็น Humi (ส่วนนี้ผู้ใช้ต้องพิมพ์ต่อท้ายเอง) จากรูปที่ 29 แสดงความเชื่อมโยงระหว่างค่าที่กำหนดจาก PubNub และ Freeboard

 

 

 

รูปที่ 29 การกำหนดค่าของช่อง VALUE จาก Freeboard และการรับค่าจากช่อง Channel ของ PubNub

 

 

 

รูปที่ 30 การตั้งค่า Widget ส่วน TYPE ที่เป็น HTML

 

 

รูปที่ 31 แก้ไขโค้ด publish_key, subscribe_key และ channel ให้ตรงกับ App จาก PubNub

 

 

          ต่อไปเป็นการตั้งค่าสวิตช์กดติดกดดับสำหรับสั่งเปิดปิดรีเลย์ที่เอาต์พุต การทำงานจะแบ่งออกเป็น 2 ส่วน คือ ส่วนที่เป็นการแสดงสภาวะของเอาต์พุต (TYPE ที่เป็น Indicator Light) และส่วนที่เป็นรูปสวิตช์ แต่เนื่องจาก Freeboard ไม่มี Widget  ที่เป็น Button หรือสวิตช์ ON/OFF ดังนั้นจึงต้องมีการสร้างปุ่มด้วยโค้ดภาษา Javascript

 

          ทำได้โดยกดที่ปุ่ม “ADD PANE” เมื่อได้แล้วก็กดเครื่องหมาย “+” แล้วตั้งค่า TYPE ใน WIDGET เป็น HTML  เมื่อได้แล้วต่อไปก็กดที่ปุ่ม “.JS EDITOR” ด้านท่ายช่อง HTML ดังแสดงในรูปที่ 30 เมื่อได้แล้วจะมีหน้าต่างใหม่เปิดขึ้นมา ให้ผู้อ่านเปิดไฟล์ green.html (เปิดจากโปรแกรม Text editor เช่น โปรแกรม Nodepad เป็นต้น) แล้วคัดลองโค้ดทั้งหมดมาวางบนพื้นที่บนเว็บ Freeboard พร้อมทั้งให้แก้ไขบรรทัดที่เป็น publish_key และ subscribe_key (ส่วนที่ 1) และบรรทัดที่เป็น channel (ส่วนที่ 2) ดังรูปที่ 31 เมื่อแก้ไขเสร็จแล้วให้กดปุ่ม CLOSE และปุ่ม SAVE ตามลำดับ

 

 

 

รูปที่ 32 การตั้งค่า Widget ส่วน TYPE ที่เป็น Indicator Light

 

 

รูปที่ 33 การกำหนดค่าของช่อง VALUE จาก Freeboard ในส่วนของสวิตช์ OUTPUT ช่องที่ 1

 

 

          ทำได้โดยกดที่ปุ่ม “ADD PANE” เมื่อได้แล้วก็กดเครื่องหมาย “+” แล้วตั้งค่า TYPE ที่เป็น Indicator Light ดังแสดงในรูปที่ 32 การตั้งค่านั้นจะเป็นในทำนองเดียวกันกับการตั้งค่าอุณหภูมิความชื้น และจะสังเกตุว่าในส่วนของ VALUE จะเลือก Datasources เป็น “SemiButton” และข้อความที่ใช้สำหรับใช้งาน คือ OUTPUT1 ดังแสดงในรูปที่ 33 ในส่วนนี้จะเป็นการแสดงสภาวะของเอาต์พุต ที่ต้องเพิ่มส่วนนี้เข้ามาก็เพื่อให้ Raspberry Pi เช็คสภาวะของเอาต์พุตที่เกิดขึ้น เนื่องจากการใช้งานจริงความเสถียรของสัญญาณอินเทอร์เน็ตนั้นมีผลต่อการใช้งาน ซึ่งในบางครั้งเมื่อกดสวิตช์สั่งงานไปแล้ว แต่ข้อมูลส่งไม่ผ่านทำให้เอาต์พุตไม่ทำงานตามคำสั่ง ผู้ใช้จะได้ทราบว่าเอาต์พุตไม่ทำงาน ดังนั้นส่วนนี้จึงสำคัญมาก

 

          ในทำนองเดียวกัน การตั้งค่าเอาต์พุต 2-4 ให้ตั้งค่าแบบเดียวกันกับเอาต์พุต 1 โดยจะต้องเปลี่ยนในส่วนของ VALUE เป็น OUTPUT2 - OUTPUT4 ตามตำแหน่งเอาต์พุตที่กำหนด และการตั้งค่า HTML ให้คัดลอกไฟล์ red.html สำหรับเอาต์พุตที่ 2, blue.html สำหรับเอาต์พุตที่ 3 และ orange.html สำหรับเอาต์พุตที่ 4 เมื่อเสร็จขั้นตอนนี้แล้วก็แสดงว่าส่วนของ freeboard.io ของเราพร้อมใช้งานแล้ว

 

 

 

รูปที่ 34 การเปิดไฟล์ SemiPubnub.py ด้วยคำสั่ง nano SemiPubNub.py

 

 

 

รูปที่ 35 การแก้ไข publish_key, subscribe_key และ channel ทั้งสองจาก PubNub

 

 

การแก้ไขโค้ดส่วน Raspberry Pi

 

          ขั้นตอนนี้จะย้อนมาแก้ไขซอร์สโค้ดส่วนของ Raspberry Pi ซึ่งเป็นไฟล์โค้ดที่กำหนดการทำงานของโครงงาน ให้ผู้ใช้ remote login เข้าไปที่ Raspberry Pi อีกครั้ง จากนั้นใช้คำสั่งผ่าน Command line เพื่อเปิดไฟล์ SemiPubnub.py ขึ้นมา ดังแสดงในรูปที่ 34

 

  • nano SemiPubnub.py

 

          เมื่อเปิดไฟล์ SemiPubnub.py ขึ้นมาแล้ว ขั้นตอนต่อไปให้มองหาบรรทัดที่เป็น publish_key, subscribe_key และ channel ดังแสดงในรูปที่ 35 การแก้ไขให้ผู้ใช้พิมพ์ตัวเลข publish_key, subscribe_key (ส่วนที่ 1) ที่ได้จากเว็บ PubNub ซึ่งจากรูปจะเห็นว่ามี channel อยู่ 2 ค่า นั่นก็คือ channel ของข้อมูลเซนเซอร์และข้อมูลสวิตช์นั่นเอง ให้ผู้ใช้กำหนดทั้งสองค่าให้ตรงกันกับข้อมูลของเว็บ PubNub เมื่อแก้ไขเสร็จแล้วให้บันทึกด้วยการกดปุ่ม “Ctrl+x” และตามด้วยปุ่ม ”y” จากคีย์บอร์ด

 

 

 

รูปที่ 36 หน้าจอ Terminal แสดงข้อมูลของส่วนต่างๆ ที่ถูกต้องขณะ Run โค้ด

 

 

การทดสอบ

  

          ขั้นตอนต่อไปเป็นการทดสอบการทำงานของซอร์สโค้ดที่แก้ไข ก่อนการทดสอบให้ตรวจสอบการเชื่อมต่อวงจรตามรูปที่ 8 ว่าถูกต้องหรือไม่ จากนั้นให้เปิดหน้าเว็บ App ของ PubNub และบอร์ดของเว็บ Freeboard ที่เราสร้างไว้ขึ้นมาก่อนหน้านี้ ซึ่งในส่วนของ PubNub ให้เปิดส่วน DEBUG CONSOLE เพื่อดูค่าที่ส่งเข้ามาจาก Raspberry Pi และ Freeboard เมื่อพร้อมแล้วให้เข้าไปในกระเป๋า PubNub และเขียนคำสั่งเพื่อ Run โค้ดดังนี้

 

  • cd PubNub
  • sudo python SemiPubnub.py

 

          หลังจาก Run โค้ดแล้วบน Terminal จะแสดงข้อมูลต่างๆ ออกมา อาทิเช่น สภาวะของเอาต์พุต, ค่าอุณหภูมิที่อ่านจากเซนเซอร์ DHT11 และผลของการส่งข้อมูลขึ้นไปยัง PubNub หากทุกอย่างถูกต้อง ข้อมูลจะแสดงดังรูปที่ 38 แต่ถ้าข้อมูลไม่ถูกต้อง ให้ตรวจสอบความถูกต้องของโปรแกรมแต่ละส่วน อาทิเช่น เซนเซอร์ไม่สามารถอ่านได้ ให้เช็คการเชื่อมต่อ DHT11 หรือถ้าส่งข้อมูลไปยัง PubNub ไม่สำเร็จให้ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตและความถูกต้องของค่า publish_key, subscribe_key และ channel เป็นต้น

 

          หากถูกต้องขณะนั้นที่เว็บ PubNub จะมีข้อความในรูปแบบของ JSON โดยค่าของอุณหภูมิและความชื้นจะส่งมายัง Channel ชื่อ “Semi-Channel-sensor” และหากมีการกดปุ่มสวิตช์จาก Freeboard ข้อมูลจะส่งมายัง Channel ชื่อ “Semi-Channel-button” ดังแสดงในรูปที่ 37 และขณะนั้นข้อมูลจาก Raspberry Pi ก็จะถูกแสดงบนบอร์ดของเว็บ Freeboard ด้วย ดังรูปที่ 38 หากทุกอย่างถูกต้องนั่นแสดงว่าโค้ดทั้งหมดของเราทำงานได้แล้ว และคราวนี้ก็เหลืออีกเพียงขั้นตอนเดียว คือ การตั้งค่าให้ Raspberry Pi ทำงานทันทีหลังจากเปิดเครื่อง ดังจะกล่าวในขั้นตอนต่อไป

 

 

 

รูปที่ 37 ข้อความที่ส่งมาจาก Raspberry Pi มายัง PubNub

 

 

รูปที่ 38 ข้อความจาก PubNub แสดงผลบนเว็บ Freeboard

 

 

 

 

รูปที่ 39 คำสั่งที่ใช้เปิดไฟล์ profile

 

 

 

รูปที่ 40 เพิ่มคำสั่งในท้ายไฟล์ profile

 

 

การตั้งค่า Raspberry Pi ให้ Run โปรแกรมให้อัตโนมัติ

 

          โดยปกติแล้วหลังจากที่ป้อนแหล่งจ่ายให้บอร์ด Raspberry Pi จะโหลดหน้า Terminal และแสดงสภาวะพร้อมรับคำสั่งเท่านั้น หากเราจะให้ Raspberry Pi ทำงานอะไร ก็จะต้องสั่งงานโดนการพิมพ์คำสั่งผ่าน command line ซึ่งนั่นเป็นขึ้นตอนปกติ แต่ในหารใช้งานจริง คงไม่สะดวกแน่ถ้าหากต้องต่อคีย์บอร์ดและต้องควบ Run คำสั่ง “sudo python SemiPubnub.py” ทุกครั้งที่ใช้งาน ดังนั้นเราจึงต้องใส่คำสั่งเพื่อให้บอร์ด Raspberry Pi ทำการ Run คำสั่งเองโดยอัตโนมัติหลังจากที่ป้อนแหล่งจ่ายให้บอร์ด ขั้นตอนก็ทำง่ายๆ โดยพิมพ์คำสั่งเพื่อเข้าไปดังนี้

 

  • sudo nano /etc/profile

 

          หลังจากที่พิมพ์คำสั่งด้านบนแล้ว หน้าจอ Terminal จะเปลี่ยนไปเป็นการเปิดไฟล์ profile ขึ้นมา จากนั้นให้ผู้เขียนเพิ่มคำสั่ง “sudo python /home/pi/PubNub/SemiPubnub.py” (ดังรูปที่ 40) ที่บรรทัดสุดท้ายของไฟล์ ซึ่งความหมายของคำสั่งบรรทัดนี้ คือ ให้ Raspberry Pi ทำการ Run คำสั่งนี้โดยอัตโนมัติภายหลังจากที่บอร์ดเริ่มทำงาน ทำให้เราไม่ต้องคอน Run โค้ดใหม่ทุกครั้งที่ใช้งาน

 

 

 

 

หมายเหตุ ซอร์สโค้ดที่ใช้ร่วมกับโครงงานสามารถดาวน์โหลดได้ที่เว็บไซต์ http://electronics.se-ed.com/download หรือสามารถใช้คำสั่ง wget http://electronics.se-ed.com/download/semi428/PubNub.tar.gz (ดังที่ระบุในบทความ)

 

 

เพียงเท่านี้โครงงานของเราก็พร้อมใช้งานแล้ว ท่านสามารถสั่งงานมาจากที่ไหนก็ได้ในโลก ขอเพียงแค่สามารถเชื่อมต่อเครือข่ายอินเทอร์เน็ตได้เท่านั้น แนวทางการใช้งาน ท่านอาจจะนำบอร์ดนี้ไปไว้ในเรือนเพาะเห็ดเพื่อเช็คอุณหภูมิความชื้นว่าพอเหมาะหรือไม่ ส่วนเอาต์พุตทั้งสี่นั้นก็อาจจะนำไปเปิดพัดลมเพื่อเปิดปั๊มฉีดน้ำ, เปิดหลอดไฟ, เปิดพัดลมระบายอากาศหรือเปิดฮีตเตอร์เพื่อเพิ่มอุณหภูมิ เป็นต้น

 

 

 

 

สงวนลิขสิทธิ์ ตามพระราชบัญญัติลิขสิทธิ์ พ.ศ. 2539 www.thailandindustry.com
Copyright (C) 2009 www.thailandindustry.com All rights reserved.

ขอสงวนสิทธิ์ ข้อมูล เนื้อหา บทความ และรูปภาพ (ในส่วนที่ทำขึ้นเอง) ทั้งหมดที่ปรากฎอยู่ในเว็บไซต์ www.thailandindustry.com ห้ามมิให้บุคคลใด คัดลอก หรือ ทำสำเนา หรือ ดัดแปลง ข้อความหรือบทความใดๆ ของเว็บไซต์ หากผู้ใดละเมิด ไม่ว่าการลอกเลียน หรือนำส่วนหนึ่งส่วนใดของบทความนี้ไปใช้ ดัดแปลง โดยไม่ได้รับอนุญาตเป็นลายลักษณ์อักษร จะถูกดำเนินคดี ตามที่กฏหมายบัญญัติไว้สูงสุด