📃
micropython
  • Programming with MicroPython
  • MicroPython for BBC Micro:bit
    • BBC Micro:bit Overview
    • Micro:bit Code Examples
  • MicroPython for STM32
    • MicroPython Firmware Flashing for STM32
    • STM32 Code Examples
  • MicroPython for ESP32
    • WebREPL
    • ESP32 Code Examples
    • How To Blink LEDs with ESP32
    • ESP32 Programming with M5Stack Core
    • ESP32 with Dual-Channel DAC Output
    • ESP32 Networking
  • Arduino C/C++ versus MicroPython
  • Building MicroPython Firmware
  • MicroPython Benchmarking
  • MicroPython for RP2040 Pico
    • RPi Pico RP2040 Code Examples
    • PIO Programming
    • PIO Signaling and Measurement
  • CircuitPython
    • CircuitPython with Piper Make
    • CircuitPython for SAMD21
    • SAMD21 Code Examples
    • CircuitPython for STM32
    • STM32 Code Examples
    • CircuitPython for Pico RP2040
  • List of PDF Files
Powered by GitBook
On this page
  • การเลือกใช้เฟิร์มแวร์ของไมโครไพธอนสำหรับบอร์ด ESP32
  • การติดตั้งเฟิร์มแวร์เพื่อใช้งานไมโครไพธอน
  • การใช้งานร่วมกับ Thonny IDE
  • การเขียนและรันโค้ดไมโครไพธอนโดยใช้ Thonny IDE
  • โค้ดตัวอย่าง: LED Blink
  • กล่าวสรุป

Was this helpful?

MicroPython for ESP32

แนะนำการใช้งานไมโครไพธอนสำหรับไมโครคอนโทรลเลอร์ ESP32

PreviousSTM32 Code ExamplesNextWebREPL

Last updated 4 years ago

Was this helpful?

MicroPython () เกิดจากความต้องการที่จะนำภาษา Python 3 มาใช้กับไมโครคอนโทรลเลอร์ขนาด 32 บิต เริ่มต้นการพัฒนาตั้งแต่ราวปีค.ศ. 2014 และในปัจจุบันก็ได้มีการปรับให้สามารถทำงานได้กับไมโครคอนโทรลเลอร์หลายตระกูล เช่น ARM Cortex M Series และมีตัวอย่างดังนี้ (ดูได้จาก )

  • STMicroelectronics STM32F4 / F7 / L4

  • Atmel / Microchip ATSAMD21 / D51

  • Nordic nRF51 / nRF52

  • Espressif ESP8266 / ESP32

นอกเหนือจาก STM32 แล้ว ได้มีการนำไมโครไพธอนมาใช้กับบอร์ดไมโครคอนโทรลเลอร์ ESP8266 (เริ่มประมาณปีค.ศ. 2016) และถัดไปเป็น ESP32 ซึ่งทั้งสองกรณีเป็นชิป SoC ที่ไม่ได้ใช้ซีพียูตระกูล ARM Cortex-M Series และมีจุดเด่นคือ ความสามารถในการเชื่อมต่อ Wi-Fi (2.4GHz) ได้ ทำให้เชื่อมต่อกับระบบเครือข่ายและอินเทอร์เน็ตได้สะดวก ดังนั้นจึงเหมาะสำหรับการนำมาสร้างอุปกรณ์หรือระบบ IoT (Internet of Things)

เนื้อหาในส่วนนี้จะกล่าวถึง การใช้บอร์ด ESP32 สำหรับไมโครไพธอน เนื่องจาก ESP32 มีประสิทธิภาพและความสามารถทำงานได้สูงกว่า ESP8266 และในปัจจุบันก็มีบอร์ดหรือโมดูล ESP32 ให้เลือกใช้ได้หลายรูปแบบ

แนะนำให้ศึกษาเพิ่มเติมจากแหล่งข้อมูลอ้างอิงต่อไปนี้

  • MicroPython Online Documentation:

  • Quick Reference for the ESP32:

  • MicroPython Libraries:

การเลือกใช้เฟิร์มแวร์ของไมโครไพธอนสำหรับบอร์ด ESP32

บอร์ด ESP32 ที่เราสามารถเลือกมาใช้งานนั้น มีหลายรูปแบบ ความเหมาะสมของบอร์ดแต่ละชนิด ก็อาจแตกต่างกันไปขึ้นอยู่กับวัตถุประสงค์สำหรับการใช้งาน เช่น การนำมาใช้เพื่อเรียนรู้เขียนโค้ดสำหรับไมโครคอนโทรลเลอร์ด้วย ESP32 หรือการสร้างอุปกรณ์ต้นแบบ เป็นต้น

