
สวัสดีทุกคน! บทความนี้จะอธิบายรายละเอียดและแสดงวิธีตั้งค่าการควบคุมระยะไกลของโมดูล esp20 โดยใช้แอปพลิเคชัน Android โดยใช้โปรโตคอล MQTT ในเวลาว่างเพียง 8266 นาที
แนวคิดของการควบคุมและการตรวจสอบจากระยะไกลได้กระตุ้นความคิดของผู้ที่หลงใหลเกี่ยวกับอุปกรณ์อิเล็กทรอนิกส์และการเขียนโปรแกรมอยู่เสมอ ท้ายที่สุดแล้ว ความสามารถในการรับหรือส่งข้อมูลที่จำเป็นได้ตลอดเวลา โดยไม่คำนึงถึงตำแหน่งที่ตั้งของคุณ ทำให้มีโอกาสมากมาย ในบทความก่อนหน้านี้ของฉัน и ) ฉันพยายามพิจารณาตัวเลือกราคาไม่แพงและค่อนข้างง่ายหลายตัวสำหรับการนำการควบคุมระยะไกลของไมโครคอนโทรลเลอร์ผ่านอินเทอร์เน็ต อย่างไรก็ตาม เวลาและโลกทั้งโลกไม่หยุดนิ่ง ความก้าวหน้ายังคงดำเนินต่อไปอย่างไม่ย่อท้อ ในช่วงเวลาสั้น ๆ นี้ โมดูล esp8266 ได้รับความนิยมอย่างกว้างขวาง ซึ่งด้วยราคาที่ถูกและ wi-fi ในตัว ได้กลายเป็นหนึ่งในองค์ประกอบหลักของสมาร์ทโฮม
ในขณะนี้ MQTT เป็นโปรโตคอลการถ่ายโอนข้อมูลขั้นสูงและเป็นที่นิยมมากที่สุดระหว่างอุปกรณ์แต่ละเครื่องภายในระบบสมาร์ทโฮม มีข้อดีหลายประการเหนือโปรโตคอลอื่น:
- ปริมาณการใช้ข้อมูลต่ำ
- การเชื่อมต่อระหว่างไคลเอ็นต์และเซิร์ฟเวอร์เปิดอยู่เสมอ
- ไม่โหลดช่องอินเทอร์เน็ต
— ไม่มีความล่าช้าในการรับส่งข้อมูล
— ระบบการสมัครสมาชิกหัวข้อที่สะดวก;
ทั้งหมดนี้ทำให้สามารถตรวจสอบและควบคุมได้แบบเรียลไทม์ อย่างไรก็ตาม MQTT ต้องการเซิร์ฟเวอร์ของตัวเอง ซึ่งทำหน้าที่เป็นสื่อกลางระหว่างไคลเอนต์เครือข่าย มีสองวิธีในการสร้างเซิร์ฟเวอร์ของคุณเองหรือใช้บริการของบุคคลที่สาม
ระบบควบคุมที่อธิบายประกอบด้วยสองส่วนหลัก: เซิร์ฟเวอร์ MQTT (โดยปกติจะเป็นส่วนเดียว) และไคลเอนต์ซึ่งอาจมีจำนวนมาก ในกรณีของเรา แอปพลิเคชัน Android และโมดูล esp8266 จะทำหน้าที่เป็นไคลเอ็นต์
อัลกอริทึมการทำงานของระบบมีดังนี้ ลูกค้าเชื่อมต่อกับเซิร์ฟเวอร์และทันทีหลังจากเชื่อมต่อ ลูกค้าแต่ละคนจะสมัครรับข้อมูลในหัวข้อที่เขาสนใจ การสื่อสารทั้งหมดระหว่างไคลเอนต์ส่งผ่านเซิร์ฟเวอร์ ซึ่งเปลี่ยนเส้นทางข้อมูลไปยังไคลเอนต์อื่นตามการสมัครของพวกเขา
เซิร์ฟเวอร์ MQTT
ในกรณีของเรา เราจะใช้บริการที่สะดวกมาก ซึ่งมีแผนภาษีฟรี (แมวน่ารัก) ที่จะครอบคลุมความต้องการอย่างเต็มที่สำหรับการติดตั้งระบบสมาร์ทโฮมขนาดเล็กภายในองค์กร

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

