جدول المحتويات:

أتمتة منخفضة التكلفة مع ESP01: 19 خطوة
أتمتة منخفضة التكلفة مع ESP01: 19 خطوة

فيديو: أتمتة منخفضة التكلفة مع ESP01: 19 خطوة

فيديو: أتمتة منخفضة التكلفة مع ESP01: 19 خطوة
فيديو: Arduino Based Home Appliance Control Using Android Phone - WiFi ESP8266 2024, شهر نوفمبر
Anonim
Image
Image
MCP23016
MCP23016

اليوم ، سنناقش الأتمتة باستخدام ESP01 مع 16 مرحلًا. هذا نموذج تصميم رخيص للغاية حيث يمكنك مضاعفة الوحدات والحصول على ما يصل إلى 128 مرحلًا ، حيث من الممكن وضع ما يصل إلى ثمانية موسعات منافذ في هذا المتحكم الدقيق.

في دائرتنا ، سيكون لديك تطبيق على هاتف ذكي يتصل بـ ESP01. سيحتوي على موسع يحتوي على 16 منفذًا ، كل منها متصل بترحيل. لدينا أيضًا مصدر قابل للتعديل 3v3. لذلك سنتحكم في وحدة ترحيل ذات 16 قناة باستخدام ESP01 من خلال تطبيق Android ، الذي أتيحه لك.

الخطوة 1: نصيحة يجب تذكرها

من المهم أن أشير ، يا أصدقائي ، إلى أنني استخدمت هذه الشريحة في دائرة تسمى MCP23016. من المهم أيضًا أن تشاهد الفيديو EXPANSOR OF IOS لـ ESP32 و ESP8266 و ARDUINO ، حيث أختبر الجهاز وأثبت أنه يعمل مع هذه الأنواع الثلاثة من اللوحات.

الخطوة 2: MCP23016

لدينا هنا صورة MCP23016 ، وهي شريحة بها 28 دبوسًا. من المهم أن نذكر أن هناك أيضًا نموذج MCP23017 ، وهو أكثر شيوعًا ولا يحتاج إلى مقاومة ومكثف ، لأنه يحتوي على ساعة داخلية. هذا يجعل الأمر أسهل ، لكن التثبيت مختلف عما نعرضه في هذا الفيديو.

الخطوة 3: العنوان

عنوان
عنوان

لتحديد عنوان MCP23016 ، نستخدم المسامير A0 و A1 و A2. يمكنك فقط تركها في HIGH أو LOW لتغيير العنوان.

سيتم تشكيل العنوان على النحو التالي:

MCP_Address = 20 + (A2 A1 A0)

حيث يمكن أن يأخذ A2 A1 A0 قيم HIGH / LOW ، رقم ثنائي من 0 إلى 7 نماذج.

على سبيل المثال:

A2> GND ، A1> GND ، A0> GND (يعني 000 ، ثم 20 + 0 = 20)

او غير ذلك،

A2> HIGH ، A1> GND ، A0> HIGH (يعني 101 ، ثم 20 + 5 = 25)

الخطوة 4: الأوامر

أوامر
أوامر

هنا جدول بأوامر للتواصل:

الخطوة 5: الفئات

GP0 / GP1 - سجلات منفذ البيانات

هناك نوعان من السجلات التي توفر الوصول إلى منفذي GPIO.

توفر قراءة السجل حالة المسامير الموجودة على هذا المنفذ.

البتة = 1> بت عالية = 0> منخفضة

IODIR0 / IODIR1

هناك نوعان من السجلات التي تتحكم في وضع الدبوس. (إدخال أو إخراج)

بت = 1> بت الإدخال = 0> الإخراج

الخطوة 6: هيكل الاتصال

هيكل للاتصال
هيكل للاتصال

هنا نتحدث عن عنوان الشريحة ، والوصول إلى الأمر والبيانات ، وهو نوع من البروتوكول الذي يجب القيام به لإرسال المعلومات.

الخطوة 7: البرنامج

برنامج
برنامج

سنقوم بتنفيذ برنامج يتكون من توصيل ESP01 بـ MCP23016 من أجل الحصول على المزيد من GPIOs لاستخدامها. هذه الـ 16 GPIOs الجديدة التي سنمتلكها سوف تتحكم في وحدة ترحيل ذات 16 قناة.

سيتم إرسال الأوامر إلى ESP01 عبر تطبيق Android.

الخطوة 8: MCP23016

MCP23016
MCP23016

الخطوة 9: ESP-01

ESP-01
ESP-01
ESP-01
ESP-01

هذه لوحة ذات 16 مرحل.

الخطوة 10: تركيب ESP01

تصاعد ESP01
تصاعد ESP01

الخطوة 11: المكتبات والمتغيرات

سنقوم بتضمين المكتبات المسؤولة عن اتصالات i2c وإنشاء نقطة الوصول وخادم الويب. نحدد عنوان الشريحة والمنافذ. أخيرًا ، نحدد المتغيرات لتخزين قيم دبابيس MCP.

#include // responsável pela comunicação i2c. # include // responsável por criar o accesspoint eo webserver WiFiServer server (80)؛ // webserver para acessarmos através do aplicativo // endereço I2C do MCP23016 #define MCPAddress 0x20 // ENDEREADES DE REG حدد GP0 0x00 // DATA PORT REGISTER 0 #define GP1 0x01 // DATA PORT REGISTER 1 #define IODIR0 0x06 // I / O DIRECTION REGISTER 0 #define IODIR1 0x07 // I / O DIRECTION REGISTER 1 // guarda os valores pinos هل MCP uint8_t currentValueGP0 = 0 ؛ uint8_t currentValueGP1 = 0 ؛

الخطوة 12: الإعداد

نقوم بتهيئة ESP01 وتكوين المنافذ. نقوم أيضًا بتهيئة نقطة الوصول وتهيئة الخادم.

