إدارة المناخ رخيصة ومبهجة (مكتبة IRremoteESP8266 واستراحة Tion 02)

العثور على طريقة لتكوين صداقات مع مكيف هواء (أو جهاز آخر يتم التحكم فيه بواسطة جهاز تحكم عن بعد) ومنزل ذكي ، أو التحكم في هذا الجهاز ، على سبيل المثال ، من جهاز خلوي.
نظريًا ، ما عليك سوى توصيل esp8266 (حوالي 2 دولارًا من الصينيين) بمصباح LED بالأشعة تحت الحمراء ، وملء البرامج الثابتة وستنتهي.


من الناحية العملية ، تبين أن الأمر أكثر تعقيدًا إلى حد ما ، لأنه كان على مراجعي esp-01 أن يلحم (شيء من هذا القبيل ) الأسلاك إلى ساق دائرة صغيرة بقياس 5 * 5 مم ، وإخراج GPIO إضافي. أوصي باستخدام مراجعة أقدم ، على سبيل المثال ESP-12.
بالنسبة للقراء غير المعتادين على esp8266 ، أقترح أن تقرأ هذه المقالة .

المكونات والوحدات


* مراجعة Esp8266 esp-01
* FT232RL: USB إلى Serial 232 TTL Adapter + wires for connection
* تسوب 4838 كاشف ضوئي
* منظم 3.3 فولت
* الترانزستور S9014
* الأشعة تحت الحمراء LED 5013IRAB (الطول الموجي 940 نانومتر)
* 330 أوم المقاوم
* مجلس المشروع
* لحام الحديد ، اللحيم ، الجريان.
* للعمل مع IR ، يتم استخدام المكتبة الرائعة IRremoteESP8266 . المؤلفون مارك زابو ، سيباستيان وارين ، كين شريف.

حفظ الرموز


* قم بتوصيل جهاز الكشف الضوئي ، VCC إلى +3.3 ، GND إلى الصفر ، OUT إلى GPIO.
* افتح مثالاً لإلقاء الرموز من مكتبتنا \ IRremoteESP8266 \ الأمثلة \ IRrecvDump \ IRrecvDump.ino
* إذا لزم الأمر ، قم بتغيير الرقم السري الذي قمنا بتوصيل OUT به الكاشف الضوئي (السطر "int RECV_PIN = 2؛").
* املأ البرامج الثابتة. نحن متصلون بإخراج الوحدة. بالتناوب ، اضغط باستمرار على أزرار التحكم عن بعد لرموز التفريغ.
للحصول على استراحة Tion O2 ، حصلت على الرموز التالية:
للأسفل
16711935
NEC الذي تم فك ترميزه: FF00FF (32 بت)
- فوق
16724175
NEC الذي تم فك ترميزه: FF30CF (32 بت)
- تعيين
16722135
NEC الذي تم فك ترميزه: FF28D7 (32 بت)
- القوة
16720095
NEC الذي تم فك ترميزه: FF20DF (32 بت)


لم تعد هناك حاجة إلى الكاشف الضوئي حتى تحتاج إلى "انتزاع" رمز وحدة تحكم عن بعد أخرى.

إدارة الجهاز


* قم بتوصيل IR LED وفقًا للمخطط.

(الصورة مستعارة من Fritzing)
يمكن استخدام GPIO بشكل مختلف. من جهد 3.3 فولت ، يعمل LED أيضًا بشكل طبيعي.
UPD: كما هو موضح بحق في التعليقات ، فمن المستحسن استخدام المقاوم الحد الحالي .
* البرنامج الثابت التجريبي مع الخادم هنا
\ IRremoteESP8266 \ أمثلة \ IRServer \ IRServer.ino
* قم بتغيير اسم وكلمة المرور الخاصة بنقطة الوصول الخاصة بك حتى يتمكن esp من الاتصال بها. وكذلك عدد GPIO المستخدم
const char* ssid = ".....";
const char* password = ".....";
IRsend irsend(0);

* وحدة البرامج الثابتة.
* عند الاتصال بوحدة التحكم ، سيتم عرض عنوان IP المخصص بواسطة esp.

يمكنك الآن إرسال الرمز عن طريق إدخال عنوان في النموذج 192.168.1.1/ir؟code=16720095 (فقط استبدل عنوان IP والرمز المطلوبين) في المستعرض.

