MQTT: โปรโตคอลเครือข่ายแบบเปิดและความสำคัญใน IoT

MQTT โปรโตคอลเครือข่าย IoT

จำชื่อ MQTTเนื่องจากเป็นโปรโตคอลการสื่อสารเครือข่ายประเภท M2M (Machine to Machine) ที่ค่อนข้างจะฟังดู กำลังเป็นที่นิยมอย่างมากเนื่องจากยุคใหม่ของ Internet of Things หรือ IoT (Internet of Things) สำหรับตัวย่อในภาษาอังกฤษ นอกจากนี้ยังเป็นโปรโตคอลแบบเปิดซึ่งให้ข้อดีหลายประการ

ในความเป็นจริงมันกลายเป็นหนึ่งในเสาหลักของ IoT เนื่องจากค่อนข้างดีในอุปกรณ์ที่มีข้อ จำกัด ในการส่งสัญญาณเช่นนี้ ตัวย่อ MQTT มาจาก การจัดคิวข้อความ Telemetry Transportซึ่งเป็นมาตรฐานแบบเปิดจาก OASIS และ ISO (ISO / IEC 20922) สำหรับการสื่อสารบนเครือข่ายและโดยทั่วไปจะทำงานบน TCP / IP ที่มีชื่อเสียง

โปรโตคอลเครือข่าย

แบบจำลอง OSI และเลเยอร์ต่างๆ

ลอส โปรโตคอลการสื่อสาร เป็นกฎที่อนุญาตให้อุปกรณ์หรือระบบสองเครื่องขึ้นไปสื่อสารกันได้ นั่นคือเป็นโปรโตคอลในการส่งข้อมูลด้วยวิธีการต่างๆและด้วยรูปแบบที่กำหนดไว้ไม่ว่าจะดำเนินการโดยซอฟต์แวร์และฮาร์ดแวร์ (หรือทั้งสองอย่าง)

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

โปรโตคอล MQTT

แน่นอนว่ามีโปรโตคอลการสื่อสารที่เฉพาะเจาะจงหรือสามารถใช้กับไฟล์ 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

แพ็คเกจ 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

Arduino UNO กับ MQTT

แน่นอนคุณสามารถ ใช้โปรโตคอล MQTT กับ Arduino และบอร์ดพัฒนาอื่น ๆ เช่นเดียวกับ Rapsberry Pi เป็นต้น ในการดำเนินการนี้คุณต้องจัดเตรียมบอร์ด Arduino ของคุณพร้อมการเชื่อมต่อหากไม่มี นอกจากนี้ห้องสมุด Arduino Client สำหรับ MQTT มันจะช่วยคุณในงานเหล่านี้ ไลบรารีนี้เข้ากันได้กับ:

คุณรู้อยู่แล้วว่าคุณสามารถดาวน์โหลดและติดตั้งไลบรารีใน Arduino IDE ของคุณโดยใช้คำสั่ง: โคลน git https://github.com/knolleary/pubsubclient.git

ทันทีที่ ไปยังรหัสเพื่อใช้ 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();
}

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

สำหรับข้อมูลเพิ่มเติมคุณสามารถ ดาวน์โหลดฟรี nuestro คู่มือ PDF ด้วยหลักสูตร Arduino IDE เพื่อเริ่มการเขียนโปรแกรม


เป็นคนแรกที่จะแสดงความคิดเห็น

แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา