Wednesday, January 22

Raspberry Pi 1- Wire Digital Thermometer Sensor

    สวัสดีครับ ไม่ได้อัพเดทซะนาน มัวแต่ไปเล่นไมโครคอนโทรลเลอร์อยู่ ต้องกลับมารื้อฟื้นปัดฝุ่น 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 (ตามคำแนะนำดาต้าชีท)

Raspberry Pi 1- Wire Digital Thermometer Sensor

ที่มารูปวงจร 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 องศาเซลเซียส  สำหรับผม ก็ถือว่าหนาวแล้วขนาดนี้ บรื๊ออออออก็ลองเอาไปประยุกต์กันดูครับ ง่ายๆ อุ่นเครื่องกันเท่านี้ก่อนหล่ะกัน สวัสดีครับ

image

ที่มา raspberrypi-spy.co.uk

เสร็จแล้ว ก็ลอง Polling data ด้วย Python ดูสักหน่อยสิ

python_read_ds18b20

ปล. ลืมไปว่าเราสามารถแทรก คำสั่ง 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 ความคิดเห็น:

samira.samilan on 22 January 2014 at 10:22 said...

เอแบบนี้ ก็ใช้เวป จากนั้นหาทางส่งค่าอุณหภูมิ ขึ้นเวป ได้หรือเปล่าครับ wisit ?

เอ แต่เวปมันไม่ให้ เขียนหรืออ่าน เข้าตัวมันเอง หรือเปล่า ชักไม่แน่ใจ

ขอบคุณที่มารีวิว เออ มันก็ง่ายดีนะ ( หากรู้ว่าจะทำอย่างไร )
แค่เปิด file แล้วไปเอาค่าในนั้นมาเลย

Mr.P on 22 January 2014 at 17:29 said...

ใช่ครับ เราอาจจะเอาข้อมูลที่อ่านได้เขียนลง text file แล้วค่อยเอามา report บนหน้าเว็บก็ได้ครับ ง่ายดี

Ct Plano on 7 February 2015 at 04:05 said...

ถ้าเราไม่พิมพ์เปิดไฟล์เเต่ใช้วิธีกดสั่งให้raspberry pi ทำงานเหมือนกับ arduino ได้ไหมค่ะคือให้กดปุ่มกะสามารถเรียกโปรแกรมที่จะทำงานออกมาได้เลยอ่ะค่ะ

 

แจกฟรี พื้นที่ฝากไฟล์ 15 GB

ติดตามข่าวสารผ่าน Twitter

ติดตาม Blog นี้

About Me

My photo

สวัสดีครับ ชื่อเปิ้ลนะครับ ถ้ามีอะไรให้ช่วยเหลือได้ ก็จะช่วยครับ
ผมได้สร้างบล๊อกไว้ เพื่อเก็บรวบรวมความรู้ และประสบการณ์ในการทำงานครับ แวะไปเยี่ยมชมกันได้ครับ http://mechacity.blogspot.com และบล๊อก http://faker-programmer.blogspot.com ครับ

Blog อื่นๆของฉัน

Microcontroller Electronics update

สถิติเยี่ยมชมบล๊อก