সুচিপত্র:

ESP01: 19 ধাপ সহ কম খরচে অটোমেশন
ESP01: 19 ধাপ সহ কম খরচে অটোমেশন

ভিডিও: ESP01: 19 ধাপ সহ কম খরচে অটোমেশন

ভিডিও: ESP01: 19 ধাপ সহ কম খরচে অটোমেশন
ভিডিও: ESP8266 ESP01 WIFI-UART | এলডিমাইক্রো-রোবোরেমো প্রোগ্রামিং 2024, নভেম্বর
Anonim
Image
Image
MCP23016
MCP23016

আজ, আমরা 16 রিলে সহ ESP01 ব্যবহার করে অটোমেশন নিয়ে আলোচনা করব। এটি একটি অতি সস্তা ডিজাইনের মডেল যেখানে আপনি মডিউলগুলিকে গুণ করতে পারেন এবং 128 রিলে পর্যন্ত পেতে পারেন, কারণ এই মাইক্রোকন্ট্রোলারে আটটি পোর্ট এক্সপেন্ডার রাখা সম্ভব।

আমাদের সার্কিটে, আপনার স্মার্টফোনে একটি অ্যাপ্লিকেশন থাকবে যা ESP01 এর সাথে যোগাযোগ করে। এটিতে 16 টি পোর্ট সহ একটি এক্সপেন্ডার থাকবে, প্রতিটি একটি রিলেতে সংযুক্ত থাকবে। আমাদের একটি 3v3 অ্যাডজাস্টেবল সোর্স আছে। অতএব আমরা অ্যান্ড্রয়েড অ্যাপ্লিকেশনের মাধ্যমে ESP01 ব্যবহার করে একটি 16-চ্যানেল রিলে মডিউল নিয়ন্ত্রণ করব, যা আমি আপনার জন্য উপলব্ধ করছি।

ধাপ 1: মনে রাখার টিপ

এটা মনে রাখা গুরুত্বপূর্ণ, আমার বন্ধুরা, আমি এই চিপটি MCP23016 নামে একটি সার্কিটে ব্যবহার করেছি। আপনার জন্য ESP32, ESP8266 এবং ARDUINO এর জন্য IOS EXPANSOR এর ভিডিও দেখাও গুরুত্বপূর্ণ, যেখানে আমি ডিভাইসটি পরীক্ষা করে দেখাই যে এটি এই তিন ধরনের বোর্ডের জন্য কাজ করে।

ধাপ 2: MCP23016

এখানে আমাদের MCP23016 এর একটি ছবি আছে, যা 28 পিনের একটি চিপ। এটি উল্লেখ করা গুরুত্বপূর্ণ যে সেখানে MCP23017 মডেলটিও রয়েছে, যা আরও সাধারণ এবং এর জন্য একটি প্রতিরোধক এবং ক্যাপাসিটরের প্রয়োজন নেই, কারণ এর একটি অভ্যন্তরীণ ঘড়ি রয়েছে। এটি সহজ করে তোলে, কিন্তু এর পিনিং আমরা এই ভিডিওতে যা দেখাই তার থেকে আলাদা।

ধাপ 3: ঠিকানা

ঠিকানা
ঠিকানা

MCP23016 এর ঠিকানা নির্ধারণ করতে, আমরা A0, A1, এবং A2 পিন ব্যবহার করি। ঠিকানা পরিবর্তনের জন্য আপনি তাদের উচ্চ বা নিম্ন এ রেখে দিতে পারেন।

ঠিকানাটি নিম্নরূপ গঠিত হবে:

MCP_Address = 20 + (A2 A1 A0)

যেখানে A2 A1 A0 উচ্চ / নিম্ন মান নিতে পারে, 0 থেকে 7 ফর্মের একটি বাইনারি সংখ্যা।

উদাহরণ স্বরূপ:

A2> GND, A1> GND, A0> GND (মানে 000, তারপর 20 + 0 = 20)

বা অন্যথায়, A2> উচ্চ, A1> GND, A0> উচ্চ (মানে 101, তারপর 20 + 5 = 25)

ধাপ 4: কমান্ড

কমান্ড
কমান্ড

এখানে যোগাযোগের জন্য কমান্ড সহ একটি টেবিল রয়েছে:

ধাপ 5: বিভাগ

GP0 / GP1 - ডেটা পোর্ট রেজিস্টার

দুটি রেজিস্টার রয়েছে যা দুটি জিপিআইও পোর্টে অ্যাক্সেস প্রদান করে।

রেজিস্টার পড়া সেই বন্দরের পিনের অবস্থা প্রদান করে।

বিট = 1> উচ্চ বিট = 0> কম

IODIR0 / IODIR1

