สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
พื้นหลัง
ESP8266 และน้องชายคนโตของ ESP32 เป็นไมโครชิป Wi-Fi ราคาประหยัดพร้อมสแต็ก TCP/IP เต็มรูปแบบและความสามารถของไมโครคอนโทรลเลอร์ ชิป ESP8266 ได้รับความสนใจจากชุมชนผู้ผลิตเป็นครั้งแรกในปี 2014 ตั้งแต่นั้นมา ราคาต่ำ (<5 USD), ความสามารถ Wi-Fi, หน่วยความจำแฟลชในตัวขนาด 1 หรือ 4 MB และการพัฒนาที่หลากหลาย บอร์ดทำให้ชิป ESP เป็นหนึ่งในไมโครคอนโทรลเลอร์ที่ได้รับความนิยมมากที่สุดสำหรับโครงการ WiFi และ IoT DIY
MicroPython เป็นการนำภาษาการเขียนโปรแกรม Python ที่ได้รับความนิยมเพิ่มขึ้นมาใช้อย่างมีประสิทธิภาพและมีประสิทธิภาพ ซึ่งรวมถึงชุดย่อยเล็กๆ ของไลบรารีมาตรฐาน Python และได้รับการปรับให้เหมาะกับการทำงานบนไมโครคอนโทรลเลอร์
การรวมกันของสองสิ่งนี้เป็นตัวเลือกที่น่าสนใจมากสำหรับโครงการ DIY ทั้งสำหรับผู้เริ่มต้นและผู้ใช้ขั้นสูง
โครงการ MiPy-ESP
ย้อนกลับไปในปี 2558 โครงการแรกของฉันกับ ESP8266 เริ่มต้นด้วยชิป ESP-01 โดยใช้ Arudions สำหรับการรันคำสั่งชิป AT ผ่านการเชื่อมต่อแบบอนุกรม หลังจากนั้น ปีหน้าฉันใช้ Arduino core สำหรับ ESP8266 เพื่อตั้งโปรแกรมชิปด้วยภาษา C++ ใช้งานได้ดี แต่สำหรับผู้ที่ชื่นชอบ Python การค้นพบการใช้ MicroPython ของ Python 3 ของฉันเป็นข่าวดี
โปรเจ็กต์ MiPy-ESP เป็นเฟรมเวิร์กที่ยืดหยุ่นซึ่งใช้ MicroPython สำหรับโปรเจ็กต์ Python IoT แบบฟูลสแตกบนไมโครคอนโทรลเลอร์ตระกูล ESP
เฟรมเวิร์กได้รับการพัฒนาโดยทีมนักพัฒนาซอฟต์แวร์ของคณะกรรมการเทคนิค LeGarage (LG-TC-SWDT-01) โดยมีเป้าหมายเพื่อแทนที่โค้ดที่ใช้ C++ ที่กำหนดไว้แล้วสำหรับแอปพลิเคชันไมโครคอนโทรลเลอร์ของเรา
โครงการมีคุณสมบัติพื้นฐานเช่น
- ขั้นตอนการเชื่อมต่อเครือข่าย
- เว็บเซิร์ฟเวอร์จุดเข้าใช้งานชิป (สำหรับการเชื่อมต่อ wifi และการให้บริการหน้าเว็บชิปสำหรับ data I/O)
- ฟังก์ชัน MQTT
- การบันทึก/การดีบัก
- การตั้งเวลาเหตุการณ์ไมโครคอนโทรลเลอร์
- รูทีนฮาร์ดแวร์ I/O
ด้วยสคริปต์โค้ดขนาดกะทัดรัดหลักหนึ่งตัว (main.py) ทั้งหมดนี้มีการกำหนดค่าส่วนกลาง (config.py)
รหัสไมโครคอนโทรลเลอร์นี้ทำงานด้วยการบำรุงรักษาการเชื่อมต่อชิปที่แข็งแกร่งไปยังเครือข่าย WiFi และโบรกเกอร์ MQTT โมดูล MicroPython ที่มีอยู่สำหรับฮาร์ดแวร์ต่างๆ สามารถรวมเข้ากับระบบได้อย่างง่ายดาย
กรอบงาน MiPy-ESP ได้กลายเป็นกระดูกสันหลังของโครงการ IoT อิเล็กทรอนิกส์สำหรับงานอดิเรกทั้งหมดของเราที่เกี่ยวข้องกับไมโครคอนโทรลเลอร์ตระกูล ESP ได้รับการทดสอบกับบอร์ดตระกูล ESP หลายรุ่น เช่น บอร์ด NodeMCU, Wemos และ Lolin
บทช่วยสอนต่อไปนี้เป็นแนวทางสำหรับวิธีเริ่มต้นใช้งานไมโครคอนโทรลเลอร์ตระกูล ESP และ MicroPython โดยใช้เฟรมเวิร์ก MiPy-ESP
ขั้นตอนที่ 1: บอร์ด Wemos D1 Mini ESP8266
กรอบงาน MiPy-ESP ใช้งานได้กับไมโครคอนโทรลเลอร์ที่ใช้ ESP8266 ส่วนใหญ่
บอร์ดพัฒนา Wemos D1 mini ใช้ชิป ESP-8266EX บนพื้นที่ขนาด 2.5 x 3.5 ซม. มีหน่วยความจำแฟลช 4MB, พินอินพุต/เอาต์พุตดิจิตอล 11 พิน, พินทั้งหมดรองรับอินเตอร์รัปต์, PWM, I2C, SPI, อินพุตอนุกรมและอนาล็อก 1 อินพุตที่มีอินพุตสูงสุด 3.3V, สามารถทำงานได้ด้วยไฟ 5V, มีการเชื่อมต่อ micro USB และเข้ากันได้กับเขียงหั่นขนม ราคาต่ำและขนาดเล็กทำให้เป็นบอร์ด ESP ตัวโปรดของฉัน
นอกจากนี้ บอร์ดรุ่น D1 mini pro ยังมาพร้อมตัวเลือกในการเชื่อมต่อเสาอากาศภายนอก ช่วยเพิ่มระยะการเชื่อมต่อได้อย่างมาก (+100 ม.) ยิ่งไปกว่านั้น บอร์ดยังมาพร้อมกับบอร์ดต่อขยายแบบนอกกรอบที่มีขนาดกะทัดรัดใกล้เคียงกัน
ขั้นตอนที่ 2: เตรียมพร้อมสำหรับ MicroPython บนชิป ESP
ในขั้นแรกนี้ คุณจะ
- เชื่อมต่อบอร์ด ESP ผ่าน USB เข้ากับคอมพิวเตอร์ของคุณ
- ติดตั้งซอฟต์แวร์ Esptool เพื่อทำการแฟลชชิป
- ลบหน่วยความจำชิป
- แฟลชชิปด้วยเฟิร์มแวร์ MicroPython
- ติดตั้ง Rshell เพื่อเปิดใช้งานการโต้ตอบบรรทัดคำสั่งกับชิปของคุณ
- ติดตั้ง mpy-cross (สำหรับการรวบรวมไฟล์.py เป็นไบนารี)
การเชื่อมต่อบอร์ดกับคอมพิวเตอร์ของคุณผ่าน USBBoards ด้วยพอร์ตอนุกรม USB ในตัวทำให้ UART พร้อมใช้งานสำหรับพีซีของคุณและเป็นตัวเลือกที่ง่ายที่สุดสำหรับการเริ่มต้น สำหรับบอร์ดที่ไม่มีการเชื่อมต่อ USB สามารถใช้โมดูล FTDI ที่มี USB เป็นซีเรียลเพื่อเชื่อมต่อพิน GPIO สำหรับการกะพริบที่เชื่อมต่อกับโลกภายนอกได้ แต่จะไม่ครอบคลุมในบทช่วยสอนนี้
สำหรับ MicroPython ที่ใช้รหัส MiPy-ESP ข้อกำหนดขั้นต่ำสำหรับขนาดแฟลชของชิปคือ 1MB นอกจากนี้ยังมีบิลด์พิเศษสำหรับบอร์ดที่มี 512kB แต่ไม่รองรับระบบไฟล์ซึ่งขึ้นอยู่กับ MiPy-ESP
เมื่อใช้สาย USB บอร์ดจะใช้พลังงานจากคอมพิวเตอร์ขณะเชื่อมต่อ นอกจากนี้ยังช่วยให้สามารถตั้งโปรแกรมและแก้จุดบกพร่องผ่านการเชื่อมต่อแบบอนุกรม เมื่ออัปโหลดรหัสโปรเจ็กต์และใช้งานโปรเจ็กต์ของคุณแล้ว พลังงานจากภายนอกจะถูกนำไปใช้กับพินพาวเวอร์ซัพพลายของบอร์ด
การติดตั้ง EsptoolInformation เกี่ยวกับซอฟต์แวร์ Esptool สามารถพบได้ในที่เก็บ Esptool GitHub หากคุณต้องการใช้ Windows/Linux/OSX(MAC) ลิงก์ด้านบนจะครอบคลุมถึงเรื่องนั้นด้วย แพ็คเกจ Python สามารถติดตั้งได้โดย
pip ติดตั้ง esptool
สำหรับผู้ใช้ Linux แพ็คเกจสำหรับ Esptool จะได้รับการดูแลสำหรับ Debian และ Ubuntu และยังสามารถติดตั้งได้ด้วย
sudo apt ติดตั้ง esptool
การลบหน่วยความจำแฟลช ESP เมื่อใช้ Esptool คุณจะลบหน่วยความจำแฟลช ESP ด้วยคำสั่ง
esptool.py --port /dev/ttyUSB0 Erase_flash
การดาวน์โหลดเฟิร์มแวร์ MicroPyton เฟิร์มแวร์ MicroPython อยู่ในไฟล์.bin ที่สามารถดาวน์โหลดได้จากเว็บไซต์ MicroPython
สาขาหลักของโครงการปัจจุบันของ repo ได้รับการทดสอบและใช้งานได้กับ Micropython v.1.12 เพื่อให้แน่ใจว่าประสบความสำเร็จกับเฟรมเวิร์ก MiPY-ESP ให้ดาวน์โหลดไฟล์ 'esp8266-20191220-v1.12.bin' จากลิงก์นี้และเขียนเฟิร์มแวร์ไปยังชิปโดยใช้คำสั่ง:
esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=ตรวจจับ 0 esp8266-20191220-v1.12.bin
การติดตั้ง Rshellแพ็คเกจ Rshell ช่วยให้สามารถโต้ตอบบรรทัดคำสั่งกับสภาพแวดล้อม MicroPython ที่ติดตั้งบนชิปได้ สามารถพบได้ในลิงค์นี้ Rshell เป็นเชลล์ธรรมดาที่ทำงานบนโฮสต์และใช้ raw-REPL ของ MicroPython เพื่อส่งข้อมูลโค้ดของ python ไปยัง pyboard เพื่อรับข้อมูลระบบไฟล์ และเพื่อคัดลอกไฟล์ไปยังและจากระบบไฟล์ของ MicroPython REPL ย่อมาจาก Read Evaluate Print Loop และเป็นชื่อที่กำหนดให้กับพรอมต์ MicroPython แบบโต้ตอบที่คุณสามารถเข้าถึงได้บน ESP8266 การใช้ REPL เป็นวิธีที่ง่ายที่สุดในการทดสอบโค้ดและรันคำสั่งของคุณ ติดตั้ง Rshell ด้วยคำสั่ง:
sudo pip ติดตั้ง rshell
การติดตั้งคอมไพเลอร์ mpy-cross MicroPython สามารถใช้กับไฟล์ ascii.py ที่อัปโหลดไปยังระบบไฟล์ชิป MicroPython ยังกำหนดแนวคิดของไฟล์.mpy ซึ่งเป็นรูปแบบไฟล์คอนเทนเนอร์ไบนารีที่มีโค้ดที่คอมไพล์แล้ว และสามารถนำเข้าได้เหมือนกับโมดูล.py ปกติ ด้วยการรวบรวมไฟล์.py เป็น.mpy หน่วยความจำ RAM เพิ่มเติมจะพร้อมใช้งานสำหรับโค้ดที่รันอยู่ของคุณ - และจำเป็นเพื่อให้มีโมดูลหลักที่ใช้งานได้ของเฟรมเวิร์ก MiPy-ESP
สำหรับการปรับใช้โค้ด MiPy-ESP คอมไพเลอร์ข้าม mpy-cross MicroPython จะคอมไพล์สคริปต์.py เป็น.mpy ก่อนการอัปโหลดชิป ติดตั้งแพ็คเกจ mpy-cross ตามคำแนะนำในลิงค์นี้ อีกทางหนึ่ง คำสั่ง mpy-cross สามารถติดตั้งได้ด้วยคำสั่ง Python pip หรือเรียกใช้จากพาธโฟลเดอร์ mpy-cross หากคุณโคลนที่เก็บ MicroPython จาก GitHub ที่นี่
ตอนนี้คุณมี MicroPython และเครื่องมือที่จำเป็นทั้งหมดติดตั้งแล้วสำหรับการเริ่มต้นสร้างโปรเจ็กต์ MiPy-ESP แรกของคุณ
ขั้นตอนที่ 3: เริ่มต้นใช้งาน MiPy-ESP
ในขั้นตอนนี้ คุณจะ
ดาวน์โหลดกรอบงาน MyPy-ESP
กำลังดาวน์โหลดเฟรมเวิร์ก MiPy-ESP สามารถดูโปรเจ็กต์ MiPy-ESP ได้ที่ GitHub ในที่เก็บโค้ดนี้ จาก GitHub คุณสามารถดาวน์โหลดโครงสร้างไฟล์ที่เก็บหรือโคลนไปยังคอมพิวเตอร์ของคุณโดย
โคลน git
ด้วยที่เก็บโค้ดที่ติดตั้งบนคอมพิวเตอร์ของคุณ ตอนนี้คุณมีโมดูลโค้ดทั้งหมดที่คุณต้องการสำหรับการสร้างโปรเจ็กต์ ESP IoT ที่พร้อมใช้งานทันที รายละเอียดเพิ่มเติมเกี่ยวกับกล่องเครื่องมือในขั้นตอนต่อไป
ขั้นตอนที่ 4: สถาปัตยกรรมเฟรมเวิร์ก MiPy-ESP
ในขั้นตอนนี้ คุณจะ
เรียนรู้เกี่ยวกับเวิร์กโฟลว์โค้ด MiPy-ESP
สถาปัตยกรรมโค้ด MiPy-ESP
โมดูลเฟรมเวิร์ก Python ทั้งหมดอยู่ในโฟลเดอร์ /src ของที่เก็บโค้ด MiPY-ESP โฟลเดอร์ src/core ประกอบด้วยโมดูลหลักที่เข้าไปในทุกโครงการ โฟลเดอร์ src/drivers มีโมดูลให้เลือกมากมายสำหรับฮาร์ดแวร์ต่างๆ ที่จะเชื่อมต่อกับชิปของคุณ โฟลเดอร์ src/utilities มีโมดูลยูทิลิตี้เสริมที่จะรวมไว้ในโปรเจ็กต์ของคุณ
ไฟล์ main.py และ config.py อยู่ในโฟลเดอร์ src/ ไฟล์เหล่านี้เป็นไฟล์หลักที่ต้องแก้ไขเพื่อสร้างโครงการของคุณ:
config.py:
ไฟล์นี้เป็นไฟล์คอนฟิกูเรชันส่วนกลางสำหรับโปรเจ็กต์ของคุณ มีการตั้งค่าต่างๆ ทั้งหมดพร้อมคำอธิบายประกอบในไฟล์
main.py:
นี่คือสคริปต์หลักสำหรับลูปโค้ดไมโครคอนโทรลเลอร์ ประกอบด้วยรหัสเฉพาะแอปพลิเคชันในกรอบงาน เมื่อทำการบู๊ตชิป main.py จะรันและนำเข้าโมดูลที่ขึ้นกับโปรเจ็กต์ทั้งหมดด้วยอินพุตที่กำหนดจากไฟล์ config.py ผังงานด้านบนแสดงเค้าโครงของสคริปต์ main.py
รูปด้านบนอธิบายเวิร์กโฟลว์ของ main.py:
- เมื่อบูต รหัสจะพยายามเชื่อมต่อชิปกับเครือข่าย Wi-Fi เครือข่ายที่ใช้ก่อนหน้านี้และรหัสผ่าน (เข้ารหัสบนชิป) จะถูกเก็บไว้ในหน่วยความจำแฟลช SSID ของเครือข่ายและรหัสผ่านสามารถจัดเตรียมได้ในไฟล์ wifi.json ในรูปแบบ {" SSID1":"รหัสผ่าน", "SSID":"รหัสผ่าน2"} เครือข่ายที่กำหนดในไฟล์นี้จะถูกเก็บไว้ รหัสผ่านจะถูกเข้ารหัส และไฟล์จะถูกลบออกเมื่อบู๊ต
- หากไม่พบเครือข่ายที่ทราบอยู่แล้ว รหัสจะตั้งค่าเว็บเซิร์ฟเวอร์จุดเข้าใช้งาน (AP) SSID เซิร์ฟเวอร์ AP ของชิปและรหัสผ่านจะถูกตั้งค่าในไฟล์ config.py เมื่อเข้าสู่ระบบ SSID ของชิป หน้าเว็บสำหรับการเข้าสู่ระบบของชิปไปยัง Wi-Fi จะแสดงที่ 192.168.4.1 เครือข่ายที่ตรวจพบจะแสดงในเมนู หรือสามารถป้อน SSID ด้วยตนเอง (เครือข่ายที่ซ่อนอยู่) พร้อมกับรหัสผ่าน Wi-Fi. เมื่อเชื่อมต่อชิปกับ Wi-Fi สำเร็จแล้ว เซิร์ฟเวอร์ AP จะปิดตัวลงและรหัส main.py จะไปยังขั้นตอนต่อไป
-
ในส่วนการตั้งค่าของ main.py
- มีการกำหนดฟังก์ชันสำหรับงานและการเรียกกลับ (เช่น การเรียกกลับ MQTT) และเหตุการณ์ปกติ
- มีการตั้งค่างานจับเวลาที่แตกต่างกันสำหรับฟังก์ชันการทำงาน
- ลูกค้าโบรกเกอร์ MQTT ได้รับการจัดตั้งขึ้น
-
จากนั้นโค้ดจะเข้าสู่ลูปไมโครคอนโทรลเลอร์หลัก
- ตรวจสอบเครือข่ายและการเชื่อมต่อนายหน้า MQTT อย่างต่อเนื่อง
- สมัครสมาชิก MQTT
- ฮาร์ดแวร์ I/O
- และงานตามกำหนด
- เมื่อสูญเสียการเชื่อมต่อเครือข่ายหรือนายหน้า MQTT รหัสจะพยายามสร้างใหม่
ขั้นตอนที่ 5: การเตรียมรหัสโครงการของคุณ
ในขั้นตอนนี้ คุณจะ
- เรียนรู้เกี่ยวกับโครงสร้างไฟล์ที่เก็บ MiPy-ESP
- เตรียมรหัสโครงการของคุณสำหรับการอัปโหลดชิป
โครงสร้างโฟลเดอร์ที่เก็บรูปภาพด้านบนอธิบายโครงสร้างโฟลเดอร์ที่เก็บและแสดงรายการโมดูลปัจจุบันของกรอบงาน โปรเจ็กต์ของคุณเป็นสเตจในโฟลเดอร์ src/ โมดูลเฟรมเวิร์ก Core MiPy-ESP อยู่ใน src/core โมดูลยูทิลิตี้เสริมใน src/utilities และโมดูลฮาร์ดแวร์ใน src/drivers
ไลบรารีฮาร์ดแวร์ MicroPython ที่มีอยู่ส่วนใหญ่สามารถเข้าไปที่ไดรเวอร์/ โฟลเดอร์โดยไม่ต้องแก้ไขใดๆ ไดรเวอร์ปัจจุบันทั้งหมดได้รับการทดสอบด้วยกรอบงาน MiPy-ESP เกี่ยวกับโมดูลในยูทิลิตี้/ โฟลเดอร์ จะถูกเพิ่มเข้ามามากขึ้นเมื่อพวกมันมีชีวิต
การจัดเตรียมรหัสโปรเจ็กต์ รหัสเฉพาะโปรเจ็กต์ของคุณควรอยู่ในโฟลเดอร์ src/ แล้วมีไฟล์ main.py และ config.py ที่คุณสามารถแก้ไขได้ คัดลอกยูทิลิตีโปรเจ็กต์ที่ต้องการจาก src/utilities และ src/drivers ไปยัง src/
ในกรณีที่คุณต้องการจัดเตรียมเครือข่าย Wi-Fi และรหัสผ่านที่รู้จักให้กับชิป ให้เพิ่มไฟล์ wifi.json ไปที่ src/
การคอมไพล์และเตรียมการอัพโหลด Makefile ที่จัดเตรียมไว้ให้สามารถนำไปใช้ในการเตรียมไฟล์สำหรับการถ่ายโอนไปยังชิปโดยการรวบรวมไฟล์.py ใน /src รวบรวมโมดูลหลักและถ่ายโอนไฟล์ที่คอมไพล์ไปยังโฟลเดอร์ใหม่ชื่อ build/ โดยคำสั่ง
สร้าง
ไฟล์ในบิลด์พร้อมสำหรับการอัปโหลดไปยังระบบไฟล์ชิป โดยค่าเริ่มต้น main.py และ config.py จะไม่ถูกคอมไพล์เป็นไบนารี เพื่อให้เข้าถึงได้ง่ายสำหรับการตรวจสอบชิปที่ใช้งาน คำสั่ง:
ทำความสะอาด
ลบบิลด์/ โฟลเดอร์และเนื้อหา
ขั้นตอนที่ 6: รวบรวมและอัปโหลดรหัสไปยังไมโครคอนโทรลเลอร์
ในส่วนนี้คุณจะ
- อัปโหลดไฟล์ที่เตรียมไว้ใน build/ จากส่วนสุดท้าย
- เริ่มและตรวจสอบรหัสการทำงาน
การอัปโหลดบิลด์/ไฟล์ด้วย Rshell
อัปโหลดไฟล์ทั้งหมดในไดเร็กทอรี /build ไปยังชิป ESP โดยใช้ Rshell เมื่อไมโครคอนโทรลเลอร์เชื่อมต่อกับ USB จากบิลด์ / โฟลเดอร์ให้เริ่ม Rshell ด้วยคำสั่ง
rshell -p /dev/ttyUSB0
จากนั้นตรวจสอบไฟล์ชิป (ถ้ามี) โดย
ls /pyboard
ไฟล์ทั้งหมดบนชิปสามารถลบได้โดย
rm /pyboard/*.*
คัดลอกไฟล์โครงการทั้งหมดใน build/ ไปยังชิป:
cp *.* /pyboard
จากนั้นเริ่มเทอร์มินัล Python แบบโต้ตอบโดยใช้คำสั่ง
ตัวแทน
ตอนนี้คุณสามารถเรียกใช้คำสั่ง Python หรือนำเข้าโมดูล และตรวจสอบเอาต์พุตแบบอนุกรมของชิปจากโมดูลตัวบันทึก MiPy-ESP
รีสตาร์ทชิปโดยกดปุ่มรีเซ็ตหรือจากบรรทัดคำสั่งโดย
นำเข้าหลัก
หรือ
เครื่องนำเข้า
แล้วก็
เครื่อง.รีเซ็ต()
ขึ้นอยู่กับการตั้งค่าการบันทึก/แก้ไขจุดบกพร่องในไฟล์กำหนดค่าโครงการ ตอนนี้ repl จะแสดงข้อความการดีบักจากชิป ESP ผ่านการเชื่อมต่อแบบอนุกรม
หวังว่านี่จะช่วยให้คุณเริ่มต้นได้