Raspberry Pi 2 247
ดวยความสามารถของบอรด Raspberry Pi 2 ทีรองรั ่ บการเชื่อมตอเครือขายไดสะดวก เหมือน กับคอมพิวเตอรเครื่องหนึ่ง ดังนั้นจึงมีการนํา Raspberry Pi 2 มาใชในการควบคุมหรือติดตออุปกรณ อินพุตเอาตพุตผานเครือขายอยางกวางขวาง ทั้งในแบบเครือขายภายในองคกร และผานเครือขายอิน เทอรเน็ต หากแตการนําเสนอขั้นตอนการพัฒนาบอรด Raspberry Pi 2 เพื่อใชประโยชนในลักษณะ กลับเปนไปอยางจํากัด ดังนันในบทนี ้ จึ้ งเปนการนําเสนอตัวอยางขันตอนการพั ้ ฒนาและใชงานบอรด Raspberry Pi 2 ในการติดตอกับอุปกรณอินพุตเอาตพุตผานเครือขายขอมูล โดยในการอธิบายนั้นจะ มีการยกตัวอยาง ประกอบกับโคดทั้งภาษา HTML (Hyper Text Markup Language) และ Python เพื่อ นําไปสูการสร างแอปพลิเคชัน่ Simple I/O Web Server ตังแต ้ ตัวอยางการควบคุมอุปกรณเอาตพุตผาน เครื อขาย และการรับคาจากอุปกรณอินพุตรวมถึงผานขอมูลจากตัวตรวจจับเพื่อนํามาแสดงผลบน เครือขาย โดยบอรด Raspberry Pi 2 จะทําหนาทีเป ่ นเว็บเซิรฟเวอรหลัก เนือหาในบทนี ้ จะมี ้ รายละเอียดอยูมากพอสมควร รวมถึงในขันตอนการทดลองปฏิ ้ บัติการดวย จะมีการยกตัวอยางเพื่อใหเห็นถึงที่มาที่ไปของสวนประกอบตางๆ ที่จะนําไปสูการสรางแอปพลิชัน่ เว็บเซิรฟเวอรควบคุมอุปกรณอินพุตเอาตพุตจนสําเร็จ จึงขอใหผูสนใจโปรดอ านและติดตามทําความ เขาใจตามลําดับหัวขอ ตามขั้นตอน โดยสรุปหัวขอตางๆ ที่สําคัญของบทนี้ไดดังนี้ 12.1 กลไกการทํางานของเว็บเซิรฟเวอรในการควบคุมอุปกรณอินพุตเอาตพุต 12.2 กลไกการทํางานระหวางเว็บไคลเอ็นตและเว็บเซิรฟเวอร 12.3 เตรียมอุปกรณเพื่อการพัฒนา Raspberry PI 2 สําหรับงานควบคุมผานเครือขาย 12.4 การทําใหบอรด Raspberry Pi 2 เปนเว็บเซิรฟเวอร - จะไดเรียนรูขั้นตอนการทําให บอรด Raspberry Pi 2 ทํางานเปนเว็บเซิรฟเวอรได จะตองมีการติดตังซอฟต ้ แวรเพิ่มเติม ทั้ง Apache HTTP Server และ PHP 12.5 มารูจักกับโครงสรางของภาษา HTML - เมื่อตองการทําเว็บเซิรฟเวอร สิงหนึ ่ ่งที่ตอง ทําใหไดคือ การเขียนเว็บเพจอยางงายดวยภาษา HTML การทําความรูจักกับโครงสรางของภาษานี้ จึงเปนสิ่งจําเปน
248Raspberry Pi 2
12.6 การสรางเว็บเพจบนบอรด Raspberry Pi 2 - ตอยอดความรูจากหัวขอ 12.4 มาเขียน โปรแกรมเพื่อสรางเว็บเพจของตัวเว็บเซิรฟเวอรซึ่งรันบนบอรด Raspberry Pi 2 12.7 การใชงาน PHP - เปนอีกหนึงภาษาคอมพิ ่ วเตอรทีนิ่ ยมใชมากในการสรางเว็บเพจและ ทําเว็บเซิรฟเวอร 12.8 สรางเว็บเพจดวย PHP - จากการเรียนรูในหั วขอ 12.6 นําขอมูลและตัวอยางโปรแกรม ตางๆ มาสรางเว็บเพจดวยภาษา PHP 12.9 คําสังพื ่ นฐานในการควบคุ ้ มขาพอรต GPIO แบบคอมมานดไลน - ในหัวขอนีนํ้ าเสนอ การเขียนโปรแกรมสั้นๆ ในแบบคอมมานดไลนเพื่อติดตอและควบคุมขา GPIO ไดรับการนําไปใช เมื่อตองการสั่งงาน GPIO จากเว็บไคลเอ็นตผานเซิรฟเวอร 12.10 การรับสงขอมูลระหวางเว็บเพจ 12.11 การสั่งใหสคริปต Python ทํางานดวย PHP 12.12 การทดลองควบคุมอุปกรณเอาตพุตอยางงายผานเว็บบราวเซอรโดยใช PHP และ HTML 12.13 การทดลองติดตออุปกรณอินพุตเอาตพุตอยางงายผานเว็บบราวเซอรทํางานรวมกับ ไฟลสคริปต Python
12.1 กลไกการทํางานของเว็บเซิรฟเวอร ในการควบคุมอุปกรณอินพุตเอาตพุต เมือนํ ่ าบอรด Raspberry Pi 2 มาทําหนาทีเป ่ นเว็บเซิรฟเวอร การทํางานจะแบงออกเปน 2 สวนคือ 1. สวนของการแสดงผลหนาเว็บ ใชการสรางหนาเว็บหรือเว็บเพจ (web page) ดวยโปรแกรม ภาษา HTML 2. สวนของโปรแกรมที่ติดตอกับอุปกรณอินพุตเอาตพุตของบอรด Raspberry Pi 2 ซึ่ง ตองทํางานควบคูกันกับเว็บเพจ การทํางานของบอรด Raspberry Pi 2 ที่ตองกระทําควบคูกับเว็บเพจ ในทีนี่ ขอนํ ้ าเสนอ 2 แบบ ประกอบดวย 1. กําหนดใหโปรแกรมสวนทีติ่ ดตอกับอุปกรณอินพุตเอาตพุตแทรกอยูภายในส วนทีใช ่ แส ดงเว็บเพจ หากเขียนเว็บเพจดวย PHP ก็จะแทรกโปรแกรมสวนทีติ่ ดตอกับอุปกรณอินพุตเอาตพุตเขา ไปดวย รูปแบบนี้ใชไดดีกับการทํางานเพียงรอบเดียวจบ ใชเวลานอยในการทํางาน เพราะเว็บเพจจะ ไมเปลี่ยนแปลง จนกวาจะกระทําทุกคําสั่งจนเสร็จ จะแสดงการทํางานในลักษณะนี้ในตัวอยางการ ทดลองควบคุมอุปกรณ ผานเว็บบราวเซอรโดยใช PHP และ HTML (หัวขอ 12.12 ในบทนี้)
Raspberry Pi 2 249
2. กําหนดใหใชขอมูลรวมกันระหวางโปรแกรมที่ ติดตอกับอุปกรณอินพุตเอาตพุตกับ โปรแกรมทีใช ่ แสดงเว็บเพจ เชน กําหนดใหโปรแกรมในสวนทีติ่ ดตอกับอุปกรณอินพุตเอาตพุตทํางาน ตลอดเวลา โดยมีการนําขอมูลบางสวนทีโปรแกรมของการแสดงเว็ ่ บเพจก็ใชงานอยูด วยมาประกอบเพือ่ ใหการทํางานสมบูรณ ขอมูลทีใช ่ รวมกันอาจอยูในรู ปของไฟลเอกสารหรือฐานขอมูลก็ได ดวยวิธีการนี้ จะยืดหยุนกว าแบบแรก เพราะการทํางานของโปรแกรมทังสองแยกออกจากกั ้ นไดอยางชัดเจน มีเพียง การใชงานขอมูลบางสวนรวมกันเทานัน้ ถึงแมวาโปรแกรมของการติดตอกับอุปกรณอินพุตเอาตพุตอาจ มีการประมวลผลทีซั่ บซอนและใชเวลานาน โปรแกรมของการแสดงเว็บเพจก็ยังคงทํางานไปไดอยางตอ เนือง ่ เพราะใชขอมูลจากไฟลเอกสารหรือฐานขอมูลทีมี่ อยูในป จจุบัน เพียงแตขอมูลทีนํ่ ามาแสดงผลนัน้ อาจยังไมไดรับการปรับปรุงจากการทํางานลาสุดของโปรแกรมทีใช ่ ติดตออุปกรณอินพุตเอาตพุต (เพราะ อาจยังประมวลผลไมเสร็จ) การทํางานในลักษณะนีอธิ ้ บายใหเขาใจไดเพิมขึ ่ นด ้ วยตัวอยางการทดลอง ควบคุมอุปกรณผานเว็บบราวเซอรรวมกับไฟลสคริปต Python ในหัวขอ 12.13 ของบทนี้
รูปที่12-1 ไดอะแกรมแสดงกลไกการทํางานรวมกันของเว็บไคลเอนต (ปกติคือ คอมพิวเตอรของผูใช งาน) และเว็บเซิรฟเวอร โดยทํางานผานเว็บบราวเซอรเพือแจ ่ งรองขอเว็บเพจ และรับขอมูลกลับมาในรูปแบบ HTML เพือนํ ่ ามาแสดงเว็บเพจอยางสมบูรณทีเว็ ่ บไคลเอนต
250Raspberry Pi 2
12.2 กลไกการทํางานระหวางเว็บไคลเอนตและเว็บเซิรฟเวอร แสดงดวยไดอะแกรมในรูปที่ 12-1 เริ่มตนเมือเว็ ่ บไคลเอนต (web client) ซึ่งก็คือ คอมพิวเตอร ของผูใชงานทําการรองขอเว็บเพจ (Request Web Page) มายังเว็บเซิรฟเวอร (web server) จากนั้น เว็บเซิรฟเวอรจะสงขอมูลเว็บเพจที่รองขอมายังเว็บไคลเอนต ในรูปแบบ HTML แลวแสดงผลดวย เว็บบราวเซอรที่ติดตังอยู ้ ในเว็บไคลเอนต เนื่องจากเว็บเพจที่ถูกสรางดวยภาษา HTML เปนภาษาที่ใชแสดงหนาตาเว็บเพจตามที่ตอง การแตจะไมชวยใหเว็บเพจนันปรั ้ บเปลียนหน ่ าตาไดเอง การสรางเว็บเพจทีสามารถปรั ่ บเปลียนได ่ นัน้ ทําไดหลายวิธี หนึงในนั ่ นก็ ้ คือ การฝงสคริปตหรือชุดคําสังที ่ ทํ่ างานทางฝงเซิ รฟเวอร (server-side script)ไวในเว็บเพจ สคริปตตัวหนึงที ่ นิ่ ยมใชกันมาจากคือ PHP engine (PHP: Professional Home Page) เปน สคริปตที่ทํางานรวมกับภาษา HTML เพือช ่ วยใหเว็บเพจเปลียนหน ่ าเว็บไดเองหรือเรียกอีกอยางหนึง่ คือ ทําใหเว็บเพจมี “ความฉลาด” ขึ้น
12.3 การเตรียมอุปกรณเพื่อการพัฒนา Raspberry PI 2 สําหรับงานควบคุมผานเครือขาย เพือให ่ การเรียนรูเพื อพั ่ ฒนาบอรดคอมพิวเตอรอยาง Raspberry Pi 2 สําหรับการสรางระบบควบ คุมผานเครือขาย การจัดเตรียมเครืองมื ่ อและอุปกรณเปนสิงที ่ ต่ องดําเนินการไปพรอมกัน อันประกอบดวย 1. บอรด Raspberry Pi 2 2. USB WiFi ดองเกิล (มีใหในชุด Raspberry Pi 2 Tech Kit แลว) 3. เราเตอรแบบไรสาย (Wireless router) หรือแบบปกติก็ได (หากใชแบบปกติ ไมตองใช USB WiFi ดองเกิลตามไดอะแกรมในรูปที่ 12-3) พรอมแหลงจายไฟ 4. สาย LAN เพื่อเชือมต ่ อบอรด Raspberry Pi 2 เขากับเราเตอร (กรณีไมใชแบบไรสาย ตามไดอะแกรมในรูปที่ 12-3) 5. อะแดปเตอร +5V ที่จายกระแสไฟฟาได 2A เปนอยางนอย สําหรับบอรด Raspberry Pi 2 (มีใหในชุด Raspberry Pi 2 Tech Kit แลว) 6. คอมพิวเตอรที่เชื่อมตอเขากับระบบเครือขาย 7. เครือขายอินเทอรเน็ต (ในกรณีตองการเชือมต ่ อกับเครือขายภายนอก) แนวทางการเชีอมต ่ ออุปกรณทังหมด ้ เพือการเรี ่ ยนรูและทดลองพั ฒนาระบบควบคุมผานเครือ ขายของบอรด Raspberry Pi 2 แสดงในรูปที่ 12-2
Raspberry Pi 2 251
รูปที่ 12-2 ไดอะแกรมการเชือมต ่ ออุปกรณเพือพั ่ ฒนาระบบควบคุมผานเครือขายโดยใชบอรด Raspberry Pi 2 ในแบบตอสาย LAN
รูปที่ 12-3 ไดอะแกรมการเชือมต ่ ออุปกรณเพือพั ่ ฒนาระบบควบคุมผานเครือขายโดยใชบอรด Raspberry Pi 2 ในแบบไรสายผาน WiFi
252Raspberry Pi 2
12.4 การทําใหบอรด Raspberry Pi 2 เปนเว็บเซิรฟเวอร การกําหนดให Raspberry Pi 2 ทําหนาทีเป ่ นเว็บเซิรฟเวอร ลําดับแรกตองติดตังโปรแกรมสํ ้ าหรับ การทํางานเปนเว็บเซิรฟเวอรกอน เนืองจากระบบปฏิ ่ บัติการหลักของ Raspberry Pi 2 เปน Linux ดังนัน้ โปรแกรมเว็บเซิรฟเวอรทีแนะนํ ่ าใหติดตังคื ้ อ Apache HTTP Server โปรแกรมนีมี้ หนาทีบริ ่ การขอมูล และติดตังกลไก ้ PHP แกเว็บไคลเอนต (คอมพิวเตอรยอยในเครือขาย) ทีทํ่ าการรองขอเขามา
12.4.1 ขันตอนการติ ้ ดตัง้ Apache HTTP Server (1) เชือมต ่ อ Raspberry Pi 2 เขากับเครือขายอินเทอรเน็ต (ดูไดอะแกรมจากรูปที่ 12-2 หรือ 123 หรือจากบทที่ 2) (2) เขาสูคอมมานด พรอมต แลวพิมพคําสังเพื ่ ่อติดตังโปรแกรม ้ Apache HTTP Server sudo apt-get install apache2 –y
(3) เมือทํ ่ าการติดตังเสร็ ้ จเรียบรอยแลว ทําการเปดเว็บบราวเซอร (อาทิ Chromium หรือ Midori) ที่ชองคนหา ใหพิมพ Localhost หรือพิมพแอดเดรส 127.0.0.1 หรือ IP แอดเดรสของบอรด Raspberry Pi 2 เชน 192.168.1.36 จะแสดงขอความทีขึ่ นต ้ นวา It works! ดังรูป แสดงวา Apache ทํางานไดปกติ (การคนหาหมายเลข IP แอดเดรสของ Raspberry Pi 2 ทีต่ อในเครือขาย อาจใชโปรแกรม Advance IP Scanner ชวย ดูรายละเอียดไดจากกรอบแยกในบทนี)้
Raspberry Pi 2 253
(4) เมือติ ่ ดตังเสร็ ้ จแลว บน Raspberry Pi 2 จะมีไดเร็กตอรีหรื ่ อโฟลเดอรทีชื่ อว ่ า www ถูกสราง ขึนมาในไดเร็ ้ กตอรี่ var เปนทีเก็ ่ บไฟลสําหรับทําเปนเว็บเพจหรือหนาเว็บ เมือเป ่ ดเขาไปในไดเร็กตอรี่ /var/www จะมีไฟล index.html อยูขางใน ดังรูป
(5) ถาตองการตั้งคาเพื่อกําหนดระดับของการเขาถึงหรือ permission ใหกับไดเร็กตอรี่ /var/ www เพื่อใหการสงไฟลระหวางคอมพิวเตอรทําไดสะดวกและงายตอการพัฒนา ใหพิมพคําสั่งบน Raspberry Pi 2 ดังนี้ sudo chmod 0777 -R /var/
ตัวเลข 777 เปนการตังค ้ าใหผูใช งานในทุกระดับการเขาถึงสามารถอาน, เขียน และ สังให ่ ทํางาน (Read-Write-Execute) ไดทุกไฟลและโฟลเดอร (หรือไดเร็กตอรี่)
12.4.2 ติตตั้ง PHP (1) เชือมต ่ อ Raspberry Pi 2 เขากับเครือขายอินเทอรเน็ต (ดูไดอะแกรมจากรูปที่ 12-2 หรือ 123 หรือจากบทที่ 2) (2) เขาสูหน าตางเทอรมินอล แลวพิมพคําสังเพื ่ ่อติดตัง้ PHP sudo apt-get install php5 libapache2-mod-php5 –y
254Raspberry Pi 2
การคนหาหมายเลข IP แอดเดรสของอุปกรณในเครือขาย จะตองทราบขอบเขตของจํานวน IP แอดเดรส กอนจึงจะคนหาหมายเลข IP แอดเดรสนั้นได ดังนั้นอุปกรณที่ตองการทราบหมายเลข IP แอดเดรสจะตองอยู ใน LAN หรือเครือขายเดียวกัน ในการทดลองเพือเรี ่ ยนรูการใช งานบอรด Raspberry Pi 2 ในการควบคุมอุปกรณ ผานเครือขายในบทนี้ จะตองมีการตรวจสอบหมายเลข IP แอดเดรสของบอรด Raspberry Pi 2 ที่เชื่อมตอใน เครือขาย ดังนันจึ ้ งตองมีการเชือมต ่ ออุปกรณตามแนวทางในรูปที่ 12-2 หรือ 12-3 เสียกอน จากนันใช ้ คอมพิวเตอร ที่ทําหนาทีเป ่ นเว็บไคลเอนตในการติดตังซอฟต ้ แวร Advanced IP Scanner เพื่อใชคนหาหมายเลข IP แอดเด รสของบอรด Raspberry Pi 2 ตอไป
ติดตังโปรแกรม ้ ซอฟตแวรนีรองรั ้ บการสแกน HTTP, HTTPS, FTP และสแกนเครือขายเพือทราบข ่ อมูลเพิมเติ ่ มเกียวกั ่ บ อุปกรณทีเชื ่ อมต ่ อกัน ไดแก ชือของคอมพิ ่ วเตอรหรืออุปกรณ และ MAC แอดเดรส ดาวนโหลดโปรแกรมไดที่ http:/ /www.advanced-ip-scanner.com/th/ จากนันทํ ้ าการติดตังโปรแกรมลงในคอมพิ ้ วเตอร (ทีทํ่ าหนาทีเป ่ นเว็บไคล เอนตจากรูปที่ 12-2 หรือ 12-3) ใหเรียบรอย
การใชงาน (1) เมือติ ่ ดตังโปรแกรมเสร็ ้ จแลว จะมีไอคอนของซอฟตแวร ดับเบิลคลิกเพือเป ่ ดโปรแกรม
(2) หนาตางหลักของโปรแกรมแสดงขึนมา ้ มีรายละเอียดดังรูป
Raspberry Pi 2 255
(3) วิธีการหาขอบเขต IP แอดเดรส ดวยซอฟตแวร Advanced IP Scanner เริมต ่ นดวยการเปด Control Panel > Network and Internet > Network and Sharing Center จากนั้นคลิกที่ Ethernet หากการตอ อุปกรณใชสาย LAN ตอระหวางคอมพิวเตอร เราเตอร และ Raspberry Pi 2 เพือให ่ อยูในวง LAN เดียวกัน
(4) แตถาหากบอรด Raspberry Pi 2 ตอกับเครือขายในแบบไรสายผาน Wi-Fi จะตองคลิกที่ WiFi แทน (5) จากนั้นจะปรากฏหนาตาง Ethernet Status ที่แสดงสถานะของ Ethernet ใหคลิกที่ Details..
256Raspberry Pi 2
(6) จะปรากฏหนาตางแสดงรายละเอียดของการเชื่อมตอ Network ดังรูป
ขอมูลที่สําคัญสําหรับการหาขอบเขต IP แอดเดรสคือ IPv4 Address และ IPv4 Subnet Mask โดยที่ IPv4 Address คือ หมายเลข IP แอดเดรสของคอมพิวเตอรที่ไดรับหมายเลข IP แอดเดรสจาก เราเตอร IPv4 Subnet Mask คือ จํานวนหมายเลข IP แอดเดรสของอุปกรณทีอยู ่ ในวง LAN เดียวกัน นําขอมูลนี้มาคํานวณขนาดของ IP แอดเดรส ดังนี้ (6.1) คํานวนหาหมายเลขเริมต ่ นของ IP แอดเดรสหรือ Network IP IP แอดเดรส มีขอมูล 4 ชุด ชุดละ 8 บิต คันด ่ วยจุด . การกระทําทางดานลอจิกจะตองกระทําให ตรงชุดดวย IPv4 Address = 192.168.137.1 เมื่อแปลงเปนเลขฐานสองจะได 11000000.10101000.10001001.00000001 IPv4 Subnet Mask=255.255.255.0 แปลงเปนเลขฐานสองจะได 11111111.11111111.11111111.00000000 นํา IPv4 Address แอนด (AND) กับ IPv4 Subnet Mask จะได 11000000.10101000.10001001.00000000 แปลงเปนเลขฐานสิบจะได 192.168.137.0 จึงได Network IP มีคาเทากับ 192.168.137.0 หรือเรียกอีกอยางคือ คาเริ่มตนของ IP แอด เดรสของวง LAN นี้
Raspberry Pi 2 257
(6.2) คํานวนหาหมายเลขสินสุ ้ ดของ IP แอดเดรส หรือ Broadcast IP วิธีที่งายที่สุดคือ เมื่อทราบแลววา ในแตละชุดขอมูลมีขนาด 8 บิต คือมีคา 0 ถึง 255 ให พิจารณาจาก Subnet Mask กอน จะเห็นไดวาชุดที่ 4 ของ Subnet Mask เปนเลข 0 นอกนั้นมีคาเปนหมาย เลข 255 ทั้ง 3 ชุด ดังนั้นหมายเลข Subnet Mask คือ 255.255.255.0 ถึง 255.255.255.255 มีหมายเลขที่ เปนไปไดคือ 256 จํานวน (0 ถึง 255) สงผลใหหมายเลข IP แอดเดรสทีอยู ่ ในวง LAN นีเริ้ มจาก ่ Network IP นั่นคือ 192.168.137.0 ไปถึง 192.168.137.255 (7) เมื่อทราบขอบเขตที่ตองการหาหมายเลข IP แอดเดรสแลว ใหนําหมายเลขนั้นใสในชองแรกของ โปรแกรม Advance IP Scanner ดังรูป จากนั้นคลิกที่ปุม SCAN เพือเริ ่ มการค ่ นหา
(8) เมือค ่ นหาเสร็จแลว จะแสดง IP แอดเดรสของอุปกรณทุกตัวที่ตออยูในวง LAN เดียวกันดังรูป
จะไดหมายเลข IP แอดเดรสของบอรด Raspberry Pi 2 ที่ตอภายในเครือขาย โดยอาจดูจากชื่อ หรือชือผู ่ ผลิ ตก็ได จากนันนํ ้ าหมายเลข IP แอดเดรสไปใชงานตอไป
258Raspberry Pi 2
(3) เมือติ ่ ดตังเสร็ ้ จเรียบรอยแลว ลําดับตอไปเปนการทดสอบการทํางาน PHP บน Raspberry Pi (4) เปดโฟลเดอรหรือไดเร็กตอรีที่ มี่ ชือว ่ า www โดยจะอยูที ่ /var/www ภายในมีไฟล index.html ใหเปลี่ยนนามสกุลเปน .php ดังรูป (ขั้นตอนนี้จะทําไดก็ตอเมื่อทําการตังค ้ า Permission จากขั้นตอน ที่ผานมาเปนที่เรียบรอยแลว หรือใชคําสังแบบคอมมานด ่ ไลนบน Raspberry Pi 2 ศึกษาไดจาก http:/ /doc.inex.co.th/r-pi-web-server-installation/)
(5) เมื่อเปลี่ยนนามสกุลไฟลเสร็จแลว ลบสคริปตที่อยูในไฟลนี้ใหหมด แลวเพิ่ม <?php phpinfo(); ?> ดังรูป จากนั้นบันทึกไฟล
(6) ทดสอบการทํางานของ PHP โดยเปดเว็บบราวเซอร เขาไปที่ IP แอดเดรสของ Raspberry Pi 2 เชน 192.168.1.36 จะเห็นเว็บเพจแสดงดังรูป แสดงวา PHP ทํางานไดปกติ
Raspberry Pi 2 259
sudo apt-get install php5 libapache2-mod-php5 -y
sudo apt-get install apache2 -y
<?php phpinfo(); ?>
sudo chmod 0777 -R /var/
รูปที่ 12-4 ผังงานแสดงขันตอนการเตรี ้ ยมการให Raspberry Pi 2 ทํางานเปนเว็บเซิรฟเวอร
260Raspberry Pi 2
12.5 รูจักกับโครงสรางภาษา HTML 12.5.1 ขอมูลเบื้องตน โครงสรางหลักของ HTML เริ่มดวย ชุดคําสังที ่ ่ใชแยกเปน 2 สวนคือ
<html>
และจบดวย </html> เสมอ ดังรูปที่ 12-5
1. head คําสังที ่ ่อยูในสวนนี้ใชบรรยายรายละเอียดเกี่ยวกับเว็บเพจหรือหนาเว็บ 2. body คําสังที ่ ่อยูในส วนนี้ใชในการจัดรูปแบบตัวอักษร จัดหนา ใสรูปภาพ ซึงตั ่ วอักษร ในสวนนี้จะแสดงที่เว็บบราวเซอรโดยตรง สวนตัวอยางของโปรแกรมภาษา HTML เพื่อแสดงเว็บเพจแสดงไวในโปรแกรมที่ 12-1 <html> <head>
head
</head> <body>
body
</body> </html>
รูปที่ 12-5 โครงสรางของโปรแกรมภาษา HTML
Raspberry Pi 2 261
<html> <head> <title>Homepage Title</title> </head> <body> Value: <input type=”text” mame “fname”> <button type=”button”>Click Me!</button><br> <input type=”submit” value=”Submit”> <table style=”width:50%”> <tr> <td>Number</td> <td>Value1</td> <td>Value2</td> </tr> <tr> <td>1</td> <td>data1</td> <td>data2</td> </tr> <tr> <td>2</td> <td>data3</td> <td>data4</td> </tr> </table> </body> </html>
คําอธิบายชุดคําสัง่ <title>Homepage Title</title> คําสังที ่ ่ใชระบุบชื่อ web page <input
type=”text” name=”fname”> คําสังที ่ ่ใชแสดง Textbox เพื่อรับขอมูลจาก คียบอรด
<button type=”button”>Click Me!</button>
คําสังที ่ ่ใชแสดงปุม
่ ใช ่ ขึนบรรทั ้ ดใหม <br> คําสังที ่ ม <input type=”submit” value=”Submit”> คําสังแสดงปุ <table style=”width:50%”>……</table>
คําสังแสดงตารางที ่ ่มีความกวาง 50% ของหนาจอ
<tr>…..</tr> คําสังแสดงข ่ อมูลใน 1 แถว <td>….</td>
คําสังแสดงข ่ อมูลใน 1 สดมภ
โปรแกรมที่ 12-1 ตัวอยางโปรแกรมของโฮมเพจ ทีเขี ่ ยนขึนด ้ วยภาษา HTML
262Raspberry Pi 2
12.5.2 การทดสอบโปรแกรมภาษา HTML บนคอมพิวเตอร เพื่อใหเกิดความเขาใจในโปรแกรมภาษา HTML มากขึน้ ใหทดสอบตามขันตอนต ้ อไปนี้ (1) เปดโปรแกรม Notepad จากนั้นพิมพคําสั่ง HTML จากโปรแกรมที่ 12-1 ดังรูปที่ 12-6
รูปที่ 12-6 ตัวอยางโปรแกรมภาษา HTML ทีพิ่ มพลงในโปรแกรม Notepad (2) บันทึกไฟลชือ่ Web.html เลือกบันทึกแบบ All File (*.*) และเขารหัสแบบ UTF-8 ดังรูป ที่ 12-7 แลวกดปุม Save
รูปที่ 12-7 บันทึกไฟลภาษา HTML
Raspberry Pi 2 263
(3) เปดไฟล Web.html ดวยเว็บบราวเซอร อาทิ Google Chrome หรือ Mozila Firefox จะไดผล ดังรูปที่ 12-8
รูปที่ 12-8 ตัวอยางเว็บเพจทีเขี ่ ยนขึนจากโปรแกรมที ้ ่ 12-1 หมายเลข 1 เปนผลของสวนคําสังที ่ เป ่ น head หมายเลข 2 เปนผลของสวนคําสังที ่ เป ่ น body
264Raspberry Pi 2
12.6 การสรางเว็บเพจบนบอรด Raspberry Pi 2 จากหัวขอ 12.5 เปนการแนะนําใหทดลองสรางไฟล HTML บนคอมพิวเตอรทัวไป ่ ในหัวขอนี้ เปลียนมาเป ่ นการสรางไฟล HTML บนบอรด Raspberry Pi 2 บาง โดยตังชื ้ อไฟล ่ HTML วา Web.html มีขันตอนดั ้ งนี้ (1) เปดโปรแกรม Geany จากนันเลื ้ อกสรางไฟลใหม โดยคลิกเลือก File > New(with_Template) > file.html (2) เมื่อสรางไฟลขึ้นมาแลว เพิ่มชุดคําสังเข ่ าไป ตามรูปที่ 12-9
รูปที่ 12-9 สรางไฟล HTML บน Geany ทีติ่ ดตังบนบอร ้ ด Raspberry Pi 2 หมายเลข 1 คําสังในส ่ วน head หมายเลข 2 คําสังในส ่ วน body
Raspberry Pi 2 265
(3) บันทึกไฟลที่สรางขึ้นมา โดยการกด Ctrl และ s แลวตั้งชือว ่ า Web.html เก็บไวที่ var/www/ ดังรูปที่ 12-10
รูปที่ 12-10 บันทึกไฟล HTML บน Geany ทีติ่ ดตังบนบอร ้ ด Raspberry Pi 2
266Raspberry Pi 2
(4) จากนันไปที ้ คอมพิ ่ วเตอรทีทํ่ าหนาทีเป ่ นเว็บไคลเอ็นต ใหพิมพ IP แอดเดรสของ Raspberry Pi 2 (ไดมาจากหัวขอกอนหนานี)้ ตามดวยชือไฟล ่ ทีสร ่ าง เชน 192.168.137.243/Web.html จะไดผลดัง รูปที่ 12-11 หมายเหตุ : การหา IP แอดเดรสของ Raspberry Pi 2 อาจใชโปรแกรมคนหาหรือใช คําสั่ง ifconfig บน Raspberry Pi 2 เพื่อตรวจสอบก็ได
รูปที่ 12-11 เว็บเพจทีสร ่ างขึนและเก็ ้ บไวในบอรด Raspberry Pi 2 หมายเลข 1 คําสังในส ่ วน head หมายเลข 2 คําสังในส ่ วน body
Raspberry Pi 2 267
12.7 การใชงาน PHP PHP คือภาษาคอมพิวเตอรในลักษณะเซิรฟเวอร-ไซด สคริปต (server-side script) ภาษา PHP ใชสําหรับจัดทําเว็บไซต และแสดงผลออกมาในรูปแบบ HTML เปนสวนประกอบภายในเว็บเพจ โดยคําสั่งจะปรากฏระหวาง <?php...?> หรือ <?...?> ตัวอยางที่ 12-1 <?php echo echo echo echo ?>
"Hello, "."<br>"; "World!"; "<br> "."Hello, "; "Inex!";
ผลลัพธ Hello, World! Hello,Inex!
อธิบายคําสั่ง ่ ใช ่ แสดงขอความ การตอขอความจะใชจุด . สวนการขึนบรรทั ้ ดใหมใชรหัส echo เปนคําสังที ่ องการขึนบรรทั ้ ดใหมดังตัวอยางที่ 12-1 <br> รวมกับขอความทีต
268Raspberry Pi 2
12.8 สรางเว็บเพจดวย PHP จากการเรียนรูในหั วขอ 12.7 นําขอมูลและตัวอยางโปรแกรมตางๆ มาสรางเว็บเพจดวยภาษา PHP บนบอรด Raspberry Pi 2 โดยยังคงมีการเชือมต ่ ออุปกรณเขากับเครือขายตามรูปที่ 12-2 หรือ 12-3 (1) สรางไฟล PHP ดวยการเปดโปรแกรม Geany เลือกที่ File > New (with_Template) > file.php เมือสร ่ างไฟลขึนมา ้ (2) ลบขอความเดิมออกใหหมด แลวเพิ่มชุดคําสังเข ่ าไปดังรูปที่ 12-12
รูปที่ 12-12 หนาตางของโปรแกรม Geany ทีแสดงโค ่ ดสําหรับสรางไฟล PHP (3) บันทึกไฟล โดยการกด Ctrl และ s ตังชื ้ อเป ่ น Hello.php เก็บไวที่ var/www/ ดังรูปที่ 12-13
รูปที่ 12-13 บันทึกไฟล PHP เพือสร ่ างเว็บเพจบนบอรด Raspberry Pi 2
Raspberry Pi 2 269
(4) จากนันไปที ้ คอมพิ ่ วเตอรทีทํ่ าหนาทีเป ่ นเว็บไคลเอ็นต ใหพิมพ IP แอดเดรสของ Raspberry Pi 2 (ไดมาจากหัวขอกอนหนานี)้ ตามดวยชือไฟล ่ ทีสร ่ าง เชน 192.168.137.243/Hello.php จะไดผลลัพธ ดังรูปที่ 12-14
รูปที่ 12-14 เว็บเพจทีสร ่ างขึนบนบอร ้ ด Raspberry Pi 2 ดวยไฟล PHP
12.9 คําสังพื ่ ้นฐานในการควบคุมขาพอรต GPIO แบบคอมมานดไลน ในหัวขอนีนํ้ าเสนอการเขียนโปรแกรมสันๆ ้ แบบคอมมานดไลน (คําสังเรี ่ ยงบรรทัด) เพือติ ่ ดตอ และควบคุมขา GPIO ของ Raspberry Pi 2 เพื่อนําไปใชเมื่อตองการสั่งงานขาพอรต GPIO จากเว็บ ไคลเอ็นตผานเซิรฟเวอร รูปแบบคําสั่ง gpio -g mode "pin" "mode" gpio -g write "pin" "state" gpio -g read "pin"
โดยที่ ่ เหมือนกันกับการเขียน Python -g คือ ใชระบุหมายเลขGPIO ตามแบบ BCM_GPIO ทีใช pin คือ ตําแหนงขาบน Raspberry Pi mode คือ กําหนดลักษณะการทํางานของขา input, output state คือ บอกสถานะการทํางานของขามี 1 และ 0
270Raspberry Pi 2
รูปที่ 12-15 การจัดขาพอรต GPIO ของบอรด Raspberry Pi 2 ตัวอยางที่ 12-2 gpio -g mode 16 output gpio -g write 16 1 gpio -g read 16 gpio -g write 16 0
: กําหนดใหขาพอรต 16 เปนเอาตพุต : กําหนดสถานะลอจิกของขาพอรต 16 เปน “1” : อานคาจากขาพอรต 16 :กําหนดสถานะลอจิกของขาพอรต 16 เปน “0”
ทําการทดลองตามขั้นตอนตอไปนี้ (1) ตอวงจรตามรูปที่ 12-16 กําหนดใหบอรด Raspberry Pi 2 เขาสูคอมมานด พรอมต (2) เขียนโปรแกรมทดสอบดังนี้ gpio -g mode 16 output gpio -g write 16 1 gpio -g read 16
จะไดผลลัพธกลับมาเปน “1” และ LED ทีต่ อกับขาพอรต 16 จะติดสวางตังแต ้ กระทํา คําสัง่ gpio
-g write 16 1
Raspberry Pi 2 271
รูปที่ 12-16 วงจรสําหรับการทดลองควบคุมขาพอรต GPIO ดวยการเขียนโปรแกรมแบบคอมมานดไลน (4) เขียนโปรแกรมตอไปนี้ตอเนื่องจากขอ (2) gpio -g write 16 0 gpio -g read 16
จะไดผลลัพธกลับมาเปน “0” และ LED ทีต่ อกับขาพอรต 16 จะดับลง ตังแต ้ กระทําคําสัง่ gpio -g write 16 0
สวนที่หนาจอของ Raspberry Pi 2 จะแสดงผลดังรูปที่ 12-17 จะใชรูปแบบคําสังในลั ่ กษณะนี้ในการควบคุมการทํางานของขาพอรต GPIO บน Raspberry Pi ผานเว็บบราวเซอรโดยใชคําสัง่ system และ exec บนภาษา PHP ในลําดับตอไป
รูปที่ 12-17 แสดงการทํางานของบอรด Raspberry Pi 2 เมือเขี ่ ยนโปรแกรมแบบคอมมานดไลนเพือควบคุ ่ ม การทํางานของขาพอรต GPIO
272Raspberry Pi 2
12.10 การรับสงขอมูลระหวางเว็บเพจ การรับสงขอมูลระหวางเว็บเพจจะใชเมธอด (method) Get, Post, Put และ Delete สมมติวา มีแบบฟอรมใหผูใช งานปอนคา จากนันส ้ งมายังเว็บเซิรฟเวอร แลวใชสคริปต PHP เปนตัวจัดการเก็บ ขอมูลลงในฐานขอมูลหรือเปนไฟลสําหรับดูภายหลัง เมธอดที่นิยมใชจะมี 2 ตัวคือ Get และ Post
12.10.1 รูปแบบการใชเมธอด Get การใชเมธอด Get ในการรับขอมูลจะเห็นขอมูลที่สง โดยทําการทดสอบไดงายๆ ตัวอยางที่ 12-3 <?php if(isset($_GET["f_name"])&isset($_GET["l_name"])){ echo "first name=".$_GET["f_name"]; echo "<br>"."last name=".$_GET["l_name"]; } ?>
อธิบายคําสั่ง $_GET["var
name"] เปนตัวแปรชนิดหนึ่งที่ใชอานคาเมื่อใชเมธอด Get
isset(var name) เปนคําสังตรวจสอบว ่ า ตัวแปรนั้นมีคาหรือไม
หลักการทํางาน ตรวจสอบวามีการสงขอมูลทั้งสองตัวมาหรือไม ถามีใหแสดงขอความที่สงเขามา การทดสอบบน Raspberry Pi 2 (1) ยังคงเชือมต ่ อบอรด Raspberry Pi 2 และอุปกรณตางๆ เขากับเครือขายตามรูปที่ 12-2 หรือ 12-3 (2) สรางไฟล PHP โดยพิมพคําสังดั ่ งตัวอยาง ตังชื ้ ่อไฟลเปน Test_get.php เก็บไวที่ var/ www/ (3) จากนันไปที ้ ่คอมพิวเตอรที่ทําหนาทีเป ่ นเว็บไคลเอ็นต เปดเว็บบราวเซอรใหพิมพ IP แอด เดรสของ Raspberry Pi 2 (ไดมาจากหัวขอกอนหนานี้) ตามดวยชื่อไฟลที่สรางและคาตางๆ เชน http://192.168.137.243/Test_get.php/?f_name=INEX&l_name=inex ดังรูปที่ 12-18
Raspberry Pi 2 273
รูปที่ 12-18 แสดงการทํางานของไฟล Test_get.php บนบอรด Raspberry Pi 2 ผานทางเว็บบราวเซอร จากการปอน 192.168.137.243/Test_get.php/?f_name=INEX&l_name =inex เปนการระบุคาเพื่อใชเมธอด Get ในการรับคา โดยเริ่มจาก /?f_name=INEX&l_name ่ ง =inex จะเห็นไดวา ที่โคด f_name=INEX นั้น f_name เปนตัวระบุบคา สวน INEX เปนคาทีส เขาไป ดังนั้นที่โคด $_GET["f_name"] จึงเปนการอานคาจาก f_name การสงคาทีใช ่ เมธอด Get มากกวาหนึ่งตัวจะใชเครื่องหมาย & เปนตัวคั่น
12.10.2 การใชเมธอด Get ควบคุมขาพอรต GPIO ของบอรด Raspberry Pi 2 ในหัวขอนี้เปนการนําเสนอตัวอยางการใชเมธอด Get เพื่อควบคุมการทํางานของขาพอรต GPIO ของบอรด Raspberry Pi 2 ผานเว็บบราวเซอร (1) ยังคงเชือมต ่ อบอรด Raspberry Pi 2 และอุปกรณตางๆ เขากับเครือขายตามรูปที่ 12-2 หรือ 12-3 (2) ใชวงจรในรูปที่ 12-16 ในการทดลอง (3) ทําการสรางไฟล PHP โดยใชโคดในโปรแกรมที่ 12-2
274Raspberry Pi 2
<? if(isset($_GET["st_GPIO16"])) { system("gpio -g mode 16 out"); system("gpio -g write 16 ".$_GET["st_GPIO16"]); exec("gpio -g read 16",$st_LED1); echo("LED1=".$st_LED1[0]."<br>"); } if(isset($_GET["st_GPIO26"])) { system("gpio -g mode 26 out"); system("gpio -g write 26 ".$_GET["st_GPIO26"]); exec("gpio -g read 26",$st_LED2); echo("LED2=".$st_LED2[0]); } ?>
อธิบายคําสัง่ เปนคําสังที ่ ใช ่ ตรวจสอบการทํางานของคําสังที ่ ต่ องการใหดําเนินการ ใชกับคําสังที ่ ไม ่ ตองการ ผลลัพธ ขอดีคือ รูสถานะว า คําสังที ่ ต่ องการทํางานไดหรือไม ถาดําเนินการสําเร็จ จะสงคาหมายเลข 0 กลับมา system
่ าหรับสังการให ่ คําสังที ่ ่ตองการทํางาน ใชกับคําสังที ่ ่ตองการผลลัพธมากกวา 1 คา exec เปนคําสังสํ โดยผลลัพธจะอยูในรู ปแบบอะเรย ดังนันเมื ้ อใช ่ งานจะตองกําหนดขนาดของอะเรยดวย แมวาจะมีผลลัพธเพียง คาเดียวก็ตาม การทํางานของโปรแกรม มีลําดับดังนี้ (1) ตรวจสอบวามีขอมูลสงมาหรือไม (2) กําหนดการทํางานของขาพอรต GPIO16 ใหเปนเอาตพุต (3) กําหนดสถานะลอจิกของขาพอรต GPIO16 ตามขอมูลที่รับขามา (4) อานคาสถานะลอจิกของขาพอรต GPIO16 ณ ปจจุบัน (5) แสดงผล
โปรแกรมที่ 12-2 ไฟล Control_LED.php ทีใช ่ ควบคุมการทํางานของขาพอรต GPIO 16 และ 26 ของบอรด Raspberry Pi 2 ผานเว็บบราวเซอร
Raspberry Pi 2 275
(4) บันทึกเปนไฟลชือ่ Control_LED.php เก็บไวที่ var/www/ (5) จากนั้นไปที่คอมพิวเตอรที่ทําหนาทีเป ่ นเว็บไคลเอ็นต เปดเว็บบราวเซอรใหพิมพ IP แอดเดรสของ Raspberry Pi 2 (ไดมาจากหัวขอกอนหนานี้) ตามดวยชือไฟล ่ ที่สรางและคาตางๆ เชน 192.168.137.243/Control_LED.php/?st_GPIO16=0&st_GPIO26=1 ดังรูปที่ 12-19 สังเกต การทํางานของ LED (6) ทดลองเปลี่ยนคาของ st_GPIO16 และ st_GPIO26 ไมใหเหมือนเดิม แลวสังเกต การทํางานของ LED
รูปที่ 12-19 แสดงการทํางานของไฟล Control_LED.php บนบอรด Raspberry Pi 2 ผานทางเว็บบราวเซอร
276Raspberry Pi 2
12.11 การสั่งใหสคริปตของโปรแกรมภาษา Python ทํางานดวย PHP 12.11.1 กําหนดสิทธิให ์ แก PHP มีขั้นตอนดังนี้ (1) เริ่มดวยการใหสิทธิ์ PHP เพื่อสังให ่ สคริปตของโปรแกรมภาษา Python ทํางานได โดย เปด LXTerminal แลวพิมพคําสัง่ sudo nano /etc/sudoers เพื่อเขาไปเพิ่มสิทธิผู์ ใช ดังรูป ที่ 12-20 แลวกด Enter
รูปที่ 12-20 (2) พิมพ
www-data ALL=(ALL) NOPASSWD: ALL ไวทายสุดของไฟล ดังรูปที่ 12-21
รูปที่ 12-21 (3) จากนั้นใหกด Ctrl และ x แลวกดคีย y เพื่อบันทึกไฟล ตามดวยการกด Enter จะเห็น ไดวา มีการกําหนดใหกลุม www-data เปนกลุมผูใชงานในระบบเทียบเทากับกลุมผูใชงานในระบบ ที่ชือว ่ า pi และ www-data เปนชือกลุ ่ มผูใช งานในสวนของเว็บดวย
Raspberry Pi 2 277
12.11.2 ตัวอยางการทดสอบรันสคริปต Python ดวย PHP ในตัวอยางนี้เปนการอานคาจากโมดูลวัดความชืนและอุ ้ ณหภูมิ DHT11 ดวย Raspberry Pi 2 โดยสรางโปรแกรมภาษา Python ที่จะให PHP สั่งใหทํางาน โปรแกรมที่สรางขึ้นนั้นตองไมเปน โปรแกรมที่ทํางานแบบวนซํ้า เพราะจะทําใหเว็บเพจตองรอไปเรื่อยๆ จนกวาจะหมดเวลา (1) ตอวงจรดังรูปที่ 12-22 (2) เปดโปรแกรม Geany เพื่อเขียนโปรแกรมตามโปรแกรมที่ 12-3 (3) บันทึกไฟลเก็บไวที่ var/www/ โดยตังชื ้ ่อไฟลวา Read_DHT11.py Raspberry Pi 2 GPIO SDA1 -I2C SCL1 -I2C
+3.3V 1 GPIO2 3 GPIO3 5
2 +5V 4 +5V 6 GND
GPIO4 7 GND 9
8 GPIO14 TxD -UART0 10 GPIO15 RxD -UART0
GPIO17 11 GPIO27 13
12 GPIO18 PCM-CLOCK 14 GND
GPIO22 +3.3V MOSI -SPI0 GPIO10 MISO -SPI0 GPIO9
15 17 19 21
SCLK-SPI0 GPIO11 23 GND 25
16 18 20 22
GPIO23 GPIO24 GND GPIO25
24 GPIO8 26 GPIO7
ID_SDA 27 GPIO5 29
28 ID_SCL 30 GND
GPIO6 31 GPIO13 33
32 GPIO12 34 GND
GPIO19 35 GPIO26 37
36 GPIO16 38 GPIO20
GND 39
40 GPIO21
CE0 -SPI0 CE1-SPI0
ZX-DHT11 Humidity/Temperature sensor module +3.3V
Vcc
GND
GND
GPIO4
DATA
รูปที่ 12-22 วงจรเชื่อมตอ DHT11 โมดูลวัดความชืนสั ้ มพัทธและอุณหภูมิของบอรด Raspberry Pi 2 ผานพอรต GPIO เพืออ ่ านคาดวยโปรแกรมภาษา Python ซึงได ่ รับการสังการมาจาก ่ PHP
278Raspberry Pi 2
import time import Adafruit_DHT Sensor = Adafruit_DHT.DHT11 GPIO = 4 humidity,temperature = Adafruit_DHT.read_retry(Sensor,GPIO) if humidity is not None and temperature is not None: print(temperature) print(humidity) else: print('Failed to get reading. Try again!')
การทํางานโปรแกรม อานคาจากโมดูล DHT11 แลวเก็บไวในตัวแปร humidity และ temperature จากนั้นทําการ ตรวจสอบวามีคาหรือไม ถามีใหแสดงผลอุณหภูมิกับความชืนในอากาศ ้ ถาไมมี ใหแสดงขอความวา Failed to get reading. Try again!
โปรแกรมที่ 12-3 ไฟล Read_DHT11.py เปนโปรแกรมภาษา Python สําหรับอานคาโมดูลวัดความชืน้ สัมพัทธและอุณหภูมิ DHT11 ดวยบอรด Raspberry Pi 2 ภายใตการควบคุมจาก PHP <? exec("sudo python3 /var/www/Read_DHT11.py",$DHT11); echo("Temp=".$DHT11[0]."*C”) ; echo("<br>Humidity=".$DHT11[1]."%") ; ?>
อธิบายคําสัง่ สังให ่ ไฟลที่ชื่อวา Read_DHT11.py ที่ถูกเก็บไวใน var/www/ ทํางานดวย Python3 แลวเก็บผลลัพทจากทํางานไวที่ในตัวทีชื่ ่อ วา $DHT11 echo(“Temp=”.$DHT11[0].”*C”) แสดงขอความโดยนําคาจากตัวแปร $DHT11 ชองแรก มาแสดงโดยถูกระบุบเปนคาอุณหภูมิ จากตัวอยาง Python เมือมี ่ คาจะทําการแสดงผลอุณหภูมิกอนแลวตาม ดวยคาความชื้น ดังนั้นคาในตัวแปร $DHT11[0] จึงเปน คาอุณหภูมิและ $DHT11[1] เปนคาความชื้น ตามลําดับ exec(“sudo python3 /var/www/Read_DHT11.py”,$DHT11);
โปรแกรมที่ 12-4 ไฟล Test_DHT11.php โปรแกรมภาษา PHP เพือควบคุ ่ มการทํางานของสคริปตโปรแกรม ภาษา Python ไฟล Test_DHT11.py (โปรแกรมที่ 12-3)
Raspberry Pi 2 279
(4) เขียนโปรแกรมภาษา PHP ตามโปรแกรมที่ 12-4 เก็บไวที่ var/www/ แลวตั้งชื่อวา Test_DHT11.php (5) ทําการทดสอบโดยไปที่คอมพิวเตอรที่ทําหนาทีเป ่ นเว็บไคลเอ็นต เปดเว็บบราวเซอร ใหพิมพ IP แอดเดรสของ Raspberry Pi 2 (ไดมาจากหัวขอกอนหนานี้) ตามดวยชือไฟล ่ ที่สรางและ คาตางๆ เชน 192.168.137.243/Test_DHT11.php จะไดผลการทํางานดังรูปที่ 12-23
รูปที่ 12-23 หนาตางเว็บบราวเซอรแสดงเว็บเพจของการแสดงคาความชืนสั ้ มพัทธและอุณหภูมิทีพั่ ฒนา จากโปรแกรมภาษา PHP โดยอานขอมูลจากบอรด Raspberry Pi 2 ซึ่งเขียนโปรแกรมภาษา Python ในการติดตอกับตัวตรวจจับผานทางขาพอรต GPIO
280Raspberry Pi 2
12.12 การทดลองควบคุมอุปกรณเอาตพุตอยางงาย ผานเว็บบราวเซอรโดยใช PHP และ HTML ถึงแมวาดวยคุณสมบัติของ PHP ที่ชวยใหการเปลี่ยนขอความและการตรวจสอบนั้นงาย ทวา การสรางเว็บเพจที่ใหผูใช งานไดงายนั้น ยังตองอาศัยการพัฒนาโปรแกรมดวยภาษา HTML เพื่อให ผูพั ฒนาสามารถสรางปุมกดหรือเพิ่มชองกรอกขอความไดงายขึ้น ในหัวขอนี้นําเสนอตัวอยางการทดลองสรางสคริปตที่พัฒนาดวยภาษา PHP เพื่อสั่งงานโดย ตรงกับขาพอรต GPIO ของบอรด Raspberry Pi 2
12.12.1 ภาพรวมและขันตอนการทํ ้ างาน แสดงดวยไดอะแกรมในรูปที่ 12-24 สรุปเปนขั้นตอนไดดังนี้ (1) เว็บไคลเอนต (คอมพิวเตอร) รองขอเว็บเพจทีชื่ อว ่ า Control.php ผานทางเว็บบราวเซอร (Internet Explorer หรือ Google Chrome หรือ Mozila Firefox) มายังเว็บเซิรฟเวอร (บอรด Raspberry Pi 2) (2) ไฟลสคริปต Control.php จะทํางาน เพือสั ่ งให ่ พอรต GPIO ทํางานตามทีกํ่ าหนด (3) LED ที่ตอไวกับขาพอรต GPIO ของ Raspberry Pi 2 ทํางานตามขอมูลที่สงมา (4) เมือไฟล ่ สคริปต Control.php ทํางานเสร็จแลว จะสงเฉพาะเว็บเพจ HTML กลับไปยัง เว็บไคลเอนต
รูปที่12-24 ไดอะแกรมการทํางานของระบบควบคุมอุปกรณเอาตพุตอยางงายผานเว็บบราวเซอรโดยใช PHP และ HTML
Raspberry Pi 2 281
+
a b c d e
f g h
i
j
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
19
21
1
20
30
29
28
27
26
25
24
22
j
21
i
23
f g h
22
b c d e
A
23 24 25 26 27 28 29 30
+
K
K
GND GND +3.3V +5V SDA1 SCL1 GPIO4 TxD0 RxD0 GPIO17 GPIO18 GPIO27 GPIO22 GPIO23 GPIO24 GPIO10 GPIO9 GPIO25 GPIO11 GPIO8 GPIO7 GPIO5 GPIO6 GPIO12 GPIO13 GPIO19 GPIO16 GPIO26 GPIO20 GPIO21 GND +3.3V ID_SDA ID_SCL GND
1k
Rpi-I/O40
รูปที่ 12-25 วงจรทดลองทีต่ อเขากับพอรต GPIO ของบอรด Raspberry Pi 2 เพื่อแสดงผลการทํางาน ของระบบควบคุมอุปกรณเอาตพุตอยางงายผานเว็บบราวเซอรโดยใช PHP และ HTML
282Raspberry Pi 2
12.12.2 ขันตอนการทดลอง ้ (1) ตอวงจรตามรูปที่ 12-25 ใหกับพอรต GPIO ของ บอรด Raspberry Pi 2 (2) สรางไฟลสคริปตดวยภาษา PHP โดยเปดโปรแกรม Geany เลือกไปที่ File > New(with_Template) > file.php พิมพคําสัง่ PHP ดังโปรแกรมที่ 12-4 สคริปตนีเป ้ นการรับสงขอมูลผานเว็บ เพจ โดยใชเมธอด Post ในการรับสงขอมูลระหวางเว็บเพจ สังเกตไดจากคําสัง่ <form method="post ่ นตัวกําหนดวา form นันใช ้ เมธอดใดในการรับสงขอมูล "> ซึงเป <?php system("gpio -g mode 16 out"); system("gpio -g mode 26 out"); exec ("gpio -g read 16", $st_LED1); exec ("gpio -g read 26", $st_LED2); $st_post=0; if (isset($_POST['LED1'])) { $st_post=1; if ($st_LED1[0]==0){system(“gpio -g write 16 1”);} else{system("gpio -g write 16 0");} } if (isset($_POST['LED2'])) { $st_post=1; if ($st_LED2[0]==0){system(“gpio -g write 26 1”);} else{system("gpio -g write 26 0");} } exec ("gpio -g read 16", $st_LED1); exec ("gpio -g read 26", $st_LED2); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml” xml:lang="en" lang="en"> <head> <title>Control</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <meta name="generator" content="Geany 1.22" /> </head> <body> LED1=GPIO16<br> LED2=GPIO26<br> <form method="post">
โปรแกรมที่ 12-4 ไฟล Control.php สคริปตภาษา PHP สําหรับติดตังลงในเว็ ้ บเซิรฟเวอร (บอรด Raspberry Pi 2) เพือรั ่ บขอมูลสําหรับควบคุมอุปกรณเอาตพุตอยางงายผานเว็บบราวเซอรโดยใช PHP และ HTML (มีตอ)
Raspberry Pi 2 283
<table style="width:50%;"> <tbody> <tr> <td>Cilck LED </td> <td>LED Stetus </td> </tr> <tr> <td> <button name="LED1"> <?php if ($st_LED1[0]==0){echo "LED1 On";} else{echo "LED1 Off";} ?> </button> </td> <td> <?php if ($st_LED1[0]==0){echo "LED1 OFF";} else{echo "LED1 ON";} ?> </td> </tr> <tr> <td> <button name=”LED2"> <?php if ($st_LED2[0]==0){echo "LED2 On";} else{echo "LED2 Off";} ?> </button> </td> <td> <?php if ($st_LED2[0]==0){echo "LED2 OFF";} else{echo "LED2 ON";} ?> </td> </tr> </tbody> </table> </form> </body> <?php if ($st_post==1){echo"<script>window.location='Control.php'</script>";} ?> </html>
โปรแกรมที่ 12-4 ไฟล Control.php สคริปตภาษา PHP สําหรับติดตังลงในเว็ ้ บเซิรฟเวอร (บอรด Raspberry Pi 2) เพือรั ่ บขอมูลสําหรับควบคุมอุปกรณเอาตพุตอยางงายผานเว็บบราวเซอรโดยใช PHP และ HTML (จบ)
284Raspberry Pi 2
(3) บันทึกไฟลชือ่ Control.php เก็บไวที่ /var/www/ (4) จากนันทํ ้ าการทดสอบการทํางานของสคริปต โดยไปทีคอมพิ ่ วเตอรทีทํ่ าหนาทีเป ่ นเว็บ ไคลเอ็นต เปดเว็บบราวเซอรใหพิมพ IP แอดเดรสของ Raspberry Pi 2 (ไดมาจากหัวขอกอนหนานี้) ตามดวยชือไฟล ่ ที่สรางและคาตางๆ เชน 192.168.137.243/Control.php จะไดผลการทํางาน เปนหนาเว็บ (เว็บเพจ) ดังรูปที่ 12-26 (5) คลิกปุม LED1 on สถานะ LED1 จาก OFF จะเปลี่ยนเปน ON ทําให LED ที่ตอกับ ขาพอรต GPIO16 ติดสวาง และปุม LED1 จะเปลี่ยนเปน LED1 off หากคลิกปุมเดิมอีกครั้ง LED ที่ติดอยูจะดับลง
รูปที่ 12-26 เว็บบราวเซอรแสดงเว็บเพจสําหรับควบคุมการทํางานของอุปกรณเอาตพุตผานโดยใช PHP และ HTML
Raspberry Pi 2 285
12.13 การทดลองติดตออุปกรณอินพุตเอาตพุตผานเว็บบราวเซอร ทํางานรวมกับไฟลสคริปต Python อยางงาย การติดตอเพื่อควบคุมอุปกรณผานเครือขายของบอรด Raspberry Pi 2 นอกจากการใชไฟล สคริปตที่พัฒนาขึ้นดวยภาษา PHP ทํางานรวมกับ HTML แลว ยังมีอีกแนวทางหนึ่งที่ขอนําเสนอใน หัวขอนี้ นั่นคือ การใชไฟลสคริปตที่พัฒนาดวยภาษา Python ทํางานรวมกับเว็บบราวเซอรและไฟล สคริปตที่พัฒนาดวยภาษา PHP เพื่อติดตอกับอุปกรณอินพุตเอาตพุตที่ตอกับพอรต GPIO ของบอรด Raspberry Pi 2 ซึ่งไดรับการกําหนดใหทํางานเปนเว็บเซิรฟเวอร
12.13.1 ภาพรวมและขันตอนการทํ ้ างาน ในรูปที่ 12-27 แสดงไดอะแกรมการทํางานในภาพรวมของการติดตออุปกรณอินพุตเอาตพุต ผานเว็บบราวเซอรซึ่งทํางานรวมกับไฟลสคริปต Python สรุปขั้นตอนการทํางานไดดังนี้
รูปที่ 12-27 ไดอะแกรมการทํางานของระบบควบคุมผานเครือขายทีใช ่ บอรด Rasperry Pi 2 เปนเว็บ เซิรฟเวอร โดยมีการเชือมต ่ อกับอุปกรณอินพุตเอาตพุตทีต่ องการอานคาและสังการผ ่ านพอรต GPIO
286Raspberry Pi 2
(1) การทํางานของไฟลสคริปต PHP (1.1) เว็บไคลเอ็นต (คอมพิวเตอร) รองขอเว็บเพจที่ชือว ่ า MonitorSet.php ผานทางเว็บ บราวเซอรไปยังเว็บเซิรฟเวอร (บอรด Raspberry Pi 2) (1.2) ไฟลสคริปต MonitorSet.php ทํางาน (1.3) อานไฟล BH1750.txt เพื่อนําคามาแสดงผล (1.4) บันทึกคาลงบนไฟล set.txt ในกรณีที่ตองการตั้งคาใหม (1.5) เมือไฟล ่ สคริปต MonitorSet.php ทํางานเสร็จแลว จะสงเฉพาะเว็บเพจ HTML กลับ ไปยังเว็บไคลเอนต (2) การทํางานของไฟลสคริปต Python (2.1) ทําการเอ็กซิคิวตหรือสั่งใหไฟลสคริปตที่ชือว ่ า LightLoggerWebData.py ทํางาน (2.2) อานไฟล set.txt เพื่อกําหนดการแจงเตือน (2.3) อานคาจากตัวตรวจจับและวัดคาความเขมของแสงในหนวยลักซ (lux) (2.4) บันทึกคาทีได ่ จากตัวตรวจจับแสงลงในไฟล BH1750.txt (2.5) สงสัญญาณออกขา GPIO18 เพื่อแจงเตือน ในตัวอยางการทดลองที่จะไดเรียนรูไปพรอมกันนี้ ใชไฟล set.txt เปนตัวกลางในการติดตอ สื่อสารระหวาง สคริปตที่ใชแสดงเปนหนาเว็บ กับสคริปต Python ที่ควบคุมอุปกรณ
12.13.2 ขันตอนการทดลอง ้ (1) ตอวงจรตามรูปที่ 12-28 โดยตอกับบอรด Raspberry Pi 2 ผานทางพอรต GPIO วงจรทดลอง ทีต่ อเขากับพอรต GPIO ของบอรด Raspberry Pi 2 เพือแสดงผลการทํ ่ างานของระบบควบคุมอุปกรณ เอาตพุตอยางงายผานเว็บบราวเซอรโดยใช PHP และ HTML (2) ทีบอร ่ ด Rasberry Pi 2 ทําการเปดโปรแกรม Geany เพือนํ ่ าไปสรางสคริปตไฟล Python แลว ตังชื ้ อว ่ า LightLoggerWebData.py (3) ทําการบันทึกไฟล (4) ลําดับตอไปสรางเท็กซไฟล (ไฟล .txt) กําหนดใหมีชือว ่ า set.txt สําหรับรับขอมูลเฉพาะ คาตัวเลขเขามา บันทึกไวในไดเร็กตอรี่ /var/www/
Raspberry Pi 2 287
รูปที่ 12-28 วงจรทดลองทีต่ อเขากับพอรต GPIO ของบอรด Raspberry Pi 2 เพือติ ่ ดตอกับอุปกรณอินพุต เอาตพุตอยางงายผานเว็บบราวเซอรโดยใช PHP และ Python (6) สรางไฟลสคริปต PHP เพื่อแสดงหนาเว็บเพจ (6.1) เปดโปรแกรม Geany สรางไฟลสคริปต PHP โดยไปที่ File>>New(with_Template)>>file.php แลวตั้งชื่อวา MonitorSet.php (6.2) เพิ่มสคริปต PHP และ javascript ดังโปรแกรมที่ 12-6
288Raspberry Pi 2
import RPi.GPIO as GPIO import time import smbus import datetime GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT) blink = GPIO.PWM(18,500) st=0 blink.start(0) bus = smbus.SMBus(1) #(512MB) addr = 0x23 # i2c adress dataset=50 while True: try: f=open('/var/www/set.txt','r') dataset=float(f.read()) except: pass date=datetime.datetime.now() microsec=date.microsecond if microsec > 700000: blink.ChangeDutyCycle(st) else: blink.ChangeDutyCycle(0) data = bus.read_i2c_block_data(addr,0x11) lum=(data[1] + (data[0]<<8) / 1.2) with open("/var/www/BH1750.txt", "w") as text_file: text_file.write("DateTime: %s<br>Luminosity: %.2f lx<br>" % (date,lum,)) if lum<dataset: st=50 else: st=0 time.sleep(0.2)
โปรแกรมที่ 12-5 ไฟล LightLoggerWebData.py เปนโปรแกรมภาษา Python สําหรับติดตอกับบอรด Raspberry Pi 2 ผานทางพอรต GPIO เพื่ออานคาแสงกลับไปแสดงผลและรับขอมูลเพื่อนําไปขับเสียง ออกลําโพงเปยโซ
Raspberry Pi 2 289
<?php if ((isset($_POST[‘textbox’]))&($_POST[‘textbox’]!="")) { $fp=fopen(‘set.txt’,’w’); fwrite($fp,$_POST[‘textbox’]); fclose($fp); } $frp=fopen(‘set.txt’,’r’); $rdata=fgets($frp); fclose($frp); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>MonitorSet</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <meta name="generator" content=”Geany 1.22" /> <script language="JavaScript" type="text/javascript"> var rFile; function Call() { if(rFile.readyState == 4) //
ตรวจสอบวา จบการทํางานหรือไม
{ if(rFile.status==200)
//
ตรวจสอบวา เชือมต ่ อกับเซิรฟเวอรไดหรือไม
{
นําคาทีส่ งกลับมา เก็บไวในตัวแปร ตรวจสอบวา มีขอความหรือไม
var allText = rFile.responseText; // if(allText!="")
//
{ document.getElementById("myDiv").innerHTML = allText; //
แสดงขอความทีได ่
} setTimeout("readTextFile()",500); //
ออโตรีเฟรชทุกๆ 0.5 วินาที
} } }
โปรแกรมที่ 12-6 ไฟล MonitorSet.php เปนไฟลสคริปต PHP สําหรับสรางเว็บเพจของเว็บเซิรฟเวอร (บอรด Raspberry Pi 2) เพือแสดงค ่ าและสังการอุ ่ ปกรณอินพุตเอาตพุตผานเว็บบราวเซอร (มีตอ)
290Raspberry Pi 2
function readTextFile() { rFile = new XMLHttpRequest(); // สราง object rFile.open("GET","BH1750.txt",true); //
เปดการติดตอไฟล
BH1750.txt
XMLHttpRequest
กับเว็บเซิรฟเวอร
rFile.onreadystatechange = Call; //
เรียกใชฟงกชัน่
เมือมี ่ การเปลียนแปลงสถานะการทํ ่ างาน // ทําการสงขอมูล
Call
rFile.send(null); }; </script> </head>
<body onload="readTextFile()"> <form method="post"> <div id="myDiv"></div> <? echo "Set Alarm = ".$rdata." lx <br>"?> <tr> Set Alarm: <td><input type="text" name="textbox" ></td> <td><button name="OK">OK</button></td> </tr> </form> </body> </html>
การทํางานของโปรแกรม ในกรณีเมือกดปุ ่ ม OK รับคาจาก Textbox ดวยตัวแปร $_POST[‘textbox’] จะทําการตรวจสอบวา มีคาหรือไม ถามีจะบันทึกลงในไฟล set.txt จากนันอ ้ านคาจากไฟล set.txt เก็บไวในตัวแปร $rdata เพือนํ ่ าไป แสดงผล สวนสคริปต javascript ทําหนาที่อานขอมูลทุกๆ 0.5 วินาทีจากไฟล HB1750.txt มาแสดงผลอยาง ตอเนื่อง โดยไมตองรีเฟรชหนาเว็บเอง หรือเรียกอีกอยางคือออโตรีเฟรช (auto refresh) และยังทํางานอืนได ่ โดยไมตองรอ เรียกกระบวนการทํางานแบบนี้วา AJAX (Asynchronous JavaScript and XML) สําหรับไฟล HB1750.txt จะถูกสรางขึนเมื ้ อสั ่ ่งใหสคริปต LightLoggerWebData.py ทํางาน
โปรแกรมที่ 12-6 ไฟล MonitorSet.php เปนไฟลสคริปต PHP สําหรับสรางเว็บเพจของเว็บเซิรฟเวอร (บอรด Raspberry Pi 2) เพือแสดงค ่ าและสังการอุ ่ ปกรณอินพุตเอาตพุตผานเว็บบราวเซอร (จบ)
Raspberry Pi 2 291
รูปที่ 12-29 เว็บบราวเซอรแสดงเว็บเพจสําหรับอานคาและกําหนดการทํางานของอุปกรณอินพุตเอาตพุต ผานพอรต GPIO ของบอรด Raspberry Pi 2 ซึงทํ ่ าหนาทีเป ่ นเว็บเซิรฟเวอรโดยใช PHP และไฟลสคริปต ทีพั่ ฒนาจากโปรแกรมภาษา Python
12.13.33 การทดสอบ (1) เริ่มตนดวยการเอ็กซิคิวตไฟลสคริปตที่ชือ่ LightLoggerWebData.py กอน (2) ไปทีคอมพิ ่ วเตอรทีทํ่ าหนาทีเป ่ นเว็บไคลเอ็นต เปดเว็บบราวเซอรใหพิมพ IP แอดเดรสของ Raspberry Pi 2 ตามดวยชือไฟล ่ ทีสร ่ างและคาตางๆ เชน 192.168.137.243/MonitorSet.php จะแสดงเว็บเพจดังรูปที่ 12-29 จากการทดสอบพบวา ใช Google Chrome จะทํางานไดสมบูรณทีสุ่ ด (3) ใชมือบังแสงที่ตกกระทบโมดูลตรวจจับแสง BH1750 เพื่อทําใหวัดคาความเขมแสง ไดนอยกวา 50 จะทําใหบอรด Raspberry Pi 2 ขับสัญญาณเสียงเตือนใหดังขึ้นผานลําโพงเปยโซ (4) ผูทดลองสามารถตั งค ้ าแจงเตือนใหมได โดยกรอกคาลงในชอง SetAlarm แลวกดปุม OK คาทีกํ่ าหนดใหมจะถูกเก็บไวในไฟล sex.txt ในไดเร็กตอรี่ /var/www ทังหมดที ้ นํ่ าเสนอในบทนีเป ้ นตัวอยางการพัฒนาระบบควบคุมผานเครือขายอยางงายกับบอรด Raspberry Pi 2 ซึงกํ ่ าหนดใหทําหนาทีเป ่ นเว็บเซิรฟเวอรมีการติดตอกับอุปกรณอินพุตเอาตพุตผานพอรต GPIO หากการควบคุมอุปกรณไมซับซอนมากนัก การใชไฟลสคริปต PHP ทํางานรวมกับ HTML จะเปน ทางเลือกทีใช ่ ได เมือมี ่ ความตองการติดตออุปกรณอินพุตเอาตพุตทีซั่ บซอนขึน้ การพัฒนาโปรแกรมดวย Python จะตอบสนองไดดีกวา เมือผู ่ พั ฒนามีความเขาใจในการทํางานโดยรวมของระบบแลว ก็สามารถ ตอยอดเพือพั ่ ฒนาเว็บเพจของเว็บเซิรฟเวอรใหมีหนาตาทีสวยงามขึ ่ นได ้ หากแตตองมีความเขาใจในขอ จํากัดดานทรัพยากรของบอรด Raspberry Pi 2 ดวย เพือป ่ องกันไมใหการทํางานโดยรวมชาเกินไป