Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Operate the GPIO port of BiBoard
ไม่มีพอร์ต GPIO แยกต่างหากบน BiBoard แต่พอร์ตซีเรียลแบบมัลติเพล็กซ์ 2 (พิน 16, 17) หรือพิน PWM ของอินเทอร์เฟซเซอร์โว PWM ที่ไม่ได้ใช้สามารถใช้เป็นพอร์ต GPIO ได้ พอร์ต GPIO นั้นค่อนข้างใช้งานง่าย หลังจากกำหนดค่าโหมดอินพุตและเอาต์พุตแล้ว การใช้งานจะเหมือนกับ Arduino UNO ทุกประการ คุณสามารถใช้โปรแกรมควบคุม IO ของ Arduino UNO อะไรก็ได้ เพียงแค่เปลี่ยนจำนวนของ IO
การใช้งาน EEPROM นั้นเหมือนกับ Arduino UNO มีสองการทำงาน: อ่านและเขียน
Read:
I2C address of EEPROM
The internal address of EEPROM (the address for storing data)
Read data
Write:
I2C address of EEPROM
The internal address of EEPROM (the address for storing data)
Write data
ในการสาธิต BiBoard ที่อยู่ของ EEPROM บนบัส I2C คือ 0x54 และความจุคือ 8192Bytes (64Kbit) เราเขียนค่าทั้งหมด 16 ค่าตามลำดับตั้งแต่ 0 ถึง 15 ใน EEPROM จากแอดเดรสแรก จากนั้นจึงอ่านเพื่อเปรียบเทียบ ในทางทฤษฎี ข้อมูลที่เขียนใน EEPROM และข้อมูลที่อ่านจากที่อยู่ที่เกี่ยวข้องควรเหมือนกัน
ในการทดสอบโรงงานของ NyBoard เราใช้วิธีนี้เช่นกัน แต่จะซับซ้อนกว่า เราจะใช้รายการคงที่เพื่อเติม EEPROM และอ่านเพื่อเปรียบเทียบ
หมายเหตุ: การดำเนินการ EEPROM โดยเฉพาะการดำเนินการเขียน โดยทั่วไปจะไม่ใส่ลงในลูป () แม้ว่า EEPROM จะทนทานต่อการลบ (100,000 ครั้ง) หากมีการเขียนบล็อคบางบล็อกในลูปบ่อยๆ จะทำให้ EEPROM ทำงานผิดปกติ
MPU6050 เป็นไจโรสโคป 6 แกนที่ใช้กันแพร่หลายมากที่สุด ซึ่งไม่เพียงวัดความเร็วเชิงมุม 3 แกนและการเร่งความเร็ว 3 แกนได้แม่นยำมากขึ้น แต่ยังใช้ตัวประมวลผลการเคลื่อนไหวแบบดิจิตอล (DMP) ในตัวสำหรับการคำนวณฟิวชั่นทัศนคติตามฮาร์ดแวร์ มือใหม่จึงใช้งานได้สะดวกมาก ด้วยเหตุนี้ เราจึงใช้ไจโรสโคป MPU6050
มีการสาธิต MPU6050 มากมายบน Arduino UNO ที่มีชื่อเสียงที่สุดคือไลบรารี I2Cdev และ MPU6050DMP ของ jrowberg:
ขออภัย ไลบรารีนี้ไม่สามารถเรียกใช้โดยตรงบน BiBoard ที่ใช้ ESP32 เราพบไลบรารีที่มีบน Github ซึ่งใช้งานง่าย ไลบรารีนี้เพิ่มคำจำกัดความของ PGMSpace สำหรับซีรีส์ ARM และ ESP เพิ่มฟังก์ชันการปรับเทียบ และลบฟังก์ชันการประมวลผลเกิน FIFO (เพื่อนๆ ที่สนใจสามารถใช้ Beyond Compare สำหรับการเปรียบเทียบโค้ดได้) ไลบรารีประกอบด้วย I2Cdev และ MPU6050 ที่อยู่และแพ็คเกจที่บีบอัดมีดังนี้:
หลังจากการดาวน์โหลดเสร็จสิ้น ให้สร้างโฟลเดอร์ MPU6050 ภายใต้ Documents/Arduino/library และคัดลอกไฟล์ไลบรารีในแพ็คเกจที่บีบอัดลงไป ไลบรารีของ MPU6050 ที่แก้ไขนี้ยังเข้ากันได้กับ ARM และ AVR ดังนั้นหากคุณมีไลบรารี I2Cdev และ MPU6050 ดั้งเดิมในคอมพิวเตอร์ของคุณ คุณสามารถลบออกได้
เราสามารถใช้การตัวอย่าง MPU6050_DMP6 อย่างเป็นทางการ
The usage of DAC
วัตถุประสงค์ของ DAC นั้นตรงกันข้ามกับของ ADC DAC แปลงสัญญาณดิจิทัลเป็นสัญญาณอะนาล็อกสำหรับเอาต์พุต
จำเพลงเมื่อเปิด NyBoard ได้ไหม กำลังใช้ PWM เพื่อสร้างเสียงเพลงซึ่งใช้การสลับความเร็วสูงเพื่อปรับรอบการทำงานเป็นแรงดันเอาต์พุต
เมื่อเปรียบเทียบกับ PWM แล้ว DAC จะส่งแรงดันออกโดยตรงโดยไม่ต้องคำนวณรอบการทำงาน ESP32 รวม DAC 8 บิต 2 แชนเนลที่มีค่า 0-255 ช่วงแรงดันไฟฟ้าคือ 0-3.3V ดังนั้นสูตรการคำนวณแรงดันเอาต์พุตของ DAC จึงเป็นดังนี้:
The demo is as follows:
โค้ดตัวอย่างส่วนใหญ่แสดงให้เห็นถึงการส่งต่อข้อมูลร่วมกันระหว่างพอร์ตอนุกรม Bluetooth และพอร์ตอนุกรม ซึ่งได้มาจากการตัวอย่าง อย่างเป็นทางการของ ESP32 ซึ่งเรียบง่ายและเข้าใจได้ง่าย คำอธิบายจึงอธิบายแนวคิดที่ปรากฏในโค้ดเป็นหลัก
ในปัจจุบัน โปรโตคอล Bluetooth หลักแบ่งออกเป็นสองประเภท ได้แก่ Bluetooth แบบดั้งเดิม (HS/BR/EDR) ตาม RFCOMM และ Bluetooth พลังงานต่ำ (BLE) ตาม GATT
Bluetooth แบบดั้งเดิมนั้นเร็วกว่าและมีโปรโตคอลแอปพลิเคชันเฉพาะมากมาย เช่น A2DP ที่เน้นเสียง, พอร์ตอนุกรม Bluetooth SPP เป็นต้น อย่างไรก็ตาม การใช้พลังงานสูง และการเข้าถึงอุปกรณ์ Apple ต้องใช้ชิป MFi (Made For iOS) และการรับรอง
Bluetooth Low Energy (BLE) สามารถกำหนดโปรไฟล์ GATT ต่างๆ ได้ด้วยตัวเอง และยังมีโปรไฟล์ที่ใช้กันทั่วไป (เช่น ข้อมูลอุปกรณ์ แบตเตอรี่ ฯลฯ) มีการใช้พลังงานต่ำและใช้กันอย่างแพร่หลาย สามารถใช้กับอุปกรณ์ Apple ข้อเสียคือช้ากว่าบลูทูธแบบเดิม บลูทูธพลังงานต่ำส่วนใหญ่จะใช้กับอุปกรณ์ที่มีปริมาณข้อมูลน้อยแต่ไวต่อการใช้พลังงาน เช่น สร้อยข้อมือ/นาฬิกาอัจฉริยะ/บีคอน
การสาธิตนี้ใช้โปรโตคอล SPP ตามบลูทูธแบบดั้งเดิม ซึ่งมาพร้อมกับโปรโตคอลพอร์ตอนุกรมทั้งหมด เมื่อคอมพิวเตอร์หรือโทรศัพท์ Android เชื่อมต่อและจับคู่ หมายเลขพอร์ตอนุกรมจะถูกสร้างขึ้นโดยอัตโนมัติในระบบสำหรับการสื่อสาร และประสบการณ์การใช้งานจะไม่แตกต่างจากพอร์ตอนุกรมแบบมีสายทั่วไปมากนัก
พอร์ตอนุกรมบลูทูธพลังงานต่ำจะแสดงให้เห็นในบทถัดไป โดยพื้นฐานแล้ว เป็นโปรไฟล์ที่กำหนดค่าด้วยพอร์ตอนุกรมและต้องการ การสนับสนุนของโฮสต์ซอฟต์แวร์
BiBoard ติดตั้งเซ็นเซอร์อินฟราเรดซึ่งเชื่อมต่อกับพินที่ 23 การใช้อินฟราเรดนั้นเหมือนกับที่ใช้ใน Arduino UNO ที่ใช้ AVR
ก่อนอื่นให้ดาวน์โหลดไลบรารี IRremote เวอร์ชัน 2.6.1 คุณต้องเลือกเวอร์ชัน 2.6.1 ด้วยตนเอง เนื่องจากโค้ดที่เกี่ยวข้องกับอินฟราเรดมีการเปลี่ยนแปลงในเวอร์ชันหลังๆ หากคุณใช้เวอร์ชัน 3.X คำสั่งจะไม่ถูกแปล เพื่อให้เข้ากันได้กับผลิตภัณฑ์ก่อนหน้าของเรา เราตัดสินใจใช้เวอร์ชัน 2.6.1 หลังจากการทดสอบ
เมื่อใช้ NyBoard เพื่อให้แน่ใจว่าสามารถคอมไพล์โค้ดได้อย่างราบรื่น เราจำเป็นต้องลบโค้ดที่ไม่จำเป็นในไลบรารี IRremote นั่นคือ ลบตัวเข้ารหัส/ตัวถอดรหัสที่เราไม่ได้ใช้ และเก็บเฉพาะ NEC_DECODER ซึ่งก็คือ ตัวถอดรหัสสัญญาณ 38KHz ในรูปแบบ NEC
เนื่องจากความจุของหน่วยความจำแฟลชของ BiBoard นั้น “มหาศาล” เราจึงไม่จำเป็นต้องลบโค้ดที่ไม่จำเป็นในไลบรารี IRremote
สุดท้ายมีการแนบตัวอย่างซึ่งรับสัญญาณอินฟราเรดและพิมพ์ผ่านพอร์ตซีเรียล คุณยังสามารถใช้การตัวอย่าง อย่างเป็นทางการสำหรับการทดสอบ
Application of ADC which is variable gain on BiBoard (ESP32)
คำสั่งแนะนำของ ADC บน BiBoard
พิน 34, 35, 36 และ 39 ของโมดูล ESP32 รองรับอินพุตเท่านั้น เรากำหนดค่าให้เป็นพอร์ตอินพุตแบบอะนาล็อกบน BiBoard ซึ่งทำให้สะดวกสำหรับนักพัฒนาในการเชื่อมต่อเซ็นเซอร์เท้า 4 ตัว
การใช้งานตัวแปลงสัญญาณอนาล็อกเป็นดิจิตอล (ADC) บน BiBoard นั้นเหมือนกับ Arduino UNO พื้นฐาน แต่ความแม่นยำนั้นสูงกว่า (12 บิต UNO คือ 10 บิต) และมีการเพิ่มตัวขยายสัญญาณที่ตั้งโปรแกรมได้เพื่อให้ ADC ทำงานในช่วงที่ดีที่สุด
เมื่อป้อนสัญญาณแรงดันไฟฟ้า 1V หากใช้การเข้าถึง 12 บิตตามการกำหนดค่าปกติ แรงดันอ้างอิงจะเท่ากับแรงดันแหล่งจ่ายไฟ (3.3V): เอาต์พุตที่สอดคล้องกันคือ 0~1241 ส่วนใหญ่ของช่วง ADC จะเสียเปล่า ทำให้ได้ข้อมูลที่ไม่ถูกต้อง เมื่อเรากำหนดค่าอัตราขยายที่ตั้งโปรแกรมได้ เราสามารถทำให้สัญญาณอินพุต 1V เติมเต็มช่วง ADC เกือบทั้งหมด และความแม่นยำและความละเอียดจะดีขึ้นอย่างมาก
การสาธิตนี้ใช้ 4 อินพุต กำหนดค่าตามลำดับเป็น: อัตราขยายเดซิเบล 0/2.5/6/11 ควรสังเกตว่าการกำหนดค่าเริ่มต้นของ ESP32 Arduino คืออัตราขยาย 11 เดซิเบล
เราใช้ "analogSetPinAttenuation(PIN_NAME, attenuation)" เพื่อกำหนดค่าอัตราขยายของพินอินพุตเดี่ยว หรือใช้ "analogSetAttenuation(attenuation)" เพื่อกำหนดค่าอัตราขยายของพินอินพุตแบบอะนาล็อกทั้งหมด
ในการทดสอบจริง เมื่อป้อนแรงดันไฟฟ้ามาตรฐาน 1V ค่า ADC จะเป็น: 3850/2890/2025/1050 ในการผลิตในอนาคต ช่วง ADC สามารถเปลี่ยนแปลงได้โดยการเปลี่ยนอัตราขยายของ ADC โดยไม่ต้องเปลี่ยนแหล่งจ่ายแรงดันอ้างอิง
มีพอร์ตซีเรียล 2 พอร์ตซึ่งแยกจากกันบนช่องส่วนขยาย 2 ช่อง (P16, P17) บน BiBoard
พอร์ตซีเรียล 1 บน P16 สามารถเชื่อมต่อกับตัวดาวน์โหลด USB และอุปกรณ์ซีเรียลภายนอกได้ โปรดอย่าใช้ตัวดาวน์โหลดและอุปกรณ์ซีเรียลภายนอกพร้อมกัน การแบ่งแรงดันพอร์ตซีเรียลจะนำไปสู่ข้อผิดพลาดในการสื่อสาร
ในการสาธิต Arduino นั้น Serial แทนพอร์ตซีเรียล 0 Serial1 แทนพอร์ตซีเรียล 1 Serial และ Serial1 นั้นส่งถึงกัน
ESP32 File System SPIFFS Configuration Guide
บน BiBoard (ESP32) นอกเหนือจากพื้นที่โปรแกรมปกติและพื้นที่บูตแล้ว เราใช้ระบบไฟล์ในพาร์ติชัน Flash
บทบาทของระบบไฟล์ที่มีพาร์ติชันอิสระมีดังนี้:
บันทึกข้อมูลตามที่อยู่ที่ระบุ และจะไม่ถูกลบเนื่องจากการอัปเดตซ้ำ (เช่น ข้อมูลการคาลิเบต ข้อมูลการเดิน
ไม่จำเป็นต้องใช้การ์ด SD ภายนอก ช่วยประหยัดทรัพยากรฮาร์ดแวร์
ระบบไฟล์ทั่วไป ได้แก่ Windows NTFS, exFAT และระบบไฟล์บันทึกของ Linux Ext และ XFS แต่ในเขตข้อมูลที่ฝังตัว ระบบไฟล์ขนาดใหญ่เหล่านี้มีขนาดใหญ่เกินไป เราใช้ SPIFFS (ระบบไฟล์แฟลช SPI) ที่มีน้ำหนักเบา ซึ่งเป็นระบบไฟล์แบบฝังสำหรับอุปกรณ์แฟลช SPI NOR และฟังก์ชันสนับสนุน เช่น การปรับระดับการสึกหรอและการตรวจสอบความสอดคล้องกันของระบบไฟล์
เนื่องจากน้ำหนักเบา คุณลักษณะที่ใหญ่ที่สุดของ SPIFFS คือไม่รองรับไดเร็กทอรีแบบต้นไม้ กล่าวคือ ไฟล์ทั้งหมดจะถูกจัดเก็บไว้ในเลเยอร์เดียวกัน SPIFFS ที่ให้บริการโดย ESP32 มีคุณสมบัติดังต่อไปนี้:
ปัจจุบัน SPIFFS ไม่รองรับไดเร็กทอรี แต่สร้างโครงสร้างแบบเรียบ หาก SPIFFS ติดตั้งอยู่ใต้ /spiffs การสร้างไฟล์ด้วยเส้นทาง /spiffs/tmp/myfile.txt จะสร้างไฟล์ชื่อ /tmp/myfile.txt ใน SPIFFS แทนที่จะเป็น myfile.txt ในไดเร็กทอรี /spiffs/tmp
ไม่ใช่สแต็คแบบเรียลไทม์ การดำเนินการเขียนรายการหนึ่งอาจใช้เวลานานกว่าการดำเนินการอื่นมาก
สำหรับตอนนี้ มันไม่ได้ตรวจหาหรือจัดการกับบล็อกที่ไม่ดี
คุณสามารถสร้าง/บันทึกและลบไฟล์ด้วยโค้ด Arduino ของคุณเอง แต่การดำเนินการนั้นยุ่งยาก คุณต้องใส่ข้อมูลหรือไฟล์ไบนารีลงใน Arduino Sketch และสร้างไฟล์โดยเรียกใช้โปรแกรม
อย่างไรก็ตาม มีเครื่องมือที่มีประโยชน์มากที่สามารถอัปโหลดไฟล์จากคอมพิวเตอร์ไปยังระบบไฟล์ได้โดยตรง แม้ว่าจะยุ่งยากกว่าการ "ลากและวาง" สำเนาของ "ที่เก็บข้อมูลแบบถอดได้" เล็กน้อย ไม่ว่าจะเป็นไฟล์เสียง MP3 หรือไฟล์เว็บ HTML ทั้งหมดก็สามารถอัปโหลดไปยังหน่วยความจำแฟลชได้อย่างง่ายดาย มาเรียนรู้วิธีใช้ปลั๊กอินนี้กัน
โปรดติดตั้ง Arduino IDE (เวอร์ชัน: 1.8.* ) และชุดสนับสนุน ESP32 ของ Arduino IDE (โปรดดูบทที่ 3.2.1 ของคู่มือการเริ่มต้นฉบับย่อของ BiBoard)
ดาวน์โหลดแพ็คเกจบีบอัดของปลั๊กอิน ESP32FS ได้ที่:
ไปที่ไดเรกทอรี "Arduino" และเปิดโฟลเดอร์ "tools"
C:\Users\{YourUserName}\Documents\Arduino\tools
คลายซิปโฟลเดอร์ .zip ที่ดาวน์โหลดมาไปยังโฟลเดอร์ Tools คุณควรมีโครงสร้างโฟลเดอร์ที่คล้ายกัน:
C:\Users\{YourUserName}\Documents\Arduino\tools\ESP32FS\tool\esp32fs.jar
สุดท้ายให้รีสตาร์ท Arduino IDE
หากต้องการตรวจสอบว่าติดตั้งปลั๊กอินสำเร็จหรือไม่ ให้เปิด Arduino IDE เลือกบอร์ดพัฒนา ESP32 ของคุณ (ESP32 Dev Module) ไปที่ "Tools" จากนั้นตรวจสอบว่ามีตัวเลือก "ESP32 Sketch Data Upload" หรือไม่
หากต้องการอัปโหลดไฟล์ไปยังระบบไฟล์ ESP32 ให้ทำตามขั้นตอนด้านล่าง:
สร้างโครงการ Arduino (เช่น Test.ino) และบันทึก
หากต้องการเปิดไดเร็กทอรีโครงการ คุณสามารถใช้ตัวเลือก "Sketch - Show Sketch Folder"
ภายในโฟลเดอร์นี้ ให้สร้างโฟลเดอร์ใหม่ชื่อ "data"
ในโฟลเดอร์ "data" คุณควรใส่ไฟล์ที่คุณต้องการบันทึกลงในระบบไฟล์ SPIFFS เช่น สร้างไฟล์ .txt ที่มีข้อความชื่อ "test_example" ดังต่อไปนี้:
โปรดคลิก "Tools - ESP32 Sketch Data Upload" ใน Arduino IDE
เมื่อคุณเห็นข้อความแจ้ง "SPIFFS Image Uploaded" แสดงว่าไฟล์ได้รับการอัปโหลดไปยังพาร์ติชัน SPIFFS เรียบร้อยแล้ว
วอย่างของระบบไฟล์ SPIFFS_Test.ino(C:\Users\{YourUserName}\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.*\libraries\SPIFFS\examples\SPIFFS_Test
))มาจาก ESP32 อย่างเป็นทางการ โดยไม่ต้องดัดแปลง โค้ดนี้ใช้การดำเนินการพื้นฐานของ "การเพิ่ม การลบ การแก้ไข และการตรวจสอบ" และจัดเตรียมโปรแกรมทดสอบ SPI flash IO
หากจำเป็น ขอแนะนำให้ใช้โค้ดของตัวอย่างโดยตรงเพื่อใช้งาน ESP32 SPIFFS
ESP32 ที่ใช้โดย BiBoard นั้นแตกต่างจาก 328P ที่ใช้โดย UNO เนื่องจาก PWM ของ ESP32 ใช้เมทริกซ์บัส จึงสามารถใช้กับพินที่ไม่ได้ระบุได้
PWM ของ ESP32 เรียกว่าตัวควบคุม LED (LEDC) ตัวควบคุม LED PWM ส่วนใหญ่จะใช้เพื่อควบคุม LED และยังสามารถสร้างสัญญาณ PWM สำหรับการควบคุมอุปกรณ์อื่นๆ ตัวควบคุมมีตัวจับเวลา 8 ตัว ซึ่งสอดคล้องกับช่องความเร็วสูง 8 ช่อง และช่องความเร็วต่ำ 8 ช่อง รวมเป็น 16 ช่อง
เมื่อเปรียบเทียบกับ UNO ให้ใช้ "analogWrite()" โดยตรงเพื่อป้อนอัตราส่วนทำงานระหว่าง 0-255 การควบคุม PWM ของ ESP32 บน BiBoard นั้นยุ่งยากกว่า พารามิเตอร์ที่ต้องควบคุมมีดังนี้:
การเลือกช่อง PWM ด้วยตนเอง (0-15) ยังช่วยเพิ่มความยืดหยุ่นในการใช้พิน
จำนวนบิตของรูปคลื่น PWM จะกำหนดความละเอียดของรอบการทำงานของรูปคลื่น PWM จำนวนบิตยิ่งมาก ความแม่นยำยิ่งสูง
ความถี่ของรูปคลื่น PWM จะกำหนดความเร็วของรูปคลื่น PWM ยิ่งความถี่สูง ความเร็วยิ่งเร็วขึ้น
ความถี่ของรูปคลื่น PWM และจำนวนบิตนั้นสัมพันธ์กัน ยิ่งจำนวนบิตมาก ความถี่ยิ่งต่ำ ตัวอย่างต่อไปนี้ยกมาจากคู่มือการเขียนโปรแกรม ESP32:
ตัวอย่างเช่น เมื่อความถี่ PWM คือ 5 kHz ความละเอียดรอบการทำงานสูงสุดจะเป็น 13 บิต ซึ่งหมายความว่ารอบการทำงานสามารถเป็นค่าใดก็ได้ระหว่าง 0 ถึง 100% โดยมีความละเอียด ~0.012% (2 ** 13 = 8192 ระดับความสว่าง LED แบบแยกส่วน)
สามารถใช้ตัวควบคุม LED PWM เพื่อสร้างสัญญาณความถี่สูง ซึ่งเพียงพอที่จะส่งสัญญาณนาฬิกาไปยังอุปกรณ์อื่นๆ เช่น โมดูลกล้องดิจิทัล ที่นี่ความถี่สูงสุดสามารถเป็น 40 MHz และความละเอียดรอบการทำงานคือ 1 บิต กล่าวอีกนัยหนึ่ง รอบการทำงานจะคงที่ที่ 50% และไม่สามารถปรับเปลี่ยนได้
API คอนโทรลเลอร์ LED PWM สามารถรายงานข้อผิดพลาดเมื่อความถี่ที่ตั้งไว้และความละเอียดรอบการทำงานเกินช่วงฮาร์ดแวร์ของคอนโทรลเลอร์ LED PWM ตัวอย่างเช่น หากคุณพยายามตั้งค่าความถี่เป็น 20 MHz และความละเอียดรอบการทำงานเป็น 3 บิต ข้อผิดพลาดจะถูกรายงานบนจอภาพพอร์ตซีเรียล
ดังที่แสดงไว้ด้านบน เราจำเป็นต้องกำหนดค่าช่องสัญญาณ ความถี่ และจำนวนบิต และเลือกพินเอาต์พุต
ขั้นตอนที่ 1: กำหนดค่าตัวควบคุม PWM
ขั้นตอนที่ 2: กำหนดค่าพินเอาต์พุต PWM
ขั้นตอนที่ 3: เอาต์พุตรูปคลื่น PWM
ในการสาธิต เราเลือก IO2 เป็นพินเอาต์พุต เชื่อมต่อ IO2 เข้ากับ LED และคุณสามารถสังเกตเอฟเฟกต์ของไฟ LED กระพริบช้าๆได้
มีตัวอย่างชื่อ testMP3 ในไดเร็กทอรีไฟล์ "OpenCatEsp32/ModuleTests" หน้าที่หลักของตัวอย่างนี้คือการเล่นไฟล์ .mp3 ที่จัดเก็บไว้ในระบบไฟล์ SPIFFS ผู้ใช้สามารถเลือกเล่นไฟล์ .mp3 ต่างๆ ได้โดยการป้อนตัวเลข 0~6 (หมายเลขดัชนีไฟล์ .mp3) ในจอภาพอนุกรม
ก่อนคอมไพล์ตัวอย่าง download, install and configure the software environment (Arduino IDE 1.8.*, development board esp32 2.0.*, library ESP8266Audio 1.9.7, partition configuration BiBoard V0).
หลังจากคอมไพล์แล้ว ให้ใช้ปลั๊กอินอัปโหลดไฟล์ SPIFFS ล่าสุดเพื่ออัปโหลดไฟล์ .mp3 ไปยังพาร์ติชันระบบไฟล์ SPIFFS ของ BiBoard สำหรับรายละเอียด โปรดดูบทที่ File System SPIFFS.
หมายเหตุ:
Arduino IDE 2.0 ไม่สามารถเพิ่มตัวเลือกการกำหนดค่า large_spiffs_16MB (4.5MB APP with OTA/6.93MB SPIFFS) ได้ในขณะนี้
ปลั๊กอินอัปโหลดไฟล์ SPIFFS file upload plugin ใน Arduino IDE 1.8.* เขียนด้วยภาษาจาวา และ Arduino IDE 2.0 เขียนด้วยภาษาอื่น (TypeScript + Golang) ดังนั้นปลั๊กอินอัปโหลดก่อนหน้านี้จึงไม่สามารถใช้ใน Arduino IDE 2.0 ได้ ขณะนี้ยังไม่รองรับปลั๊กอินอัปโหลดไฟล์ Arduino IDE 2.0 SPIFFS
ดังนั้นขอแนะนำให้คุณติดตั้งและใช้ Arduino IDE 1.8.* IDE ชั่วคราวเพื่ออัปโหลดไฟล์ร่างและ .mp3
แน่นอน คุณยังสามารถใช้ VS Code + PlatformIO เพื่ออัปโหลดไฟล์ร่างและ .mp3 สำหรับรายละเอียด โปรดดูเอกสารต่อไปนี้:
ESP32 with VS Code and PlatformIO: Upload Files to Filesystem (SPIFFS)
ก่อนอัปโหลดไฟล์ร่างและ .mp3 โปรดย้ายโฟลเดอร์ "data" ไปยังไดเร็กทอรีรูท(root)ของโปรเจ็กต์ จัดเก็บไฟล์โค้ดในไดเร็กทอรี "src" และกำหนดค่าตัวเลือกพาร์ติชัน "board_build.partitions" ใน platformio.ini ใน ไดเร็กทอรีรูทของโปรเจ็กต์ดังแสดงในรูปต่อไปนี้:
หน่วยความจำแฟลชของบอร์ด ESP32 มี 16M และช่วงของที่อยู่จัดเก็บที่แสดงเป็นเลขฐานสิบหกคือ: 0x0-0x01000000
นี่คือตารางพาร์ติชันที่ระบบกำหนดค่าไว้ ดังแสดงในรูปด้านล่าง:
ตำแหน่งที่เก็บไฟล์ตารางพาร์ติชันนี้บนคอมพิวเตอร์:
C:\Users\{YourUserName}\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.*\tools\partitions\large_spiffs_16MB.csv
สามารถเห็นได้จากตารางพาร์ติชันด้านบน: พื้นที่ APP0 และพื้นที่ APP1 มีพื้นที่ 4.5M พื้นที่ข้อมูลคือ SPIFFS ขนาด 6.9M
แต่ใน Arduino IDE การกำหนดค่านี้ไม่รวมอยู่ในตัวเลือกการกำหนดค่าพาร์ติชันฮาร์ดแวร์ของโมดูล ESP32 Dev:
เราจำเป็นต้องเพิ่มการกำหนดค่านี้ในโมดูล ESP32 Dev
เปิดไฟล์การกำหนดค่าบอร์ดพัฒนา:
C:\Users\{YourUserName}\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.*\boards.txt
ค้นหาชื่อของบอร์ดพัฒนา: esp32.name=ESP32 Dev Module ดังแสดงในรูปด้านล่าง:
บรรทัดข้อความในการกำหนดค่าพาร์ติชัน ESP32 Dev Module ในไฟล์กำหนดค่า:
เพิ่มข้อความ 3 บรรทัดต่อไปนี้ใต้บรรทัดนี้:
ต่อไปนี้จะอธิบายความหมายของข้อความสามบรรทัด:
ชื่อของการกำหนดค่าพาร์ติชัน ESP32 เราตั้งชื่อว่า BiBoard V0 (4.5M APP พร้อม OTA /6.9 MB SPIFFS) หรือสามารถแทนที่ด้วยชื่ออื่นที่คุณคุ้นเคย
ข้อมูลไฟล์การกำหนดค่าพาร์ติชัน นคือไฟล์ large_spiffs_16MB.csv คุณยังสามารถเขียนไฟล์พาร์ติชั่นเพื่อปรับขนาดไฟล์ของแอพและพื้นที่ข้อมูล
ข้อความบรรทัดนี้ระบุว่าขนาดโปรแกรมอัปโหลดสูงสุดคือ 4685824 ไบต์
ลองรวบรวมโปรแกรมอย่างง่ายเพื่อทดสอบว่าการตั้งค่าข้างต้นสำเร็จหรือไม่
เปิด Arduino IDE อีกครั้ง เราจะเห็นว่า BiBoard เพิ่งกำหนดค่า:
หลังจากคอมไพล์โปรแกรมแล้วจะได้ผลลัพธ์ดังรูปด้านล่าง
การคอมไพล์เสร็จสมบูรณ์ โดยใช้ Flash ขนาด 213KB (4%) และขนาดสูงสุดที่ใช้งานได้คือ 4,685,824 ไบต์
ในข้อนี้ “4685824 ไบต์” ถูกระบุในบรรทัดที่สามของข้อความที่เพิ่งเพิ่มไปยังไฟล์กำหนดค่า
ถึงตอนนี้ คุณได้ทำการกำหนดค่าบอร์ดพัฒนาที่มีพื้นที่หน่วยความจำแฟลชที่ใหญ่ที่สุดใน Arduino IDE เรียบร้อยแล้ว
The Arduino demo of ESP32 provides the function of OTA (updating/uploading a new program to ESP32 using Wi-Fi)
การกำหนดค่าของ BiBoard ของเราคือ 16MB Flash และพาร์ติชันเฉพาะมีดังนี้:
OTA ดำเนินการพื้นที่ข้อมูล OTA เป็นหลัก ได้แก่ พื้นที่ APP1 และ APP2 หลักการคือ:
BiBoard เรียกใช้เฟิร์มแวร์ด้วยฟังก์ชัน OTA ในขณะนี้ การบูตชี้ไปที่พื้นที่ APP1
คำสั่ง OTA ถูกส่งไปยัง ESP32 ผ่าน Wi-Fi และไฟล์ไบนารีของโปรแกรมอัปเกรดจะถูกถ่ายโอนไปยังพื้นที่ APP2
หากการส่ง APP2 เสร็จสิ้นและการตรวจสอบยืนยันสำเร็จ ข้อมูล OTA จะชี้ไปที่พื้นที่ APP2 และครั้งต่อไปที่เริ่มต้นจากพื้นที่เฟิร์มแวร์ที่อัปเดตแล้ว (APP2) ข้อมูล APP1 จะถูกเก็บไว้ ครั้งต่อไป OTA จะเขียนไปยังพื้นที่ APP1 เพื่อเขียนทับเฟิร์มแวร์เก่า
หากการส่ง APP2 ไม่เสร็จสมบูรณ์เนื่องจากข้อผิดพลาดในการส่งเครือข่าย เนื่องจาก APP2 ไม่ผ่านการตรวจสอบ ข้อมูล OTA จะไม่ชี้ไปที่พื้นที่ APP2 โปรแกรมในพื้นที่ APP1 จะยังคงทำงานหลังจากเริ่มต้นการรีเซ็ต และพื้นที่ APP2 ที่เสียหายจะถูกลบและเขียนทับอย่างสมบูรณ์ระหว่าง OTA ถัดไป
ในการสาธิต ก่อนอื่นให้กำหนดค่า WiFi และกำหนดค่าโหมด WiFi เป็น STA (สถานี โหมดสถานีฐาน) เปิดใช้งานฟังก์ชัน WiFi และป้อนรหัสผ่านบัญชี "WiFi.begin(ssid, password);"
เมื่อเชื่อมต่อ Wi-Fi สำเร็จ ที่อยู่ IP จะถูกพิมพ์ผ่านพอร์ตอนุกรม หากการเชื่อมต่อผิดพลาด ESP32 จะรีสตาร์ท
ในการสาธิต คุณสามารถกำหนดค่าหมายเลขพอร์ต คีย์ OTA หรือแฮชของคีย์ และพื้นที่และประเภทของ OTA (ระบุโดยค่าเริ่มต้น)
ต่อไปนี้เป็นข้อมูลโค้ดบางส่วนที่คล้ายกับฟังก์ชันการโทรกลับ ซึ่งใช้ในการตัดสินสถานะของแต่ละขั้นตอนของ OTA
หลังจากกำหนดค่าตามการสาธิต ให้เรียก "ArduinoOTA.handle();" ในฟังก์ชันลูป ฟังก์ชัน analogWrite ต่อไปนี้ใช้เพื่อแยกแยะผลกระทบของการอัพเดตเฟิร์มแวร์ต่างๆ (โดยการเปลี่ยนค่า)
ครั้งแรกที่คุณใช้พอร์ตอนุกรมเพื่อดาวน์โหลด เครื่องมือไพธอน "esptool" จะถูกเรียก คุณสามารถใช้ OTA ได้หลังจากการดาวน์โหลดเสร็จสิ้น ในตัวเลือกพอร์ต คุณจะพบพอร์ตพิเศษตามที่อยู่ IP ซึ่งเป็นที่อยู่ OTA
เลือกที่อยู่นี้ มุมขวาล่างคือที่อยู่ IP ของ ESP32 Dev Module บน BiBoard ของคุณ (192.168.1.178)
ในเวลาเดียวกัน คำเตือนจะปรากฏขึ้น: "ไม่รองรับการมอนิเตอร์แบบอนุกรมบนพอร์ตเครือข่าย เช่น 192.168.1.178 สำหรับโมดูล ESP32 Dev ในล่าสุดนี้"
ESP32 OTA ของ Arduino เหมาะสำหรับการอัปเดตโปรแกรมเท่านั้น และไม่สามารถทำงานดีบักพอร์ตอนุกรมได้ หากคุณต้องการดีบัก BiBoard โปรดเชื่อมต่ออินเทอร์เฟซ USB-C
ดาวน์โหลดโปรแกรม ดังรูป
พอร์ตอนุกรม Bluetooth Low Energy (BLE, Bluetooth Low Energy) ใช้กันอย่างแพร่หลาย บนแพลตฟอร์ม iOS ของ Apple Classic Bluetooth ต้องมีใบรับรอง MFi เพื่อเชื่อมต่อกับอุปกรณ์ iOS ของ Apple อุปกรณ์บลูทูธพลังงานต่ำไม่มีข้อจำกัดนี้
โปรโตคอลสแต็คและหลักการของบลูทูธพลังงานต่ำจะไม่ถูกทำซ้ำที่นี่ มีบทความและวิดีโอที่เกี่ยวข้องมากมาย กล่าวโดยย่อ บริการบลูทูธมีให้ในรูปแบบของโปรไฟล์ และมีอักขระ N ตัวที่มี ID อิสระ (UUID) อยู่ใต้โปรไฟล์ของแต่ละบริการ อักขระแต่ละตัวมีสิทธิ์ต่างกัน (อ่าน เขียน แจ้ง ระบุ) หลังจากที่ผู้ใช้กำหนดอักขระและรวมเข้ากับสิทธิ์แล้ว ก็สามารถให้บริการที่สมบูรณ์ได้
BLE pass-through คืออะไร คือเพื่อสร้างบริการ BLE และมีอักขระ 2 ตัวอยู่ใต้โปรไฟล์นี้
หนึ่งอันสำหรับ TX (ส่งข้อมูล) และอีกอันสำหรับ RX (รับข้อมูล) สำหรับสิ่งนี้พวกเขามีสิทธิ์ต่างกัน รหัสต่อไปนี้คือการสร้างบริการและอักขระใหม่:
ถัดไปคือฟังก์ชันการเรียกกลับสองฟังก์ชัน ซึ่งจะดำเนินการเมื่อมีการเชื่อมต่อและเมื่อมีการเขียนอักขระ RX:
สุดท้าย ลูปหลักคือตัวควบคุมการเชื่อมต่อ ซึ่งจะกำหนดว่ามีการเชื่อมต่อหรือไม่และขาดการเชื่อมต่อหรือไม่
สำหรับโค้ดที่สมบูรณ์ ดูตัวอย่างไลบรารีอย่างเป็นทางการ: ble_uart และเครื่องมือดีบั๊กสามารถใช้ LightBlue ได้