บอร์ด ESP32 บางรุ่น มีวงจรอย่างเช่น 3.7V LiPo Battery Charger สามารถใช้กับแบตเตอรี LiPo ได้ หรือช่องเสียบการ์ดหน่วยความจำแบบ microSD ทำให้มีพื้นที่เพิ่มในการเก็บข้อมูลลงในไฟล์ เช่น ไฟล์รูปภาพ หรือมีวงจรเพื่อใช้งานร่วมกับโมดูลจอภาพแบบ TFT หรือ OLED หรือ e-Ink (e-Paper) เพื่อใช้เป็นส่วนแสดงผลแบบกราฟิก เป็นต้น

บอร์ด ESP32 ส่วนใหญ่ ที่เป็น Development Board ก็มีรูปแบบที่เหมาะสำหรับการเสียบขาลงบนเบรดบอร์ดได้ ทำให้ต่อวงจรใช้งานร่วมกับโมดูลหรือวงจรอิเล็กทรอนิกส์อื่นได้อย่างสะดวก

เราสามารถจำแนกบอร์ด ESP32 ได้เป็นสองกลุ่ม เรียกว่า non-psRAM กับ psRAM-enabled ซึ่งขึ้นอยู่กับว่า มีการเพิ่มชิป psRAM (pseudo-static RAM) ภายนอกหรือไม่ มีความจุตั้งแต่ 4MB หรือ 8MB เป็นต้น บอร์ด ESP32 ที่มี psRAM ก็มักจะมีราคาสูงกว่าบอร์ดที่ไม่มี

“Non-SPIRAM firmware will work on any board, whereas SPIRAM enabled firmware will only work on boards with 4MiB of external pSRAM.”

ข้อสังเกต: เฟิร์มแวร์ของ ESP32 นอกจากแบ่งเป็น “GENERIC” และ “GENERIC-PSRAM” ให้เลือกแล้ว (อ้างอิงตามเวอร์ชัน v1.13 ในขณะที่จัดทำเอกสารนี้) ยังมีการแบ่งเป็น 2 ตัวเลือกอีก ขึ้นอยู่กับว่า มีการใช้ ESP-IDF v3.x หรือ ESP-IDF v4.x ในการคอมไพล์โค้ด

  • Firmware built with ESP-IDF v3.x, with support for BLE, LAN and PPP

  • Firmware built with ESP-IDF v4.x, with support for BLE, but no LAN or PPP

การติดตั้งเฟิร์มแวร์เพื่อใช้งานไมโครไพธอน

การติดตั้งเฟิร์มแวร์สำหรับ MicroPython ไปยังบอร์ด ESP32 จะอาศัยโปรแกรม Python Script ที่มีชื่อว่า esptool.py และเชื่อมต่อระหว่างคอมพิวเตอร์ผ่านพอร์ต USB-to-serial ไปยังบอร์ด ESP32

การติดตั้ง esptool.py ก็ทำได้ไม่ยาก โดยใช้คำสั่ง pip สำหรับ Linux (แต่ถ้าใช้ Windows ให้ทำคำสั่งผ่าน CMD Shell)

$ pip3 install --user esptool

จากนั้นให้ลองทำคำสั่งต่อไปนี้ เพื่อดูว่า มีการติดตั้ง esptool ไว้แล้วหรือไม่ และเป็นเวอร์ชันใด

$ pip3 show -f esptool

เมื่อเชื่อมต่อบอร์ด ESP32 กับคอมพิวเตอร์ของผู้ใช้ ผ่านทาง USB ให้ลองทำคำสั่งต่อไปนี้ เพื่ออ่านค่า MAC Address จากบอร์ดดังกล่าว (ไม่จำเป็นต้องระบุหมายเลข COM port เมื่อทำคำสั่งดังกล่าว จะมีการค้นหาพอร์ตที่เชื่อมต่อกับบอร์ด ESP32 โดยอัตโนมัติ ถ้ามีเพียงบอร์ดเดียวที่เชื่อมต่ออยู่)

$ python3 -m esptool read_mac

การใช้คำสั่ง esptool เพื่อติดตั้งเฟิร์มแวร์ไปยังบอร์ด ESP32 จะมีสองขั้นตอนตามลำดับคือ ขั้นแรกเป็นการลบหน่วยความจำ Flash (erase flash) และจากนั้นจึงเป็นการเขียนข้อมูลจากไฟล์ (MicroPython Firmware) เช่น ใช้ชื่อว่า firmware.bin ไปยังหน่วยความจำ Flash (write flash) ตามคำสั่งตัวอย่างในรูปแบบต่อไปนี้

$ python3 -m esptool --chip esp32 \
  --port /dev/ttyUSB0 erase_flash

$ python3 -m esptool --chip esp32 \
  --port /dev/ttyUSB0 --baud 460800 \
  write_flash -z 0x1000 firmware.bin 

ข้อสังเกต: ถ้าใช้ Linux ชื่อของพอร์ตที่ปรากฏ เช่น /dev/ttyUSB0 แต่ถ้าเป็น Windows จะเป็นชื่อที่ขึ้นต้นด้วย COM

การใช้งานร่วมกับ Thonny IDE

ภายในระบบไฟล์ของ MicroPython-ESP32 ภายใต้ไดเรกทอรี /flash จะมีไฟล์ที่ได้มีการใส่มาให้แล้วคือ boot.py และ main.py ทุกครั้งมีการรีเซตระบบ จะมีการทำคำสั่ง Python (ถ้ามี) ในไฟล์ boot.py แล้วตามด้วย main.py (สำหรับ Main Application/Script) ตามลำดับ

ยกตัวอย่างเช่น ในไฟล์ boot.py เราสามารถใส่คำสั่งที่เชื่อมต่อ ESP32 ด้วย Wi-Fi ไปยังอุปกรณ์ Wireless Access Point (AP) ตามที่กำหนดไว้โดยอัตโนมัติ หรือ มีคำสั่งให้ทำขั้นตอน microSD Mounting โดยอัตโนมัติ เป็นต้น

การเขียนและรันโค้ดไมโครไพธอนโดยใช้ Thonny IDE

ถัดไปลองมาเขียนโค้ดไมโครไพธอน และบันทึกลงไฟล์โดยใช้ชื่อ hello.py เก็บไฟล์นี้ไว้ในหน่วยความจำของบอร์ด ESP32 (MicroPython Device)

โค้ดตัวอย่างนี้จะแสดงข้อความ "Hello world!" จำนวน 10 ครั้ง โดยใช้คำสั่ง print() และมีการเว้นระยะเวลา 1000 มิลลิวินาที

import utime as time

for i in range(10):
    print( "Hello world! {}".format(i) )
    time.sleep_ms(1000)

เมื่อบันทึกไฟล์แล้ว เราก็สามารถทำคำสั่ง Run (Run Current Script) สำหรับไฟล์ดังกล่าวได้ (กด F5) ในกรณีที่การทำคำสั่ง ก็สามารถกดปุ่ม Stop ได้ (กด Ctrl+F2) อาจกดซ้ำแล้วรอจนกว่า เครื่องหมาย Prompt (>>>) จะปรากฏในส่วน Interactive Shell

เมื่อทำคำสั่ง Run ก็จะได้ข้อความเอาต์พุตดังนี้

ถ้าอยากทราบว่า มีโมดูลของ MicroPython อะไรบ้าง ให้ใช้งานได้ (โดยการใช้คำสั่ง import แล้วตามด้วยชื่อโมดูล) ให้ลองทำคำสั่ง help("modules")

หรือจะดูว่า มีคำสั่งหรือฟังก์ชันที่เกี่ยวข้องกับโมดูลหรือไลบรารี ก็ลองทำคำสั่ง dir() เช่น utime ตามตัวอย่างดังนี้

โค้ดตัวอย่าง: LED Blink

โค้ดตัวอย่างถัดไปสาธิตการใช้ขา GPIO ให้เป็นเอาต์พุต-ดิจิทัล (เช่น ขา GPIO21) เพื่อนำไปต่อกับวงจร LED และกำหนดสถานะลอจิกที่ขาเอาต์พุตดังกล่าว

คลาส Pin เกี่ยวข้องกับการใช้งาน GPIO (Digital I/O pins) ของฮาร์ดแวร์ เช่น ใช้งานเป็นขาดิจิทัล-อินพุต หรือเอาต์พุต และการเปิดใช้งาน Internal Pull-Up หรือ Pull-Down สำหรับขาที่จะถูกใช้เป็นอินพุต เป็นต้น

from micropython import const
import machine
import utime as time

LED_GPIO = const(21)  # define a constant
led = machine.Pin( LED_GPIO, mode=machine.Pin.OUT ) # GPIO output

state = False # LED output state
try:
    while True:
        state = not state
        led.value(state)
        print('LED state: {}'.format( int(state) ))
        time.sleep_ms(500)
except KeyboardInterrupt:
    print('Done..')

ถ้าต้องการหยุดการทำงานของโปรแกรม ให้กดปุ่ม Ctrl+C ในช่อง Shell ของ Thonny IDE หรือถ้าต้องการรีเซตการทำงาน (Soft Reset) ให้กดปุ่ม Ctrl+D