แอพพลิเคชั่นสำหรับแอนดรอยด์
แอปพลิเคชันของเราจะทำหน้าที่เป็นแผงควบคุมสำหรับไมโครคอนโทรลเลอร์ และจะรับและแสดงข้อมูลทั้งหมดที่ได้รับจาก esp8266
แอพพลิเคชั่นนี้มีชื่อว่า และเป็นไคลเอนต์ mqtt สำเร็จรูปที่มีวิดเจ็ตที่มีประโยชน์จำนวนน้อย คุณสามารถดูวิดีโอสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีใช้แอป
เอสพี8266.
โมดูลถูกแฟลชในสภาพแวดล้อมการเขียนโปรแกรม Arduino อย่างไรก็ตาม ฉันต้องการทราบว่าโมดูลมีปัญหากับเฟิร์มแวร์ใน Arduino เวอร์ชันล่าสุด ดังนั้นฉันขอแนะนำให้ใช้เวอร์ชัน 1.6.4
ตัวอย่างเช่น LED (8266 ขา) และเซ็นเซอร์อุณหภูมิ ds5b18 (20 ขา) เชื่อมต่อกับ esp2
เนื่องจากจำเป็นต้องรับข้อมูลเพื่อควบคุม LED หลังจากเชื่อมต่อแล้ว esp จะต้องสมัครรับหัวข้อ "ทดสอบ / นำ" ที่สอดคล้องกัน มิฉะนั้น ข้อมูลที่ส่งทั้งหมดจะผ่านโดยไมโครคอนโทรลเลอร์ของเรา
คุณไม่จำเป็นต้องสมัครสมาชิกเพื่อส่งข้อมูลอุณหภูมิ แต่เมื่อส่งค่าอุณหภูมิ คุณต้องระบุหัวข้อที่จะส่งข้อมูลนี้
ด้านล่างนี้เป็นภาพร่างพร้อมความคิดเห็นโดยละเอียด
ร่าง Esp8266_mqtt.ino// Светодиод подлкючен к 5 пину
// Датчик температуры ds18b20 к 2 пину
#รวม
#รวม
#รวม
#รวม
#กำหนด ONE_WIRE_BUS 2
วันไวร์ วันไวร์(ONE_WIRE_BUS);
เซ็นเซอร์อุณหภูมิดัลลาส(&oneWire);
const char *ssid = "สนามบิน"; // ชื่อจุดเชื่อมต่อ WiFi
const char *pass = "รหัสผ่าน"; // รหัสผ่านจากจุดเข้าถึง
const char *mqtt_server = "เซิร์ฟเวอร์"; // ชื่อเซิร์ฟเวอร์ MQTT
const int mqtt_port = 11140; // พอร์ตสำหรับเชื่อมต่อกับเซิร์ฟเวอร์ MQTT
const char *mqtt_user = "เข้าสู่ระบบ"; // บันทึกจากเซิร์ฟเวอร์
const char *mqtt_pass = "ผ่าน"; // รหัสผ่านเซิฟเวอร์
#กำหนด BUFFER_SIZE 100
bool LedState = false;
inttm=300;
อุณหภูมิลอยตัว=0;
// ฟังก์ชั่นสำหรับรับข้อมูลจากเซิร์ฟเวอร์
การโทรกลับเป็นโมฆะ (const MQTT::Publish& pub)
{
Serial.print(pub.topic()); // ส่งออกชื่อหัวข้อไปที่พอร์ตซีเรียล
Serial.print(" => ");
Serial.print (pub.payload_string()) // ส่งออกค่าของข้อมูลที่รับได้ไปยังพอร์ตซีเรียล
สตริง payload = pub.payload_string();
if(String(pub.topic()) == "test/led") // ตรวจสอบว่าข้อมูลมาจากหัวข้อที่เราต้องการหรือไม่
{
int stled = payload.toInt(); // แปลงข้อมูลที่ได้รับให้เป็นชนิดจำนวนเต็ม
digitalWrite(5,สเต็ด); // เปิดหรือปิดไฟ LED ขึ้นอยู่กับค่าข้อมูลที่ได้รับ
}
}
WiFiClient ไคลเอนต์;
ไคลเอนต์ PubSubClient (wclient, mqtt_server, mqtt_port);
การตั้งค่าเป็นโมฆะ () {
เซ็นเซอร์.เริ่มต้น();
Serial.begin (115200);
ล่าช้า (10);
อนุกรม. println ();
อนุกรม. println ();
โหมดพิน (5, เอาต์พุต);
}
ห่วงเป็นโมฆะ () {
//เชื่อมต่อไวไฟ
หาก (WiFi.status() ไม่เท่ากับ WL_CONNECTED) {
Serial.print("กำลังเชื่อมต่อกับ ");
Serial.print(ssid) คือ
Serial.println("...");
WiFi.begin(ssid, pass);
หาก (WiFi.waitForConnectResult() ไม่เท่ากับ WL_CONNECTED)
กลับ;
Serial.println("เชื่อมต่อ WiFi แล้ว");
}
// เชื่อมต่อกับเซิร์ฟเวอร์ MQTT
หาก (WiFi.status() == WL_CONNECTED) {
ถ้า (!client.connected()) {
Serial.println("กำลังเชื่อมต่อกับเซิร์ฟเวอร์ MQTT");
หาก (client.connect(MQTT::Connect("arduinoClient2")
.set_auth(mqtt_user, mqtt_pass))) {
Serial.println("เชื่อมต่อกับเซิร์ฟเวอร์ MQTT");
client.set_callback(การโทรกลับ);
ลูกค้า.สมัครสมาชิก("ทดสอบ/นำ"); // สมัครสมาชิกหัวข้อพร้อมข้อมูลสำหรับ LED
} else {
Serial.println("ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ MQTT ได้");
}
}
หาก (client.connected()){
ไคลเอนต์.ลูป();
ส่งชั่วคราว();
}
}
} // สิ้นสุดลูปหลัก
// ฟังก์ชั่นสำหรับส่งค่าการอ่านจากเซ็นเซอร์วัดอุณหภูมิ
ว่างเปล่า TempSend(){
ถ้า (tm==0)
{
เซ็นเซอร์.requestTemperatures(); // เราได้ค่าอุณหภูมิจากเซ็นเซอร์
float temp = sensors.getTempCByIndex(0);
client.publish("ทดสอบ/ชั่วคราว",สตริง(ชั่วคราว)); // ส่งค่าอุณหภูมิไปที่หัวข้อสำหรับเซ็นเซอร์อุณหภูมิ
Serial.println(ชั่วคราว);
เวลา = 300; // หยุดชั่วคราวระหว่างการส่งค่าอุณหภูมิประมาณ 3 วินาที
}
ทีเอ็ม--;
ล่าช้า (10);
}
เป็นผลให้เราได้รับเครื่องมือที่สะดวกสำหรับการควบคุมระยะไกลและการตรวจสอบข้อมูล ซึ่งค่อนข้างง่ายต่อการเรียนรู้และแม้แต่ผู้เริ่มต้นก็สามารถทำได้
วิดีโอสาธิตการทำงานของระบบควบคุม

