การควบคุม WiFi ของ Model Train โดยใช้ MQTT: 9 ขั้นตอน
การควบคุม WiFi ของ Model Train โดยใช้ MQTT: 9 ขั้นตอน
Anonim
การควบคุม WiFi ของ Model Train โดยใช้ MQTT
การควบคุม WiFi ของ Model Train โดยใช้ MQTT

มีระบบโมเดลรถไฟมาตราส่วน TT แบบเก่า ฉันมีแนวคิดว่าจะควบคุมโลคอสเป็นรายบุคคลได้อย่างไร

เมื่อคำนึงถึงสิ่งนี้ ฉันจึงก้าวไปอีกขั้นและค้นหาสิ่งที่จำเป็นไม่เพียงแต่เพื่อควบคุมรถไฟเท่านั้น แต่ยังต้องมีข้อมูลเพิ่มเติมเกี่ยวกับแผนผังทั้งหมดและควบคุมอย่างอื่นด้วย (โคมไฟ สวิตช์ราง…)

นี่คือที่มาของระบบรถไฟจำลองที่ควบคุมด้วย WiFi

ขั้นตอนที่ 1: หลักการดำเนินการ

หลักการดำเนินงาน
หลักการดำเนินงาน

หลักการสำคัญคือการควบคุมแต่ละองค์ประกอบแยกจากกัน ไม่ว่าจะจากตัวควบคุมเดียวหรือจากแหล่งการควบคุมหลายแหล่ง โดยเนื้อแท้นี้ต้องการฟิสิคัลเลเยอร์ทั่วไป - WiFi ที่ชัดเจนที่สุด - และโปรโตคอลการสื่อสารทั่วไป MQTT

องค์ประกอบหลักคือโบรกเกอร์ MQTT อุปกรณ์ที่เชื่อมต่อทุกเครื่อง (รถไฟ เซ็นเซอร์ เอาท์พุต…) ได้รับอนุญาตให้สื่อสารผ่านโบรคเกอร์เท่านั้น และสามารถรับข้อมูลจากโบรคเกอร์เท่านั้น

หัวใจของอุปกรณ์คือตัวควบคุม WiFi ที่ใช้ ESP8266 ในขณะที่นายหน้า MQTT ทำงานบน Raspberry pi

ในตอนแรกความครอบคลุมของ Wifi นั้นมาจากเราเตอร์ WiFi และทุกอย่างเชื่อมต่อผ่านระบบไร้สาย

อุปกรณ์มี 4 ประเภท:

- ตัวควบคุมรถไฟ: มีอินพุตดิจิตอล 2 ช่อง, เอาต์พุตดิจิตอล 1 ช่อง, เอาต์พุต PWM 2 ช่อง (สำหรับควบคุมมอเตอร์ DC 2 ตัว)

- ตัวควบคุมเซนเซอร์: มีอินพุตดิจิตอล 7 ช่อง (สำหรับสวิตช์อินพุต ออปโตเซนเซอร์…)

- ตัวควบคุมเอาต์พุต: มีเอาต์พุตดิจิตอล 8 ช่อง (สำหรับสวิตช์ราง…)

- รีโมท WiFi: มีอินพุตตัวเข้ารหัสที่เพิ่มขึ้น 1 ตัว, อินพุตดิจิตอล 1 ตัว (เพื่อควบคุมรถไฟจากระยะไกล)

ระบบยังสามารถทำงานได้จาก Node-Red (จากแท็บเล็ต พีซี หรือสมาร์ทโฟน…)

ขั้นตอนที่ 2: การแลกเปลี่ยนข้อมูล MQTT และการกำหนดค่า

MQTT การแลกเปลี่ยนข้อมูลและการกำหนดค่า
MQTT การแลกเปลี่ยนข้อมูลและการกำหนดค่า

ตามโปรโตคอล MQTT ในตอนแรก อุปกรณ์ทุกเครื่องจะสมัครรับข้อมูลจากหัวข้อที่กำหนด และสามารถเผยแพร่ไปยังหัวข้ออื่นได้ นี่เป็นพื้นฐานของการสื่อสารของเครือข่ายควบคุมรถไฟ

เรื่องราวการสื่อสารนี้นำเสนอผ่านข้อความในรูปแบบ JSON เพื่อให้สั้นและมนุษย์สามารถอ่านได้