দুটি রেজিস্টার আছে যা পিন মোড নিয়ন্ত্রণ করে। (ইনপুট বা আউটপুট)

বিট = 1> ইনপুট বিট = 0> আউটপুট

ধাপ 6: যোগাযোগের কাঠামো

যোগাযোগের জন্য কাঠামো
যোগাযোগের জন্য কাঠামো

এখানে আমরা চিপের ঠিকানা সম্পর্কে কথা বলি, এবং কমান্ড এবং ডেটা অ্যাক্সেস করি, যা একটি প্রোটোকল যা তথ্য পাঠানোর জন্য করা প্রয়োজন।

ধাপ 7: প্রোগ্রাম

কার্যক্রম
কার্যক্রম

আমরা আরও একটি GPIO ব্যবহার করার জন্য MCP23016 এর সাথে ESP01 যোগাযোগের একটি প্রোগ্রাম করব। এই 16 টি নতুন জিপিআইও যা আমরা 16 টি চ্যানেল রিলে মডিউল নিয়ন্ত্রণ করতে যাচ্ছি।

একটি Android অ্যাপ্লিকেশনের মাধ্যমে ESP01 এ কমান্ড পাঠানো হবে।

ধাপ 8: MCP23016

MCP23016
MCP23016

ধাপ 9: ESP-01

ইএসপি -01
ইএসপি -01
ইএসপি -01
ইএসপি -01

এটি একটি 16-রিলে বোর্ড।

ধাপ 10: ESP01 মাউন্ট করা

মাউন্ট করা ESP01
মাউন্ট করা ESP01

ধাপ 11: লাইব্রেরি এবং পরিবর্তনশীল

আমরা i2c যোগাযোগের জন্য দায়ী লাইব্রেরি এবং অ্যাক্সেস পয়েন্ট এবং ওয়েব সার্ভার তৈরির জন্য অন্তর্ভুক্ত করব। আমরা চিপ এবং পোর্টগুলির ঠিকানা নির্ধারণ করি। পরিশেষে, আমরা MCP পিনের মান সংরক্ষণ করতে ভেরিয়েবল সংজ্ঞায়িত করি।

#include // responsável pela comunicação i2c। GP0 0x00 // DATA PORT REGISTER 0 #define GP1 0x01 // DATA PORT REGISTER 1 #define IODIR0 0x06 // I/O নির্দেশক নিবন্ধক 0 MCP uint8_t currentValueGP0 = 0 করুন; uint8_t currentValueGP1 = 0;

ধাপ 12: সেটআপ

আমরা ESP01 আরম্ভ করি এবং পোর্টগুলি কনফিগার করি। আমরা অ্যাক্সেস পয়েন্ট কনফিগার করি এবং সার্ভার আরম্ভ করি।