رمز البرنامج الثابت لترقية الهواء
 /* * IRremoteESP8266: IRServer - demonstrates sending IR codes controlled from a webserver * An IR LED must be connected to ESP8266 pin 0. * Version 0.1 June, 2015 */ #include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <ESP8266mDNS.h> #include <IRremoteESP8266.h> const char* ssid = "FFFF"; const char* password = "XXXX"; unsigned long last_cmd_send_time = 0; MDNSResponder mdns; ESP8266WebServer server(80); const char* serverIndex = "<form method='POST' action='/update' enctype='multipart/form-data'><input type='file' name='update'><input type='submit' value='Update'></form>"; // IRsend irsend(2); IRsend irsend(13); void handleRoot() { server.send(200, "text/html", "<html><head> <title>ESP8266 Demo (Web Update)</title></head><body><h1>Hello from ESP8266, you can send NEC encoded IR signals from here!</h1><p><a href=\"ir?code=16769055\">Send 0xFFE01F</a></p><p><a href=\"ir?code=16429347\">Send 0xFAB123</a></p><p><a href=\"ir?code=16771222\">Send 0xFFE896</a></p></body></html>"); } void handleIr(){ for (uint8_t i=0; i<server.args(); i++){ if(server.argName(i) == "code") { unsigned long code = server.arg(i).toInt(); irsend.sendNEC(code, 32); } } handleRoot(); } void handleSeq(){ unsigned long code = 0; unsigned long cnt = 0; unsigned long dl = 0; unsigned long nwt = 0; for (uint8_t i=0; i<server.args(); i++){ if(server.argName(i) == "code") { code = server.arg(i).toInt(); } if(server.argName(i) == "count") { cnt = server.arg(i).toInt(); } if(server.argName(i) == "delay") { dl = server.arg(i).toInt(); } if(server.argName(i) == "need_wait") { nwt = server.arg(i).toInt(); } } if (nwt > 0){ unsigned long wt = millis() - last_cmd_send_time; if (wt < nwt && wt > 0) { delay(nwt - wt); } } if (code != 0) { for (uint8_t i=0; i<cnt; i++){ irsend.sendNEC(code, 32); delay(dl); } } last_cmd_send_time = millis(); handleRoot(); } void handleNotFound(){ String message = "File Not Found\n\n"; message += "URI: "; message += server.uri(); message += "\nMethod: "; message += (server.method() == HTTP_GET)?"GET":"POST"; message += "\nArguments: "; message += server.args(); message += "\n"; for (uint8_t i=0; i<server.args(); i++){ message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; } server.send(404, "text/plain", message); } void setup(void){ irsend.begin(); Serial.begin(115200); WiFi.mode(WIFI_AP_STA); WiFi.begin(ssid, password); Serial.println(""); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); if (mdns.begin("esp8266", WiFi.localIP())) { Serial.println("MDNS responder started"); } server.on("/", handleRoot); server.on("/ir", handleIr); server.on("/seq", handleSeq); server.on("/inline", [](){ server.send(200, "text/plain", "this works as well"); }); server.on("/update", HTTP_GET, [](){ server.sendHeader("Connection", "close"); server.sendHeader("Access-Control-Allow-Origin", "*"); server.send(200, "text/html", serverIndex); }); server.on("/update", HTTP_POST, [](){ server.sendHeader("Connection", "close"); server.sendHeader("Access-Control-Allow-Origin", "*"); server.send(200, "text/plain", (Update.hasError())?"FAIL":"OK"); ESP.restart(); },[](){ HTTPUpload& upload = server.upload(); if(upload.status == UPLOAD_FILE_START){ Serial.setDebugOutput(true); WiFiUDP::stopAll(); Serial.printf("Update: %s\n", upload.filename.c_str()); uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000; if(!Update.begin(maxSketchSpace)){//start with max available size Update.printError(Serial); } } else if(upload.status == UPLOAD_FILE_WRITE){ if(Update.write(upload.buf, upload.currentSize) != upload.currentSize){ Update.printError(Serial); } } else if(upload.status == UPLOAD_FILE_END){ if(Update.end(true)){ //true to set the size to the current progress Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize); } else { Update.printError(Serial); } Serial.setDebugOutput(false); } yield(); }); server.onNotFound(handleNotFound); server.begin(); Serial.println("HTTP server started"); } void loop(void){ server.handleClient(); } 



لقد صنعت هذه الصفحة لراحة إدارة استراحة بلادي.
brizer.html
 <html> <head> <script> function sendIR(str) { if (str.length == 0) { // document.getElementById("txtHint").innerHTML = ""; return; } else { var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { // document.getElementById("txtHint").innerHTML = this.responseText; } }; xmlhttp.open("GET", "http://192.168.0.193/" + str, true); xmlhttp.send(); } } </script> </head> <body> <div id="demo"> <button type="button" onclick="sendIR('ir?code=16724175')">Up</button> <button type="button" onclick="sendIR('ir?code=16711935')">Down</button> <button type="button" onclick="sendIR('ir?code=16722135')">Set</button> <button type="button" onclick="sendIR('ir?code=16720095')">Power</button> <button type="button" onclick="sendIR('seq?need_wait=11000&code=16722135&count=2&delay=20');sendIR('seq?code=16711935&count=50&delay=20');sendIR('seq?code=16724175&count=21&delay=20')">day</button> <button type="button" onclick="sendIR('seq?need_wait=11000&code=16722135&count=2&delay=20');sendIR('seq?code=16711935&count=50&delay=20');sendIR('seq?code=16724175&count=35&delay=20')">night</button> <a href="http://192.168.0.193/update">update</a> </div> </body> </html> 



على وجه التحديد ، في حالتي ، يعمل الاستراحة مع جهاز التحكم عن بعد بشكل غير عادي ، في المرة الأولى التي "يستيقظ فيها" ، يتم تشغيل الإضاءة الخلفية ، وبعد ذلك فقط يبدأ في تلقي الأوامر. عندما تستحق الأتمتة النظر في ذلك.

آمل أن تكون هذه التعليمات مفيدة لشخص ما. يرجى مشاركة البرامج الثابتة المحدثة.

Source: https://habr.com/ru/post/ar401637/


All Articles