วันนี้ป่วยนอนอยู่ห้องไม่ได้ออกไปทำงานครับ แต่เราจะไม่ปล่อยให้สภาพร่างกายเรามาปิดกันความเป็นนักทดลองของเราไว้แค่นี้ วันนี้เราจะมาทดลองการใช้งานโมดูล DHT22 (AM2302) ซึ่งเป็นโมดูลวัดอุณหภูมิและความชื้น เจ้าโมดูลตัวนี้ราคาก็ไม่แพงครับ ผมซื้อมาในราคา 200 บาท หาซื้อได้ตามเว็บขายอุปกรณ์ของ Arduino และ Raspbery Pi ทั่วไป โดยในการทดลองวันนี้เราจะไม่แค่อ่านข้อมูลออกมาดูเฉยๆ แต่เราจะทำการทวิตข้อมูลขึ้นไปยัง Twitter ด้วย เมื่ออุปกรณ์พร้อมคนพร้อมก็เริ่มกันเลยครับ
เริ่มจากออกแบบและต่อวงจรกันก่อนครับ อุปกรณ์ที่ใช้ก็มี Raspberry Pi, DHT22, R 4.7K
เมื่อต่อเรียบร้อยจะได้ดังภาพ
ทำการติดตั้ง BCM2835 C Library
1 2 3 4 5 6 7 | cd /tmp wget http://www.open.com.au/mikem/bcm2835/bcm2835-1.8.tar.gz tar -zxvf bcm2835-1.8.tar.gz cd bcm2835-1.8 sudo ./configure sudo make sudo make install |
ทำการคอมไพล์และติดตั้ง Adafruit DHT Driver เมื่อคอมไพล์เสร็จแล้วเราจะได้ไฟล์ Adafruit_DHT ที่สามารถรันได้มา 1 ไฟล์ (จากตัวอย่างในรูปก็เป็นไฟล์ชื่อ Adafruit_DHT ที่สีเขียวๆ นะครับ)
1 2 3 4 | cd /tmp sudo wget https://raw.github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code/master/Adafruit_DHT_Driver/Adafruit_DHT.c sudo gcc Adafruit_DHT.c -l bcm2835 -std=gnu99 -o Adafruit_DHT ls |
ทดสอบทำการเรียกใช้งาน Adafruit_DHT ที่เราคอมไพล์เมื่อครู่นี้ว่าใช้งานได้ไหม โดยคำสั่งก็จะมีรูปแบบเป็น sudo ./Adafruit_DHT dht_type gpio_pin# (จากตัวอย่าง dht_type ของเราก็จะเป็น 22 และเราได้ต่อขา Data ของ DHT22 ที่พอร์ต GPIO 23 นะครับ)
1 | sudo ./Adafruit_DHT 22 23 |
จากนั้นทำการ copy Adafruit_DHT ไปไว้ที่ /usr/local/bin
1 2 | sudo cp Adafruit_DHT /usr/local/bin/ sudo chmod 755 /usr/local/bin/Adafruit_DHT |
ขั้นตอนถัดไปเราจะเขียนโปรแกรมเพื่อทำการทวิตข้อมูลขึ้น Twitter โดยเรียกใช้ Twitter API และเหมือนเดิมผมจะไม่พูดในรายละเอียดเรื่อง Twitter API ถ้าหากว่าใครยังใช้ไม่เป็นก็หาข้อมูลเพิ่มเติมจากเว็บของทวิตเตอร์เองนะครับ https://dev.twitter.com/ โดยในการทดลองของเรา เราต้องสร้าง Twitter Application เพื่อเอาค่า Access Token มาใช้ โดยเข้าไปสร้างได้ที่ https://dev.twitter.com/apps และในตัวอย่างผมจะใช้ Twitter Library ที่เป็นภาษา PHP โดยผมเลือกใช้ตัว “tmhOAuth” ซึ่งจริงๆก็มีให้เลือกเล่นหลายตัวหลายภาษา ลองดูเพิ่มเติมได้ที่นี้ครับ https://dev.twitter.com/docs/twitter-libraries
สร้างไฟล์ get-dht22-data-to-twitter.php
1 2 | sudo mkdir /var/www/dht22-data-to-twitter sudo nano /var/www/dht22-data-to-twitter/get-dht22-data-to-twitter.php |
จากนั้นพิมพ์คำสั่ง PHP ต่อไปนี้ลงไป
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | <?php // Include tmhOAuth Library include_once("tmhOAuth.php"); // Read Data From DHT22 $strDateTime = date("Y-m-d H:i:s"); $strDhtData = exec("/usr/local/bin/Adafruit_DHT 22 23"); $strToPostTw = "Tweet From Raspberry : Date = {$strDateTime}, {$strDhtData}"; // Create Instance // เราต้องใส่ค่า consumer_key, consumer_secret, token, secret ที่ได้จาก Twitter API เป็นของตัวเองด้วยนะครับ $twitter = new tmhOAuth(array( 'consumer_key' => 'XXXXXXXXXXXXXXXXHiCXXX', 'consumer_secret' => 'XXXXXXXXXXXXXXX3GWx9SgcDK4jXXXXXXXXXXXXXXX', 'token' => 'XXXXXXXXXXXXXXXC66GvPNZCj70NiXC0U3jXXXXXXXXXXXXXXX', 'secret' => 'XXXXXXXXXXXXXXXWWSOgO7hZ9XXXXXXXXXXXXXXX', 'use_ssl' => false )); // Post To Twitter $twitter->user_request(array( 'method' => 'POST', 'url' => $twitter->url('1.1/statuses/update'), 'params' => array('status' => $strToPostTw) )); //print_r($twitter->response); if($twitter->response['code'] == 200){ print "Yes"; }else{ print "No"; } ?> |
ดาวโหลดซอสโค้ดในส่วนนี้ได้จากลิ้งค์นี้นะครับ https://www.unzeen.com/download/dht22-data-to-twitter.zip
เช่นเคยครับสั่งให้ crontab รันโปรแกรม get-dht22-data-to-twitter.php ทุกๆ 1 ชัวโมงครับ
1 | sudo crontab -e |
สั่งให้รันทุก 1 ชัวโมง
1 | 0 * * * * /usr/bin/php /var/www/dht22-data-to-twitter/get-dht22-data-to-twitter.php |
จากนั้นทุกๆ ชัวโมงระบบก็จะทำการทวิตข้อมูลอุณหภูมิและความชื้นขึ้น Twitter ให้เราอัตโนมัติ
จากการทดลองๆ ที่ผ่านมาผมพยายามนำเสนอการสร้างปฏิสัมพันธ์ระหว่างโลกออนไลน์กับโลกจริงเท่าที่จินตนาการและเทคโนโลยีตอนนี้จะมีให้ได้ หวังว่าจะมีใครเอาไปประยุกต์ใช้กับงานจริงๆ ได้บ้างนะครับ