ETT :: Article :: >ESP8266/ESP32 :: ET-ESP8266-RS485 ตอนที่ 1 ติดตั้งใช้งาน MicroPython

© 2022,จารุต บุศราทิจ, กอบกิจ เติมผาติ
ปรับปรุงเมื่อ 2022-03-27, 2022-03-28, 2022-04-10

บทความนี้เป็นการนำบอร์ด ET-ESP8266-RS485 (ภาพที่ 1) ติดตั้ง MicroPython เพื่อใช้งานภาษา Python สำหรับไมโครคอนโทรลเลอร์ ESP8266 ของ Espressif ที่เป็นหน่วยประมวลผลของบอร์ด เพื่อให้บอร์ดมีทางเลือกในการพัฒนาให้หลากหลายภาษามากขึ้น

เป้าหมาย

อุปกรณ์ที่ต้องใช้

คุณสมบัติของบอร์ด

บอร์ด ET-ESP8266-RS485 ,มีคุณสมบัติตามรายการต่อไปนี้

MicroPython

ไมโครไพธอน (www.micropython.org) เป็นโครงการแปลงไพธอนรุ่น 3 (MicroPython ให้มีขนาดเล็กลงโดยมีคุณสมบัติใกล้เคียงกับระบบต้นแบบ เพื่อรองรับการทำงานกับไมโครคอนโทรลเลอร์ หรืออุปกรณ์ขนาดเล็กแบบเปิดเผยโค้ด โดยรองรับหน่วยประมวลผลหลากหลายรุ่นดังหารายละเอียดได้จากเว็บไซต์ของโครงการในภาพที่ 2


ภาพที่ 2 หน้าแรกของเว็บไซต์ MicroPython

ในบทความนี้เป็นการใช้งานกับไมโครคอนโทรลเลอร์ ESP8266 จึงให้เข้าไปที่ Download หลังจากนั้นเลือก ESP8266 จะมีหน้าตาของเว็บดังภาพที่ 3 ให้เลือกดาวน์โหลด ESP8266 with 2MiB+ flash จะแสดงรายการดังภาพที่ 4 และ 5


ภาพที่ 3 รายการดาวน์โหลดสำหรับ ESP8266


ภาพที่ 4 หน้าเว็บส่วนของ ESP8266 with 2MiB+ flash


ภาพที่ 5 รายการดาวน์โหลดสำหรับ ESP8266

จากภาพที่ 5 ให้ดาวน์โหลด v1.18 (2022-01-17).bin เพื่อใช้สำหรับอัพโหลดเป็นเฟิร์มแวร์สำหรับไมโครคอนโทรลเลอร์ esp8266 ผ่านทางโปรแกรม Thonny ต่อไป

Thonny

โปรแกรม Thonny เป็นโครงการแบบเปิดเผยโค้ดที่สร้างเครื่องมือสำหรับการพัฒนาซอฟต์แวร์ด้วยภาษาไพธอน โดยตัวเองรองรับทั้ง Python และ MicroPython และสามารถดาวน์โหลดได้จากเว็บ www.thonny.org เมื่อดาวน์โหลดจากหน้าเว็บ (ดังภาพที่ 6) เป็นที่เรียบร้อยให้ทำการติดตั้งตามขั้นตอนดังภาพที่ 7


ภาพที่ 6 หน้าเว็บของ Thonny


ภาพที่ 7 ขั้นตอนการติดตั้ง Thonny

ติดตั้งและใช้งาน MicroPython

หลังจากได้ไฟล์ bin ของ MicroPython และได้ติดตั้ง Thoony ลงในเครื่องเป็นที่เรียบร้อย ให้เข้าโปรแกรม Thonny พร้อมทั้งเชื่อมต่อสาย USB เข้ากับบอร์ด ET-USB USART/TTL ที่อีกด้านเชื่อมต่อกับ ET-ESP8266 RS485 และเลือกที่เมนู Run หลังจากนั้นเลือกรายการ Select interpreter … ดังภาพที่ 8 เพื่อเข้าสู่การเลือกประเภทการทำงานของ Thonny ดังหน้าจอในภาพที่ 9


ภาพที่ 8 เมนู Run ของโปรแกรม THonny


ภาพที่ 9 หน้าจอ Thonny Options จากการเลือกรายการ Select interpreter…

จากภาพที่ 9 ให้เลือกแท็บ Interpreter แล้วเลือกประเภทของอุปกรณ์เป็น MicroPython (ESP8266) พร้อมทั้งเลือกรายการเชื่อมต่อพอร์ตสื่อสาร (ในภาพเป็น COM4) หลังจากนั้นคลิกที่ Install or update firmware ซึ่งเป็นข้อความที่อยู่ด้านบนปุ่ม OK และ Cancel จะปรากฏหน้าต่างดังภาพที่ 10


ภาพที่ 10 หน้าต่างการเขียนเฟริร์มแวร์

จากภาพที่ 10 ให้เลือก Port สื่อสารอีกครั้งและคลิก Browse เพื่อเลือกไฟล์เฟิร์มแวร์ที่ดาวน์โหลดเอาไว้ก่อนหน้านี้ หลังจากนั้นคลิกที่ปุ่ม Install เพื่อดำเนินการลบแฟลชและเขียนเฟิร์มแวร์ลงในรอมดังภาพที่ 11 และให้รอจนกว่าจะแสดงผลเหมือนในภาพที่ 12


ภาพที่ 11 ระบบเริ่มทำหารตรวจสอบชิพเพื่อดำเนินการลบและเขียนเฟิร์มแวร์


ภาพที่ 12 หน้าต่างแสดงข้อความ Done! เมื่อการเขียนเฟิร์มแวร์สำเร็จลุล่วง

จากภาพที่ 12 ให้คลิกปุ่ม Close เพื่อปิดหน้าต่างการโปรแกรมชิพ และกด OK เพื่อปิดหน้าต่างของการเลือก interpreter แล้วกลับสู่หน้าต่างหลักของโปรแกรม Thonny ให้สังเกตที่หน้าต่าง Shell ดังภาพที่ 13 จะมีการรายงานรุ่นของเฟิร์มแวร์ให้ทราบ


ภาพที่ 13 หน้าต่าง Shell แสดงรุ่นของ MicroPython และเครื่องหมาย >>> เพื่อให้ทราบว่าพร้อมทำงาน

สิ่งที่ควรเปิดให้แสดงผลจากหน้าต่าง IDE ของโปรแกรม Thonny เป็นตามรายการในภาพที่ 14 ซึ่งเข้าได้จากเมนู View ของโปรแกรม Thonny


ภาพที่ 14 รายการเมนูในเมนู View

เมื่อพร้อมทำงานให้ทดสอบด้วยการพิมพ์โค้ดโปรแกรมดังภาพที่ 15 หรือตามบรรทัดคำสั่งต่อไปนี้ พร้อมทั้งบันทึกลงแฟ้มชื่อ ep1ex1.py และคลิกที่ปุ่มรัน (ไอคอนสีเขียวใต้เมนู) จะแสดงข้อความดังภาพที่ 16 ซึ่งโค้ดเป็นการสั่งให้บอร์ดส่งข้อความออกทางพอร์ตสื่อสารอนุกรม

        
            print("Hello, I’m ETT.")
        
    


ภาพที่ 15 โค้ด ep1ex1.py


ภาพที่ 16 ตัวอย่างผลลัพธ์ของการรันโปรแกรม ep1ex1.py

ตัวอย่างโปรแกรม

เมื่อถึงขั้นตอนนี้หมายความว่าในไมโครคอนโทรลเลอร์ esp8266 มีเฟิร์มแวร์ MicroPython ที่พร้อมทำงาน ขั้นตอนต่อไปคือการเขียนโปรแกรมเพื่ออ่านรายละเอียดของบอร์ด ET-ESP8266-RS485 เพื่อดูจำนวนหน่วยความจำประเภทแรมและรอม ตรวจสอบอุปกรณ์บนบัส I2C เพื่อหา RTC ที่ติดตั้งบนบอร์ด และมีการส่งสัญญาณแจ้งไปยังวงจร WDT (Watch-Dog-Timer) ของไมโครคอนโทรลเลอร์เพื่อไม่ให้เกิดการรีเซ็ตระบบอัตโนมัติ ดังโค้ดโปรแกรมต่อไปนี้


########### imports
import esp
import os
import sys
import machine as mc
from machine import I2C, Pin, WDT
import gc
import time

########### Initial
gc.enable()
gc.collect()
mc.freq(160000000)
sclPin = Pin(5)
sdaPin = Pin(4)

i2c = I2C(sda = sdaPin, scl = sclPin, freq=100000)
devices = i2c.scan()
wdt = WDT()

uname = os.uname()

########### RAM
mem_total = gc.mem_alloc()+gc.mem_free()
free_percent = str((gc.mem_free())/mem_total*100.0)+"%"
alloc_percent = str((gc.mem_alloc())/mem_total*100.0)+"%"
wdt.feed()

########### ROM
stat = os.statvfs('/flash')
block_size = stat[0]
total_blocks = stat[2]
free_blocks  = stat[3]
rom_total = (total_blocks * block_size)/1024
rom_free = (free_blocks * block_size)/1024
rom_usage = (rom_total-rom_free)
rfree_percent = "("+str(rom_free/rom_total*100.0)+"%)"
rusage_percent = "("+str(rom_usage/rom_total*100.0)+"%)"
wdt.feed()

########### Show the information.
print("ID ............: {}".format(mc.unique_id()))
print("Platform ......: {}".format(sys.platform))
print("Version .......: {}".format(sys.version))
print("ROM Size ......: {} MBytes".format(esp.flash_size()/(1024*1024)))
print("Memory")
print("   total ......: {} Bytes or {} MBytes".format(mem_total, mem_total/(1024*1024)))
print("   usage ......: {} Bytes or {}".format( gc.mem_alloc(), alloc_percent))
print("   free .......: {} Bytes or {}".format( gc.mem_free(), free_percent))
print("ROM") 
print("   total ......:", rom_total,"KB" )
print("   usage ......:", rom_usage,"KB",rfree_percent )
print("   Free .......:", rom_free,"KB",rusage_percent )
print("system name ...: {}".format(uname.sysname))
print("node name .....: {}".format(uname.nodename))
print("release .......: {}".format(uname.release))
print("version .......: {}".format(uname.version))
print("machine .......: {}".format(uname.machine))
print("Frequency .....: {} MHz".format(mc.freq()/1000000.0))

if (104 in devices):
    print("RTC ...........: found")
else:
    print("RTC ...........: not found")
wdt.feed()

########### end of program
print("end of program.")
while True:
    wdt.feed()
    time.sleep_ms(100)
wdt.deinit()

ตัวอย่างผลลัพธ์ของการทำงานเป็นดังภาพที่ 17 และการทำงานของโปรแกรมประกอบด้วย


ภาพที่ 17 ตัวอย่างผลลัพธ์ของการอ่านรายละเอียดของบอฺร์ด ET-ESP8266-RS485

สรุป

จากบทความนี้จะพบว่าบอร์ด ET-ESP8266-RS485 รองรับการใช้งานกับ MicroPython ทำให้สามารถเขียนโปรแกรมภาษาไพธอนเพื่อใช้งานบอร์ดได้เหมือนกับการเขียนด้วยภาษา C++ ผ่านทางเฟรมเวิร์กของ Arduino พร้อมทั้งตัวอย่างโปรแกรมมีการเข้าถึงข้อมูลเกี่ยวกับหน่วยความจำประเภทแรมและรอมเพื่ออ่านข้อมูลจำนวนหน่วยความจำทั้งหมดและคงเหลือ การเปิดใช้งานสื่อสารบัส I2C สำหรับอ่านรายการอุปกรณ์ที่อยู่บนบัส และเปิดการใช้งาน WDT พร้อมทั้งส่งสัญญาณแจ้งให้วงจรได้ทราบสถานะว่ายังการทำงานของซอฟต์แวร์เพื่อป้องกันไม่ให้ไมโครคอนโทรลเลอร์ทำการรีเซ็ตตัวเองเนื่องจากเข้าใจว่าซอฟต์แวร์ทำงานวนซ้ำจนควบคุมไม่ได้หรือเกิดผิดพลาด

ส่วนบทความอีก 2 ตอนถัดไปเป็นเรื่องของการใช้งาน RTC ด้วยการเชื่อมต่อเครือข่ายอินเทอร์เน็ตด้วยการให้ไมโครคอนโทรลเลอร์เป็นลูกข่ายเพื่อใช้งานบริการ NTP (Network Time Protocol) สำหรับอ่านค่าวันที่และเวลาอัพเดตให้กับวงจร RTC บนบอร์ด ET-ESP8266-RS485แบบอัตโนมัติเมื่อสามารถเชื่อมต่อกับอินเทอร์เน็ตได้ และบทความในตอนสุดท้ายเป็นการเปิด/ปิดด้วยภาครีเลย์บนบอร์ดผ่านการสั่งงานบนเว็บบราวเซอร์ด้วยการให้บอร์ดไมโครคอนโทรลเลอร์ทำงานเป็น AP (Access Point)

ตอนที่ 1 :: ตอนที่ 2 :: ตอนที่ 3

--ไม่สามารถเข้าถึงฐานข้อมูลได้--