มองจากมุมมองที่ไกลกว่า: เครือข่ายมีเราเตอร์ WiFi ที่มี SSID (ชื่อเครือข่าย) และรหัสผ่านของตัวเอง อุปกรณ์ทุกชิ้นต้องรู้จัก 2 สิ่งนี้เพื่อเข้าถึงเครือข่าย WiFi โบรกเกอร์ MQTT ก็เป็นส่วนหนึ่งของเครือข่ายนี้เช่นกัน ดังนั้นเพื่อใช้โปรโตคอล MQTT อุปกรณ์ทุกเครื่องต้องทราบที่อยู่ IP ของโบรกเกอร์ และสุดท้าย อุปกรณ์ทุกเครื่องมีหัวข้อสำหรับสมัครรับข้อมูลและเผยแพร่ข้อความเป็นของตัวเอง

ในทางปฏิบัติ รีโมตคอนโทรลที่กำหนดจะใช้หัวข้อเดียวกันเพื่อเผยแพร่ข้อความที่สมัครรับข้อมูลรถไฟที่กำหนด

ขั้นตอนที่ 3: Train Controller

ผู้ควบคุมรถไฟ
ผู้ควบคุมรถไฟ

ในการควบคุมรถไฟของเล่น โดยพื้นฐานแล้ว เราต้องการ 3 สิ่ง: แหล่งจ่ายไฟ ตัวควบคุมที่เปิดใช้งาน WiFi และอุปกรณ์อิเล็กทรอนิกส์สำหรับขับมอเตอร์

แหล่งจ่ายไฟขึ้นอยู่กับแผนการใช้งานจริง: ในกรณีของ LEGO นี่คือกล่องแบตเตอรี่ Power Functions ในกรณีของชุดรถไฟสเกล "oldschool" TT หรือ H0 มันคือแหล่งจ่ายไฟ 12V ของแทร็ก

คอนโทรลเลอร์ที่เปิดใช้งาน WiFi คือคอนโทรลเลอร์ Wemos D1 mini (ตาม ESP8266)

อุปกรณ์อิเล็กทรอนิกส์สำหรับไดรเวอร์มอเตอร์เป็นโมดูลที่ใช้ TB6612

ตัวควบคุมรถไฟมีเอาต์พุต PWM ที่ควบคุมแยกกัน 2 ตัว อันหนึ่งใช้สำหรับควบคุมมอเตอร์และอีกอันหนึ่งใช้สำหรับส่งสัญญาณแสง มี 2 inpus สำหรับการตรวจจับตามการสัมผัสกกและเอาต์พุตดิจิตอลหนึ่งตัว

ตัวควบคุมยอมรับข้อความ JSON ผ่านโปรโตคอล WiFi และ MQTT

SPD1 ควบคุมมอเตอร์ เช่น ข้อความ {"SPD1": -204} ใช้เพื่อเคลื่อนมอเตอร์ถอยหลังด้วยกำลัง 80% (ค่าความเร็วสูงสุดคือ -255)

SPD2 ควบคุมความเข้มของไฟ LED ที่ "ไวต่อทิศทาง": ข้อความ {"SPD2": -255} ทำให้ไฟ LED (ถอยหลัง) ส่องแสงเต็มกำลัง

OUT1 ควบคุมสถานะของเอาต์พุตดิจิทัล: {"OUT1": 1} เปิดเอาต์พุต

หากสถานะของอินพุตเปลี่ยนแปลง ตัวควบคุมจะส่งข้อความตามนั้น: {"IN1": 1}

หากผู้ควบคุมได้รับข้อความที่ถูกต้อง ผู้ควบคุมจะดำเนินการและให้ข้อเสนอแนะแก่นายหน้า คำติชมเป็นคำสั่งที่ดำเนินการจริง ตัวอย่างเช่น หากนายหน้าส่ง {"SPD1": 280} มอเตอร์ทำงานเต็มกำลัง แต่ข้อความตอบกลับจะเป็น: {"SPD1": 255}

ขั้นตอนที่ 4: LEGO Train Control

LEGO Train Control
LEGO Train Control

ในกรณีของรถไฟ LEGO แผนผังจะแตกต่างกันเล็กน้อย