অকার্যকর সেটআপ () {Serial.begin (9600); বিলম্ব (1000); Wire.begin (0, 2); // ESP01 Wire.setClock (200000); কনফিগারপোর্ট (IODIR0, আউটপুট); কনফিগারপোর্ট (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; } স্ট্রিং req = ক্লায়েন্ট ।readStringUntil ('\ r'); ("/MR")! = -1) {parserData (req); // a partir da requisição extrai os dados para manipulação} else {Serial.println ("invalid request"); প্রত্যাবর্তন; } client.flush (); স্ট্রিং s = "HTTP/1.1 200 OK / r / n"; // cabeçalho padrão de resposta client.print (গুলি); // envia a resposta para o cliente বিলম্ব (1); } // শেষ লুপ

ধাপ 14: পার্সারডাটা

পার্সারডাটা
পার্সারডাটা

অনুরোধ থেকে, আমরা রিলে সম্পর্কিত ডেটা সন্ধান করি। আমরা তখন MCP23016 এ ডেটা পাঠাই।

// a partir da requisição busca os dados referente aos relésvoid parserData (String data) {uint8_t relay = -1; uint8_t জিপি = -1; uint8_t মান = -1; int index = data.indexOf ("/MR"); // busca o index do prefixo MR if (data [index+5] == '/') ///MR01/1, onde 0 = GP; 1 = RELE; 1 = ESTADO (চালু/বন্ধ) {gp = data [index+3]-'0'; রিলে = ডেটা [সূচক+4]-'0'; মান = তথ্য [সূচক+6]-'0'; // envia os dados para o MCP23016 // [relay-1] porque o MCP vai de 0-7 os pinos writePinData (রিলে -১, মান, জিপি); }}

ধাপ 15: কনফিগার পোর্ট

আমরা 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 saya void configurePort (uint8_t পোর্ট, uint8_t কাস্টম) {if (custom == INPUT) {writeBlockData (port, 0xFF); } অন্যথায় যদি (কাস্টম == আউটপুট) {writeBlockData (পোর্ট, 0x00); } অন্যথায় {writeBlockData (পোর্ট, কাস্টম); }}

ধাপ 16: WritPinData

কোডের এই অংশে, আমরা একটি কাঙ্ক্ষিত পিনের অবস্থা পরিবর্তন করি এবং MCP- এ ডেটা পাঠাই।

// মুদা ও এস্তাদো দে উম পিনো দেশাজাদো, পাসান্দো কোমো প্যারামেট্রো: // পিন = পিনো দেশাজাদো; মান = 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 << (পিন)); // muda o pino para LOW} অন্যথায় যদি (মান == 1) {statusGP | = (B00000001 << (পিন)); // muda o pino para HIGH} if (gp == GP0) currentValueGP0 = statusGP; অন্যথায় currentValueGP1 = statusGP; // envia os dados para o MCP writeBlockData (gp, statusGP); বিলম্ব (10); }

ধাপ 17: WriteBlockData এবং SetupWiFi

এখানে, আমরা i2c বাসের মাধ্যমে MCP23016 এ ডেটা পাঠাই। এরপরে, আমরা অ্যাক্সেস পয়েন্ট সক্ষম করতে বৈশিষ্ট্যগুলি কনফিগার করি। অবশেষে, আমরা অ্যাক্সেস পয়েন্ট মোডের জন্য ওয়াইফাই কনফিগার করেছি এবং SSID এবং পাসওয়ার্ড দিয়ে একটি AP তৈরি করেছি।

// 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); }

// কনফিগারার হিসাবে প্রস্তাবিত প্যারা হাবিলিটারে হে অ্যাক্সেস পয়েন্ট WiFi.softAP ("ESP01_RELAY", "12345678"); }

ধাপ 18: অ্যাপ

অ্যাপ
অ্যাপ
অ্যাপ
অ্যাপ
অ্যাপ
অ্যাপ
অ্যাপ
অ্যাপ

অ্যাপ্লিকেশন তৈরি করতে, আমরা MIT App Inventor 2 ব্যবহার করি, যা লিঙ্কের মাধ্যমে অ্যাক্সেস করা যায়:

ai2.appinventor.mit.edu/

অ্যাপ্লিকেশনটিতে দুটি পর্দা রয়েছে যার প্রতিটিতে আট জোড়া বোতাম রয়েছে, যা প্রতিটি রিলেটির অবস্থা নির্দেশ করে।

নিম্নলিখিত কিছু প্রোগ্রামিং ব্লক ব্যবহার করা হয়েছে:

গুরুত্বপূর্ণ: অ্যাক্সেস পয়েন্ট হিসাবে ইএসপির ডিফল্ট আইপি ঠিকানা, 192.168.4.1

1. যখন স্ক্রিন আরম্ভ হয়, আমরা মেমরিতে আইপি সঞ্চয় করি এবং বোতামগুলির অবস্থা পুনরুদ্ধার করার পদ্ধতিটি কল করি (চালু / বন্ধ)।

2. অন্য পর্দায় কল করুন

1. রিলেগুলির একটিতে অন বোতামে ক্লিক করার সময়, আমরা বোতামে দৃশ্যমান পরিবর্তন করব (সবুজ ব্লক)। WebViewer1. GoToUrl ইউআরএলে MR01 / 1 ডেটা লিঙ্ক করে আমাদের ESP01 এর জন্য একটি অনুরোধ করে।

2. রিলেগুলির একটি বন্ধ বোতামটি ক্লিক করার সময়, আমরা বোতামে দৃশ্যমান পরিবর্তন করব (সবুজ ব্লক)। WebViewer1. GoToUrl URL- এ MR01 / 0 ডেটা লিঙ্ক করে আমাদের ESP01- এর কাছে একটি অনুরোধ করে।

এই পদ্ধতিটি বোতামের অবস্থা (রিলে) পুনরুদ্ধার করতে ব্যবহৃত হয়, কারণ পর্দা পরিবর্তন করার সময়, এটি তৈরি প্যাটার্নে ফিরে আসে।

প্রতিটি বোতাম জোড়াগুলির জন্য হলুদ ব্লক পুনরাবৃত্তি করে।

ধাপ 19: ডাউনলোড করুন

এখানে ডাউনলোডের জন্য প্রকল্প ফাইল রয়েছে:

এমআইটি অ্যাপ ইনভেন্টর 2 প্রকল্প ফাইল - ডাউনলোড করুন

অ্যান্ড্রয়েডে ইনস্টল করার জন্য অ্যাপ্লিকেশন APK - ডাউনলোড করুন

অন্যান্য ফাইল ডাউনলোড করুন:

পিডিএফ

আইএনও

প্রস্তাবিত: