สร้างเว็บไซต์ ESP8266 เพื่อควบคุมรีเลย์สูงสุด 8 รายการบนคอนโทรลเลอร์รีเลย์ XC4418 8 ช่องของเรา

ใช้รีเลย์อย่างง่ายดายด้วยการตั้งค่าสองส่วนที่เรียบง่ายนี้! เพียงเชื่อมต่ออุปกรณ์ใด ๆ ที่คุณต้องการทดสอบหรือเปิดใช้งานโมดูลรีเลย์ จากนั้นใช้แอพโทรศัพท์ที่สร้างขึ้นเพื่อควบคุมเมื่อใดก็ตามที่คุณต้องการ ตั้งค่ารีเลย์เป็นสลับตัวจับเวลาหรือการเปิดใช้งานชั่วขณะ และแม้กระทั่งตั้งพวกเขาไปในบางช่วงเวลา เหมาะสำหรับชุดรดน้ำพืชอัตโนมัติอุปกรณ์ทดสอบไฟควบคุมหรือโหลดอื่น ๆ สูงสุด 10 แอมป์
| จำนวน | รหัส | คำอธิบาย |
|---|---|---|
| 1 | xc4418 | คอนโทรลเลอร์รีเลย์ 8 ช่อง |
| 1 | xc4411 | uno กับ wifi |
เช่นเคยคุณควรติดตั้งไลบรารี ESP8266 ในเครื่องมือ Arduino IDE ของคุณพร้อมกับปลั๊กอินการอัพpentข้อมูล ESP8266 ถ้าไม่คุณจะได้รับอย่างใดอย่างหนึ่งจากด้านล่าง:
ระบบนี้เป็นการตั้งค่าที่ค่อนข้างง่าย อย่างที่เราทราบ XC4411 เป็น UNO และ ESP รวมกันในการตั้งค่าบอร์ดเดียว ส่วน ESP จะจัดการกับโปรแกรม "เว็บแอป" แบบง่าย ๆ ซึ่งจะสื่อสารกับ UNO

ส่วน UNO ของรหัสจะรับผิดชอบในการเปิดใช้งานและควบคุมรีเลย์เมื่อได้รับคำสั่ง
XC4411 เชื่อมต่อทั้ง UNO และ ESP เข้าด้วยกันผ่านพอร์ตอนุกรมซึ่งหมายความว่าเราจะต้องทำ Serial.read() และ Serial.write() เพื่อสื่อสารระหว่างพวกเขาทั้งสอง เพื่อให้สิ่งต่าง ๆ ง่ายขึ้นเราจะรักษากระแสข้อมูลไว้ด้วยวิธีเดียวดังนั้น ESP จะไม่มีทางรู้ว่ารีเลย์มีลักษณะอย่างไรซึ่งหมายความว่าเว็บแอปจะไม่สามารถแสดงให้เห็นว่ารีเลย์จริงมีลักษณะอย่างไร แต่เราสามารถคาดเดาได้ง่ายๆ
นี่คือการสร้างโมดูลแบบง่าย ๆ ด้วยความเรียบง่ายของบอร์ด XC4411

เพียงเชื่อมต่อ 5V และ GND กับสองพินบนสุดของบอร์ดรีเลย์ (คุณควรพบว่าพวกเขามีป้ายกำกับ VCC และ GND ) จากนั้นเชื่อมต่ออื่น ๆ ทั้งหมด IN# หมุดกับพินดิจิตอลของ UNO เพื่อให้สิ่งต่าง ๆ ง่ายขึ้นเราเก็บหมุดไว้ตามลำดับเริ่มต้นจาก Pin 2 และเลื่อนขึ้นไปที่ Pin 9 - สิ่งนี้จะตรงกับสิ่งที่อยู่บนกระดานถ่ายทอดเริ่มต้นจากด้านล่าง
มันเป็นความคิดที่สมเหตุสมผลที่จะเก็บแท็บสีเขียวระหว่างหมุด COM และ GND บนกระดานถ่ายทอดเช่นกัน
ใน XC4411 คุณควรพบแถวของการสลับ สิ่งนี้ใช้เพื่อตั้งค่าโหมดที่อุปกรณ์อยู่ใน

(ของเราสกปรกเล็กน้อยเนื่องจากเราใช้บ่อยแค่ไหน)
สำหรับส่วนนี้เราจะต้องการตั้งโปรแกรมด้าน UNO ของสิ่งต่าง ๆ ดังนั้นใช้ปากกาหรืออื่น ๆ เพื่อตั้งค่าการแช่ตัวเช่น:
| เข็มหมุด | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| สถานะ | ปิด | ปิด | บน | บน | ปิด | ปิด | ปิด | ปิด |
จากนั้นเปิดส่วน uno/uno.ino ของรหัสในตัวแก้ไข Arduino IDE และอัปโหลดตามปกติ
คุณควรจะทดสอบสิ่งต่าง ๆ นี้โดยเปิด Serial Monitor และตั้งค่าตัวเลือกเป็น:
115200 Baudจากนั้นพิมพ์คำสั่งเช่น:
>4a
หากคุณต้องการดีบักรหัสจริง ๆ คุณควรค้นหาบางอย่างที่กำหนดในบรรทัด 10 และ 11 ของรหัส UNO หนึ่งในบรรทัดที่ 10 จะส่งออกข้อความคล้ายกับด้านล่าง

อีกคนหนึ่งกำหนด (ในบรรทัดที่ 11) จะไม่ทำอะไรเลยและจะเปิดรีเลย์ คุณต้องการบรรทัดที่ 11 ที่กำหนดเมื่อคุณเสร็จสิ้นโครงการ
ตั้งค่าการสวิตช์ dip-switchs ด้านล่าง
| เข็มหมุด | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| สถานะ | ปิด | ปิด | ปิด | ปิด | บน | บน | บน | ปิด |
สำหรับส่วนนี้คุณต้องเปิดรหัส ESP/ESP.INO ใน Arduino IDE และเปลี่ยนประเภทบอร์ดเป็นบอร์ด Generic ESP8266
เปลี่ยน "ขนาดแฟลช" ของโปรแกรมเป็น 4M (3M SPIFFS) - ซึ่งจะแบ่งส่วนของรหัสบางส่วนเพื่อให้เราสามารถพอดีกับ data/ โฟลเดอร์ของเรา คุณจะพบรหัสเว็บไซต์ของเราในโฟลเดอร์ Data ซึ่งเราต้องการนำทั้งหมดลงใน ESP ด้านล่างเป็นภาพหน้าจอของการตั้งค่าของเรา

ประการแรกอัปโหลดรหัสตามปกติ หากคุณกดอัปโหลดและคุณจะพบว่า IDE ไม่สามารถอัปโหลดได้หรือคุณได้รับผลลัพธ์เช่นนี้:

นี่หมายความว่า IDE กำลังรอให้ ESP รีบูต กดปุ่ม RESET บนบอร์ดเมื่อคุณเห็น IDE แสดงข้อความนี้ ควรอัปโหลดโดยไม่ต้องผูกปม
เมื่อรหัสเสร็จสิ้นให้ใช้ ESP Data Upload Tool (ตามที่เน้นในภาพด้านบน) เพื่ออัปโหลดเว็บไซต์ของเราไปยัง ESP คุณจะต้องกดปุ่มรีเซ็ตเหมือนก่อน เมื่อมีการตั้งโปรแกรมแล้วคุณสามารถปิด Dip -Switch 7 และเปิดมอนิเตอร์อนุกรมเพื่อดูว่าเอาท์พุทที่ ESP มีเมื่อคุณเชื่อมต่อกับฮอตสปอต "รีเลย์คอนโทรลเลอร์" และนำทางไปที่ http://192.168.4.1 - หรือดำเนินการต่อ
เช่นเดียวกับรหัส UNO เรามีการกำหนดอีกพวงสำหรับการดีบัก คุณสามารถเปิดใช้งานหรือปิดใช้งานข้อความการดีบักด้วยวิธีนี้
สิ่งสำคัญบางอย่างที่ต้องจดจำเมื่อเปลี่ยนรหัส:
Flash size เหมือนกันเสมอ หากคุณเปลี่ยนคุณจะต้องอัปเดตทั้งรหัสและเว็บไซต์อีกครั้งเมื่อทั้งสองส่วนถูกตั้งโปรแกรมไว้ในที่สุดก็เปลี่ยนสวิตช์ DIP เป็นด้านล่าง
| เข็มหมุด | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| สถานะ | บน | บน | ปิด | ปิด | ปิด | ปิด | ปิด | ปิด |
สิ่งนี้จะเชื่อมต่ออนุกรมของ ESP กับอนุกรมของ UNO ตอนนี้มันใช้พลังงานจาก USB เท่านั้นและจอภาพอนุกรมจะไม่เชื่อมต่อกับสิ่งใด
เปิด wifi ของโทรศัพท์ของคุณและรีบูต XC4411 - คุณควรพบว่ามีเครือข่ายไร้สายใหม่ที่เรียกว่า "คอนโทรลเลอร์รีเลย์" เชื่อมต่อกับมันจากนั้นเปิดเบราว์เซอร์แล้วไปที่: http://192.168.4.1

เว็บไซต์ไม่ได้ดูมากนัก แต่ได้ผล คุณควรกดปุ่มและค้นหารีเลย์ที่เปิดและปิด หากคุณรู้วิธีที่จะทำให้เว็บไซต์ดูดีและต้องการถ่ายภาพให้ดูดีขึ้นให้พัฒนา data/ โฟลเดอร์ใหม่และส่งไปที่แท็บปัญหา GitHub หรือแยก repo และส่งคำขอดึง
หากคุณพบว่าบางสิ่งที่ไม่ทำงานให้เชื่อมต่อคอมพิวเตอร์ของคุณกับเครือข่าย (หรือเชื่อมต่อ ESP กับเครือข่ายบ้านของคุณ) และเปิดเว็บไซต์บนคอมพิวเตอร์ของคุณ คุณควรจะสามารถเปิด "เครื่องมือตรวจสอบโครเมี่ยม" และค้นหาคอนโซลที่จะส่งข้อความ
วิธีการที่แน่นอนในการทดสอบสิ่งที่เกิดขึ้นคือการเชื่อมต่อจอภาพอนุกรมเข้ากับอุปกรณ์ (ด้วยการสลับการแช่แข็งที่สอดคล้องกับส่วนที่คุณกำลังทดสอบ) และทดสอบแต่ละส่วนของรหัสตามที่คุณต้องการ
>3a เปิดรีเลย์ 3 และ >3d ปิดรีเลย์ 3>1a บนจอภาพอนุกรม เห็นได้ชัดว่าเว็บไซต์ต้องการการทำงาน แต่การเปลี่ยนแปลงจำนวนมากสามารถเกิดขึ้นได้กับโครงการนี้ คุณควรมีพินฟรีและสิ่งที่คุณต้องทำเพื่อเพิ่มบางสิ่งบางอย่างคือ:
ด้านล่างนี้เป็นบางกลุ่มรหัสที่จะอธิบาย
บนเว็บไซต์คือปุ่มที่เราใช้ในการเปิดรีเลย์มันเป็นองค์ประกอบ <button id='3' class='relay'></button> ที่มี ID ของ PIN คืออะไร (ไม่ทั้งหมด แต่ใกล้พอสำหรับตัวอย่างนี้)
จากนั้นเรามีรหัส JavaScript (ง่าย):
$ ( "button.relay" ) . on ( "click" , function ( ) {
//do this when a button with the class 'relay' is clicked
} ) ; ในฟังก์ชั่นนี้เรา fetch() หน้าเว็บใหม่ซึ่งชี้ไปที่ /relay และหากสถานะการส่งคืนนั้นตกลงเราจะเพิ่มคลาส "ISON" ลงในปุ่ม:
fetch ( "relay?relay=3&mode=activate" ) . then ( response => {
if ( response . status == 200 ) {
button . addClass ( "isOn" ) ;
}
} ) ; ซึ่งหมายความว่าเว็บไซต์จะพยายามเข้าถึงหน้าเว็บใหม่ที่ http://192.168.4.1/relay พร้อมพารามิเตอร์ของ ?relay=3&mode=activate ลองตรวจสอบรหัส ESP:
// firstly, set the handler function in the setup():
server.on( " /relay " , handleRelayCommand);
// ... later ...
void handleRelayCommand (){
String relayNumber = server. arg ( " relay " );
String mode = server. arg ( " mode " );
// ...
} command server.arg("relay"); เพียงแค่ได้รับการตั้งค่าการโต้เถียง "รีเลย์" ในคำขอดั้งเดิมของเรา: ?relay=3&mode=activate นี่จะเป็นสตริง "3" ในทำนองเดียวกันอาร์กิวเมนต์โหมดถูกตั้งค่าเป็นสตริง "activate"
จากนั้นเราก็ทำการตรวจสอบบางอย่างค้นหาสิ่งที่รีเลย์ "3" สอดคล้องกับและ "activate" หมายถึงเรากำลังเปิดรีเลย์และส่งสิ่งนั้นเป็นคำสั่งไปยัง UNO:
Serial.write( ' > ' ); // start of command
Serial.write( ' 3 ' ); // relay 3
Serial.write( ' a ' ); // activate, or turn onสิ่งนี้จะถูกตีความโดย UNO ซึ่งจะเปิดรีเลย์จริง ๆ แล้ว:
ใน uno.ino (อีกครั้งง่าย):
while (Serial.read() != ' > ' ) // do nothing until we get '>'
continue ;
char relay = Serial.read(); // next character is relay;
char mode = Serial.read(); // next character is mode;
// ... do some checks, turn char into int, see if it's valid, etc.
digitalWrite (theRelay, theMode); สิ่งหนึ่งที่ควรทราบคือการไหลของข้อมูลเป็นเพียงทิศทางเดียวในรหัสนี้ไม่มี Serial.write() บน uno ที่จะเป็น Serial.read() โดย ESP