พลังงานมาจากกล่องแบตเตอรี่โดยตรง

จำเป็นต้องมีตัวแปลงแบบสเต็ปดาวน์ขนาดเล็กเพื่อจ่ายไฟ 3.5V สำหรับบอร์ด Lolin ที่ใช้ ESP8266

การเชื่อมต่อทำด้วยลวดต่อขยายของ LEGO 8886 ผ่าครึ่ง

ขั้นตอนที่ 5: รีโมทคอนโทรล

รีโมทคอนโทรล
รีโมทคอนโทรล

ผู้ควบคุมจะเผยแพร่ข้อความไปยังรถไฟเท่านั้น (กำหนดโดยสวิตช์ BCD)

เมื่อหมุนตัวเข้ารหัส รีโมทจะส่งข้อความ {"SPD1": "+"} หรือ {"SPD1": "-"}

เมื่อรถไฟได้รับข้อความ "ประเภทที่เพิ่มขึ้น" จะเปลี่ยนค่าเอาต์พุต PWM เป็น 51 หรือ -51

วิธีนี้ทำให้รีโมทเปลี่ยนความเร็วรถไฟได้ 5 ขั้นตอน (แต่ละทิศทาง)

การกดตัวเข้ารหัสที่เพิ่มขึ้นจะส่ง {"SPD1": 0}

ขั้นตอนที่ 6: ตัวควบคุมเซนเซอร์

ตัวควบคุมเซนเซอร์
ตัวควบคุมเซนเซอร์

ตัวควบคุมเซ็นเซอร์ที่เรียกว่าจะวัดสถานะของอินพุตและหากมีการเปลี่ยนแปลงใด ๆ ให้เผยแพร่ค่านั้น

ตัวอย่างเช่น: {"IN1": 0, "IN6": 1} ในตัวอย่างนี้ 2 อินพุตเปลี่ยนสถานะพร้อมกัน

ขั้นตอนที่ 7: ตัวควบคุมเอาต์พุต

ตัวควบคุมเอาต์พุต
ตัวควบคุมเอาต์พุต

ตัวควบคุมเอาต์พุตมีเอาต์พุตดิจิตอล 8 ช่อง ซึ่งเชื่อมต่อกับโมดูลที่ใช้ ULN2803

ได้รับข้อความผ่านหัวข้อที่สมัครรับข้อมูล

ตัวอย่างเช่น ข้อความ {"OUT4": 1, "OUT7": 1} เปิดเอาต์พุตดิจิทัล 4. และ 7.

ขั้นตอนที่ 8: Raspberry Pi และ WiFi Router

ฉันมีเราเตอร์ TP-Link WiFI ที่ใช้แล้ว ดังนั้นฉันจึงใช้สิ่งนี้เป็นจุดเข้าใช้งาน

โบรกเกอร์ MQTT คือ Raspberry Pi ที่ติดตั้ง Mosquitto

ฉันใช้ Raspbian OS มาตรฐานกับ MQTT ที่ติดตั้งด้วย:

sudo apt-get ติดตั้ง mosquitto mosquitto-clients python-mosquitto

ต้องกำหนดค่าเราเตอร์ TP-Link ให้จองที่อยู่สำหรับ Raspberry ดังนั้นหลังจากรีสตาร์ททุกครั้ง Pi จะมีที่อยู่ IP เดียวกันและอุปกรณ์ทุกเครื่องสามารถเชื่อมต่อได้

และนั่นแหล่ะ!

ขั้นตอนที่ 9: ตัวควบคุมสำเร็จรูป

ตัวควบคุมสำเร็จรูป
ตัวควบคุมสำเร็จรูป
ตัวควบคุมสำเร็จรูป
ตัวควบคุมสำเร็จรูป

นี่คือตัวควบคุมที่เสร็จแล้ว

โลโคมาตราส่วน TT มีขนาดเล็กมากจนต้องทำให้กระดานโลลินแคบ (ตัด) ให้เล็กพอที่จะใส่ลงในรถไฟได้

ไบนารีที่คอมไพล์แล้วสามารถดาวน์โหลดได้ ด้วยเหตุผลด้านความปลอดภัย การขยาย bin ถูกแทนที่เป็น txt