กล่าวสรุป

เราได้เรียนรู้ขั้นตอนการติดตั้งไฟล์เฟิร์มแวร์สำหรับบอร์ด ESP32 และทดลองเขียนโค้ดแล้วใช้คำสั่งต่าง ๆ ของไมโครไพธอน เพื่อนำไปทดสอบกับบอร์ด ESP32 ในเบื้องต้น โดยใช้ร่วมกับโปรแกรม Thonny IDE

การเลือกใช้เฟิร์มแวร์ของ MicroPython เพื่อนำมาใช้กับบอร์ดไมโครคอนโทรลเลอร์ที่ใช้ชิปหรือโมดูล ESP32 แบ่งเป็น GENERIC แต่ถ้ามี psRAM จะเรียกว่า GENERIC-PSRAM เวอร์ชันล่าสุดสามารถดาวน์โหลดได้จากเว็บ

ดังนั้นถ้าจะใช้ esptool.py คอมพิวเตอร์จะต้องมี Python 3.x ติดตั้งไว้ใช้งานพร้อมแล้ว (สำหรับผู้ใช้ Windows สามารถดาวน์โหลดไฟล์สำหรับติดตั้ง Python ได้จาก )

ถัดไปให้ลองใช้โปรแกรม เช่น เชื่อมต่อกับ MicroPython REPL ของบอร์ด ESP32 โดยไปยังเมนูคำสั่ง Run > Select Interpreter แล้วตั้งค่าตามตัวอย่าง เลือกพอร์ตให้ตรงกับอุปกรณ์ ESP32 ที่เชื่อมต่ออยู่

บอร์ด ESP32 ที่ได้นำมาทดลองใช้งานคือ (ESP32, 4MB Flash, 4MB psRAM) ผลิตโดยบริษัท LilyGO ผลิตในประเทศจีน สามารถเสียบลงบนเบรดบอร์ดได้ และมี MicroSD Slot ในกรณีที่ต้องการใช้การ์ดหน่วยความจำ เพื่อเก็บบันทึกข้อมูลอยู่ในรูปของไฟล์ต่าง ๆ

ส่วนแรกของโค้ด Python เป็นการใช้คำสั่ง import เพื่อระบุว่า จะใช้โมดูลหรือไลบรารีใดบ้าง เช่น , และ เป็นต้น ภายในไลบรารี ก็มีคลาสต่าง ๆ ที่เกี่ยวข้องกับการใช้งานวงจรภายในของ ESP32 เช่น , , , , , , , เป็นต้น

เผยแพร่ภายใต้ลิขสิทธิ์ Attribution-ShareAlike 4.0 International ()

http://micropython.org/download/esp32/
https://www.python.org/downloads/
Thonny IDE
TTGO T8 ESP32 v1.3
machine
utime
micropython
machine
Pin
I2C
SPI
UART
ADC
WDT
RTC
SDCard
CC BY-SA 4.0
https://micropython.org/
MicroPython Ports
http://docs.micropython.org/en/latest/
https://docs.micropython.org/en/latest/esp32/quickref.html
https://docs.micropython.org/en/latest/library/index.html
รูปภาพ: TTGO T8 ESP32 - Pin Map (Source: LilyGO)
รูปภาพ: TTGO T8 ESP32 WROVER with PSRAM Pin Map (Source: LilyGO)
รายการไฟล์เฟิร์มแวร์ (built with ESP-IDF v3.x) สำหรับ ESP32
รายการไฟล์เฟิร์มแวร์ (built with ESP-IDF v4.x) สำหรับ ESP32
รูปภาพ: ตัวอย่างข้อความเมื่อทำคำสั่ง esptool โดยใช้ Raspberry Pi Desktop
รูปภาพ: เมนู Run > Select Interpreter
รูปภาพ: Thonny IDE v3.2.6 ที่ใช้งานร่วมกับบอร์ด Raspberry Pi Desktop
รูปภาพ: การบันทึกไฟล์ชื่อ hello.py ไปยัง MicroPython Device
รูปภาพ: เมื่อบันทึกไฟล์ hello.py ได้สำเร็จแล้ว
รูปภาพ: ข้อความเอาต์พุตที่ได้จากการทำงานของโค้ดตัวอย่าง
รูปภาพ: แสดงรายการโมดูลของไมโครไพธอนที่ใช้งานได้
รูปภาพ: ตัวอย่างข้อความเอาต์พุต
รูปภาพ: การรันโค้ด led_blink.py โดยใช้บอร์ด ESP32
รูปภาพ: บอร์ด ESP32 สำหรับการทดสอบการทำงานของโค้ด led_blink.py