Raspberry Pi 2 293
บอร ด Raspberry Pi 2 ไม เพี ยงมี ความสามารถในการเชื อ่ มต อกั บระบบเครื อข ายผ าน LAN หรื อ WiFi เพื่ อสร างระบบควบคุ มผ านเครื อข ายดัง ตั วอย างที่ นํ าเสนอในบทที่ 12 เท านั้ น ด วยชอ งทางการ ติด ตอ ระบบเครื อข ายที่ มี อยู ยั งสามารถทํ าใหบ อร ด Raspberry Pi 2 สามารถเชือ่ มตอ กั บเครื อข ายอิ น เทอร เน็ ต นํ าไปสู การสร างระบบบั นทึ กและตรวจสอบข อมู ลหรื อการสร างระบบควบคุ มอุ ปกรณ ไฟฟ าผ านเครื อข ายอิ นเทอร เน็ ตได นั่ นหมายความว า บอร ด Raspberry Pi 2 มี ความสามารถอย างเพี ยง พอต อการพั ฒนาเป นอุ ปกรณ IoT (Internet of Things) หรื อเชื่ อมตอ กั บฐานข อมู ลก อนเมฆหรื อ คลาวด เซิ ร ฟ เวอร อั นเป นหัว ใจสํ าคัญ สูง สุ ดของระบบ IoT หรื ออิ นเทอร เน็ ตของสรรพสิ่ ง ในบทนี น้ ํ าเสนอข อมู ล ขั้ นตอนวิ ธ กี ารในการเชื อ่ มตอ บอร ด Raspberry Pi 2 กั บอุ ปกรณ ตา งๆ รวมถึ งคลาวด เซิ ร ฟเวอร เพื่ อสร างเป นระบบหรื ออุ ปกรณ IoT เบื้ องตน (แตค วามสามารถของบอร ด Raspberry Pi 2 ทํ าไดม ากกว านั้ น) โดยจะเริ่ มจากการให ข อมู ลเบื้ องตน ของ IoT ตามด วยการแนะนํ า คลาวด เซิ ร ฟเวอร BeeBotte จากนั น้ จึ งเข าสู ข นั้ ตอนการทดลองเพื อ่ พั ฒนาเป นอุ ปกรณ IoT ของบอร ด Raspberry Pi 2 และทํ าการทดสอบเพื่ อแสดงให เห็ นผลการทํ างานที่ เกิ ดขึ้ นจริ ง
13.1 อะไรคือ Internet of Things (IoT) Internet of Things คํ านี เ้ กิ ดขึ น้ มาตั ง้ แต ป ค.ศ. 1999 โดย Kevin Ashton แหง MIT’s Media center เขาได นํ าเสนอแนวคิ ดว า มั นคื อ การนํ าสิ ง่ ของต างๆ ไม ว า จะเป นคอมพิ วเตอร , เครื อ่ งจั กร และตั วตรวจ จั บมาเชื อ่ มต อกั บเครื อข ายอิ นเทอร เน็ ต เพื อ่ รายงานสถานะการทํ างาน สถานะข อมู ล และรั บรู ค าํ สั ง่ ควบคุ ม สิ ง่ ที น่ า ประหลาดใจคื อ ในช วงเวลานั น้ โลกเพิ ง่ รู จ กั และใช งานอิ นเทอร เน็ ตได ไม นาน แต Kevin มองเห็ น อนาคตและพั ฒนาการของสรรพสิ ง่ ที จ่ ะต องเชื อ่ มโยงถึ งกั นผ านเครื อข ายอิ นเทอร เน็ ต แม ว าแนวคิ ดของ IoT ถู กนํ าเสนอตั้ งแต ป ค.ศ. 1999 แตไ ม ได รั บการตอบรั บมากนั ก อาจมา จากสาเหตุ ที่ ว า ในเวลานั้ นอิ นเทอร เน็ ตเป นเรื่ องกลุ มคนเฉพาะ ดู ยุ งยาก และต องการทรั พยากรมาก แตก ็ มี คนนํ าแนวคิ ด IoT ไปสานตอ และมี ชอื่ เรี ยกแตกตา งกั นไป อาทิ Machine-to-machine (M2M), Ubiquitous Computing, Embedded Computing, Smart Service, Industrial Internet จนกระทั่ งวั นนี้ เมื่ ออิ นเทอร เน็ ตเข าถึ งทุ กคน ทุ กบ าน ทํ าใหแ นวคิ ด Internet of Things ได รั บการยอมรั บ และเรี ยก ขานเทคโนโลยี ด วยชือ่ เดิ มที่ ถู กคิ ดมาตัง้ แต ป ค.ศ. 1999
294Raspberry Pi 2
IoT
IoT
IoT
IoT
รูปที่ 13-1 ไดอะแกรมการทํางานเบืองต ้ นของระบบ Internet of Things หรือ IoT IoT หรื อ Internet of Things หมายถึ ง เทคโนโลยี ท กี่ อ ให เกิ ดการเชื อ่ มโยงกั นของสิ ง่ ของ ผูค น ข อมู ล และการบริ การเข ากั บเครื อข ายอิ นเทอร เน็ ต ป จจั ยสํ าคั ญในการทํ าให เกิ ด IoT ได ค อื การบรรจุ อุ ปกรณ สมองกลฝ งตั วหรื อ embedded system device เข าไปใน “สิ ง่ ของ” หรื อเครื อ่ งมื อ เครื อ่ งใช ต า งๆ มี ตั วตรวจจั บหรื อเซนเซอร เพี่ อตรวจวั ดค าที่ สนใจ แล วส งมายัง ส วนสมองกล เพื่ อส งต อมายั งสว น ประมวลผลกลางและฐานข อมู ลผ านเครื อข ายอิ นเทอร เน็ ต ในส วนหลั งนี ม้ ชี อื่ เรี ยกด วยศั พท สมั ยใหม ว า คลาวดเซิรฟเวอร (cloud server) ด วยการนํ าอุ ปกรณ สมองกลฝ งตั วบรรจุ ลงใน “สิ ง่ ของ” ต างๆ ทํ าให “สิ ง่ ของ” เหล านั น้ ทํ างาน ในแบบอั จฉริ ยะได อุ ปกรณ เครื อ่ งใช ต า งๆ ในบ าน ในโรงงาน ในที ท่ าํ งาน ในยานพาหนะ ล วนแล วแต ใช ระบบสมองกลฝ งตั วมากขึ น้ ทํ าให ม นั ทํ างานได ด ว ยตั วเอง และ/หรื อรวมเข าเป นส วนหนึ ง่ ของระบบ ใหญ เกิ ดการเชือ่ มโยงการทํ างานเป นระบบได การทํ าให “สิ่ งของ” ทํ างานร วมกั นผ านเครื อข ายอิ น เทอร เน็ ต จึ งทํ าให เกิ ดนิ ยามของเทคโนโลยี น ขี้ นึ้ Internet of Things หรื อ IoT เป นการขยายขอบเขตการ ทํ างานของอิ นเทอร เน็ ตให กว างและลึ กลงไปถึ งการเชื อ่ มต อเพื อ่ สื อ่ สารข อมู ลกั บ “สิ ง่ ของ” ทํ าให เกิ ดการ รั บส งข อมู ลและตอบสนองในแบบทุ กที ่ ทุ กเวลา และทุ กสิ ง่ ของได ในที ส่ ดุ
Raspberry Pi 2 295
ระบบหรื อเทคโนโลยี IoT จะเกิ ดขึ้ นได ตอ งมี องค ประกอบครบดั งนี้ 1. สิ่ งของ 2. อุ ปกรณ (ตัว ควบคุ ม, ตัว ตรวจจั บ และอุ ปกรณ ขั บโหลดหรื ออุ ปกรณ เอาตพ ุ ต) 3. ระบบเชื่ อมต ออิ นเทอร เน็ ต (จะเป นแบบมี สายหรื อไร สายก็ ได ) 4. ข อมู ล 5. ระบบจั ดการฐานข อมู ลคลาวด เซิ ร ฟเวอร (Cloud server) รู ปที ่ 13-1 แสดงไดอะแกรมการทํ างานอย างง ายของ Internet of Things หรื อ IoT ที ม่ อี งค ประกอบ ครบ ทั ง้ ยั งแสดงให เห็ นแนวทางในการนํ าบอร ด Raspberry Pi 2 มาพั ฒนาเป นอุ ปกรณ IoT ด วย ซึ ง่ จะ ได นํ าเสนอตั วอย างขั น้ ต นในบทนี ้
13.2 แนะนําคลาวดเซิรฟเวอรที่ชือ่ Beebotte 13.2.1 เกียวกั ่ บคลาวดเซิรฟเวอร IoT จะเกิ ดขึ้ นอย างสมบู รณ ไม ได หากขาดองค ประกอบที่ เรี ยกว า คลาวดเซิรฟเวอร (cloud server) โดยคลาวด เซิ ร ฟเวอร เป นตัว กลางของการรั บส งข อมู ลดั งแสดงไดอะแกรมการทํ างานอย าง ง ายในรู ปที่ 13-2 จะเห็น ว ามี ส วนประกอบสํ าคัญ 3 ส วนคื อ 1. อุ ปกรณใ ห ข อมู ลหรื อพั บลิ ชเชอร (Publisher) เป นอุ ปกรณ ที่ ส งข อมู ลตั้ งต นเข ามาใน ระบบ อาจมองไดง ายขึ้ นหากยกตั วอย างเป นโนดตัว ตรวจจั บ (sensor node) เมื อ่ ตั วตรวจจั บวั ดค าทาง กายภาพได จะสง ตอ ไปให อ ปุ กรณค วบคุ มหลั กซึ ง่ ในที น่ มี้ กั เป นไมโครคอนโทรลเลอร แล วส งข อมู ล ไปยั งคลาวเซิ ร ฟเวอร ซึ่ งทํ าหน าที่ เป นตั วจั ดการข อมู ล 2. ตั วกลางจั ดการข อมู ลหรื อโบรกเกอร (Broker) คลาวเซิ ร ฟ เวอร จะทํ าหน าที ห่ ลั กในสว น นี ้ เพื อ่ รั บข อมู ลจากอุ ปกรณ ให ข อ มู ลหรื อพั บลิ ชเชอร นํ ามาพั กไว หรื อบั นทึ กไว เพื อ่ รอการร องขอหรื อ กระจายข อมู ลไปยั งอุ ปกรณร บั ข อมู ลหรื อซั บสไครเบอร รวมถึ งการส งต อไปแสดงผลด วยแดชบอร ด (dashboard) หรื อหน าปด แสดงผลบนเว็ บไซต ด วย
รูปที่ 13-2 ไดอะแกรมการทํางานเบืองต ้ นของคลาวดเซิรฟเวอร
296Raspberry Pi 2
3. อุ ปกรณ รั บข อมู ลหรื อซั บสไครเบอร (Subscriber) เป นอุ ปกรณ ที่ ตอ งการข อมู ลเพื่ อนํ า มาดํ าเนิ นการอย างใดอย างหนึ ง่ เช น นํ ามาแสดงผล นํ ามาบัน ทึ ก นํ ามาควบคุ มอุ ปกรณ หรื อโหลด อาจ ยกตัว อย างเป น ปลั๊ กไฟ IoT ที่ นํ าขอ มู ลจากคลาวด เซิ ร ฟเวอร มาทํา การเป ดป ดอุ ปกรณ ไฟฟ าทีต่ อ อยู ดั งนั้ นจะเห็ นว า ในกระบวนการ IoT แทบจะไมมี “คน” เขาไปรวมทํางาน หากแต “คน” จะเปนผูสร างระบบ กําหนดรูปแบบการสือสารข ่ อมูล จากนั้ นอุ ปกรณท ั้ งหมดจะ “คุ ยกั นเอง” ผา น เครื อข ายอิ นเทอร เน็ ต โดยมี คลาวด เซิ ร ฟเวอร เป นตัว กลาง
13.2.2 คลาวเซิรฟเวอร Beebotte Beebotte (ออกเสี ยงว า บี บอต - มาจากภาษาฝรั่ งเศส) เป นคลาวด เซิ ร ฟ เวอร ที่ พ ฒ ั นาขึ้ นจากนั ก พั ฒนา (developer) เพื่ อนั กพั ฒนาด วยกั น สํ านั กงานใหญ อยู ในกรุ งปารีส ประเทศฝรั่ งเศส เว็ บไซต สํ าหรั บให ข อ มู ลและลงทะเบี ยนเพื อ่ ใช งานคื อ http://beebotte.com โดยมี ความสามารถและข อเด นดัง นี ้ เตรี ยมการเชื อ ่ มต ออุ ปกรณ และแสดงผลข อมู ลได ในแบบเวลาจริ ง (real time) จากอุ ปกรณ
IoT ในทุ กที ่ ทุ กเวลา ิ เจ็ ต (widget) ให เลื อกใช หลากหลาย (วิ ดเจ็ ตคื อชุ ดคํ าสั ง่ โปรแกรมขนาดเล็ กที ร่ องรั บ มี ว ด การอิ นเตอร เฟสกั บแอปพลิ เคชั น่ หรื อระบบปฏิ บ ตั กิ าร ที พ่ บกั นบ อยๆ เช น ปุ ม ไอคอน และแถบเมนู แสดงผลข อมู ลที่ นํ าขึ้ นมาเก็ บไว ได แบบเวลาจริ งในรู ปแบบกราฟ กและตั วเลข
ู แบบการใหบ ริ การทั ง้ แบบไม ม คี า ใช จ า ยและแบบมี ค า ใชจ า ยตามความสามารถและ มี ร ป ขนาดของข อมู ล
รูปที่ 13-3 การทํางานของคลาวดเซิรฟเวอร Beebotte กับคอมพิวเตอรและฮารดแวรสมองกลฝงตัว
Raspberry Pi 2 297
รู ปแบบการทํ างานของ Beebotte แสดงดั งในรู ปที ่ 13-3 จะเห็ นว า Beebotte มี API ( Application Programming Interface) และโปรโตคอล MQTT สํ าหรั บเชื อ่ มต อกั บบอร ด Raspberry Pi และฮาร ดแวร ระบบเป ดชื่ อ ดั ง อย าง Arduino ด วย รองรั บการเข าถึ งเพื่ อดู อ าน และตรวจสอบข อมู ลผ านเว็ บ บราวเซอร ทุ กแพล็ ตฟอร มหากใชง านด วยเครื่ องคอมพิ วเตอร รู ปแบบการใหบ ริ การของ Beebotte มี 4 รู ปแบบดั งแสดงในตารางที่ 13-1 สํ าหรับ นั กทดลอง หรื อผูเ ริ ม่ ตน ขอแนะนํ าใหใ ช รุ น XS ก อน เพราะไม ม คี าใช จ าย และมี ค ณ ุ สมบั ต ทิ ี่ ด พี อสมควร ทั้ งการ ไม จํ ากัด จํ านวนชอ ง, รองรั บการสง ผ านข อความได มากถึ ง 50,000 ข อความตอ วั น, บั นทึ กข อความ ได 5,000 ข อความ และที น่ า สนใจมากๆ คื อ ตั วคลาวเซิ ร ฟ เวอร น ยี้ งั เก็ บรั กษาข อมู ลย อนหลั งให นานถึ ง 3 เดื อน ซึ่ งหาได ยากมากสํ าหรั บคุ ณสมบั ตขิ อนี้ ในคลาวเซิ ร ฟเวอร ที่ ให บริ การแบบไม มี ค าใชจ าย รวมถึ งการปกป องข อมู ลแบบ SSL (Secure Socket Layer)
ตารางที่ 13-1 รูปแบบการใหบริการของ Beebotte
ความรูเกียวกั ่ บ SSL
(ขอมูลจาก : http://www.sutenm.com)
SSL คือ โปรโตคอลทีอยู ่ ระหว าง Application layer และ Transport layer โดย SSL รองรับการทํางาน กับแอปลพิเคชั่น โปรโตคอลตางๆ เชน HTTP (Hypertext Transfer Protocol), FTP (File Transfer Protocol), Telnet, POP3, SMTP หรือแมแต VPN ได SSL ทํางานโดยอาศัยหลักการของการเขารหัสขอมูล (encryption), Message Digests และลายเซ็นอิเล็กทรอนิกส (digital signature) โดยแบงหนาที่ออกเปน 3 สวนคือ 1. ตรวจสอบ server วาเปนตัวจริง 2. ตรวจสอบวา Client เปนตัวจริงหรือไม 3. เขารหัสลับการเชือมต ่ อ โดยขอมูลทังหมดที ้ ถู่ กสงระหวางไคลเอนตและเซิรฟเวอรจะถูกเขารหัสลับ โดยโปรแกรมทีส่ งขอมูลเปนผู เขารหัสและโปรแกรมทีรั่ บขอมูลเปนผูถอดรหั ส (โดยใชวิธี Public key) นอกจากการเขารหัสลับในลักษณะนีแล ้ ว SSL ยังสามารถปกปองความถูกตองสมบูรณของขอมูลไดอีกดวย อีกทัง้ ตัวโปรแกรมรับขอมูลจะทราบไดหากขอมูล ถูกเปลียนแปลงไปในขณะกํ ่ าลังเดินทางจากผูส งไปยังผูรั บ
298Raspberry Pi 2
13.3 เตรียมการบอรด Raspberry Pi 2 เพือติ ่ ดตอกับ Beebotte การติ ดต อกั บคลาวด เซิ ร ฟเวอร Beebotte สํ าหรั บคอมพิ วเตอร และบอร ด Raspberry Pi 2 ทํ าได โดยใชเ ว็ บบราวเซอร สําหรับบอรด Raspberry Pi 2 แนะนําใหใชเว็บบราวเซอรที่ชือ่ Iceweasel ซึ ง่ โดยปกติ แล วในระบบปฏิ บ ตั กิ าร Raspbian ที ต่ ดิ ตัง้ ใน SD การ ดจะไม ได ตดิ ตัง้ มาให โดยสว นใหญ จะเป น Chromium ดั งนั้ นเมื่ อจะใชบ อร ด Raspberr y Pi 2 กั บ Beebotte จึ งต องมี การติ ดตัง้ เว็ บบราว เซอร Iceweasel เพื่ อใชง านแทน มี ขั้ นตอนดั งนี้ (1) ตอ บอร ด Raspberry Pi 2 กั บเมาส , คี ย บอร ด, จอภาพ แล วจ ายไฟเลี้ ยง อาจใชว ิ ธี การ รี โมตเข าไปทํ างานก็ ได (2) เชื่ อมตอ บอร ด Raspberry Pi 2 เข ากับ เครื อข ายอิ นเทอร เน็ ต (3) ไปที่ คอมมานด พร อมพ แล วพิ มพ คํ าสัง่ sudo apt-get install iceweasel
(4) จะเริ่ มตน การติด ตัง้ เว็ บบราวเซอร Icdweasel เมื่ อเรี ยบร อยแล ว ให เข าสูโ หมดกราฟก ด วย การพิ มพ startx เลื อก Menu เข าไปที ร่ ายการ Internet จะเห็ นไอคอนของเว็ บบราวเซอร Iceweasel ดั งรู ป ที่ 13-4
รูปที่ 13-4 การเรียกดูเว็บบราวเซอร Iceweasel เมือติ ่ ดตังลงในบอร ้ ด Raspberry Pi 2 แลว
Raspberry Pi 2 299
13.4 การสมัครใชงาน Beebotte การสมั ครและใชง าน Beebotte สํ าหรับ บอร ด Raspberry Pi 2 จะตอ งมี การเชือ่ มตอ กั บเครื อ ข ายอิ นเทอร เน็ ตตลอดเวลา ดั งนั้ นก อนการใชง านจะต องเชื่ อมตอ บอร ด Raspberry Pi 2 กั บเครื อข าย อิ นเทอร เน็ ต และต องแน ใจว า การเชือ่ มต อสมบู รณ และสามารถเข าถึ งเว็ บไซต ต า งๆ ได โดยใชไ ด ทั้ ง การเชื อ่ มต อแบบสายผ านพอร ตอี เธอร เน็ต (LAN) และแบบไร สายผ าน WiFi โดยใช USB WiFi ดองเกิ ล เมื อ่ เชื อ่ มต อกั บเครื อข ายอิ นเทอร เน็ ตเรี ยบร อย จะเข าสู ก ารสมั ครใช งาน Beebotte มี ข นั้ ตอนดั งนี ้ (1) เป ดเว็ บบราวเซอร Iceweasel จากนั น้ ไปที เ่ ว็ บไซต https://beebotte.com/ จะปรากฏหน า โฮมเพจดั งรู ปที ่ 13-5 จากนั น้ คลิ กที ป่ มุ Sign up เพื อ่ ลงทะเบี ยน
รูปที่ 13-5 เว็บเพจของ Beebotte จาก http://beebotte.com (อาจเปลียนแปลงได ่ ตามการปรับปรุงของ ผูให บริการ (2) กํ าหนดชื อ่ ผู ใ ช งานตามต องการ, อี เมล , กํ าหนดรหั ส ผา น ดั งรู ปที่ 13-6 จากนั้ นคลิ กที่ ปุ ม SIGN UP เพื่ อยื นยั น
รูปที่ 13-6 ตังค ้ าเพือลงทะเบี ่ ยนใชงาน Beebotte
300Raspberry Pi 2
(3) ตรวจสอบอี เมล ที่ ทํ าการลงทะเบี ยนไว จะปรากกฎข อความตอบรั บจาก Beebotte ดั งรู ปที่ 13-7 ทํ าการคลิ กลิ งก ที่ ได รั บแจ งมา
รูปที่ 13-7 แสดงอีเมลตอบรับการลงทะเบียนและลิงกสําหรับการยืนยันเพือใช ่ งาน Beebotte (4) ระบบจะนํ ากลั บมายัง หน า LOG IN เพื่ อลงชื่ อใชง าน ให ใส อี เมล และรหัส ผา นที่ ได ลงทะเบี ยนไว ดั งรู ปที่ 13-8 จากนั้ นคลิ กปุ ม LOG IN
รูปที่ 13-8 หนา LOG IN ของ Beebotte เพือลงชื ่ อเข ่ าใชงาน
Raspberry Pi 2 301
(5) จะปรากฏเว็ บเพจดั งรู ปที ่ 13-9 เป นการยื นยั นว า การลงทะเบี ยนเพื อ่ ใช งานเสร็ จสมบู รณ เริ่ มตน ใชง าน Beebotte ไดท ั นที
รูปที่ 13-9 เว็บเพจ My Channels ของ Beebotte เปนการยืนยันวา การลงทะเบียนถูกตอง เริมใช ่ งานได ตามตองการ
13.5 สวนประกอบสําคัญของ Beebotte การทํ างานของ Beebotte จะอยู ในลั กษณะการแบง เป นกลุ มที่ เรี ยกว า ชองเก็บขอมูล หรื อ Channel และในแต ละช องมีสวนประกอบหรื อเรี ยกว า Resource เมื อ่ ทํ าการลงชื อ่ เข าใช งานหรื อ LOG IN จะมี ปุ ม Create New ปรากฏขึ้ นที่ มุ มขวาบน ดัง รู ปที่ 13-10
รูปที่ 13-10 เว็บเพจเพือเริ ่ มต ่ นสรางชองเก็บขอมูลใหมเพีอติ ่ ดตอกับ Beebotte
302Raspberry Pi 2
คลิ กที ป่ มุ Creat New เพื อ่ เริ ม่ ต นสร างช องเก็ บข อมู ล เว็ บเพจ Create a new channel จะปรากฏขึ น้ มาดั งรู ปที ่ 13-11
1
2 3
4 9
5
6
8 7
10
รูปที่ 13-11 เว็บเพจ Create a new channel สําหรับปอนขอมูลเพือสร ่ างชองเก็บขอมูล 1 ชือของช ่ องเก็บขอมูลหรือ Channel 2 คําอธิบายของชองเก็บขอมูล 3 กําหนดชองเก็บขอมูลใหมีสถานะเปนสาธารณะ 4 ชือของส ่ วนประกอบหรือ Resource 5 คําอธิบายสวนประกอบ 6 กําหนดประเภทขอมูลของสวนประกอบ 7 กําหนดใหสามารถรองขอเพือรั ่ บขอมูลหรือซับสไครบได (subscribe)ได 8 คลิกเพือลบส ่ วนประกอบทีไม ่ ตองการ 9 เพิมส ่ วนประกอบ 10 ปุมสร างชองเก็บขอมูลเมือทํ ่ าการตังค ้ าตางๆ เรียบรอยแลว
Raspberry Pi 2 303
13.6 ตัวอยางการออกแบบคลาวดเซิรฟเวอร สําหรับแสดงคาความชืนสั ้ มพัทธและอุณหภูมิ ลํ าดับ ต อไปเป นการแนะนํ าขัน้ ตอนการออกแบบคลาวด เซิ ร ฟเวอร บน Beebotte เพื่ อเก็บ และ แสดงข อมู ลของความชืน้ สั มพั ทธแ ละอุ ณหภูม ิ ที่ บอร ด Raspberry Pi 2 อ านได จาก DHT11 โมดู ลวั ด ความชืน้ สั มพั ทธแ ละอุ ณหภูม ิ โดยมี ขั้ นตอนหลั ก 3 ขั้ นตอนดั งนี้ (1) สร างชอ งเก็ บข อมู ลที่ มี ชอื่ ว า RaspberryPi (2) สร างส วนประกอบที่ มี ชอื่ ว า Temp ชนิ ดข อมู ลเป น temperature เพื่ อเก็ บค าอุ ณหภูม ิ (3) สร างส วนประกอบที่ มี ชอื่ ว า humi ชนิ ดข อมู ลเป น humidity เพื่ อเก็ บข อมู ลค าความ ชื น้ สั มพั ทธ
13.6.1 เริมต ่ นสรางชองเก็บขอมูล (13.6.1.1) กํ าหนดชื อ่ ช องเก็ บข อมู ลหรื อ Channel เป น RaspberryPi, ชื อ่ ส วนประกอบหรื อ Configured Resource เป น Temp, ชนิ ดข อมู ลเป น temperature และค าอื น่ ๆ ดั งรู ปที ่ 13-12 จากนั น้ คลิ กที ่ ปุ ม + Resource เพื อ่ เพิ ม่ ส วนประกอบอี กหนึ ง่ ตั ว
รูปที่ 13-12 กําหนดชือช ่ องเก็บขอมูลใหมและสวนประกอบตางๆ
304Raspberry Pi 2
(13.6.1.2) ส วนประกอบที เ่ พิ ม่ ขึ น้ ใหม กํ าหนดชื อ่ เป น humi, ชนิ ดข อมู ลเป น humidity และ ค าอื่ นๆ ตามรู ปที่ 13-13 จากนั้ นคลิ กที่ ปุ ม Create channel เพื่ อสร างชอ งเก็ บข อมู ลตามที่ ตอ งการ
รูปที่ 13-13 กําหนดคาสวนประกอบทีเพิ ่ มขึ ่ นใหม ้ (13.6.1.3) ระบบจะกลั บมายั งเว็ บเพจ My Channels จะแสดงชื อ่ ช องเก็ บข อมู ล RaspberryPi และคํ าอธิ บายดั งรู ปที ่ 13-14
รูปที่ 13-14 เว็บเพจ My Channels แสดงรายการชองเก็บขอมูลทีสร ่ างขึนใหม ้
Raspberry Pi 2 305
(13.6.1.4) คลิ กที ช่ อื่ ช องเก็ บข อมูล RaspberryPi ด งั รู ปที ่ 13-15 เพื อ่ เข าไปดู รายละเอี ยดต างๆ
รูปที่ 13-15 การเลือกเขาไปดูรายละเอียดของชองเก็บขอมูลทีสร ่ างขึน้ (13.6.1.5) จะปรากฏรายละเอี ยดต างๆ ดั งรู ปที ่ 13-16 ผู ใ ช งานสามารถแก ไข ลดหรื อเพิ ม่ ส วน ประกอบได ตามต องการ โดยคลิ กที ป่ ุ มรูป เฟ อง จากรู ปที ่ 13-16 จะเห็น ได ว า ไม ม กี ารส งข อมู ลมายั ง คลาวด เซิ ร ฟ เวอร โดยสั งเกตได จากส วนประกอบทั ง้ สองตั วของช องเก็ บข อมู ล มี ข อ ความแสดงสถานะ เป น No Activity
รูปที่ 13-16 แสดงรายละเอียดของชองเก็บขอมูลทีสร ่ างขึน้ และตําแหนงของปุมสํ าหรับแกไข
306Raspberry Pi 2
13.6.2 ทดสอบและตรวจสอบขอมูลทีส่ งมายัง Beebotte Beebotte มี เว็ บเพจสํ าหรั บใช ในการทดสอบส งข อมู ลเข ามายั งช องเก็ บข อมู ลที ผ่ ใู ช งานสร างขึ น้ และสามารถตรวจสอบข อมู ลที่ ส งเข ามาได มี ขั้ นตอนการใชง านดั งนี้ (13.6.2.1) สั งเกตที แ่ ถบเมนู เลื อก Account Settinge ตามลู กศร 1 จากนั น้ คลิ กที ่ Credentials (ลู กศร 2) แล วคั ดลอก Secret Key (ลู กศร 3) เก็ บไว ก อ น เพื อ่ นํ าไปใช ในขั น้ ตอนต อไป ดั งรู ปที ่ 13-17
รูปที่ 13-17 แสดงขันตอนการเริ ้ มต ่ นทดสอบการทํางานของชองเก็บขอมูลทีสร ่ างขึนใหม ้ โดยเลือกที่ Account Setting ทีแถบเมนู ่ ดานขาง (13.6.2.2) ที่ เมนู ทางซ าย เลื อกรายการ Console นํ า Secret Key ทีค่ ั ดลอกไว จากขั้ นตอน ที่ (1) ใส ลงในชอ ง Secret Key ดั งรู ปที่ 13-18
รูปที่ 13-18 แสดงการปอนรหัส Secret Key
Raspberry Pi 2 307
(13.6.2.3) ระบบจะไปยั งเว็ บเพจของการตั ง้ ค า Subscribe, Publish, Read API, Write API ที ใ่ ช ในการทดสอบ โดยในที น่ จี้ ะยกตั วอย างเพี ยง Read API และ Write API ก อนตามรู ปที ่ 13-19 เพื อ่ ให สอดคล องกั บการเขี ยนไฟล สคริ ปต Python บน Raspberry Pi 2 ซึ ง่ จะได อธิ บายต อไป
รูปที่ 13-19 เว็บเพจสําหรับกําหนดคาทีเกี ่ ยวข ่ องกับการเขียนโปรแกรมติดตอกับอุปกรณของ Beebotte โดยเลือกการติดตอผาน API (13.6.2.4) ทดสอบการสง ข อมู ลมายัง ช องเก็ บข อมู ล สั งเกตที่ กรอบ Write API จะเห็ นว า มี เพี ย งตั วเลื อกเดี ยวในขณะนี้ คื อ RaspberryPi ถ าหากผูใ ชง านสร างไว หลายชอ ง ตัว เลื อกก็ จะมาก ตามไปด วย ในขณะที่ ส วนประกอบหรื อ Resource จะปรากฏให เลื อกตามจํ านวนที่ ได สร างไว แล ว ดั งรู ปที่ 13-20
รูปที่ 13-20 แสดงรายละเอียดของชองเก็บขอมูลในสวนของ Write API
308Raspberry Pi 2
(13.6.2.5) หากต องการส งค าอุ ณหภู ม ไิ ปยั งส วนประกอบที ช่ อื่ ว า Temp ให เลื อกรายการของ Resource เป น Temp แล วกํ าหนดค าที ช่ อ ง Data เป น 25 ดั งรู ปที ่ 13-21 จากนั น้ คลิ กปุ ม Write data สั งเกตที ห่ น าต าง Log จะมี ข อ ความว า true นั น่ หมายความว า เกิ ดการส งข อมู ลได ถ กู ต อง ดั งแสดงใน รู ปที ่ 13-21 ทางขวามื อ
รูปที่ 13-21 การกําหนดเพือทดสอบเขี ่ ยนขอมูลไปยังชองเก็บขอมูลดวยการใช Write API (13.6.2.6) หากต องการทดสอบอ านค าจากช องเก็ บข อมู ลหรื อ Channel ให ก าํ หนดและดู การ ทํ างานที ก่ รอบ Read API หากต องการอ านค าล าสุ ดจาก Resource ที ช่ อื่ ว า Temp ด งั รู ปที ่ 13-22 (ก) ท ชี่ อ ง Limit ให ใส เลข 1 เพื อ่ เลื อกอ านข อมู ลล าสุ ด และแสดงข อมู ลตอบกลั บที ช่ อ ง Messages ดั งรู ปที ่ 13-22 (ข) ข อความที ต่ อบกลั บจะอยู ใ นรู ปแบบ json แต ถ า เลื อกใส เลข 5 ที ช่ อ ง Limit จะได ข อ มู ล 5 ชุ ดสุ ดท าย ที ส่ ง เข าไปยั งส วนประกอบหรื อ Resource ตั วนี ้
รูปที่ 13-22 การกําหนดคาในกรอบ Read API เพือทดสอบอ ่ านคาจากสวนประกอบ Temp ของชองเก็บ ขอมูล RaspberryPi (ก) ตัวอยางการกําหนดคาเพือทดสอบการอ ่ าน (ข) ผลการทํางานทีได ่
Raspberry Pi 2 309
(13.6.2.7) การตรวจสอบสถานะการส งข อมู ลไปยั งชอ งเก็ บข อมู ลหรื อ Channel ที่ ชอื่ RaspberryPi แสดงได ด งั รู ปที ่ 13-23 สั งเกตที ่ Resource ชื อ่ Temp จะมี ค า อุ ณหภู ม ทิ ไี่ ด ทํ าการทดสอบ ส งค าจากขั น้ ตอนที ่ (5) แสดงขึ น้ มาแทนข อความ No Activity
รูปที่ 13-23 เว็บเพจแสดงการสถานะการสงขอมูลมายังชองเก็บขอมูลหรือ Channel ทีชื่ อ่ RaspberryPi
13.7 การสรางแดชบอรดหรือหนาปดแสดงผล จากหั วข อ 13.6 นํ าเสนอตั วอย างการออกแบบและทดสอบคลาวด เซิ ร ฟ เวอร ท ใี่ ช เก็ บและแสดง ค าความชื น้ สั มพั ทธ และอุ ณหภู ม ิ ซึ ง่ เพี ยงพอแล วสํ าหรั บการทํ างานของอุ ปกรณ IoT ทว าในความเป น จริ ง การแสดงผลของข อมู ลในรู ปแบบหน าป ดหรื อแดชบอร ด (dashboard) เป นสิ ง่ ที ช่ ว ยให การดู ค า หรื อ การควบคุ มผ านระบบคลาวด เซิ ร ฟ เวอร ม คี วามน าสนใจและใช งานง ายขึ น้ Beebotte เองก็ ม คี วามสามารถ ในการสร างหน าป ดแสดงผลหรื อแดชบอร ดได ในหั วข อนี จ้ งึ นํา เสนอตั วอย างการสร างแดชบอร ดอย าง ง ายจากเครื อ่ งมื อที ท่ าง Beebotte สนั บสนุน (13.7.1) ที แ่ ถบเมนู ทางซ าย เลื อก My Dashboards (ลู กศร 1) จากนั้ นคลิ ก Create Dashboard (ลู กศร 2) ดัง รู ปที่ 13-24
รูปที่ 13-24 เริมต ่ นสรางแดชบอรดของ Beebotte
310Raspberry Pi 2
(13.7.2) จะปรากฏเว็ บเพจสํ าหรับ ออกแบบแดชบอร ดดั งรู ปที่ 13-25
1
2
5
3 4
รูปที่ 13-25 เว็บเพจสําหรับสรางแดชบอรดของ Beebotte 1 กําหนดชือแดชบอร ่ ด 2 กําหนดคําอธิบายของแดชบอรด 3 เลือกความเปนสวนตัวของแดชบอรด หากคลิกทีช ่ อง Public จะเปนการเลือกใหเผยแพรแดช บอรดนีสู้ สาธารณะ 4 เลือกเครืองมื ่ อสําหรับใชในการแสดงผลหรือวิดเจ็ตบนแดชบอรด 5 ปุมบั นทึกแดชบอรดทีสร ่ างขึน้ (13.7.3) ตัว อย างแดชบอร ดที แ่ นะนํ าให สร างในหัว ข อนี้ จะสั มพั นธ ก บั การทํ างานของชอ งเก็ บ ข อมู ลในหั วข อ 13.6 โดยกํ าหนดชื อ่ แดชบอร ดว า IoT CLOUD และเลื อกเครื อ่ งมื อหรื อวิ ดเจ็ ต (widget) สํ าหรั บแสดงค าอุ ณหภูม แิ ละความชืน้ ในรู ปแบบ Basic Value, Gauge meter และ Multi-line Chart เริ ม่ จากกํ าหนดชือ่ แดชบอร ดโดยเปลี่ ยนจากข อความ New Dashboard เป น IoT CLOUD
Raspberry Pi 2 311
(13.7.4) เพิ่ ม Basic Value โดยคลิ กที่ +Add Widget จะปรากฏรายการให เลื อก ทํ าการเลื อก Basic Value ดั งรู ปที่ 13-26
รูปที่ 13-26 เลือกเครืองมื ่ อแสดงผล Basic Value (13.7.5) จะปรากฏหน าต างการตั ง้ ค าต างๆ ของวิ ดเจ็ ต Basic Value ดั งรู ปที ่ 13-27 กํ าหนดค าดั งนี ้ Title กํ าหนดเป น Temperature Channel กํ าหนดเป น RaspberryPi Resource เป น Temp จากนั้ นคลิ กปุ ม Done เพื่ อยื นยั นการตั้ งค า
รูปที่ 13-27 การตังค ้ าวิดเจ็ต Basic Value
312Raspberry Pi 2
(13.7.6) จะปรากฏการแสดงผลดั งรู ปที่ 13-28 มี รู ปเฟ องบั งวิ ดเจ็ ตอยู ถ าตอ งการแก ไขใหม ใหค ลิ กที่ รู ปเฟ อง จะมี เมนู ให เลื อกคื อ Edit หากตอ งการแก ไข และ Delete หากตอ งการลบ
รูปที่ 13-28 แดชบอรดทีเริ ่ มต ่ นวางเครืองมื ่ อ (13.7.7) เพิ่ มวิ ดเจ็ ตแบบ Basic Value อี กหนึ่ งตั ว เพื่ อแสดงค าความชืน้ สั มพั ทธ ขั้ นตอนการ เพิ่ มเหมื อนขั้ นตอนที่ (13.7.4) และ (13.7.5) ของหั วข อนี้ เปลี่ ยนชือ่ เป น Humidity เลื อก Resource เป น humi เมื่ อคลิ ก Done จะได ผลการออกแบบดั งรู ปที่ 13-29
รูปที่ 13-29 แดชบอรดทีมี่ การเพิมเครื ่ องมื ่ อ
Raspberry Pi 2 313
(13.7.8) เพิ ม่ วิ ดเจ็ ต Gauge meter โดยคลิ กที ่ +Add Widget เลื อก Gauge meter ดั งรู ปที ่ 13-30
รูปที่ 13-30 การเพิมวิ ่ ดเจ็ต Gauge meter (13.7.9) หน าตา งตัง้ ค าการใชง าน Gauge meter ปรากฏขึ้ น ให ทํ าการตัง้ ค าดัง นี้ ่ เป น Temperature เพื่ อแสดงค าอุ ณหภูม ิ Title กํ าหนดชือ Channel กํ าหนดเป น RaspberryPi Resource กํ าหนดเป น Temp
จากนั้ นคลิ กปุ ม Done เพื่ อยื นยั นการตัง้ ค า ดั งแสดงการตั้ งค าในรู ปที่ 13-31
รูปที่ 13-31 ตังค ้ าการใชงานวิดเจ็ต Guage meter
314Raspberry Pi 2
(13.7.10) ที เ่ ว็ บเพจ IoT CLOUD จะแสดง Gauge meter สํ าหรั บแสดงค าอุ ณหภู ม ดิ งั รู ปที ่ 13-32
รูปที่ 13-32 แสดง Gauge meter สําหรับแสดงคาอุณหภูมิ (13.7.11) เพิ่ มวิ ดเจ็ ต Multi-line Chart โดยคลิ กที่ +Add Widget แล วเลื อก Multi-line Chart ดั งรู ปที่ 13-33
รูปที่ 13-33 แสดงการเลือกวิดเจ็ต Multi-line Chart
Raspberry Pi 2 315
(13.7.12) หน าตา งตัง้ ค าการใชง าน Multi-line Chart ปรากฏขึ้ น ทํ าการตัง้ ค าดัง นี้ ่ เป น Temperature & Humidity Title กํ าหนดชือ Channel กํ าหนดเป น RaspberryPi Resource กํ าหนดเป น Temp ํ าหรับ บอกชือ่ เส นกราฟ Label ใชส ทั้ งหมดเป นการตัง้ ค าสํ าหรั บส วนประกอบตั วแรกที่ ใชแ สดงค าอุ ณหภูม ิ ดั งรู ปที่ 13-34
รูปที่ 13-34 ตังค ้ าการใชงานวิดเจ็ต Multi-line Chart (13.7.13) จากนั น้ คลิ กที ป่ มุ + Resource เพื อ่ เพิ ม่ เส นกราฟสํ าหรั บแสดงค าความชื น้ สั มพั ทธ แล ว ตั ง้ ค าดั งรู ปที ่ 13-35 ผู ใ ช งานสามารถเลื อกเปลี ย่ นสี เส นกราฟได โดยคลิ กที ช่ อ ง Color เมื อ่ ตั ง้ ค าเรี ยบร อย แล ว คลิ กปุ ม Done เพื อ่ บั นทึ กการตั ง้ ค า
รูปที่ 13-35 แสดงการเลือกสีเสนกราฟของ Multi-line chart
316Raspberry Pi 2
(13.7.14) ที่ เว็ บเพจ IoT CLOUD จะแสดงวิ ดเจ็ ต Multi-line Chart คลิ กปุ ม Save Changes แดชบอร ด IoT CLOUD พร อมสํา หรั บการแสดงผลข อมู ลดั งรู ปที่ 13-36
รูปที่ 13-36 แดชบอรด IoT CLOUD ทีพร ่ อมรับขอมูลเพือแสดงผล ่
Raspberry Pi 2 317
13.8 ติดตั้งไลบรารี beebotte บน Python หลั งจากทราบถึ งการตั ง้ ค าคลาวด เซิ ร ฟ เวอร และขั น้ ตอนการสร างแดชบอร ดเพื อ่ การแสดงผล กลั บมายั งฝ ง ของบอร ด Raspberry Pi 2 จะต องมี การเขี ยนโปรแกรมเป นไฟล สคริ ปต เพื อ่ อ านค าจากตั ว ตรวจจั บและส งผ านเครื อข ายอิ นเทอร เน็ ตไปยั งคลาวเซิ ร ฟ เวอร Beebotte จึ งต องอาศั ยไฟล ไลบรารี ของ การติ ดต อกั บ beebotte ผ าน API หรื อผ านโปรโตคอล MQTT สํ าหรั บในที่ นี้ ขอแนะนํ าการติ ดต อด วย REST API จึ งตอ งทํ าการติ ดตัง้ ไลบรารี ก อน โดย กํ าหนดให Raspberry Pi 2 ทํ างานในโหมดคอมมานด พร อมพ แล วพิ มพ คํ าสัง่ sudo pip-3.2 install beebotte requests
เพื่ อติด ตัง้ ไลบรารี beebotteให กั บ Python รอจนกระทั่ งการติด ตัง้ เสร็ จสมบู รณ ดั งรู ปที่ 13-37
รูปที่ 13-37 หนาตางคอมมานดไลนของ Raspberry Pi 2 แสดงการติดตังไลบรารี ้ beebotte
318Raspberry Pi 2
13.9 ตัวอยางโปรแกรมทดสอบใชงาน Beebotte กับ Raspberry Pi 2 ตัว อย างที่ นํ าเสนอในบทนี้ คื อ การควบคุ มใหบ อร ด Raspberry Pi 2 อ านค าอุ ณหภูม ิ และความ ชืน้ สั มพัท ธจ ากโมดู ลตรวจจั บ ZX-DHT11 แล วนํ าขอ มู ลนั้ นส งไปยั งคลาวด เซิ ร ฟเวอร Beebotte ด วย REST API เพื่ อบั นทึ กค าและแสดงผล ผู พ ฒั นาควรทํ าการออกแบบคลาวด เซิ ร ฟ เวอร ตามขั น้ ตอนในหั วข อ 13.6 โดยมี ข นั้ ตอนหลั ก ดั งนี ้ (1) สร างชอ งเก็ บข อมู ลหรื อ Channel ชือ่ RaspberryPi (2) สร างส วนประกอบหรื อ Resource ช อื่ Temp ชนิ ดข อมู ลเป น temperature เพื อ่ เก็ บค าอุ ณหภู ม ิ (3) สร างส วนประกอบชื อ่ humi ชนิ ดข อมู ลเป น humidity เพื อ่ เก็ บข อมู ลค าความชื น้ สั มพั ทธ จากนั้ นดํ าเนิ นการสร างเว็ บเพจของคลาวด เซิ ร ฟเวอร เพื่ อใช ในการบั นทึ กและแสดงผล โดย มี ขั้ นตอนสํ าคัญ ดัง นี้ (13.9.1) เตรี ยม API Key และ Secret Key ที่ แถบเมนู ทางซ าย เลื อก Account Setting จากนั้ น คลิ กที่ Credentials จะได ผลดั งรู ปที่ 13-38 มี การกํ าหนดรหั สใชง านไว 2 รหั สคื อ API Key
= d7f67dec2607f6ca0e904f458969f0e3
Secret Key
= 574dc23358a92207f83cc908a95343037a71763 e471151bb1aeedd8f3a2cfe02
เมื อ่ ได API key และ Secret Key แล ว ทํ าการสร างช องเก็ บข อมู ลและแดชบอร ดเพื อ่ รองรั บการ ติ ดต อกั บบอร ด Raspberry Pi 2 ต อไป
รูปที่ 13-38 เว็บเพจแสดงชองสําหรับปอนรหัสเพือเข ่ าถึงคลาวดเซิรฟเวอรของ Beebotte
Raspberry Pi 2 319
(13.9.2) ทํา การตอ วงจรตามรู ปที่ 13-39 เข ากับ พอร ต GPIO ของบอร ด Raspberry Pi 2 Raspberry Pi 2 GPIO +3.3V GPIO2 GPIO3 GPIO4 GND
1 3 5 7 9
2 4 6 8 10
+5V +5V GND GPIO14 TxD -UART0 GPIO15 RxD -UART0
GPIO17 GPIO27 GPIO22 +3.3V MOSI -SPI0 GPIO10
11 13 15 17 19
12 14 16 18 20
GPIO18 PCM-CLOCK GND GPIO23 GPIO24 GND
MISO -SPI0 GPIO9 SCLK-SPI0 GPIO11 GND ID_SDA GPIO5
21 23 25 27 29
22 24 26 28 30
GPIO25 GPIO8 CE0 -SPI0 GPIO7 CE1-SPI0 ID_SCL GND
GPIO6 GPIO13 GPIO19 GPIO26 GND
31 33 35 37 39
32 34 36 38 40
GPIO12 GND GPIO16 GPIO20 GPIO21
SDA1 -I2C SCL1 -I2C
ZX-DHT11 Humidity/Temperature sensor module +3.3V
Vcc
GND
GND
GPIO4
DATA
รูปทึ่ 13-39 วงจรเชือมต ่ อบอรด Raspberry Pi 2 กับโมดูลตตรวจวัดความชืนสั ้ มพัทธและอุณหภูมิ ZX-DHT11 ผานพอรต GPIO (13.9.3) เป ดโปรแกรม Geany เพื่ อสร างโปรแกรมของไฟล สคริ ปต Python โดยพิ มพ โปรแกรมที่ 13-1 (13.9.4) สั่ งให ไฟล สคริ ปต ทํ างาน จะได ผลการทํ างานแสดงที่ หน าตา งเทอร มิ นอลดั งรู ป ที่ 13-40
รูปที่ 13-40 หนาตางเทอรมินอลแสเงผลการทํางานของโปรแกรม cloud.py เปนการแสดงคาอุณหภูมิและ ความชืนสั ้ มพัทธที่ Raspberry Pi 2 อานไดจากโมดูล ZX-DHT11
320Raspberry Pi 2
#!/usr/bin/env python ############################################################ # This code uses the Beebotte API, you must have an account. # You can register here: http://beebotte.com/register ############################################################ import time import json import Adafruit_DHT from beebotte import * API_KEY = 'd7f67dec2607f6ca0e904f458969f0e3' SECRET_KEY = '574dc23358a92207f83cc908a95343037a71763e471151bb1aeedd8f3a2cfe02' ### Replace API_KEY and SECRET_KEY with those of your account bbt = BBT(API_KEY,SECRET_KEY) period = 5 ## Sensor data reporting period (5 seconds) pin = 4 ## Assuming the DHT11 sensor is connected to GPIO pin number 4 ### Change channel name and resource names as suits you temp_resource = Resource(bbt, 'RaspberryPi', 'Temp') humid_resource = Resource(bbt, 'RaspberryPi', 'humi') def run(): while True: ### Assume humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT11, pin) if humidity is not None and temperature is not None: print('Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature,humidity)) try: #Send temperature to Beebotte temp_resource.write(temperature) #Send humidity to Beebotte humid_resource.write(humidity) except Exception: ## Process exception here print ("Error while writing to Beebotte") else: print ("Failed to get reading. Try again!") #Sleep some time time.sleep(period) run()
โปรแกรมทึ่ 13-1 ไฟล cloud.py โปรแกรมภาษา Python สําหรับบอรด Raspberry Pi 2 เพืออ ่ านคาความชืน้ สัมพัทธและอุณหภูมิจากโมดูล ZX-DHT11 นําไปบันทึกคาและแสดงผลทีช่ องเก็บขอมูล RaspberryPi บนคลาวเซิรฟเวอร Beebotte (มีตอ)
Raspberry Pi 2 321
คําอธิบายโปแกรม เมื่อสรางชองเก็บขอมูลเพื่อรองรับขอมูลที่จะสงขึนไปแล ้ ว รหัส API Key และ Secret key จะเปนตัว ยืนยันตัวตนของอุปกรณเพื่อสงขอมูลไปยัง Beebotte ดังนั้นจึงตองกําหนด API Key และ Secret key ไวใน ฟงกชั่น BBT(API_KEY,SECRET_KEY) และสรางตัวแปร bbt เพื่อรับออบเจ็กต จากนั้นสรางออบเจ็กตสําหรับสงคาไปยังแตละสวนประกอบหรือ resource ดวยฟงกชัน่ Resource(bbt, 'Name Channel', 'Name resource') ตามดวยทําการสรางตัวแปรมารองรับดวย เชน temp_resource = Resource(bbt, 'RaspberryPi', 'Temp') การสงคาไปยังสวนประกอบหรือ Resource จะใชคําสัง่ temp_resource.write(temperature) ถาหากการสงขอมูลไมสําเร็จ จะแจงทีหน ่ าตางเทอรมินอลดวยคําสัง่ print ("Error while writing to Beebotte")
โปรแกรมทึ่ 13-1 ไฟล cloud.py โปรแกรมภาษา Python สําหรับบอรด Raspberry Pi 2 เพืออ ่ านคาความชืน้ สัมพัทธและอุณหภูมิจากโมดูล ZX-DHT11 นําไปบันทึกคาและแสดงผลทีช่ องเก็บขอมูล RaspberryPi บนคลาวเซิรฟเวอร Beebotte (จบ) (13.9.5) ตรวจสอบการแสดงผลของแดชบอร ดที อ่ อกแบบไว บน Beebotte จะได ผลการทํ างาน ตามรู ปที่ 13-41
รูปที่ 13-41 แสดงการแสดงผลของแดชบอรดของชองเก็บขอมูล RaspberryPi บนคลาวเซิรฟเวอร Beebotte ทีสร ่ างไวตังแต ้ ขันตอนในหั ้ วขอ 13.7
322Raspberry Pi 2
13.10 ตัวอยางการควบคุม LED ดวยแดชบอรดบน Beebotte นั บจากหั วข อนี เ้ ป นการนํา เสนอตั วอย างโครงงานเบื อ้ งต น เพื อ่ แสดงให เห็ นถึ งการทํ างานร วมกั น ระหว างบอร ด Raspberry Pi 2 กั บคลาวเซิ ร ฟ เวอร Beebotte ในการติ ดต อและควบคุ มอุ ปกรณ อ นิ พุ ต เอาต พ ตุ ที ต่ อ กั บพอร ต GPIO ของบอร ด Raspberry Pi 2 เพื อ่ เป นแนวทางในการพั ฒนาอุ ปกรณ IoT อย าง ง ายด วยบอร ด Raspberry Pi 2
13.10.1 ภาพรวมของการพัฒนา เริ ม่ ต นด วยการออกแบบเว็ บเพจของคลาวด เซิ ร ฟ เวอร ให ม กี ารแสดงรู ปสวิ ตช ส าํ หรั บเป ดป ด LED โดยยั งคงใช ช อ งเก็ บข อมู ลหรื อ Channel เดิ มคื อ RaspberryPi ท าํ การเพิ ม่ ส วนประกอบหรื อ Resource ใหม เข าไป ตั ง้ ชื อ่ ว า StLED จากนั น้ สร างแดชบอร ด และเขี ยนโปรแกรมของไฟล สคริ ปต Python ให แก บอร ด Raspberry Pi 2 ต อวงจรที พ่ อร ต GPIO ของบอร ด Raspberry Pi 2 แล วทดสอบการทํ างาน
13.10.2 เตรียมการคลาวเซิรฟเวอร มี ขั้ นตอนดั งนี้ (13.10.2.1) ตอ บอร ด Raspberry Pi 2 กั บเมาส, คี ย บอร ด, จอภาพ และเชือ่ มตอ เข ากับ เครื อข าย อิ นเทอร เน็ ต จากนั้ นไปยั งเว็ บไซต ของ Beebotte ทํ าการลงชื่ อเข าใช งาน แล วเลื อกช องเก็ บข อมู ล RaspberryPi ที่ เคยทํ าไว จากขั้ นตอนก อนหน านี้ อย างไรก็ ตาม ผูพ ั ฒนาสามารถสร างชอ งเก็ บข อมู ล หรื อ Channel ใหม ได ตามตอ งการ (13.10.2.2) ที่ แ ถบเมนู ท างซ า ยของ Beebotte คลิ ก ที่ Home จากนั้ น คลิ ก ที่ ข อ ความ RaspberryPi ดั งรู ปที่ 13-42
รูปที่ 13-42 เลือกชองเก็บขอมูลเพือเพิ ่ มเติ ่ มสวนประกอบ
Raspberry Pi 2 323
(13.10.2.3) คลิ กที่ รู ปเฟ อง จะปรากฏเมนู ตา งๆ ขึ้ นมา ให เลื อก Edit Channel ดั งรู ปที่ 13-43
รูปที่ 13-43 เขาสูการแก ไขรายละเอียดของชองเก็บขอมูล (13.10.2.4) คลิ กปุ ม + Resource เพื่ อเพิ่ มส วนประกอบหรื อ Resource ดั งรู ปที่ 13-44
รูปที่ 13-44 เพิมส ่ วนประกอบใหกับชองเก็บขอมูล
324Raspberry Pi 2
(13.10.2.5) กํ าหนดชือ่ Resource เป น StLED, Resource Description เป น status LED และ ชนิ ดข อมู ลเป น Boolean ดัง รู ปที่ 13-45 จากนั้ นคลิ ก Submit Changes
รูปที่ 13-45 เพิมส ่ วนประกอบทีเป ่ น LED สําหรับแสดงสถานะ (13.10.2.6) จะปรากฏส วนประกอบหรื อ Resource ของช องเก็ บข อมู ล RaspberryPi เพิ่ มขึ้ น มาดั งรู ปที่ 13-46
รูปที่ 13-46 แสดงสวนประกอบทีเพิ ่ มเข ่ ามาของชองเก็บขอมูล Raspberrypi
Raspberry Pi 2 325
13.10.3 ออกแบบแดชบอรดที่มีเครืองมื ่ อเปนสวิตชเปดปด ในที น่ จี้ ะใชแ ดชบอร ดเดิ มที่ ช อื่ IoT CLOUD ซึ ง่ ทํ าไว แล วตัง้ แตห วั ข อ 13.7 มาพัฒ นาตอ โดย เพิ่ มสวิ ตชส ํ าหรับ เป ดป ด LED อี ก 1 ตัว โดยมี ขั้ นตอนดั งนี้ (13.10.3.1) ที แ่ ถบเมนู คลิ กที ่ My Dashboards ตามด วยคลิ กที ร่ ายการ IoT CLOUD ดั งรู ปที ่ 13-47
รูปที่ 13-47 เลือกเปดแดชบอรดเดิมทีเคยสร ่ างไวแลว (13.10.3.2) คลิ กที่ รู ปเฟ อง มี เมนู ตา งๆ ปรากฏขึ้ นมา ให เลื อก Edit ดั งรู ปที่ 13-48
รูปที่ 13-48 การเลือกเพือแก ่ ไขแดชบอรดทีเคยสร ่ างไวแลว
326Raspberry Pi 2
(13.10.3.3) คลิ กที ป่ มุ + Add Widget แล วเลื อก On/Off จากนั น้ ทํ าการตั ง้ ค าตา งๆ โดยกํ าหนด ชือ่ เป น Switch, Channel คื อ RaspberryPi และ Resource เท ากับ StLED ดัง รู ปที่ 13-49 แล วคลิ กที่ ปุ ม Done ดั งรู ปที่ 13-49
รูปที่ 13-49 เลือกวิดเจ็ตของสวิตช On/Off มาใชงาน
Raspberry Pi 2 327
(13.10.3.4) จากนั น้ จะปรากฏวิ ดเจ็ ต Switch ที ต่ งั้ ค าแล วบนหน าออกแบบของแดชบอร ดดั งรู ปที ่ 13-50 จากนั น้ คลิ กปุ ม Save Changes
รูปที่ 13-50 หนาออกแบบของแดชบอรดทีมี่ วิดเจ็ตรูปสวิตชเปดปดเพิมเข ่ ามา (13.10.3.5) เมื อ่ บั นทึ กการเปลี ย่ นแปลงเรี ยบร อย แดชบอร ดที ส่ มบู รณ จะถู กแสดงขึ น้ มาดัง รู ปที ่ 13-51 จะเห็ นวิ ดเจ็ ตสวิ ตช เป ดป ดแสดงที ม่ มุ ขวาบน ทดลองคลิ กที ร่ ปู สวิ ตช จะเห็ นการเปลี ย่ นแปลงเป น ON และ OFF
รูปที่ 13-51 แดชบอรด IoT CLOUD ทีเพิ ่ มสวิ ่ ตชเปดปดแลว
328Raspberry Pi 2
13.10.4 การดําเนินการทีบอร ่ ด Raspberry Pi 2 (13.10.4.1) ต อวงจรตามรู ปที ่ 13-52 ที พ่ อร ต GPIO ของบอร ด Raspberry Pi 2
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
+
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
b c d e
a b c d e
29
1
30
f
f
g h
g h
i
i
j
j 1
+
K
Rpi-I/O40
รูปที่ 13-52 วงจรทดลองควบคุม LED ผานคลาวเซิรฟเวอร Beebotte ของบอรด Raspberry Pi 2
Raspberry Pi 2 329
#!/usr/bin/env python ############################################################ # This code uses the Beebotte API, you must have an account. # You can register here: http://beebotte.com/register ############################################################ import RPi.GPIO as GPIO import time import json from beebotte import * GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) LED_pin=16 GPIO.setup(LED_pin,GPIO.OUT) API_KEY = 'd7f67dec2607f6ca0e904f458969f0e3' SECRET_KEY= '574dc23358a92207f83cc908a95343037a71763e471151bb1aeedd8f3a2cfe02' ### Replace API_KEY and SECRET_KEY with those of your account bbt = BBT(API_KEY,SECRET_KEY) while True: try: # Read from Beebotte return json records = bbt.read('RaspberryPi','StLED') print (records) # Get data from json StLED=records[0]['data'] print (StLED) GPIO.output(16,StLED) except Exception: print ("Error while writing to Beebotte")
คําอธิบายโปรแกรม สวนสําคัญของโปรแกรมนี้คือ คําสัง่ records = bbt.read('RaspberryPi','StLED') เพืออ ่ านคามาจากสวนประกอบหรือ Resource ทีชื่ อว ่ า StLED ผลลัพธทีส่ งกลับมาจะอยูในรู ปแบบ json โดย มีตัวแปร records เก็บผลลัพธไว เชน [{"wts": 1452682926435,"data": false , "ts": 1452682926435}] จากตัวอยาง ขอมูลที่ตองการคือ "data": false ดังนั้นคําสัง่ StLED = records[0]['data'] หมายถึง การดึงคาของตัวแปร data มาเก็บไวที่ StLED เพื่อนําไปเปนกําหนด สถานะติดดับตอไป
โปรแกรมที่ 13-2 ไฟล LED.py โปรแกรมภาษา Python สําหรับบอรด Raspberry Pi 2 เพือรั ่ บการควบคุม อุปกรณเอาตพุตจากคลาวเซิรฟเวอร Beebotte
330Raspberry Pi 2
(13.10.4.2) เป ดโปรแกรม Geany เพื อ่ สร างไฟล LED.py ตามโปรแกรมที ่ 13-2 (13.10.4.3) สั ง่ ให ไฟล สคริ ปต Python ทํ างาน จะได ผลการทํ างานแสดงที ห่ น าต างเทอร ม นิ อลดั ง รู ปที ่ 13-53
รูปที่ 13-53 หนาตาง LXTerminal แสดงการทํางานของโปรแกรม LED.py (13.10.4.4) ทดสอบการทํ างานที แ่ ดชบอร ด IoT CLOUD ที ท่ าํ ไว แล วบน Beebotte ดั งรู ปที ่ 13-54 โดยคลิ กที ร่ ปู Switch แล วสั งเกตการทํ างานของ LED ที ต่ อ กั บพอร ต GPIO ของบอร ด Raspberry Pi 2
รูปที่ 13-54 ทดสอบการทํางานทีแดชบอร ่ ด IoT CLOUD เพือควบคุ ่ ม LED ทีต่ อกับพอรต GPIO ของบอรด Raspberry Pi 2
Raspberry Pi 2 331
13.11 ตัวอยางโครงงานปรับความสวางของ LED ดวยแดชบอรดบน Beebotte 13.11.1 ภาพรวมของการพัฒนา เริ ม่ ต นด วยการออกแบบเว็ บเพจของคลาวด เซิ ร ฟ เวอร โดยกํ าหนดให ม กี ารแสดงชอ งสํ าหรั บ รั บค าเพื อ่ ปรั บความสว างของ LED โดยยั งคงใช ช อ งเก็ บข อมู ลหรื อ Channel เดิ มคื อ RaspberryPi ท าํ การ เพิ ม่ ส วนประกอบหรื อ Resource ใหม เข าไป ตั ง้ ชื อ่ ว า valDuty จากนั น้ สร างแดชบอร ด และเขี ยนโปรแกรม ของไฟล สคริ ปต Python ให แก บอร ด Raspberry Pi 2 เพื อ่ รั บค าดิ วตี ไ้ ซเกิ ลสํ าหรั บสร างสั ญญาณ PWM จากแดชบอร ดสํ าหรั บขั บ LED ที ต่ อ กั บขาพอร ต GPIO ของบอร ด Raspberry Pi 2
13.11.2 เตรียมการคลาวเซิรฟเวอรและแดชบอรด มี ขั้ นตอนดั งนี้ (13.11.2.1) เพิ ม่ ส วนประกอบหรื อ Resource ชื อ่ valDuty ชนิ ดข อมู ลเป น rate ในช องเก็ บข อมู ล หรื อ Channel ที่ ชอื่ ว า RaspberryPi เมื่ อเพิ่ มเสร็ จแล ว จะได ดั งรู ปที่ 13-55
รูปที่ 13-55 เพิมส ่ วนประกอบหรือ Resource ชือ่ valDuty ลงในชองเก็บขอมูล RaspberryPi บน Beebotte
332Raspberry Pi 2
(13.11.2.2) ไปที่ แดชบอร ดที่ ชอื่ ว า IoT CLOUD ซึ่ งออกแบบมากอ นหน านี้ แล ว จากนั้ นเพิ่ ม วิ ดเจ็ ตที่ ชอื่ ว า Input ดั งรู ปที่ 13-56
รูปที่ 13-56 เพิมวิ ่ ดเจ็ต Input ลงในแดชบอรด IoT CLOUD (13.11.2.3) กํ าหนดชือ่ วิ ดเจ็ ตเป น Set duty cycle เลื อก Resource เป น valDuty ดั งรู ปที่ 13-57 คลิ กปุ ม Done เพื่ อบั นทึ ก
รูปที่ 13-57 กําหนดรายละเอียดของวิดเจ็ต Input
Raspberry Pi 2 333
(13.11.2.4) จากนั น้ จะปรากฏวิ ดเจ็ ต Set duty cycle บนหน าต างออกแบบแดชบอร ด ดัง รู ปที ่ 13-58 คลิ กปุ ม Save Changes เพื อ่ ยื นยั นการเปลี ย่ นแปลงรู ปที ่ 13-58 หน าออกแบบของแดชบอร ดที ม่ ี วิ ดเจ็ ตช องป อนข อมู ลเพิ ม่ เข ามา
รูปที่ 13-58 หนาออกแบบของแดชบอรด IoT CLOUD ทีมี่ วิดเจ็ตชองปอนขอมูลเพิมเข ่ ามา (13.11.2.5) แดชบอร ด IoT CLOUD ที ม่ ชี อ งป อนค า Set duty cycle แสดงขึ น้ มาดั งรู ปที ่ 13-59
รูปที่ 13-59 แดชบอรด IoT CLOUD ทีพร ่ อมสําหรับสงคาไปยังบอรด Raspberry Pi 2 เพือขั ่ บ LED ดวยสัญญาณ PWM
334Raspberry Pi 2
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
+
a b c d e
f g h
i
j
24
23
22
20 21
17 18 19
15 16
13 14
12
11
10
8 9
7
6
5
4
2 3
25
24
23
22
20 21
17 18 19
15 16
13 14
12
11
10
8 9
7
6
5
4
2 3
1
25
26 27
1
26 27
j
28 29
i
30
f g h
28 29
b c d e
30
+
K
Rpi-I/O40
รูปที่ 13-60 วงจรทดลองปรับความสวาง LED ผานคลาวเซิรฟเวอร Beebotte ของบอรด Raspberry Pi 2
Raspberry Pi 2 335
#!/usr/bin/python # -*- encoding: utf-8 -*import RPi.GPIO as GPIO import time from beebotte import * LED_pin=19 GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(LED_pin, GPIO.OUT) blink = GPIO.PWM(LED_pin,500) blink.start(0) API_KEY = 'd7f67dec2607f6ca0e904f458969f0e3' SECRET_KEY= '574dc23358a92207f83cc908a95343037a71763e471151bb1aeedd8f3a2cfe02' ### Replace API_KEY and SECRET_KEY with those of your account bbt = BBT(API_KEY,SECRET_KEY) while True: try: # Read from Beebotte return json records = bbt.read('RaspberryPi','valDuty') print (records) # Get data from json valpwm=records[0]['data'] print (valpwm) blink.ChangeDutyCycle(valpwm) except Exception: print ("Error while writing to Beebotte")
คําอธิบายโปรแกรม จุดสําคัญของโปรแกรมนีคื้ อ การใชคําสัง่ records = bbt.read('RaspberryPi','valDuty') เพือ่ อานคาจากสวนประกอบหรือ Resource ที่ชื่อวา valDuty ผลลัพธที่สงกลับมาอยูในรูปแบบ json ตัวแปร records จะเก็บผลลัพธไว เชน [{'wts': 1452764880455, "data": 90, 'ts': 1452764880455}] จากตัวอยาง ขอมูลที่ตองการคือ "data": 90 ดังนั้นคําสัง่ valpwm=records[0]['data'] หมายถึง การดึงคาที่ตัวแปร "data" ระบุไวมาเก็บไวที่ valpwm เพื่อนําไปกําหนดความกวางของสัญญาณ PWM ดวยคําสัง่ blink.ChangeDutyCycle(valpwm)
โปรแกรมที่ 13-3 ไฟล LEDPWM.py โปรแกรมภาษา Python สําหรับบอรด Raspberry Pi 2 เพือรั ่ บการควบคุม ความสวางของ LED ทีต่ อกับพอรต GPIO จากคลาวเซิรฟเวอร Beebotte
336Raspberry Pi 2
13.11.3 การดํ าเนิ นการที่ บอร ด Raspberry Pi 2 (13.11.3.1) ตอ วงจรตามรู ปที่ 13-60 ที่ พอร ต GPIO ของบอร ด Raspberry Pi 2 (13.11.3.2) เป ดโปรแกรม Geany เพื่ อสร างไฟล LEDPWM.py ตามโปรแกรมที่ 13-3 (13.11.3.3) สั ง่ ให ไฟล สคริ ปต Python ทํ างาน จะได ผลการทํ างานแสดงที ห่ น าต างเทอร ม นิ อล ดั งรู ปที ่ 13-61
รูปที่ 13-61 หนาตาง LXTerminal แสดงการทํางานของโปรแกรม LEDPWM.py (13.11.3.4) ทดสอบการทํ างานที่ แดชบอร ด IoT CLOUD ที่ ทํ าไว แล วบน Beebotte ดั งรู ปที่ 13-62 โดยใส ค าความกว างพั ลส ที่ ตอ งการ ซึ่ งมี ค า 0 ถึ ง 100 แล วคลิ กปุ ม Send เพื่ อส งค า สั งเกตการ ทํ างานของ LED ที่ ตอ กั บขาพอร ต GPIO19 ของบอร ด Raspberry Pi 2
รูปที่ 13-62 ทดสอบการทํางานทีแดชบอร ่ ด IoT CLOUD เพื่อขับ LED ทีต่ อกับพอรต GPIO ของบอรด Raspberry Pi 2 ดวยสัญญาณ PWM
Raspberry Pi 2 337
การนําบอรด Raspberry Pi 2 มาพัฒนาเปนอุปกรณ IoT อาจมีขันตอนพอสมควร ้ เนืองจากมี ่ สวน ประกอบทีต่ องทํางานรวมดวยมากพอสมควร ทังการตั ้ งค ้ าทีคลาวด ่ เซิรฟเวอร การออกแบบและสราง แดชบอรดเพือแสดงผล ่ การเขียนโปรแกรมเพือสร ่ างไฟลสคริปตดวยภาษา Python หรือภาษาอืนๆ ่ โดย ใชไลบรารีของการเชือมต ่ อกับคลาวเซิรฟเวอร จากนันนํ ้ าทังหมดมาทํ ้ างานรวมกัน ซึงหากมี ่ การฝกฝน อยางตอเนือง ่ และพยายามทําความเขาใจ จะพบการพัฒนาไมไดยากจนเกินไป ประโยชนทีได ่ รับจากการ เรียนรูนี มี้ คาและสามารถนําไปตอยอดไดอยางมากมาย การใหบริการของคลาวดเซิรฟเวอรอาจแตกตาง กันไปในแตละผูให บริการ ขอเพียงเขาใจในแนวคิดและกระบวนการ ผูพั ฒนาก็สามารถปรับเปลียนหรื ่ อ ดัดแปลงเพือให ่ ทํางานไดไมยาก