
MicroPython DS18S20 Temperature Sensor

ใน MicroPython จะมี buildin sensor driver มาให้เราพร้อมใช้งานแล้วอยู่สองอย่างคือ DS18x20 กับ DHTxxxx ซึ่งทั้งสองอันนี้เราสามารถเรียกใช้งานได้เลยโดยที่ไม่ต้องทำอะไรเพิ่มเติม สำหรับ DS18x20 นั้นจะมี package ที่เข้ามาเกี่ยวข้องอยู่ 2 อันคือ
onewire
ds18x20ก่อนที่เราจะใช้งาน ds18x20 ต้องทำการ import package เข้ามาก่อน
import onewire
import ds18x20
กำหนด Pin ที่จะใช้งาน ต้อง import Pin ก่อนที่อยู่ใน package machine
from machine import Pin

สร้าง object Pin โดยกำหนดชื่อตัวแปรเป็น dsPin
dsPin = Pin(5)
สร้าง onewire object โดยใช้ Pin ที่กำหนดไว้ข้างต้น และเราใช้ใช้ DS18x20 ต่อกับ GPIO5
ow = onewire.OneWire(dsPin)
สร้าง object ds18x20 โดยใช้บัสการสื่อสาร onewire ที่สร้างไว้ข้างต้น
ds = ds18x20.DS18X20(ow)

ทำการแสกน device ที่อยู่บน onewire bus
roms = ds.scan()

ถ้ามี sensor ต่ออยู่บน onewire bus จะ return ค่ามาเป็น object array แต่ถ้าไม่มีจะ return มาเป็น array ว่าง ๆ


เราสามารถตรวจสอบได้ว่าแสกนเจอ sensor กี่ตัว
len(roms)

ก่อนที่จะทำการอ่านค่า Temperature จะต้องเรียก function convert_temp() เพื่ออ่านค่าจาก bus และจะต้องทำ delay 750ms ก่อนที่จะอ่านค่า Temperature อีกที ในการสร้าง delay จะต้องทำการ import package time เข้ามาก่อน

import time
โดยเรียก function
time.sleep_ms(750)
ในการกำหนดค่า delay นี้ถ้าเป็นการทำงานแบบ interactive mode ก็ไม่จำเป็นต้องกำหนดเพราะกว่าเราจะเขียน code บรรทัดต่อไปก็กินเวลามากกว่า 750ms แน่นอน
จากนั้นเราก็สามารถ อ่านค่า Temperature
ds.read_temp(roms[0])

ทดสอบรัน code แบบ loop

อธิบายเพิ่มเติม
ds.read_temp(roms[0])
roms[0] หมายความว่าเรากำลังอ้างอิง sensor ตัวที่ 1 ในระบบ onewire bus ก่อนใช้งานเราต้องทำการตรวจสอบ object ที่อยู่ใน array ของ roms ก่อนว่ามีมาชิกอยู่หรือไม่เพราะถ้าไม่มีสมาชิกของ object array อยู่จะทำให้เกิด error ได้