จำชื่อ MQTTเนื่องจากเป็นโปรโตคอลการสื่อสารเครือข่ายประเภท M2M (Machine to Machine) ที่ค่อนข้างจะฟังดู กำลังเป็นที่นิยมอย่างมากเนื่องจากยุคใหม่ของ Internet of Things หรือ IoT (Internet of Things) สำหรับตัวย่อในภาษาอังกฤษ นอกจากนี้ยังเป็นโปรโตคอลแบบเปิดซึ่งให้ข้อดีหลายประการ
ในความเป็นจริงมันกลายเป็นหนึ่งในเสาหลักของ IoT เนื่องจากค่อนข้างดีในอุปกรณ์ที่มีข้อ จำกัด ในการส่งสัญญาณเช่นนี้ ตัวย่อ MQTT มาจาก การจัดคิวข้อความ Telemetry Transportซึ่งเป็นมาตรฐานแบบเปิดจาก OASIS และ ISO (ISO / IEC 20922) สำหรับการสื่อสารบนเครือข่ายและโดยทั่วไปจะทำงานบน TCP / IP ที่มีชื่อเสียง
โปรโตคอลเครือข่าย
ลอส โปรโตคอลการสื่อสาร เป็นกฎที่อนุญาตให้อุปกรณ์หรือระบบสองเครื่องขึ้นไปสื่อสารกันได้ นั่นคือเป็นโปรโตคอลในการส่งข้อมูลด้วยวิธีการต่างๆและด้วยรูปแบบที่กำหนดไว้ไม่ว่าจะดำเนินการโดยซอฟต์แวร์และฮาร์ดแวร์ (หรือทั้งสองอย่าง)
El มาตรฐาน ของโปรโตคอลกำหนดลักษณะการสื่อสารที่หลากหลาย มันสามารถไปจากกฎของการซิงโครไนซ์ความหมายไวยากรณ์รูปแบบแพ็คเก็ต ฯลฯ และความจริงก็คือพวกเขาไม่ใช่สิ่งเล็กน้อยเนื่องจากทุกวันนี้เราสามารถใช้อินเทอร์เน็ตและเครือข่ายการสื่อสารอื่น ๆ ได้ ...
และแน่นอนว่าไม่ได้มีเพียงโปรโตคอลเดียว แต่มีหลายโปรโตคอล ตัวอย่างเช่น, ที่มีชื่อเสียง DNS, FTP, MQTT, HTTP และ HTTPS, IMAP, LDAP, NTP, DHCP, SSH, Telnet, SNMP, SMTP เป็นต้นสำหรับเลเยอร์แอปพลิเคชัน ในขณะที่อยู่ในเลเยอร์การขนส่งคุณจะพบบางส่วนที่มีชื่อเสียงเช่น TCP, UDP ฯลฯ รวมถึงเลเยอร์อินเทอร์เน็ตเช่น IPv4 หรือ IPv6 (ซึ่งเป็นจำนวนที่มากที่สุดของ IP ที่มีอยู่ IoT), IPSec ฯลฯ และอื่น ๆ จากลิงค์เลเยอร์เช่น DSL, Ethernet, WiFi, ARP เป็นต้น
เกี่ยวกับโปรโตคอล IoT
แน่นอนว่ามีโปรโตคอลการสื่อสารที่เฉพาะเจาะจงหรือสามารถใช้กับไฟล์ IoT. กล่าวคือเมื่อพิจารณาจากส่วนก่อนหน้าพวกเขาจะเป็นชุดของมาตรฐานที่กำหนดไว้เพื่อให้อุปกรณ์ IoT ตั้งแต่สองเครื่องขึ้นไปสามารถสื่อสารและทำความเข้าใจซึ่งกันและกันได้และโดยปกติจะเป็น M2M นั่นคือการสื่อสารระหว่างเครื่องกับเครื่องนั่นเอง อุปกรณ์ IoT จำนวนมากเชื่อมต่อและแบ่งปันข้อมูลจากเซ็นเซอร์หรือแหล่งอื่น ๆ
เนื่องจากอุปกรณ์ IoT จำนวนมากโปรโตคอลเหล่านี้ต้องเป็นไปตามข้อกำหนดนอกเหนือจากข้อ จำกัด ของแบนด์วิดท์ความเร็วและอื่น ๆ (โปรดทราบว่าอุปกรณ์จำนวนมากฝังอยู่และราคาถูก) ซึ่งโดยปกติจะอยู่ในอุปกรณ์บางอย่าง และฉันหมายถึงความจริงที่ว่า ต้องปรับขนาดได้เพื่อให้สามารถเพิ่มอุปกรณ์ที่เชื่อมต่อได้มากขึ้นหากจำเป็นและไม่ส่งผลกระทบต่อระบบทั่วโลก
นอกจากนี้ยังต้องมีไฟล์ การพึ่งพาต่ำ การเชื่อมต่อระหว่างอุปกรณ์เพื่อไม่ให้เกิดปัญหาหากถอดอุปกรณ์ออก และแน่นอนว่าในขณะเดียวกันก็มีการแสวงหาความสามารถในการทำงานร่วมกันสูงเพื่อให้สามารถใช้งานได้กับอุปกรณ์จำนวนมากและระบบที่หลากหลายเนื่องจากโลกของ IoT นั้นค่อนข้างแตกต่างกัน
คุณสมบัติที่มีประโยชน์อื่น ๆ จะทำให้ใช้งานได้ง่าย ความปลอดภัยฯลฯ โปรดทราบว่า IoT กำลังสร้างความท้าทายที่ยิ่งใหญ่ในด้านความปลอดภัย ยิ่งไปกว่านั้นเมื่ออุปกรณ์ที่เชื่อมต่อจำนวนมากมีแนวโน้มที่จะมีความสำคัญในบางกรณี ...
แนวคิดที่สำคัญ
ที่กล่าวว่าต้องบอกว่าโซลูชันสำหรับ IoT ใช้เซิร์ฟเวอร์ส่วนกลางเพื่อรับข้อความจากอุปกรณ์ที่เชื่อมต่อทั้งหมดที่ปล่อยและแจกจ่ายไปยังอุปกรณ์ IoT ที่เชื่อมต่อทั้งหมดที่กำลังฟังอยู่ เซิร์ฟเวอร์นั้นคือสิ่งที่เรียกว่า เราเตอร์หรือนายหน้า. สิ่งที่อยู่ห่างไกลจากความสัมพันธ์ไคลเอนต์เซิร์ฟเวอร์แบบเดิมในบางประการ
นอกจากนี้ วิธีการ ที่คุณสามารถพบได้ในโปรโตคอลการสื่อสารเหล่านี้สำหรับ IoT ได้แก่ :
- ผับซับ: Publish / Susbcribe เป็นรูปแบบการส่งข้อความที่อุปกรณ์ (Sub) แจ้งโบรกเกอร์ว่าต้องการรับข้อความในขณะที่อุปกรณ์อื่น (Pub) จะเผยแพร่ข้อความเพื่อให้โบรกเกอร์แจกจ่ายไปยังอุปกรณ์อีกเครื่องที่รออยู่
- ร.ป.ภ: Router Remoder Procedure Calls เป็นอีกรูปแบบหนึ่งของการเรียกใช้กระบวนการระยะไกล ในนั้นอุปกรณ์ (Callee) แจ้งให้นายหน้าทราบว่าจะดำเนินการตามขั้นตอนบางอย่างและนายหน้าจะแจกจ่ายไปยังอุปกรณ์อื่น (ผู้โทร) ซึ่งกระบวนการดังกล่าวถูกดำเนินการ
ในการดำเนินการตามวิธีการหรือรูปแบบเหล่านี้ก โครงสร้างพื้นฐานการส่งข้อความ. และในแง่นี้สามารถแยกแยะได้สองอย่าง:
- คิวข้อความ: บริการส่งข้อความที่สร้างคิวข้อความเดียวสำหรับลูกค้าทั้งหมดที่เริ่มการสมัครสมาชิกกับโบรกเกอร์ ข้อความหลังจะเก็บข้อความไว้จนกว่าจะส่งถึงลูกค้า หากไคลเอนต์หรือผู้รับไม่ได้เชื่อมต่อระบบจะดูแลจนกว่าจะเชื่อมต่อ บริการประเภทนี้เหมือนกับบริการที่ใช้ในแอพส่งข้อความโต้ตอบแบบทันทีเช่น Telegra, WhatsApp, Messenger เป็นต้น
- บริการข้อความ: เป็นบริการอื่นที่นายหน้าส่งข้อความไปยังไคลเอนต์ผู้รับที่เชื่อมต่อโดยกรองตามประเภทของข้อความ หากไคลเอนต์หรืออุปกรณ์รับถูกตัดการเชื่อมต่อข้อความจะหายไป (แม้ว่าอาจมีระบบบันทึกอยู่บ้างก็ตาม)
โปรโตคอล IoT
เมื่อได้เห็นข้างต้นแล้วเรามาดูใกล้ ๆ กันดีกว่า โปรโตคอล IoT ที่เป็นที่รู้จักกันดี สิ่งที่โดดเด่นที่สุดของ M2M ได้แก่ :
- AMQP (โปรโตคอลการจัดคิวข้อความขั้นสูง): เป็นโปรโตคอลประเภท PubSub ของคิวข้อความ ออกแบบมาให้มีความสามารถในการทำงานร่วมกันได้ดีและรับรองความน่าเชื่อถือ โดยเฉพาะอย่างยิ่งสำหรับแอปพลิเคชันขององค์กรประสิทธิภาพสูงเครือข่ายเวลาแฝงสูงวิกฤต ฯลฯ
- WAMP (โปรโตคอลการส่งข้อความของเว็บแอปพลิเคชัน): เป็นโปรโตคอลแบบเปิดอีกประเภทหนึ่งของ PubSub เช่น rRPC และทำงานบน WebSockets
- CoAP (โปรโตคอลแอปพลิเคชันที่ จำกัด ): เป็นโปรโตคอลที่ออกแบบมาเป็นพิเศษสำหรับแอพพลิเคชั่นความจุต่ำ
- TOMP (โปรโตคอลการส่งข้อความแบบสตรีมมิงแบบข้อความ): โปรโตคอลที่ง่ายมากและเพื่อให้เกิดความสามารถในการทำงานร่วมกันสูงสุด HTTP ใช้ในการส่งข้อความ
- XMPP (eXtensible Messaging และ Presence Protocol): โปรโตคอลอื่นที่ใช้ใน IoT สำหรับแอพส่งข้อความโต้ตอบแบบทันทีและอิงตาม XML ม. ค. คดีนี้ยังเปิดอยู่
- WMQ (คิวข้อความ WebSphere): โปรโตคอลที่พัฒนาโดย IBM เป็นประเภทคิวข้อความตามชื่อแนะนำและเน้นข้อความ
- MQTT: (ดูหัวข้อถัดไป)
ทุกอย่างเกี่ยวกับ MQTT
El โปรโตคอล MQTT เป็นโปรโตคอลการสื่อสาร Message Queue ซึ่งเป็นไปตามรูปแบบ PubSub และประเภท M2M ตามที่ฉันได้กล่าวไปแล้ว มีการใช้กันอย่างแพร่หลายใน IoT และใช้สแต็ก TCP / IP ที่ใช้บนอินเทอร์เน็ต
ในกรณีของ MQTT ทุกการเชื่อมต่อจะยังคงเปิดอยู่ และนำกลับมาใช้ใหม่ในทุกการสื่อสารที่จำเป็น สิ่งที่แตกต่างจากสิ่งที่เกิดขึ้นในโปรโตคอลอื่น ๆ ที่รู้จักคือการสื่อสารแต่ละครั้งต้องมีการเชื่อมต่อใหม่
ความได้เปรียบ
ข้อดีของโปรโตคอล MQTT นั้นค่อนข้างชัดเจนในแง่ของการสื่อสาร M2M สำหรับ IoT นอกเหนือจากทุกสิ่งที่กล่าวไว้ข้างต้นแล้วยังมีโปรโตคอลที่ให้:
- ความสามารถในการปรับขนาดเพื่อเชื่อมต่อกับลูกค้ามากขึ้นเรื่อย ๆ
- การแยกส่วนระหว่างไคลเอนต์เพื่อการพึ่งพาน้อยลง
- อะซิงโครไนซ์
- ความเรียบง่าย
- ความเบาเพื่อไม่ให้ใช้ทรัพยากรมากเกินไป (แม้ว่าจะมีการรักษาความปลอดภัย TLS / SSL ก็ตาม)
- ประหยัดพลังงานสำหรับอุปกรณ์ที่ขึ้นอยู่กับแบตเตอรี่หรือทำงานตลอด 24 ชั่วโมงไม่จำเป็นต้องใช้แบนด์วิดท์ขนาดใหญ่ (เหมาะสำหรับการเชื่อมต่อที่ช้าเช่นอุปกรณ์ไร้สายบางรุ่น)
- ความปลอดภัยและคุณภาพเพื่อความน่าเชื่อถือและความแข็งแกร่งในการสื่อสาร
ประวัติศาสตร์
MQTT ถูกสร้างขึ้นในยุค 90 โดยเป็นเวอร์ชันแรกของไฟล์ โปรโตคอลในปี 1999. Andy Stanford-Clark แห่ง IBM และ Arlen Nipper แห่ง Cirrus Link (เดิมชื่อ Eurotech)
La ความคิดเริ่มต้น คือการสร้างโปรโตคอลเพื่อตรวจสอบไปป์ไลน์ที่เดินทางผ่านทะเลทรายด้วยโปรโตคอลการสื่อสารที่มีประสิทธิภาพ (ใช้แบนด์วิธต่ำ) แสงและการใช้พลังงานต่ำ ตอนนั้นแพงมาก แต่ตอนนี้กลายเป็นโปรโตคอลราคาถูกและเปิดกว้าง
โปรโตคอลเริ่มต้นได้รับการปรับปรุงด้วยรูปลักษณ์ของ เวอร์ชันใหม่ เช่น MQTT v3.1 (2013) ภายใต้ข้อกำหนด OASIS (Organization for the Advancement of Structured Information Standards) เป็นต้น คุณควรรู้ว่าในตอนแรกเป็นโปรโตคอลที่เป็นกรรมสิทธิ์ของ IBM แต่จะเปิดตัวในปี 2010 และกลายเป็นมาตรฐานใน OASIS ...
วิธีการทำงานของการเชื่อมต่อ MQTT
โปรโตคอล MQTT ใช้ ตัวกรองสำหรับข้อความที่ส่งถึงลูกค้าแต่ละรายตามหัวข้อหรือหัวข้อที่จัดลำดับตามลำดับชั้น ด้วยวิธีนี้ลูกค้าสามารถโพสต์ข้อความในหัวข้อเฉพาะได้ ด้วยวิธีนี้ลูกค้าหรืออุปกรณ์ที่เชื่อมต่อทั้งหมดที่สมัครรับหัวข้อจะได้รับข้อความผ่านนายหน้า
เช่นเดียวกับ MQ ข้อความจะยังคงอยู่ในคิว และจะไม่สูญหายจนกว่าลูกค้าจะได้รับข้อความนั้น
มีการเชื่อมต่อตามที่ฉันระบุไว้ด้วย ผ่าน TCP / IPและเซิร์ฟเวอร์หรือนายหน้าจะเก็บบันทึกของลูกค้าที่เชื่อมต่อ ตามค่าเริ่มต้นอุปกรณ์จะใช้พอร์ตการสื่อสารหมายเลข 1883 แม้ว่าคุณอาจพบพอร์ต 8883 หากคุณใช้ SSL / TLS เพื่อเพิ่มความปลอดภัย
เพื่อให้การเชื่อมต่อเป็นไปได้ไม่เพียง แต่ต้องมีไคลเอนต์เซิร์ฟเวอร์และพอร์ตเท่านั้น นอกจากนี้ยังมีคนอื่น ๆ พัสดุหรือข้อความที่ส่ง สำหรับการสื่อสารที่จะเกิดขึ้น:
- สร้างการเชื่อมต่อ: เชื่อมต่อข้อความ / แพ็คเก็ตที่ไคลเอ็นต์ส่งพร้อมข้อมูลที่จำเป็นทั้งหมด ข้อมูลดังกล่าวรวมถึงรหัสลูกค้าชื่อผู้ใช้รหัสผ่าน ฯลฯ นายหน้าหรือเซิร์ฟเวอร์ตอบกลับด้วยแพ็กเก็ต CONNACK ซึ่งจะแจ้งให้ลูกค้าทราบว่าการเชื่อมต่อได้รับการยอมรับปฏิเสธ ฯลฯ
- ส่งและรับข้อความ: เมื่อสร้างการเชื่อมต่อแล้วแพ็คเกจหรือข้อความของ PUBLISH จะถูกใช้กับหัวข้อและเพย์โหลดของข้อความที่ส่งไปยังโบรกเกอร์ ในทางกลับกันลูกค้าที่สนใจหรือลูกค้าใช้แพ็คเกจสมัครและยกเลิกการสมัครสมาชิกเพื่อสมัครหรือถอนการสมัครตามลำดับ นายหน้าจะตอบกลับด้วยแพ็คเกจ SUBACK และ UNSUBACK ตามลำดับเพื่อรายงานความสำเร็จของการดำเนินการที่ลูกค้าร้องขอ
- การรักษาการเชื่อมต่อ: เพื่อรับประกันว่าการเชื่อมต่อยังคงเปิดอยู่ไคลเอนต์สามารถส่งแพ็กเก็ต PINGREQ ที่จะจับคู่กับแพ็กเก็ต PINGRESP จากเซิร์ฟเวอร์ได้เป็นระยะ
- สิ้นสุดการเชื่อมต่อ: เมื่อไคลเอนต์ยกเลิกการเชื่อมต่อจะส่งแพ็กเก็ต DISCONNECT เพื่อรายงานเหตุการณ์นั้น
เหล่านั้น ข้อความหรือแพ็คเกจ สิ่งที่ฉันได้พูดถึงมีโครงสร้างเหมือนกับแพ็กเก็ตอื่น ๆ ของโปรโตคอลเครือข่ายอื่น ๆ :
- ส่วนหัวหรือส่วนหัวคงที่: เป็นส่วนคงที่ซึ่งมีพื้นที่ระหว่าง 2-5 ไบต์ ประกอบด้วยรหัสควบคุม ID ของประเภทข้อความที่ส่งและความยาว ระหว่าง 1-4 ไบต์ใช้ในการเข้ารหัสความยาวโดยใช้ 7 บิตแรกของแต่ละอ็อกเต็ตเป็นข้อมูลสำหรับความยาวและบิตต่อเนื่องเพิ่มเติมเพื่อตรวจสอบว่ามีมากกว่าหนึ่งไบต์ที่ประกอบเป็นความยาวของข้อความ
- ส่วนหัวตัวแปร: ไม่จำเป็นเสมอไป แต่เป็นทางเลือก มีอยู่ในบางแพ็คเกจในบางสถานการณ์หรือบางข้อความเท่านั้น
- เนื้อหาหรือข้อมูล: ข้อมูลแพ็คเก็ตคือสิ่งที่มีข้อความที่จะส่งจริงๆ อาจมีขนาดตั้งแต่ไม่กี่ kB จนถึงขีด จำกัด 256 MB
หากคุณสนใจอยากรู้ รหัสที่สอดคล้องกันในเลขฐานสิบหก สำหรับประเภทของข้อความที่ส่ง ได้แก่ :
ข่าวสาร | รหัส |
---|---|
เชื่อมต่อ | 0x10 |
เชื่อมต่อ | 0x20 |
เผยแพร่ | 0x30 |
พับ | 0x40 |
ผับ | 0x50 |
ปูเบรล | 0x60 |
ผับคอม | 0x70 |
สมัครสมาชิก | 0x80 |
กลับ | 0x90 |
ไม่ถูกต้อง | 0xA0 |
ยกเลิกการลบ | 0xB0 |
ปิงเรค | 0xC = |
PingRESP | 0xD0 |
ยกเลิกการเชื่อมต่อ | 0xE0 |
คุณภาพและความปลอดภัยของการสื่อสาร
รายละเอียดที่สำคัญอีกอย่างของข้อความโดย MQTT คือไฟล์ คุณภาพของบริการหรือ QoSและความปลอดภัย ความแข็งแรงของระบบการสื่อสารในกรณีที่เกิดความล้มเหลวและความปลอดภัยจะขึ้นอยู่กับสิ่งนี้
เกี่ยวกับคุณภาพนั้นสามารถกำหนดได้ 3 ระดับที่แตกต่างกัน:
- QoS 0 (ไม่รับรู้)- ข้อความจะถูกส่งเพียงครั้งเดียวและในกรณีที่ล้มเหลวจะไม่ถูกส่ง ใช้เมื่อไม่สำคัญ
- QoS 1 (รับทราบ): ข้อความจะถูกส่งหลายครั้งเท่าที่จำเป็นเพื่อรับประกันการส่งมอบให้กับลูกค้า ข้อเสียคือลูกค้าอาจได้รับข้อความเดียวกันหลายครั้ง
- QoS 2 (มั่นใจได้)- คล้ายกับด้านบน แต่รับประกันว่าจะจัดส่งเพียงครั้งเดียว มักใช้สำหรับระบบที่มีความสำคัญมากขึ้นซึ่งต้องการความน่าเชื่อถือมากขึ้น
ในทางกลับกันสำหรับ ความปลอดภัย MQTTสามารถใช้มาตรการต่างๆเพื่อรับรองความแข็งแกร่งในเรื่องนี้ ดังที่ฉันได้กล่าวไปแล้วก่อนหน้านี้การรับรองความถูกต้องของชื่อผู้ใช้และรหัสผ่านเช่นเดียวกับโปรโตคอลอื่น ๆ สามารถมั่นใจได้โดยใช้ SSL / TLS แม้ว่าอุปกรณ์ IoT จำนวนมากที่มีความจุต่ำหรือทรัพยากรอาจมีปัญหากับงานที่ล้นมือเมื่อใช้การสื่อสารที่ปลอดภัยประเภทนี้ ...
ด้วยเหตุนี้อุปกรณ์ IoT จำนวนมากที่ใช้ MQTT จึงใช้รหัสผ่านและผู้ใช้ใน ข้อความธรรมดาซึ่งอาจทำให้ใครบางคนดักจับการรับส่งข้อมูลในเครือข่ายเพื่อรับพวกเขาได้อย่างง่ายดาย และหากยังไม่เพียงพอโบรกเกอร์ยังสามารถกำหนดค่าให้ยอมรับการเชื่อมต่อแบบไม่ระบุตัวตนซึ่งจะช่วยให้ผู้ใช้สามารถสร้างการสื่อสารได้โดยมีความเสี่ยงมากขึ้น
ใช้ MQTT กับ Arduino
แน่นอนคุณสามารถ ใช้โปรโตคอล MQTT กับ Arduino และบอร์ดพัฒนาอื่น ๆ เช่นเดียวกับ Rapsberry Pi เป็นต้น ในการดำเนินการนี้คุณต้องจัดเตรียมบอร์ด Arduino ของคุณพร้อมการเชื่อมต่อหากไม่มี นอกจากนี้ห้องสมุด Arduino Client สำหรับ MQTT มันจะช่วยคุณในงานเหล่านี้ ไลบรารีนี้เข้ากันได้กับ:
- ArduinoYUN
- Arduino WiFi (โล่)
- Arduino Ethernet (โล่)
- โมดูล ESP8266
- Intel Galileo / Edison
- ราสเบอร์รี่ Pi
- ...
ทันทีที่ ไปยังรหัสเพื่อใช้ MQTT ในบางแอปพลิเคชันความจริงก็คือมันง่าย ในภาพ Fritzing คุณจะเห็นแผ่นโลหะ Arduino UNO Arduino Ethernet ได้เพิ่มการเชื่อมต่อใดบ้างและยังได้รับการเชื่อมต่อด้วย เซ็นเซอร์ความชื้นและอุณหภูมิ DHT22แม้ว่ามันจะเป็นอย่างอื่นก็ตาม ...
ตกลงตามที่กล่าวไว้สำหรับรหัสที่คุณต้องสร้าง Arduino IDE ในการทำงานกับโปรโตคอล MQTT บน Arduino นั้นง่ายมาก:
- ไปยัง ส่งข้อความ MQTT
#include <SPI.h> #include <Ethernet.h> #include <PubSubClient.h> #include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT22 // Direccion MAC del adaptador Ethernet byte mac[] = { 0xCE, 0xAB, 0x0E, 0x3F, 0xFE, 0xD4 }; // IP del servidor (broker) IPAddress mqtt_server(192, 168, 1, 4); // Topic o tema con el que se trabaja const char* topicName = "test"; DHT dht(DHTPIN, DHTTYPE); EthernetClient ethClient; PubSubClient client(ethClient); void setup() { Serial.begin(9600); if (Ethernet.begin(mac) == 0) { Serial.println("Fallo en Ethernet usando DHCP"); } // Puerto 1883 de comunicación client.setServer(mqtt_server, 1883); dht.begin(); } void loop() { if (!client.connected()) { Serial.print("Conectando ...\n"); client.connect("Cliente Arduino"); } else { // Envío de informacion del sensor de temperatura y humedad float temp = dht.readTemperature(); char buffer[10]; dtostrf(temp,0, 0, buffer); client.publish(topicName, buffer); } // Tiempo entre envíos en ms (cada 10 segundos) delay(10000); }
- ไปยัง รับข้อความ โดย MQTT คุณต้องการจานเท่านั้น Arduino UNO และการเชื่อมต่อกับ Arduino Ethernet หรือองค์ประกอบอื่น ๆ สำหรับโค้ดตัวอย่างจะเป็น:
#include <SPI.h> #include <Ethernet.h> #include <PubSubClient.h> // Direccion MAC del adaptador Ethernet byte mac[] = { 0xCE, 0xAB, 0x0E, 0x3F, 0xFE, 0xD4 }; // IP del servidor (broker) IPAddress mqtt_server(192, 168, 1, 4); // Topic o tema con el que trabajr const char* topicName = "test"; EthernetClient ethClient; PubSubClient client(ethClient); void callback(char* topic, byte* payload, unsigned int length) { Serial.print("El mensaje ha llegado ["); Serial.print(topic); Serial.print("] "); int i=0; for (i=0;i<length;i++) { Serial.print((char)payload[i]); } Serial.println(); } void setup() { Serial.begin(9600); if (Ethernet.begin(mac) == 0) { Serial.println("Fallo en Ethernet al usar configuración DHCP"); } client.setServer(mqtt_server, 1883); client.setCallback(callback) } void loop() { if (!client.connected()) { Serial.print("Conectando ..."); if (client.connect("rece_arduino")) { Serial.println("conectado"); client.subscribe(topicName); } else { delay(10000); } } // Cliente a la escucha client.loop(); }
สำหรับข้อมูลเพิ่มเติมคุณสามารถ ดาวน์โหลดฟรี nuestro คู่มือ PDF ด้วยหลักสูตร Arduino IDE เพื่อเริ่มการเขียนโปรแกรม