คำแนะนำวิดีโอโดยละเอียดสำหรับการตั้งค่าระบบ

หนึ่งในตัวเลือกสำหรับการใช้การควบคุม esp8266 ผ่านโปรโตคอล MQTT

การควบคุมอินเทอร์เน็ตของแถบ LED

หากคุณมีคำถามใดๆ เกี่ยวกับเนื้อหานี้ ฉันขอแนะนำให้ดูส่วนที่สองของวิดีโอ ซึ่งจะนำเสนอเนื้อหาได้ชัดเจนยิ่งขึ้น
ไฟล์เก็บถาวรประกอบด้วยภาพร่างและไลบรารีที่จำเป็นทั้งหมดสำหรับการแฟลชไมโครคอนโทรลเลอร์ด้วยภาพร่างจากตัวอย่าง
โปรดทราบว่าไลบรารี ESP8266WiFi.h ไม่รวมอยู่ในไฟล์เก็บถาวรนี้ แต่จะติดตั้งผ่านตัวจัดการบอร์ดในสภาพแวดล้อม Arduino
เซิร์ฟเวอร์ MQTT -
เชื่อมโยงไปยังแอปแดชบอร์ด IoT MQTT -
ขอขอบคุณทุกท่านที่ให้ความสนใจของคุณ
ที่มา: will.com