إعداد باطل () {Serial.begin (9600) ؛ تأخير (1000) ؛ Wire.begin (0 ، 2) ؛ // ESP01 Wire.setClock (200000) ؛ configPort (IODIR0 ، الإخراج) ؛ configPort (IODIR1 ، الإخراج) ؛ writeBlockData (GP0، 0x00) ؛ writeBlockData (GP1، 0x00) ؛ setupWiFi () ، // configuração do Access Point server.begin () ؛ // inicializa o server}

الخطوة 13: التكرار

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

حلقة باطلة () {WiFiClient client = server.available () ؛ // Verifica se um cliente foi conectado if (! client) {return؛ } String req = client.readStringUntil ('\ r')؛ // Faz a leitura da Primeira linha da Requisição / * / MR é o header prefixo para saber se a Requisição é a esperada para os relés * / if (req.indexOf ("/ MR")! = -1) {parserData (req) ؛ // a partir da Requisição extrai os dados para manipulação} else {Serial.println ("طلب غير صالح") ؛ إرجاع؛ } client.flush () ؛ String s = "HTTP / 1.1 200 موافق / r / n" ؛ // cabeçalho padrão de resposta client.print (s) ؛ // envia a resposta para o cliente delay (1) ؛ } // حلقة النهاية

الخطوة 14: ParserData

ParserData
ParserData

من الطلب ، نبحث عن البيانات المتعلقة بالمرحلات. ثم نرسل البيانات إلى MCP23016.

// a partir da Requisição busca os dados refente aos relésvoid parserData (String data) {uint8_t relay = -1؛ uint8_t gp = -1 ؛ قيمة uint8_t = -1 ؛ فهرس int = data.indexOf ("/ MR") ؛ // busca o index تفعل البادئة MR if (البيانات [الفهرس + 5] == '/') // / MR01 / 1 ، onde 0 = GP ؛ 1 = RELE ؛ 1 = ESTADO (تشغيل / إيقاف) {gp = البيانات [الفهرس + 3] - '0' ؛ التتابع = البيانات [الفهرس + 4] - '0' ؛ القيمة = البيانات [الفهرس + 6] - '0' ؛ // envia os dados para o MCP23016 // [relay-1] porque o MCP vai de 0-7 os pinos writePinData (relay-1، value، gp)؛ }}

الخطوة 15: ConfigurePort

قمنا بتعيين وضع دبوس GPIO (GP0 أو GP1).

// configura o modo dos pinos GPIO (GP0 ou GP1) // como parametro passamos: // port: GP0 ou GP1 // INPUT para todos as portas do GP trabalharem como entrada // OUTPUT para todos as portas do GP trabalharem como saida // custom um valor de 0-255 indicando o modo das portas (1 = INPUT، 0 = OUTPUT) // ex: 0x01 ou B00000001 ou 1: indica que apenas o GPX.0 trabalhará como entrada، o restante como saida void configurationPort (uint8_t port، uint8_t custom) {if (custom == INPUT) {writeBlockData (port، 0xFF)؛ } else if (custom == OUTPUT) {writeBlockData (port، 0x00)؛ } else {writeBlockData (port، custom)؛ }}

الخطوة 16: WritePinData

في هذا الجزء من الكود ، نقوم بتغيير حالة الدبوس المطلوب وإرسال البيانات إلى MCP.

// muda o estado de um pino desejado، passando como parametro: // pin = pino desejado؛ القيمة = 0/1 (تشغيل / إيقاف) ؛ gp = 0/1 (PORT do MCP) void writePinData (int pin، int value، uint8_t gp) {uint8_t statusGP = 0؛ إذا (gp == GP0) statusGP = currentValueGP0 ؛ آخر statusGP = currentValueGP1 ؛ إذا كانت (القيمة == 0) {statusGP & = ~ (B00000001 << (pin)) ؛ // muda o pino para LOW} else if (القيمة == 1) {statusGP | = (B00000001 << (pin)) ؛ // muda o pino para HIGH} إذا (gp == GP0) currentValueGP0 = statusGP ؛ آخر currentValueGP1 = statusGP ؛ // envia os dados para o MCP writeBlockData (gp، statusGP) ؛ تأخير (10) ؛ }

الخطوة 17: WriteBlockData & SetupWiFi

هنا ، نرسل البيانات إلى MCP23016 عبر ناقل i2c. بعد ذلك ، نقوم بتكوين الخصائص لتمكين نقطة الوصول. أخيرًا ، قمنا بتكوين WiFi لوضع Access Point وأنشأنا نقطة وصول باستخدام SSID وكلمة المرور.

// envia dados para o MCP23016 através do barramento i2c // reg: REGISTRADOR // data: dados (0-255) void writeBlockData (uint8_t port، uint8_t data) {Wire.beginTransmission (MCPAddress)؛ Wire.write (المنفذ) ؛ Wire.write (البيانات) ؛ Wire.endTransmission () ؛ تأخير (10) ؛ }

// configura as propriedades para habilitar o ACCESS POINTvoid setupWiFi () {WiFi.mode (WIFI_AP) ؛ WiFi.softAP ("ESP01_RELAY"، "12345678") ؛ }

الخطوة 18: التطبيق

تطبيق
تطبيق
تطبيق
تطبيق
تطبيق
تطبيق
تطبيق
تطبيق

لإنشاء التطبيق ، نستخدم MIT App Inventor 2 ، والذي يمكن الوصول إليه من خلال الرابط:

ai2.appinventor.mit.edu/

يتكون التطبيق من شاشتين تحتويان على ثمانية أزواج من الأزرار في كل منهما ، تشير إلى حالة كل مرحل.

فيما يلي بعض الكتل البرمجية المستخدمة:

هام: عنوان IP الافتراضي لـ ESP ، لأن نقطة الوصول هي 192.168.4.1

1. عند تهيئة الشاشة ، نقوم بتخزين عنوان IP في الذاكرة واستدعاء الإجراء لاستعادة حالة الأزرار (تشغيل / إيقاف).

2. اتصل بالشاشة الأخرى

1. عند النقر فوق الزر ON لأحد المرحلات ، سنقوم بإجراء تغييرات مرئية على الزر (كتل خضراء). يقوم WebViewer1. GoToUrl بتقديم طلب للحصول على ESP01 الخاص بنا عن طريق ربط بيانات MR01 / 1 في عنوان URL.

2. عند النقر فوق الزر "إيقاف" لإحدى المرحلات ، سنقوم بإجراء تغييرات مرئية على الزر (كتل خضراء). يقوم WebViewer1. GoToUrl بتقديم طلب إلى ESP01 الخاص بنا عن طريق ربط بيانات MR01 / 0 في عنوان URL.

يستخدم هذا الإجراء لاستعادة حالة الأزرار (المرحلات) ، لأنه عند تغيير الشاشة ، فإنها تعود إلى نمط الإنشاء.

تتكرر الكتلة الصفراء لكل من أزواج الأزرار.

الخطوة 19: التنزيل

فيما يلي ملفات المشروع للتنزيل:

ملف مشروع MIT App Inventor 2 - تنزيل

تطبيق APK للتثبيت على Android - تنزيل

قم بتنزيل الملفات الأخرى:

بي دي إف

انا لا

موصى به: