นักพัฒนาต้องการ! เรากำลังค้นหาผู้พัฒนา React ที่มีความสามารถและนักพัฒนา C ++ เพื่อช่วยในโครงการนี้ ตรวจสอบรหัสและหากคุณสนใจติดต่อ [email protected]

Davepl, 9/19/2021
NightDriversTrip เป็นแพ็คเกจซอร์สโค้ดสำหรับการสร้างโปรแกรมแฟลชที่คุณอัปโหลดไปยังไมโครคอนโทรลเลอร์ ESP32 มันสามารถขับได้สูงสุด 8 ช่องของ LED สไตล์ WS2812B ที่เชื่อมต่อกับหมุดชิปและแสดงสีสันและรูปแบบและรูปแบบและการออกแบบบนพวกเขา มีเอฟเฟกต์มากมายในตัวที่สามารถกำหนดค่าให้แสดงบนแถบ LED รวมถึงเอฟเฟกต์เสียง/เพลง/จังหวะการตอบโต้สำหรับโมดูลที่มีไมโครโฟน นอกจากนี้ยังสามารถเลือกข้อมูลสีสำหรับไฟ LED ในรูปแบบ LZ-bompressed (หรือไม่บีบอัด) แบบง่าย ๆ ผ่านซ็อกเก็ต TCP/IP ที่เปิดโดยค่าเริ่มต้นบนพอร์ต 49152 ESP32 ช่วยให้นาฬิกาซิงค์โดยใช้ NTP
Nightdriver สามารถขับเคลื่อนทั้งแถบสไตล์ WS2812B และเมทริกซ์สไตล์ฮับ 75
เมื่อไม่นานมานี้มีการเพิ่มผู้ติดตั้งเว็บลงในโครงการซึ่งโครงการ Nightdriver ส่วนใหญ่สามารถฉายบนอุปกรณ์ที่รองรับโดยใช้อะไรนอกจากเว็บเบราว์เซอร์ โปรดดูส่วนถัดไปหากนี่คือวิธีที่คุณต้องการเริ่มต้น
มีการใช้งานเว็บแอปพลิเคชันที่สามารถใช้ในการติดตั้งโครงการ Nightdriver ส่วนใหญ่บนอุปกรณ์ที่รองรับ สิ่งนี้จะช่วยให้คุณแฟลชโครงการบนอุปกรณ์ ESP32 ของคุณได้อย่างรวดเร็วให้เชื่อมต่อกับ WiFi และเริ่มใช้งานโดยไม่ต้องทำงานกับซอร์สโค้ดทันที
โปรดทราบว่าตัวติดตั้งต้องใช้เบราว์เซอร์ที่รองรับ Web Serial ในช่วงเวลาของการเขียนเบราว์เซอร์ที่มีการสนับสนุนดังกล่าวเป็นเวอร์ชันล่าสุดของ Chrome, Edge และ Opera
โปรดทำตามขั้นตอนเหล่านี้เพื่อแฟลชและหากรองรับตั้งค่า wifi บนอุปกรณ์ของคุณ:
เชื่อมต่ออุปกรณ์ของคุณเข้ากับคอมพิวเตอร์ด้วยสายเคเบิล USB
นำทางไปยัง URL ต่อไปนี้ในเบราว์เซอร์ของคุณ: https://plummerssoftwarellc.github.io/nightdriverstrip ควรแสดงหน้าจอที่มีลักษณะเช่นนี้: 
เลือกอุปกรณ์ของคุณ (เช่น "M5Stickc Plus") จากรายการดรอปดาวน์ แบบเลื่อนลงครั้งที่สองพร้อมโครงการที่รองรับบนอุปกรณ์นั้นจะปรากฏขึ้น
เลือกโครงการที่คุณต้องการแฟลชในแบบเลื่อนลงครั้งที่สอง เมื่อคุณทำปุ่มเชื่อมต่อจะปรากฏอยู่ด้านล่าง โปรดทราบว่าฉลากของแต่ละโครงการมีตัวบ่งชี้คุณสมบัติสำคัญที่เปิดใช้งานในการสร้างที่เป็นปัญหา ตำนานสำหรับตัวอักษรคุณลักษณะแต่ละตัวจะแสดงอยู่ด้านล่างของโครงการแบบเลื่อนลง
คลิกปุ่มเชื่อมต่อ กล่องโต้ตอบจะขอให้คุณเลือกพอร์ตอนุกรม ขึ้นอยู่กับระบบของคุณอาจแสดงเพียงหนึ่งหรือรายการของพวกเขา ในกรณีที่มีหลายรายการจะแสดงโดยทั่วไปจะเป็นหนึ่งเดียวที่เรียกว่า "พอร์ตอนุกรม USB (Comn)" เลือกพอร์ตที่ถูกต้องแล้วคลิกเชื่อมต่อ
กล่องโต้ตอบใหม่จะแสดง หนึ่งในตัวเลือกที่มีให้คือ "ติดตั้ง <project> สำหรับ <vEvise>" คลิกตัวเลือกนั้น
กล่องโต้ตอบจะแสดงการถามคุณว่าคุณต้องการลบอุปกรณ์หรือไม่ ทำเครื่องหมายในช่องถ้านี่เป็นครั้งแรกที่คุณแฟลช NightdriversTrip ไปยังอุปกรณ์ของคุณหรือคุณต้องการแฟลชการติดตั้งที่สะอาด สิ่งนี้จะรีเซ็ตการตั้งค่าทั้งหมดเป็นค่าเริ่มต้น โปรดทราบว่าการกำหนดค่า WiFi จะถูกล้างไม่ว่าคุณจะเลือกที่จะลบหรือไม่ คลิกถัดไป
ตอนนี้คุณจะถูกขอให้ยืนยันว่าคุณต้องการแฟลชอุปกรณ์ คลิกติดตั้ง
กล่องโต้ตอบจะปรากฏขึ้นเพื่อแสดงความคืบหน้าของการติดตั้ง โดยปกติจะใช้เวลาประมาณ 2 นาที เมื่อกะพริบเสร็จสมบูรณ์ให้คลิกถัดไป
ณ จุดนี้สี่สิ่งสามารถเกิดขึ้นได้:
หากอุปกรณ์ของคุณไม่รองรับ wifi คุณสามารถข้ามไปยังจุดที่ 12
ในกล่องโต้ตอบข้อมูลการเชื่อมต่อ WiFi เลือกหรือป้อน SSID และรหัสผ่านของคุณ คลิกเชื่อมต่อ ในบางกรณีกล่องโต้ตอบการเชื่อมต่อ WiFi จะปรากฏขึ้นอีกครั้งหลังจากการเชื่อมต่อที่ประสบความสำเร็จเกิดขึ้นจริง ในกรณีนั้นคลิกข้าม นอกจากนี้ยังเป็นไปได้ว่ามีการรายงานการหมดเวลาในขณะที่ WiFi เชื่อมต่อสำเร็จ ในกรณีนั้นคลิกกลับ
ตอนนี้กล่องโต้ตอบจะปรากฏขึ้นซึ่งจะแสดงรายละเอียดของโครงการที่คุณแฟลช นอกจากนี้ยังจะมีตัวเลือกในการแฟลชอีกครั้งและแสดงบันทึกและคอนโซลของอุปกรณ์ นอกจากนี้หากอุปกรณ์ของคุณรองรับ WiFi ตัวเลือกจะพร้อมใช้งานเพื่อเยี่ยมชมเว็บแอปพลิเคชันของอุปกรณ์ (หากเปิดใช้งานเว็บเซิร์ฟเวอร์บนอุปกรณ์ยังเปิดใช้งาน) หรือเปลี่ยนการตั้งค่า WiFi โปรดทราบว่าหากคุณแฟลชภาพอุปกรณ์ที่มีเว็บเซิร์ฟเวอร์/เว็บแอปพลิเคชันอาจใช้เวลาประมาณหนึ่งนาทีหลังจากการเชื่อมต่อกับเครือข่าย WiFi
หากคุณต้องการเปลี่ยนการกำหนดค่า WiFi บนอุปกรณ์ที่มีการกะพริบแล้วให้ใช้ขั้นตอนต่อไปนี้:
เชื่อมต่ออุปกรณ์ของคุณเข้ากับคอมพิวเตอร์ด้วยสายเคเบิล USB
นำทางไปยัง URL ต่อไปนี้ในเบราว์เซอร์ของคุณ: https://plummerssoftwarellc.github.io/nightdriverstrip
เลือกอุปกรณ์ของคุณ (เช่น "M5Stickc Plus") จากรายการดรอปดาวน์ แบบเลื่อนลงครั้งที่สองพร้อมโครงการที่รองรับบนอุปกรณ์นั้นจะปรากฏขึ้น
เลือกโปรเจ็กต์ที่คุณฉายไว้ก่อนหน้านี้ในแบบเลื่อนลงครั้งที่สอง เมื่อคุณทำปุ่มเชื่อมต่อจะปรากฏอยู่ด้านล่าง
คลิกปุ่มเชื่อมต่อ กล่องโต้ตอบจะขอให้คุณเลือกพอร์ตอนุกรม ขึ้นอยู่กับระบบของคุณอาจแสดงเพียงหนึ่งหรือรายการของพวกเขา ในกรณีที่มีหลายรายการจะแสดงโดยทั่วไปจะเป็นหนึ่งเดียวที่เรียกว่า "พอร์ตอนุกรม USB (Comn)" เลือกพอร์ตที่ถูกต้องแล้วคลิกเชื่อมต่อ
กล่องโต้ตอบใหม่จะแสดง หากยังไม่แสดงตัวเลือก "เชื่อมต่อกับ Wi-Fi" หรือ "เปลี่ยน Wi-Fi" ให้เปิดหน้าต่าง "บันทึก & คอนโซล" แล้วรอจนกว่าบรรทัดบันทึกจะปรากฏขึ้น จากนั้นปิดหน้าต่างโดยคลิกกลับ เมื่อแสดงตัวเลือก "เชื่อมต่อกับ Wi-Fi" หรือ "เปลี่ยน Wi-Fi" ให้คลิก
ในกล่องโต้ตอบข้อมูลการเชื่อมต่อ WiFi เลือกหรือป้อน SSID และรหัสผ่านของคุณ คลิกเชื่อมต่อ ในบางกรณีกล่องโต้ตอบการเชื่อมต่อ WiFi จะปรากฏขึ้นอีกครั้งหลังจากการเชื่อมต่อที่ประสบความสำเร็จเกิดขึ้นจริง ในกรณีนั้นคลิกข้าม นอกจากนี้ยังเป็นไปได้ว่ามีการรายงานการหมดเวลาในขณะที่ WiFi เชื่อมต่อสำเร็จ ในกรณีนั้นคลิกกลับ
รูปภาพที่รวมอยู่ในตัวติดตั้งถูกสร้างขึ้นโดยใช้สถานะปัจจุบันของซอร์สโค้ดในที่เก็บนี้ หากมีสิ่งใดที่คุณต้องการเปลี่ยน (การกำหนดค่า) โครงการที่คุณต้องการใช้ก็ถึงเวลาที่จะย้ายไปยังขั้นตอนต่อไป
เนื่องจากขั้นตอนต่อไปจะต้องมีความรู้เกี่ยวกับโครงสร้างของแอปพลิเคชันที่เป็น NightdriversTrip อย่างรวดเร็วนี่อาจเป็นเวลาที่ดีในการอ่านบทนำสู่ Codebase Nightdriverstrip
บนอุปกรณ์ที่มี wifi, Nightdriverstrip สามารถเริ่มต้นเว็บเซิร์ฟเวอร์ที่โฮสต์เว็บ UI ที่เป็นส่วนหนึ่งของโครงการ มันสามารถใช้เพื่อดูและเปลี่ยนแปลงผลกระทบที่กำลังทำงานอยู่และรับสถิติประสิทธิภาพสดของอุปกรณ์
เมื่ออุปกรณ์เริ่มต้นด้วยเว็บเซิร์ฟเวอร์ที่เปิดใช้งานเว็บ UI สามารถเข้าถึงได้โดยการเปิดเว็บเบราว์เซอร์และพิมพ์ที่อยู่ IP ของอุปกรณ์ของคุณในแถบที่อยู่ เมื่อโหลดแล้วไอคอนที่ด้านซ้ายของหน้าจอสามารถใช้เพื่อสลับมุมมองภายในและปิด UI
ข้อมูลเพิ่มเติมเกี่ยวกับเว็บ UI สามารถพบได้ใน readme.md ของตัวเอง
นอกเหนือจากเว็บ UI เว็บเซิร์ฟเวอร์ยังเผยแพร่ API เหมือนที่เหลือ ในหมู่คนอื่น ๆ การตั้งค่าการกำหนดค่าสามารถอ่านและเปลี่ยนแปลงได้โดยใช้มัน ข้อมูลเพิ่มเติมเกี่ยวกับ API มีอยู่ใน REST_API.MD
ฉันแนะนำให้คุณทำสิ่งต่อไปนี้:
DEMO พอยน์เตอร์บางตัวเกี่ยวกับสิ่งที่จำเป็นในการทำสิ่งนี้สามารถพบได้ด้านล่างglobals.h หรือ platformio.ini เช่น wifi และ webserver ดูคุณสมบัติกำหนดด้านล่าง ตรวจสอบให้แน่ใจว่า WiFi SSID และรหัสผ่านของคุณถูกตั้งค่าใน/secrets.h ซึ่งสามารถสร้างได้โดยการทำสำเนาของรวม/secrets.example.h
โปรดตรวจสอบให้แน่ใจว่าคุณตั้งค่าไว้ใน/secrets.h ไม่ได้อยู่ใน/secrets.example.h!
เปิดใช้งาน wifi โดยการตั้งค่า enable_wifi กำหนดเป็น 1 ใน globals.h
# define ENABLE_WIFI 1นอกจากนี้ยังสามารถกำหนดค่าในไฟล์ platformio.ini ตามที่อธิบายไว้ในส่วนคุณสมบัติกำหนดด้านล่าง
สิ่งเหล่านี้กำหนดให้เปิดใช้งานคุณสมบัติที่สำคัญของ Nightdriverstrip กำหนดไว้ใน platformio.ini ของ build_flags หรือใน globals.h หมายเหตุ: การกำหนดบางอย่างเป็นของบอร์ดที่เฉพาะเจาะจงซึ่งระบุไว้ด้านล่าง
| คุณลักษณะกำหนด | คำอธิบาย |
|---|---|
| enable_wifi | เชื่อมต่อกับ wifi |
| inging_wifi_enabled | การยอมรับข้อมูลสีและคำสั่งที่เข้ามา |
| enable_webserver | เปิดเว็บเซิร์ฟเวอร์ภายใน |
| time_before_local | กี่วินาทีก่อนที่หลอดไฟจะหมดและแสดงเนื้อหาท้องถิ่น |
| เปิดใช้งาน | ตั้งนาฬิกาจากเว็บ |
| เปิดใช้งาน _ota | ยอมรับการอัปเดต Air Flash |
| ฮาร์ดแวร์เฉพาะ | คำอธิบาย | บอร์ดที่รองรับ |
|---|---|---|
| use_m5display | เปิดใช้งานสถิติการแสดงบน LCD ในตัว | M5STICK-C และ M5STICK-C PLUS |
| use_oled | เปิดใช้งานสถิติการแสดงผลบน OLED ในตัว | Heltec Wifi Kit 32 |
| use_lcd | เปิดใช้งานสถิติที่แสดงบน LCD ภายนอก ILI9341 | Wrover32 |
| use_tftspi | เปิดใช้งานสถิติที่แสดงบน LCD ภายนอก TTGO | esp32dev |
| เปิดใช้งาน _audio | ฟังเสียงจากไมโครโฟนและประมวลผล | M5STICK-C และ M5STICK-C PLUS |
| enable_remote | การควบคุมระยะไกลของ IR | ต้องใช้ฮาร์ดแวร์ IR |
ตัวอย่างใน platformio.ini (คำนำหน้าธงที่มี -D เช่น ENABLE_WIFI=1 กลายเป็น -DENABLE_WIFI=1 )
build_flags = - DENABLE_WIFI =1ตัวอย่างใน globals.h:
# define ENABLE_WIFI 1 เพื่อเพิ่มเอฟเฟกต์ใหม่คุณ:
LEDStripEffect (หรือคลาสเอฟเฟกต์ที่มีอยู่) และสิ่งที่ดีเกิดขึ้นในฟังก์ชั่นที่สำคัญเพียงอย่างเดียวคือ Draw() ตรวจสอบสิ่งที่เอฟเฟกต์ในตัวทำขึ้น แต่ในระยะสั้นคุณกำลังวาดลงในอาร์เรย์ของวัตถุ CRGB ที่แต่ละคนเป็นตัวแทนสี 24 บิต เมื่อเสร็จแล้วอาร์เรย์ CRGB จะถูกส่งไปยัง LED และคุณจะถูกขอให้เฟรมถัดไปทันที วิธีการวาดของคุณควรใช้เวลาประมาณ 30 มม. และควร delay() เพื่อนอนหลับเพื่อความสมดุลหากเร็วกว่า คุณ สามารถ วาดซ้ำ ๆ โดยทั่วไปในวงที่ยุ่ง แต่ไม่จำเป็น#define สำหรับคลาสเอฟเฟกต์ของคุณให้กับ effects.h แต่ละคลาสเอฟเฟกต์ต้องการเพียงหมายเลขเอฟเฟกต์เดียวและโปรดตรวจสอบให้แน่ใจว่าหมายเลขที่คุณเลือกไม่ได้ใช้โดยคลาสเอฟเฟกต์อื่น! ข้อมูลเพิ่มเติมเกี่ยวกับการเชื่อมโยงระหว่างคลาสเอฟเฟกต์และจำนวนเอฟเฟกต์ที่เกี่ยวข้องสามารถพบได้ใน effects.hLoadEffectFactories() ใน effects.cpp (ภายใต้ส่วนการกำหนดค่าการสร้างของคุณเช่น DEMO ) แมโคร ADD_EFFECT() คาดว่าจะมีหมายเลขเอฟเฟกต์และชื่อประเภทของเอฟเฟกต์ใหม่ของคุณเป็นพารามิเตอร์ พารามิเตอร์เพิ่มเติมใด ๆ จะถูกส่งผ่านไปยังตัวสร้างของเอฟเฟกต์เมื่อสร้างขึ้น มีอินสแตนซ์ EffectManager ทั่วโลกที่สร้างตารางเอฟเฟกต์เป็นครั้งแรกจากไฟล์ JSON บน Spiffs หากมี จากนั้นจะเพิ่มเอฟเฟกต์อื่น ๆ ที่ลงทะเบียนใน LoadEffectFactories() แต่ไม่รวมอยู่ในไฟล์ JSON จากนั้นจะหมุนท่ามกลางเอฟเฟกต์เหล่านั้นในอัตราที่ควบคุมโดย DEFAULT_EFFECT_INTERVAL เอฟเฟกต์จะไม่ได้รับแจ้งเมื่อพวกเขาใช้งานหรือไม่พวกเขาเพิ่งขอให้วาดเมื่อจำเป็น
แต่ละช่องของ LED มีอินสแตนซ์ LEDStripGfx ที่เกี่ยวข้อง _GFX[0] คือ LEDStripGfx ที่เกี่ยวข้องกับ LED_PIN0 และอื่น ๆ คุณสามารถรับบัฟเฟอร์ LED ของ PIN0 ได้โดยเรียก _GFX[0]->leds() และมันจะมี _GFX[0]->GetLEDCount พิกเซล คุณสามารถวาดลงในบัฟเฟอร์โดยไม่ต้องแตะไบต์ดิบโดยการโทร fill_solid , fill_rainbow , setPixel และฟังก์ชั่นการวาดอื่น ๆ
การกำหนดค่าที่ง่ายที่สุด DEMO จะถือว่าคุณมีแถบเมตรเดียวของ LED 144 เมตรและแหล่งจ่ายไฟที่เชื่อมต่อกับ ESP32 ของคุณ มันบูทขึ้นพบกับ RainbowFillEffect เดียวในฟังก์ชั่น LoadEffectFactories() และเรียกใช้วิธี Draw() ซ้ำ ๆ เพื่ออัปเดตอาร์เรย์ CRGB ก่อนที่จะส่งไปยัง LED หากทำงานอย่างถูกต้องควรวาดจานสีรุ้งเลื่อนบนแถบ LED ของคุณ
การกำหนดค่าที่ง่ายที่สุดที่เรียกว่า 'สาธิต' ที่นี่มีให้โดยสภาพแวดล้อมการสร้างเฉพาะของบอร์ด รายการสภาพแวดล้อมดังกล่าวสามารถมองเห็นได้โดยการใช้ 'Python3 Tools/show_envs.py' ซึ่งจะบอกผู้อ่านว่าในการเขียนนี้การเปลี่ยนแปลงเฉพาะของฮาร์ดแวร์ของ 'การสาธิต' รวมถึง:
ประเภทการสร้างเหล่านี้อาจถูกเลือกโดยอาร์กิวเมนต์ '-E' ไปที่ PIO หรือในตัวเลือกเมนูภายในรหัส Platformio IDE/VS
ตารางเอฟเฟกต์ยังคงอยู่กับไฟล์ JSON บน Spiffs ในช่วงเวลาปกติเพื่อรักษาสถานะของเอฟเฟกต์ (และในความเป็นจริงรายการเอฟเฟกต์ทั้งหมด) ในการรีบูต นี่เป็นส่วนใหญ่ในการเตรียมการสำหรับการอัปเดตในอนาคตไปยัง NightDriversTrip ซึ่งองค์ประกอบของการกำหนดค่ารายการเอฟเฟกต์ของเอฟเฟกต์แต่ละรายการสามารถเปลี่ยนแปลงได้โดยใช้เว็บแอปพลิเคชันอุปกรณ์ จุดสิ้นสุด API เพื่ออำนวยความสะดวกนี้มีอยู่แล้วและพร้อมใช้งาน (ดูอุปกรณ์ Web UI และ API ด้านล่าง)
สิ่งนี้ทำให้การแทนที่ของ SerializeToJSON() และตัวสร้าง deserializing ที่สอดคล้องกันจะต้องได้รับการจัดเตรียมสำหรับเอฟเฟกต์ที่ต้องการ (หรือต้องการ) เพื่อคงอยู่มากกว่าคุณสมบัติที่ (de) ที่เป็นอนุกรมจาก/ถึง JSON โดย LEDStripEffect โดยค่าเริ่มต้น
ตลอดโครงการห้องสมุดที่ใช้สำหรับการจัดการ JSON และ (de) การทำให้เป็นอนุกรมคือ Arduinojson ในหมู่คนอื่น ๆ นี่หมายความว่า:
สอดคล้องกับการประชุมใน Arduinojson ฟังก์ชั่น SerializeToJSON() จะต้อง ส่งคืน true ยกเว้น เมื่อฟังก์ชั่น Arduinojson (เช่น JsonObject::set() ) ส่งคืน false เพื่อระบุว่ามันหมดจากหน่วยความจำบัฟเฟอร์ ฟังก์ชั่น SerializeToJSON() ใด ๆ ที่ส่งคืน false จะทำให้เกิดการเพิ่มขึ้นของบัฟเฟอร์การทำให้เป็นอนุกรมโดยรวมและการรีสตาร์ทของกระบวนการทำให้เป็นอนุกรม
หน่วยความจำที่จำเป็นสำหรับการดำเนินการอนุกรมการทำให้เป็นอนุกรม (DE) ของแต่ละคลาสจะต้องสงวนไว้ ล่วงหน้า โดยการสร้าง:
StaticJsonDocument< ขนาดบัฟเฟอร์ >() ที่สงวนหน่วยความจำบนสแต็ก สามารถใช้สำหรับขนาดบัฟเฟอร์ขนาดเล็ก (เล็กกว่า 1024 ไบต์) เท่านั้นAllocatedJsonDocument( ขนาดบัฟเฟอร์ ) ที่สงวนหน่วยความจำบนกองจำเป็นต้องใช้หน่วยความจำมากแค่ไหนขึ้นอยู่กับจำนวนประเภทและเนื้อหาของคุณสมบัติที่เป็นอนุกรม (DE) และเป็นเกมที่คาดเดาได้อย่างมีประสิทธิภาพซึ่งหมายความว่าค่าที่คุณจะเห็นตลอด Codebase ได้รับการศึกษาเช่นกัน เมื่อคุณสมบัติที่เป็นอนุกรมสุดท้ายล้มเหลวในการปรากฏตัวใน JSON ที่สร้างขึ้นมันก็สมเหตุสมผลที่จะสมมติว่ากระบวนการทำให้เป็นอนุกรมหมดจากหน่วยความจำบัฟเฟอร์และหน่วยความจำบัฟเฟอร์จึงต้องเพิ่มขึ้น
เพื่อให้ได้ความเข้าใจที่ดีขึ้นเกี่ยวกับข้อมูลเฉพาะที่เกี่ยวข้องกับการทำให้เป็นอนุกรม JSON (DE) คุณสามารถพิจารณาดูบทเรียนที่เกี่ยวข้องในส่วน "การติดต่อครั้งแรก" ของเอกสาร Arduinojson
ตัวอย่างเช่นในระหว่างการพัฒนารายการเอฟเฟกต์ (JSON-persisted) บนกระดานของคุณสามารถออกจากการซิงค์กับเอฟเฟกต์ที่คุณเพิ่มใน effects.cpp (ในฟังก์ชั่น LoadEffectFactories() โดยเฉพาะ) ถึงจุดที่มันยุ่งหรือน่ารำคาญ หากสิ่งนี้เกิดขึ้นคุณสามารถรีเซ็ตรายการเอฟเฟกต์บนบอร์ดเป็นค่าเริ่มต้นผ่านเครือข่าย เพื่อให้สิ่งนี้ทำงานได้คณะกรรมการจะต้องเชื่อมต่อกับ WiFi และเว็บเซิร์ฟเวอร์จะต้องทำงานอยู่
การรีเซ็ตสามารถทำได้โดยทำการโพสต์แบบฟอร์ม HTTP ไปที่ http: // <veside_ip>/รีเซ็ตด้วยชุดฟิลด์ต่อไปนี้: EffectSconfig = 1 และบอร์ด = 1 ในระบบที่มีขด "ปกติ" คำสั่งต่อไปนี้ควรทำเคล็ดลับ:
curl -d " effectsConfig=1&board=1 " -X POST http:// < device_IP > /resetเป็นไปได้ว่าความสามารถในการรีเซ็ตนี้จะถูกเพิ่มเข้ามาในการอัปเดตในอนาคตของเว็บ UI
นอกจากนี้ยังเป็นไปได้ที่จะ "ละเว้น" รายการเอฟเฟกต์ที่คงอยู่ทั้งหมดและโหลดรายการเอฟเฟกต์มาตรฐานเมื่อเริ่มต้น เอกสารเกี่ยวกับวิธีการทำสิ่งนี้มีอยู่ด้านบนของฟังก์ชั่น LoadEffectFactories() ดังกล่าวข้างต้น
หากคุณพัฒนาเอฟเฟกต์ที่ต้องใช้ข้อมูลจากอินเทอร์เน็ตคุณสามารถลงทะเบียนฟังก์ชั่นเครื่องอ่านเครือข่ายด้วยคลาส NetworkReader ซึ่งสามารถใช้งานได้ผ่านการอ้างอิง g_ptrSystem->NetworkReader() คุณสามารถใช้รูป PatternSubscribers หรือเอฟเฟกต์รูป PatternWeather เป็นแหล่งของแรงบันดาลใจ Patternstocks ดึงใบเสนอราคาหุ้นสด (15 นาที) จากเซิร์ฟเวอร์ส่วนตัว
โครงการสามารถสร้างขึ้นได้โดยใช้ Platformio มี platformio ide ที่มีอยู่ซึ่งสร้างขึ้นบนรหัส Visual Studio สิ่งที่รวมอยู่ในนั้นคือเครื่องมือหลักแพลตฟอร์มบรรทัดคำสั่ง พวกเขายังสามารถติดตั้งด้วยตนเองหากคุณไม่ต้องการใช้ IDE
ในการรวบรวมแอปพลิเคชันส่วนหน้า (ซึ่งเป็นส่วนหนึ่งของการสร้างแพลตฟอร์มทุกครั้ง) จำเป็นต้องใช้ NodeJS เวอร์ชันล่าสุดที่มี NPM พวกเขาสามารถดาวน์โหลดได้จากเว็บไซต์ NodeJS คำแนะนำสำหรับวิธีที่รองรับในการติดตั้ง nodejs มีให้เช่นกัน โปรดอ่านและติดตามพวกเขา
โปรดทราบ ว่าการติดตั้ง NODEJS โดยใช้ระบบปฏิบัติการแพ็คเกจเริ่มต้น/การแจกจ่ายของคุณมีแนวโน้มที่จะทำให้คุณมีรุ่น NodeJS รุ่นเก่ากว่าที่คุณต้องการ
แอปพลิเคชันได้รับการทดสอบในโหนดเวอร์ชัน 16.15.1 และ 18.17.1 ด้วย NPM เวอร์ชัน 8.13.2; เวอร์ชันใหม่ควรทำงานในหลักการ
สำหรับรายละเอียดเกี่ยวกับการทำงานกับแอปพลิเคชันส่วนหน้าโปรดดูที่ไซต์/readme.md
เมื่อติดตั้ง IDE หรือ CORE ทั้ง NightDriversTrip สามารถสร้างได้จากเชลล์คำสั่งโดยป้อนไดเรกทอรีโครงการ/ที่เก็บและออกคำสั่งต่อไปนี้:
pio run -e demo
สิ่งนี้จะสร้างการกำหนดค่า demo
หากคุณได้รับข้อผิดพลาดที่ไม่พบ
pioคุณอาจต้องเพิ่มลงในเส้นทางของคุณ
ในการสร้างการกำหนดค่าที่มีอยู่ทั้งหมดให้ใช้คำสั่งต่อไปนี้ (อาจใช้เวลาสักครู่):
pio run
ในการสร้างและอัปโหลดระบบไฟล์ที่สามารถใช้งานได้ด้วยเอฟเฟกต์ (แม้ว่าในปัจจุบันจะไม่มี) คุณจะต้องสร้างและอัปโหลดภาพ Spiffs ไปยังแฟลชของบอร์ดของคุณโดยใช้ Platformio คุณสามารถทำได้โดยใช้อินเทอร์เฟซผู้ใช้ Platformio หรือใช้เครื่องมือบรรทัดคำสั่ง pio :
pio run --target buildfs --environment <project name>
pio run --target uploadfs --environment <project name>
ที่เก็บนี้รวมถึงจำนวนของสกรูเพื่อทำงานต่าง ๆ ระหว่างหรือหลังการสร้างโครงการ พวกเขารวมอยู่ในไดเรกทอรี tools โปรดทราบว่าสคริปต์คาดว่าจะเริ่มต้นจากไดเรกทอรีหลักของโครงการ ดังนั้นใช้:
tools/buddybuild.shแทนที่จะเป็น:
cd tools
./buddybuild.shเขียนสิ่งที่ง่ายในการส่งข้อมูลสีไปยังซ็อกเก็ต รูปแบบเป็นพื้นฐานมาก: ช่องใดที่คุณกำลังวาด LED จำนวนเท่าใดเมื่อไหร่ที่จะวาดและข้อมูลสีเอง คุณสามารถส่งข้อมูลที่ไม่บีบอัดด้วยการประทับเวลาเป็นศูนย์ตราบใดที่คุณส่งส่วนหัวที่ถูกต้องก่อนข้อมูลของคุณซึ่งง่ายมาก ข้อมูลที่มีการประทับเวลาเป็นศูนย์จะถูกดึงทันทีโดยไม่มีการบัฟเฟอร์
| ไบต์ | การทำงาน | |
|---|---|---|
| 0, 1 | คำสั่ง | (ตั้งค่าเป็น 3 ซึ่งก็คือ WIFI_COMMAND_PIXELDATA64 ) |
| 2, 3 | channelid | (ตั้งค่าเป็น 1 สำหรับช่องเดี่ยวแม้ว่า 0 ทำงานด้วยเหตุผลทางประวัติศาสตร์) |
| 4 - 7 | ความยาว | (จำนวน PIXELS 24 บิต) |
| 8 - 15 | ไม่กี่วินาที | (ตั้งค่าเป็น 0) |
| 16 - 24 | ไมโคร | (ตั้งค่าเป็น 0) |
| 25+ | RGB | (ข้อมูลสี RGB 24 บิตหนึ่งตัวต่อ PIXEL ที่ระบุในความยาวด้านบน) |
หากสร้างด้วย ENABLE_WIFI และ INCOMING_WIFI_ENABLED หากชิปสามารถรับการเชื่อมต่อ WiFi และที่อยู่ DHCP มันจะเปิดซ็อกเก็ตบนพอร์ต 49152 และรอแพ็กเก็ตที่เกิดขึ้นตามที่อธิบายไว้ข้างต้น
สร้างชุด 24 เฟรมต่อวินาที (หรือ 30 ถ้าต่ำกว่า 500 ไฟ LED) และตั้งค่าการประทับเวลาเป็น "ตอนนี้" บวก 1/2 ต่อวินาที ส่งพวกเขาไปที่ชิปผ่าน wifi และพวกเขาจะถูกดึง 1/2 วินาทีจากนี้ในกระแสที่มั่นคงเนื่องจากการประทับเวลาที่คุณให้แต่ละแพ็คเก็ตมาถึง
การเปิดเผยอย่างเต็มรูปแบบ: ในฐานะผู้ร่วมงานของ Amazon Plummerssoftwarellc ได้รับค่าคอมมิชชั่นจากการซื้อที่มีคุณสมบัติเหมาะสม มันไม่ได้เพิ่มในราคาซื้อและไม่เพิ่มต้นทุนของคุณเลย นอกจากนี้ผลกำไรทั้งหมด 2021 จากช่องโรงรถของเดฟซึ่งรวมถึงยอดขายเหล่านี้จะไปที่ศูนย์ออทิสติก UW
แทนที่จะสร้างแนวทางที่ซับซ้อนนี่คือสิ่งที่ฉันหวังว่าการทำงานร่วมกันของโอเพนซอร์ซจะนำมาสู่โครงการ: คนที่จะเพิ่มคุณสมบัติที่สำคัญและแก้ไขข้อบกพร่องและข้อบกพร่องในรหัส เมื่อพวกเขากำลังเพิ่มคุณสมบัติพวกเขาจะทำในลักษณะที่สอดคล้องกับวิธีการทำสิ่งต่าง ๆ ในรหัสที่มีอยู่ พวกเขาต่อต้านการกระตุ้นให้ทำการค้นหาใหม่และเขียนทุกอย่างในภาพของตัวเองและแทนที่จะใช้ความพยายามของพวกเขาในการเพิ่มการปรับปรุงการทำงานให้สูงสุดในขณะที่ลดความฟุ่มเฟือยของซอร์สโค้ดและเปลี่ยนแปลง
ลองพิจารณาการตั้งชื่อที่ไม่สอดคล้องกันซึ่งควรได้รับการแก้ไข บางตัวเป็นอูฐบางส่วนเป็น pszhungarian และอื่น ๆ ขึ้นอยู่กับแหล่งที่มา ฉันชอบที่จะได้รับการอัปเดตทั้งหมดเป็น TBD มาตรฐานเดียว จนกว่าจะมีการกำหนด TBD ฉันเอนตัวไปสู่มาตรฐาน Win32
เมื่อทำงานในฟังก์ชั่นให้ทำงานในรูปแบบของฟังก์ชั่น เมื่อทำงานในชั้นเรียนให้ทำงานในรูปแบบของชั้นเรียน เมื่อทำงานกับไฟล์ให้ทำงานในรูปแบบของไฟล์ หากสิ่งเหล่านั้นไม่สอดคล้องกันให้ทำทุกอย่างลดการเปลี่ยนแปลง การเปลี่ยนแปลงโวหารควรได้รับการแนะนำหลังจากการอภิปรายในกลุ่มเท่านั้นและโดยทั่วไปควรทำให้เกิดการเปลี่ยนแปลงสไตล์นั้นทั่วทั้งโครงการ
ถัดไปลองพิจารณา #define S เพื่อควบคุมการสร้าง อาจมีวิธีการทำสิ่งต่าง ๆ ที่ดีกว่าและสง่างามมากขึ้น อาจมีแพลตฟอร์มการกำหนดค่าทั้งหมด แต่ฉันต้องการให้มันง่าย และฉันนิยามง่ายที่สุดที่จะเป็น "อย่างน้อยที่สุดที่โปรแกรมเมอร์ C ++ ที่มีประสบการณ์จำเป็นต้องเรียนรู้ก่อนที่จะสร้างสรรค์ด้วยรหัสที่เป็นปัญหา" ฉันไม่ต้องการเรียนรู้ห้องสมุดคลาสใหม่ถ้าฉันสามารถหลีกเลี่ยงได้!
อายุการใช้งานของการเข้ารหัสได้สอนให้ฉันทำผิดพลาดในด้านของความเรียบง่ายดังนั้นโปรดอย่าแนะนำการสร้างเทมเพลตที่หลากหลายเว้นแต่ว่าพวกเขาจะหดตัวลงในซอร์สโค้ด สิ่งใดก็ตามที่เพิ่มความซับซ้อนและความยาวของรหัสควรสงสัย
เพิ่มสิ่งที่คุณต้องการและ/หรือจำเป็นต้องทำให้ความฝัน LED ของคุณเป็นจริง แก้ไขความผิดพลาดของฉัน เติมช่องว่างที่ชัดเจนในความรู้ของฉัน อะไรก็ตามที่มีอาการกระพริบมากที่สุดสำหรับบิตที่น้อยที่สุดจะได้รับการโหวตของฉัน คุณจะได้รับ Blinken เย็นเพิ่มเติมมากสำหรับรหัสและโปรแกรมทุกไบต์ ผลตอบแทนนั้นวัดได้ใน Blinkenperbit จำนวนของการกะพริบสุดยอดโค้ดเพิ่มหารด้วยผลกระทบต่อแหล่งที่มา (และไบนารี)
หากต้องการทำซ้ำให้สร้างโครงการ Mesmerizer จากนั้นลบ PIO/build_cache และสร้างอีกครั้งโดยใช้เวลาสำหรับการสร้างครั้งที่สอง
ASUS 7995WX [96-Core, 192-Thread]-> [Davepl, 02/11/2024] 20.73 วินาที
HP Z6 G5A, 7995WX, 128GB [96-Core, 192-Thread]-> [Davepl 11/29/2023] 25.270 วินาที
3970X, 128GB [32-core, 64-Thread] Windows11+WSL2/Ubuntu02.04LTS-> [Davepl 11/29/2023] 34.292 วินาที
Mac M1 Ultra Studio [10-core, 20-Thread]-> [Davepl 11/29/2023] 48.368 วินาที
เวลาในการสร้าง Spectrum Config ( pio run -e spectrum ) สมมติว่ามีการติดตั้งและดาวน์โหลดทุกอย่างที่สะอาดแล้ว
AMD 3970 32 -Cores, 128GB, RAID SSD -> [Davepl 09/19/2021] 12.93 วินาที (ทำงานภายใต้ WSL)
AMD 5950X 16 -cores, 64GB, SSD -> [Davepl 09/19/2021] 16.90 วินาที
Apple MacBook Pro M1 Max, 8+2 Cores, 64GB, 4TB SSD -> [Davepl 12/15/2021] 20.90 วินาที
Apple MacBook Air M2, 16GB, 256GB SSD -> [VAASKI 02/28/2023] 56.17 วินาที
MacBook Pro 2020, 8 Cores 2.4GHz I9, 64GB, 4TB SSD -> [Davepl 09/19/2021] 34.09 วินาที
Mac Mini, 4 perf cores, 16GB -> [Davepl 09/19/2021] 39.06 วินาที
Mac Pro, 6 คอร์, 3.5 GHz, 64GB, 1TB SSD -> [Davepl 09/19/2021] 48.42 วินาที
Xeon Silver, 20 Cores, 2.1GHz, 16GB VM -> [Davepl 10/10/2022] 53.11 วินาที
Raspberry Pi 4, Ubuntu LTS 64 บิต, 4 Core, 4GB -> [Davepl 09/23/2021] 6 นาที 25 วินาที
Jetson Nano 2G, 4 Core Arm A57 -> [Davepl 10/04/2021] 2 นาที 56 วินาที