เนื้อหาในบทความ
📱 TM1637 คืออะไร?
TM1637 เป็นไอซีขับจอ 7-segment 4 หลักที่ได้รับความนิยมสูงในวงการผู้ทำ DIY เนื่องจากมีราคาถูก ใช้งานง่าย และเชื่อมต่อกับไมโครคอนโทรลเลอร์ได้สะดวก โดยใช้สายสัญญาณเพียง 2 เส้น (CLK และ DIO) เท่านั้น
ข้อดีของ TM1637:
- ราคาถูกมาก (ประมาณ 20-40 บาท)
- ต่อวงจรง่าย เพียง 4 เส้น (VCC, GND, CLK, DIO)
- มีไลบรารีพร้อมใช้สำหรับ MicroPython
- ปรับความสว่างได้ 8 ระดับ
- เหมาะสำหรับโปรเจกต์นาฬิกา เคาน์เตอร์ และเครื่องวัด
อุปกรณ์ที่ต้องใช้
- ✅ ESP32 DevKitC หรือ ESP32 บอร์ดอื่นๆ
- ✅ จอแสดงผล TM1637 4 หลัก 7-segment
- ✅ สาย Jumper (เพศ-เพศ) 4 เส้น
- ✅ USB Cable สำหรับอัปโหลดโค้ด
- ✅ คอมพิวเตอร์พร้อม Thonny IDE
🔌 การต่อวงจร
การต่อวงจร TM1637 เข้ากับ ESP32 นั้นทำได้ง่ายมาก เราจะใช้ขา GPIO 2 ขา คือ CLK และ DIO ตามตารางด้านล่าง:
| TM1637 Pin | ESP32 Pin |
|---|---|
| VCC | 3.3V หรือ 5V |
| GND | GND |
| CLK | GPIO 18 |
| DIO | GPIO 19 |
⚠️ หมายเหตุ: คุณสามารถใช้ขา GPIO อื่นๆ แทนได้ แต่ต้องแก้โค้ดในส่วนกำหนดขาด้วย หลีกเลี่ยงการใช้ขาที่มีการใช้งานพิเศษ เช่น GPIO 0, 2, 15 เป็นต้น
📦 ติดตั้งไลบรารี MicroPython
เราจะใช้ไลบรารี MicroPython TM1637 ที่พัฒนาโดย Mike Causer ซึ่งเป็นไลบรารีที่นิยมและเสถียรที่สุด
ขั้นตอนที่ 1: ดาวน์โหลดไลบรารี
ดาวน์โหลดไฟล์ tm1637.py จาก GitHub:
https://github.com/mcauser/micropython-tm1637
ขั้นตอนที่ 2: อัปโหลดไปยัง ESP32
1. เปิด Thonny IDE
2. เชื่อมต่อ ESP32 เข้ากับคอมพิวเตอร์
3. สร้างไฟล์ใหม่และวางโค้ดจาก tm1637.py
4. บันทึกเป็นชื่อ tm1637.py
5. ไปที่ File > Save as... > MicroPython Device
6. บันทึกไฟล์ในชื่อ tm1637.py
💻 โค้ดพื้นฐาน - แสดงตัวเลข
มาเริ่มต้นด้วยโค้ดพื้นฐานที่แสดงตัวเลขบนจอ TM1637:
# นำเข้าไลบรารีที่จำเป็น
from machine import Pin
from tm1637 import TM1637
import time
# กำหนดขา GPIO ที่ต่อกับ TM1637
CLK_PIN = 18 # ขา CLK
DIO_PIN = 19 # ขา DIO
# สร้างออบเจกต์ TM1637
tm = TM1637(CLK_PIN, DIO_PIN)
# ตั้งค่าความสว่าง (0-7)
tm.brightness(5)
# แสดงตัวเลข 4 หลัก
tm.show(1234)
# รอ 2 วินาที
time.sleep(2)
# แสดงตัวเลขอีกครั้ง
tm.show(5678)
# วนลูปแสดงตัวเลขนับขึ้น
while True:
for i in range(10000):
tm.show(i) # แสดงเลข i
time.sleep(0.1) # รอ 0.1 วินาทีอธิบายโค้ด:
- บรรทัด 1-4: นำเข้าไลบรารีที่จำเป็น
- บรรทัด 7-8: กำหนดขา GPIO สำหรับ CLK และ DIO
- บรรทัด 11: สร้างออบเจกต์ TM1637
- บรรทัด 14: ตั้งค่าความสว่าง (0 = มืดสุด, 7 = สว่างสุด)
- บรรทัด 17-23: แสดงตัวเลขบนจอ
🕐 โปรเจกต์: Digital Clock ด้วย NTP
ตอนนี้เราจะสร้าง Digital Clock ที่แสดงเวลาจริงโดยดึงเวลาจาก NTP Server ผ่าน WiFi:
# นำเข้าไลบรารีที่จำเป็น
from machine import Pin
from tm1637 import TM1637
import network
import ntptime
import time
# ตั้งค่า WiFi
WIFI_SSID = "YOUR_WIFI_SSID"
WIFI_PASSWORD = "YOUR_WIFI_PASSWORD"
# กำหนดขา GPIO
CLK_PIN = 18
DIO_PIN = 19
# สร้างออบเจกต์ TM1637
tm = TM1637(CLK_PIN, DIO_PIN)
tm.brightness(5)
# เชื่อมต่อ WiFi
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('กำลังเชื่อมต่อ WiFi...')
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
timeout = 10
while not wlan.isconnected() and timeout > 0:
print('.', end='')
time.sleep(1)
timeout -= 1
if wlan.isconnected():
print('\nเชื่อมต่อ WiFi สำเร็จ!')
print('IP:', wlan.ifconfig()[0])
else:
print('\nไม่สามารถเชื่อมต่อ WiFi ได้')
# ดึงเวลาจาก NTP Server
def sync_time():
try:
ntptime.settime()
print('ตั้งเวลา NTP สำเร็จ')
except:
print('ไม่สามารถตั้งเวลา NTP ได้')
# แสดงเวลาบน TM1637
def display_time():
# รับเวลาปัจจุบัน (RTC ของ ESP32)
current_time = time.localtime()
hours = current_time[3]
minutes = current_time[4]
# รวมเวลาเป็นตัวเลข 4 หลัก
time_num = hours * 100 + minutes
# แสดงเวลา (เปิด/ปิด : ตรงกลาง)
# สำหรับจอที่มี : ระหว่างหลักที่ 2 และ 3
tm.show(time_num)
tm.show(time_num | 0x4000) # เปิด :
# เริ่มต้นการทำงาน
print('เริ่มต้น Digital Clock')
connect_wifi()
sync_time()
# แสดงเวลาทุกๆ วินาที
last_sync = time.time()
while True:
display_time()
time.sleep(1)
# ตั้งเวลา NTP ใหม่ทุกๆ 1 ชั่วโมง
if time.time() - last_sync > 3600:
sync_time()
last_sync = time.time()วิธีใช้งาน:
- แก้ไข
WIFI_SSIDและWIFI_PASSWORDให้ตรงกับ WiFi ของคุณ - อัปโหลดโค้ดไปยัง ESP32
- ดูผลลัพธ์ที่จอ TM1637 และ Serial Monitor
💡 เคล็ดลับ: คุณสามารถปรับเวลาให้ตรงกับ Timezone ของประเทศไทย โดยเพิ่มค่า offset ในฟังก์ชัน display_time():
# ปรับเวลาให้ตรง GMT+7 (ประเทศไทย)
time_num = (hours + 7) % 24 * 100 + minutes🔧 การแก้ปัญหาที่พบบ่อย
ปัญหา: จอไม่ติด หรือแสดงผลไม่ถูกต้อง
วิธีแก้: ตรวจสอบการต่อสาย โดยเฉพาะ VCC และ GND ลองเปลี่ยนขา GPIO หากใช้ขาที่มีการใช้งานพิเศษ
ปัญหา: ไลบรารีไม่ทำงาน
วิธีแก้: ตรวจสอบว่าบันทึกไฟล์ tm1637.py ไว้ใน root directory ของ ESP32 และชื่อไฟล์ต้องถูกต้อง
ปัญหา: WiFi เชื่อมต่อไม่ได้
วิธีแก้: ตรวจสอบ SSID และ Password ลองใช้ WiFi 2.4GHz เท่านั้น (ESP32 รุ่นเก่าไม่รองรับ 5GHz)
ปัญหา: เวลาไม่ตรง
วิธีแก้: เพิ่ม offset เวลาให้ตรงกับ Timezone ของคุณ หรือตรวจสอบการเชื่อมต่ออินเทอร์เน็ต
🎉 สรุป
ในบทความนี้เราได้เรียนรู้วิธีการใช้งานจอแสดงผล TM1637 กับ ESP32 และ MicroPython ตั้งแต่การต่อวงจร ติดตั้งไลบรารี ไปจนถึงการสร้าง Digital Clock
สิ่งที่เรียนรู้:
- การเชื่อมต่อ TM1637 เข้ากับ ESP32
- การติดตั้งและใช้งานไลบรารี MicroPython
- การแสดงตัวเลขและข้อความบนจอ
- การสร้าง Digital Clock ด้วย NTP
- การแก้ปัญหาที่พบบ่อย
โปรเจกต์ต่อไปที่แนะนำ:
- 🔗 ESP32 NTP Time Tutorial - เรียนรู้เพิ่มเติมเกี่ยวกับ NTP
- 🔗 ESP32 I2C LCD Tutorial - ใช้งานจอ LCD 16x2
- 🔗 ESP32 Deep Sleep Guide - ประหยัดแบตเตอรี่