สวัสดีครับ ไม่ได้อัพเดทซะนาน มัวแต่ไปเล่นไมโครคอนโทรลเลอร์อยู่ ต้องกลับมารื้อฟื้นปัดฝุ่น Raspberry pi สักหน่อย ทิ้งช่วงไปนาน เริ่มจะลืมแหละ และก็ไม่รู้ตอนนี้โลก Linux Embedded เขาไปถึงไหนกันแล้ว บอร์ด Linux Embedded กำลังทยอยออกมาอย่างต่อเนื่อง ถ้าไม่กลับมาเล่น Linux Embedded มีหวังตามไม่ทันแน่ๆ
ช่วงนี้่อากาศก็ยังหนาวอย่างต่อเนื่อง ดึกๆ ยิ่งอากาศเย็น ระวังเรื่องสุขภาพกันด้วย พอพูดถึงเรื่องอากาศเย็น เราก็อยากจะรู้เหมือนกัน ตอนนี้มันเย็นกี่องศาแล้ว งั้นเราก็มาลองให้ Raspberry pi อ่านค่าอุณหภูมิผ่านไอซีดิจิตอล เบอร์ DS18B20 ผ่าน Protocol แบบ 1-wire ดูสักหน่อยสิ ว่าอุณหภูมิตอนนี้มันเท่าไหร่
เนื่องจากไม่ได้อัพเดทเฟิร์มแวร์ของ Raspbian นานแล้ว ก็เอาสักหน่อย ทั้ง update และ upgrade กันไปเลย
sudo apt-get update
sudo apt-get upgrate
ไอ้ตอน upgrade นี่นานเลยหล่ะ ถ้าใครไม่เคยอัพเกรดนานๆ เหมือนผม
เสร็จแล้ว ก็หาไอซีดิจิตอล DS18B20 สักตัว ไม่แพงแล้วทุกวันนี้ ถูกมาก แล้วก็ตัวต้านทาน ค่า 4.7k โอห์ม เอามา Pull-up ขา Data ของไอซี DS18B20 (ตามคำแนะนำดาต้าชีท)
ที่มารูปวงจร http://www.raspberrypi-spy.co.uk/
เมื่อต่อวงจรเสร็จแล้ว ก็ต้องมาทำการเพิ่มโมดูล 1-wire ไปที่ kernel ของ Linux ด้วยคำสั่ง
sudo modprobe w1-gpio
sudo modprobe w1_therm
ถ้าสำเร็จเราจะเห็นข้อมูลการรายงานค่าอุณหภูมิที่ directory /sys/bus/w1/devices ลองเข้าไปที่ directory นี้ดูครับ
cd /sys/bus/w1/devices
ls
ถ้าปรากฏ serial number ของเซ็นเซอร์ คล้ายๆ แบบนี้ก็ใช้ได้ครับ
28-0000031280c7 w1_bus_master1
ให้เราเข้าไปที่ 28-0000031280c7 แล้วอ่านไฟล์ w1_slave ที่อยู่ข้างในดูครับ
cd 28-0000031280c7
ls
cat w1_slave
มันจะรายงานค่าอุณหภูมิที่อ่านได้จากเซ็นเซอร์ DS18B20 มีหน่วยเป็นเซลเซียส
58 01 1e 00 1f ff 08 10 d9 : crc=d9 YES
58 01 1e 00 1f ff 08 10 d9 t=21500
มีค่าประมาณ 21.5 องศาเซลเซียส สำหรับผม ก็ถือว่าหนาวแล้วขนาดนี้ บรื๊ออออออก็ลองเอาไปประยุกต์กันดูครับ ง่ายๆ อุ่นเครื่องกันเท่านี้ก่อนหล่ะกัน สวัสดีครับ
ที่มา raspberrypi-spy.co.uk
เสร็จแล้ว ก็ลอง Polling data ด้วย Python ดูสักหน่อยสิ
ปล. ลืมไปว่าเราสามารถแทรก คำสั่ง modprobe ในโค๊ดนี้ก็ได้ จะได้ว่า
import os
from time import sleep
os.system('sudo modprobe w1-gpio')
os.system('sudo modprobe w1_therm')
while True:
tfile = open("/sys/bus/w1/devices/28-0000031280c7/w1_slave")
text = tfile.read()
tfile.close()
temperature_data = text.split()[-1]
temperature = float(temperature_data[2:])
temperature = temperature / 1000
print temperature
sleep(2)
3 ความคิดเห็น:
เอแบบนี้ ก็ใช้เวป จากนั้นหาทางส่งค่าอุณหภูมิ ขึ้นเวป ได้หรือเปล่าครับ wisit ?
เอ แต่เวปมันไม่ให้ เขียนหรืออ่าน เข้าตัวมันเอง หรือเปล่า ชักไม่แน่ใจ
ขอบคุณที่มารีวิว เออ มันก็ง่ายดีนะ ( หากรู้ว่าจะทำอย่างไร )
แค่เปิด file แล้วไปเอาค่าในนั้นมาเลย
ใช่ครับ เราอาจจะเอาข้อมูลที่อ่านได้เขียนลง text file แล้วค่อยเอามา report บนหน้าเว็บก็ได้ครับ ง่ายดี
ถ้าเราไม่พิมพ์เปิดไฟล์เเต่ใช้วิธีกดสั่งให้raspberry pi ทำงานเหมือนกับ arduino ได้ไหมค่ะคือให้กดปุ่มกะสามารถเรียกโปรแกรมที่จะทำงานออกมาได้เลยอ่ะค่ะ
Post a Comment