บทความเกี่ยวกับวิธีสร้างตัวควบคุมลอจิกที่ตั้งโปรแกรมได้จากอุปกรณ์จีนราคาถูก อุปกรณ์ดังกล่าวจะพบการใช้งานทั้งในระบบอัตโนมัติในบ้านและเป็นชั้นเรียนภาคปฏิบัติในสาขาวิทยาการคอมพิวเตอร์ของโรงเรียน
สำหรับการอ้างอิงตามค่าเริ่มต้นโปรแกรม Sonoff Basic จะทำงานร่วมกับแอปพลิเคชันมือถือผ่านบริการคลาวด์ของจีน หลังจากการแก้ไขที่เสนอ การโต้ตอบเพิ่มเติมทั้งหมดกับอุปกรณ์นี้จะเป็นไปได้ในเบราว์เซอร์
ส่วนที่ 24 การเชื่อมต่อ Sonoff กับบริการ MGTXNUMX
ขั้นตอนที่ 1: สร้างแผงควบคุม
ลงทะเบียนออนไลน์
เข้าสู่ระบบ
หากต้องการสร้างแผงควบคุมสำหรับอุปกรณ์ใหม่ ให้คลิกที่ปุ่ม "+"
ตัวอย่างการสร้างแผง
เมื่อสร้างแผงแล้ว แผงจะปรากฏในรายการแผงของคุณ
ในแท็บ "การตั้งค่า" ของแผงที่สร้างขึ้น ให้ค้นหาช่อง "รหัสอุปกรณ์" และ "รหัสการอนุญาต" ในอนาคต ข้อมูลนี้จะต้องระบุเมื่อตั้งค่าอุปกรณ์ Sonoff
ตัวอย่างแท็บ
ขั้นตอนที่ 2 รีเฟรชอุปกรณ์
การใช้ยูทิลิตี้
ขั้นตอนที่ 3 การตั้งค่าอุปกรณ์
จ่ายไฟให้กับอุปกรณ์ หลังจากที่ไฟ LED สว่างขึ้น ให้กดปุ่มค้างไว้จนกว่าไฟ LED จะเริ่มกะพริบสม่ำเสมอเป็นระยะๆ
ในขณะนี้เครือข่าย Wi-Fi ใหม่ที่เรียกว่า "PLC Sonoff Basic" จะปรากฏขึ้น เชื่อมต่อคอมพิวเตอร์ของคุณกับเครือข่ายนี้
คำอธิบายสัญญาณไฟ LED
ไฟ LED แสดงสถานะ
สถานะอุปกรณ์
กระพริบสองครั้งเป็นระยะ
ไม่มีการเชื่อมต่อกับเราเตอร์
ส่องอย่างต่อเนื่อง
การเชื่อมต่อกับเราเตอร์
กระพริบเครื่องแบบเป็นระยะ
โหมดจุดเข้าใช้งาน Wi-Fi
ดับแล้ว
ไม่มีแหล่งจ่ายไฟ
เปิดอินเทอร์เน็ตเบราว์เซอร์แล้วป้อนข้อความ "192.168.4.1" ในแถบที่อยู่ ไปที่หน้าการตั้งค่าเครือข่ายของอุปกรณ์
กรอกข้อมูลในช่องดังต่อไปนี้:
- “ชื่อเครือข่าย” และ “รหัสผ่าน” (เพื่อเชื่อมโยงอุปกรณ์กับเราเตอร์ Wi-Fi ที่บ้านของคุณ)
- “รหัสอุปกรณ์” และ “รหัสการอนุญาต” (เพื่ออนุญาตอุปกรณ์ในบริการ MGT24)
ตัวอย่างการตั้งค่าพารามิเตอร์เครือข่ายอุปกรณ์
บันทึกการตั้งค่าและรีบูตอุปกรณ์
ที่นี่
ขั้นตอนที่ 4 การเชื่อมต่อเซ็นเซอร์ (อุปกรณ์เสริม)
เฟิร์มแวร์ปัจจุบันรองรับเซ็นเซอร์อุณหภูมิ ds18b20 ได้สูงสุดสี่ตัว ที่นี่
ส่วนที่ XNUMX การเขียนโปรแกรมด้วยภาพ
ขั้นตอนที่ 1: สร้างสคริปต์
ใช้เป็นสภาพแวดล้อมการเขียนโปรแกรม
ฉันเพิ่มบล็อกพิเศษสำหรับการเขียนและอ่านพารามิเตอร์ของอุปกรณ์ เข้าถึงพารามิเตอร์ใด ๆ โดยใช้ชื่อ สำหรับพารามิเตอร์ของอุปกรณ์ระยะไกล จะใช้ชื่อผสม: “parameter@device”
รายการตัวเลือกแบบเลื่อนลง
สถานการณ์ตัวอย่างสำหรับการเปิดและปิดโหลดแบบวน (1Hz):
ตัวอย่างของสคริปต์ที่ซิงโครไนซ์การทำงานของอุปกรณ์สองเครื่องที่แยกจากกัน กล่าวคือรีเลย์ของอุปกรณ์เป้าหมายจะทำซ้ำการทำงานของรีเลย์ของอุปกรณ์ระยะไกล
สถานการณ์จำลองสำหรับเทอร์โมสตัท (ไม่มีฮิสเทรีซิส):
หากต้องการสร้างสคริปต์ที่ซับซ้อนมากขึ้น คุณสามารถใช้ตัวแปร ลูป ฟังก์ชัน (พร้อมอาร์กิวเมนต์) และโครงสร้างอื่นๆ ฉันจะไม่อธิบายรายละเอียดทั้งหมดนี้ที่นี่ มีมากมายในเน็ตอยู่แล้ว
ขั้นตอนที่ 2: ลำดับของสคริปต์
สคริปต์ทำงานอย่างต่อเนื่อง และทันทีที่สคริปต์สิ้นสุด สคริปต์ก็จะเริ่มต้นใหม่อีกครั้ง มีสองบล็อกที่สามารถหยุดสคริปต์ชั่วคราวได้ "ล่าช้า" และ "หยุดชั่วคราว"
บล็อก "ความล่าช้า" ใช้สำหรับความล่าช้าเป็นมิลลิวินาทีหรือไมโครวินาที บล็อกนี้จะรักษาช่วงเวลาอย่างเคร่งครัด โดยบล็อกการทำงานของอุปกรณ์ทั้งหมด
บล็อก “หยุดชั่วคราว” ใช้สำหรับความล่าช้าครั้งที่สอง (หรือน้อยกว่า) และไม่ได้บล็อกการดำเนินการของกระบวนการอื่นๆ ในอุปกรณ์
หากสคริปต์มีการวนซ้ำไม่สิ้นสุด ซึ่งเนื้อหาไม่มี "หยุดชั่วคราว" ล่ามจะเริ่มการหยุดชั่วคราวโดยอิสระ
หากสแต็กหน่วยความจำที่จัดสรรหมด ล่ามจะหยุดดำเนินการสคริปต์ที่ต้องการพลังงาน (โปรดระวังฟังก์ชันแบบเรียกซ้ำ)
ขั้นตอนที่ 3: การดีบักสคริปต์
หากต้องการแก้ไขข้อบกพร่องของสคริปต์ที่โหลดลงในอุปกรณ์แล้ว คุณสามารถเรียกใช้โปรแกรมติดตามทีละขั้นตอน สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อพฤติกรรมของสคริปต์แตกต่างจากที่ผู้เขียนตั้งใจไว้ ในกรณีนี้ การติดตามช่วยให้ผู้เขียนค้นหาสาเหตุของปัญหาได้อย่างรวดเร็วและแก้ไขข้อผิดพลาดในสคริปต์
สถานการณ์จำลองสำหรับการคำนวณแฟกทอเรียลในโหมดแก้ไขข้อบกพร่อง:
เครื่องมือดีบักนั้นเรียบง่ายมากและประกอบด้วยปุ่มหลักสามปุ่ม: "เริ่มต้น", "ไปข้างหน้าหนึ่งก้าว" และ "หยุด" (อย่าลืมเกี่ยวกับโหมดดีบัก "เข้า" และ "ออก") นอกเหนือจากการติดตามทีละขั้นตอนแล้ว คุณยังสามารถตั้งค่าจุดพักบนบล็อกใดก็ได้ (โดยคลิกที่บล็อก)
หากต้องการแสดงค่าปัจจุบันของพารามิเตอร์ (เซ็นเซอร์, รีเลย์) บนจอภาพให้ใช้บล็อก "พิมพ์"
ที่นี่
ส่วนสำหรับผู้อยากรู้อยากเห็น อะไรอยู่ภายใต้ประทุน?
เพื่อให้สคริปต์ทำงานบนอุปกรณ์เป้าหมาย จึงมีการพัฒนาล่ามโค้ดไบต์และแอสเซมเบลอร์พร้อมคำสั่ง 38 คำสั่ง ซอร์สโค้ดของ Blockly มีตัวสร้างโค้ดพิเศษในตัวซึ่งจะแปลงบล็อกภาพเป็นคำแนะนำในการประกอบ ต่อจากนั้นโปรแกรมแอสเซมเบลอร์นี้จะถูกแปลงเป็นรหัสไบต์และถ่ายโอนไปยังอุปกรณ์เพื่อดำเนินการ
สถาปัตยกรรมของเครื่องเสมือนนี้ค่อนข้างเรียบง่ายและไม่มีจุดใดในการอธิบายบนอินเทอร์เน็ตคุณจะพบบทความมากมายเกี่ยวกับการออกแบบเครื่องเสมือนที่ง่ายที่สุด
ฉันมักจะจัดสรร 1000 ไบต์สำหรับสแต็กของเครื่องเสมือนของฉัน ซึ่งเพียงพอสำหรับการสำรองไว้ แน่นอนว่าการเรียกซ้ำแบบลึกอาจทำให้สแต็กใดๆ หมดไป แต่ก็ไม่น่าจะมีประโยชน์ใดๆ เลย
bytecode ที่ได้นั้นค่อนข้างกะทัดรัด ตามตัวอย่าง ไบต์โค้ดสำหรับคำนวณแฟกทอเรียลเดียวกันมีขนาดเพียง 49 ไบต์ นี่คือรูปแบบการมองเห็น:
และนี่คือโปรแกรมแอสเซมเบลอร์ของเขา:
shift -1
ldi 10
call factorial, 1
print
exit
:factorial
ld_arg 0
ldi 1
gt
je 8
ld_arg 0
ld_arg 0
ldi 1
sub
call factorial, 1
mul
ret
ldi 1
ret
หากรูปแบบการแสดงแอสเซมบลีไม่มีค่าในทางปฏิบัติใด ๆ แท็บ "javascrit" จะให้รูปลักษณ์ที่คุ้นเคยมากกว่าบล็อกภาพ:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
เกี่ยวกับประสิทธิภาพ เมื่อฉันรันสคริปต์ flasher ที่ง่ายที่สุด ฉันได้คลื่นสี่เหลี่ยม 47 kHz บนหน้าจอออสซิลโลสโคป (ที่ความเร็วสัญญาณนาฬิกาของโปรเซสเซอร์ 80 MHz)
ฉันคิดว่านี่เป็นผลลัพธ์ที่ดี อย่างน้อยความเร็วนี้ก็เร็วกว่าเกือบสิบเท่า
ส่วนสุดท้าย
โดยสรุป ฉันจะบอกว่าการใช้สคริปต์ไม่เพียงช่วยให้เราสามารถตั้งโปรแกรมตรรกะการทำงานของอุปกรณ์ที่แยกจากกันเท่านั้น แต่ยังทำให้สามารถเชื่อมต่ออุปกรณ์หลายเครื่องเป็นกลไกเดียวได้ โดยที่อุปกรณ์บางตัวมีอิทธิพลต่อพฤติกรรมของผู้อื่น
ฉันยังทราบด้วยว่าวิธีการจัดเก็บสคริปต์ที่เลือก (ในอุปกรณ์โดยตรงและไม่ใช่บนเซิร์ฟเวอร์) ช่วยลดความยุ่งยากในการสลับอุปกรณ์ที่ทำงานอยู่แล้วไปยังเซิร์ฟเวอร์อื่นเช่นกับ Raspberry ที่บ้านที่นี่
เพียงเท่านี้ฉันยินดีที่จะรับฟังคำแนะนำและคำวิจารณ์ที่สร้างสรรค์
ที่มา: will.com