فهرست مطالب:

اتوماسیون کم هزینه با ESP01: 19 مرحله
اتوماسیون کم هزینه با ESP01: 19 مرحله

تصویری: اتوماسیون کم هزینه با ESP01: 19 مرحله

تصویری: اتوماسیون کم هزینه با ESP01: 19 مرحله
تصویری: ESP8266 ESP01 WIFI-UART | برنامه نویسی LDmicro-Roboremo 2024, نوامبر
Anonim
Image
Image
MCP23016
MCP23016

امروز ، ما در مورد اتوماسیون با استفاده از ESP01 با 16 رله بحث خواهیم کرد. این یک مدل طراحی فوق العاده ارزان است که در آن می توانید ماژول ها را ضرب کرده و تا 128 رله دریافت کنید ، زیرا امکان قرار دادن حداکثر هشت پورت توسعه دهنده در این میکروکنترلر وجود دارد.

در مدار ما ، یک برنامه کاربردی روی تلفن هوشمندی دارید که با ESP01 ارتباط برقرار می کند. این دستگاه دارای 16 پورت است که هر کدام به رله متصل هستند. ما همچنین یک منبع قابل تنظیم 3v3 داریم. بنابراین ما یک ماژول رله 16 کاناله با استفاده از ESP01 را از طریق برنامه Android ، که در اختیار شما قرار می دهم ، کنترل می کنیم.

مرحله 1: نکته ای برای به خاطر سپردن

توجه به این نکته ضروری است ، دوستان من ، من از این تراشه در مداری به نام MCP23016 استفاده کردم. همچنین تماشای فیلم EXPANSOR OF IOS FOR ESP32 ، ESP8266 AND 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> خروجی

مرحله ششم: ساختار ارتباطات

ساختار ارتباطات
ساختار ارتباطات

در اینجا ما در مورد آدرس تراشه صحبت می کنیم و به دستور و داده ها دسترسی داریم ، که نوعی پروتکل است که برای ارسال اطلاعات باید انجام شود.

مرحله 7: برنامه

برنامه
برنامه

ما برنامه ای را متشکل از ارتباط ESP01 با MCP23016 انجام می دهیم تا GPIO های بیشتری برای استفاده داشته باشیم. این 16 GPIO جدید که در اختیار داریم یک ماژول رله 16 کانالی را کنترل می کنند.

دستورات از طریق یک برنامه Android به ESP01 ارسال می شود.

مرحله 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. # تعریف GP0 0x00 // DATA PORT REGISTER 0 #تعریف GP1 0x01 // DATA PORT REGISTER 1 #تعریف IODIR0 0x06 // I/O DIRECTION REGISTER 0 #deodine IODIR1 0x07 // I/O DIRECTION REGISTER 1 // guarda os valores dos pinos انجام MCP uint8_t currentValueGP0 = 0 ؛ uint8_t currentValueGP1 = 0 ؛

مرحله 12: راه اندازی

ESP01 را مقداردهی اولیه می کنیم و پورت ها را پیکربندی می کنیم. همچنین Access Point را پیکربندی کرده و سرور را مقداردهی می کنیم.

void setup () {Serial.begin (9600)؛ تاخیر (1000) ؛ Wire.begin (0 ، 2) ؛ // ESP01 Wire.setClock (200000) ؛ configurePort (IODIR0 ، OUTPUT) ؛ configurePort (IODIR1 ، OUTPUT) ؛ writeBlockData (GP0 ، 0x00) ؛ writeBlockData (GP1 ، 0x00) ؛ setupWiFi ()؛ // configuração do Access Point server.begin ()؛ // inicializa o server}

مرحله 13: حلقه کنید

در اینجا بررسی می کنم که آیا کلاینتی به سرور متصل شده است یا خیر. اولین خط درخواست را نیز می خوانیم. داده ها را برای دستکاری استخراج می کنیم ، سرصفحه پیش فرض پاسخ را تعریف می کنیم و این پاسخ را برای سرویس گیرنده ارسال می کنیم.

void loop () {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 ()؛ رشته s = "HTTP/1.1 200 OK / 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 referente aos relésvoid parserData (String data) {uint8_t relay = -1؛ uint8_t gp = -1؛ uint8_t مقدار = -1؛ int index = data.indexOf ("/MR") ؛ // busca o index prefixo MR if (data [index+5] == '/') ///MR01/1، onde 0 = GP؛ 1 = RELE ؛ 1 = ESTADO (روشن/خاموش) {gp = data [index+3]-'0'؛ رله = داده [فهرست+4]-'0'؛ value = data [index+6]-'0'؛ // envia os dados para o MCP23016 // [relay-1] porque o MCP vai 0-7 os pinos writePinData (رله -1 ، مقدار ، 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 saya // 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، or restante como saida void configurePort (پورت uint8_t ، uint8_t سفارشی) {if (سفارشی == INPUT) {writeBlockData (پورت ، 0xFF) ؛ } else if (سفارشی == OUTPUT) {writeBlockData (پورت ، 0x00) ؛ } else {writeBlockData (پورت ، سفارشی) ؛ }}

مرحله 16: WritePinData

در این قسمت از کد ، حالت پین مورد نظر را تغییر می دهیم و داده ها را به MCP ارسال می کنیم.

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

مرحله 17: WriteBlockData & SetupWiFi

در اینجا ، ما داده ها را از طریق گذرگاه i2c به MCP23016 ارسال می کنیم. در مرحله بعد ، ویژگی ها را پیکربندی می کنیم تا Access Point فعال شود. در نهایت ، ما WiFi را برای حالت Access Point پیکربندی کردیم و یک AP با SSID و PASSWORD ایجاد کردیم.

// envia dados para o MCP23016 através do barramento i2c // reg: REGISTRADOR // data: dados (0-255) void writeBlockData (پورت uint8_t ، داده uint8_t) {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 را در حافظه ذخیره می کنیم و روش را برای بازیابی وضعیت دکمه ها (ON / OFF) فرا می خوانیم.

2. با صفحه دیگر تماس بگیرید

1. هنگام کلیک بر روی دکمه ON یکی از رله ها ، تغییرات بصری را در دکمه (بلوک های سبز) ایجاد می کنیم. WebViewer1. GoToUrl با پیوند داده های MR01 / 1 در URL ، درخواست ESP01 ما را ارائه می دهد.

2. وقتی روی دکمه OFF یکی از رله ها کلیک می کنیم ، تغییرات بصری را در دکمه (بلوک های سبز) ایجاد می کنیم. WebViewer1. GoToUrl با پیوند داده های MR01 / 0 در URL ، از ESP01 ما درخواست می کند.

این روش برای بازیابی وضعیت دکمه ها (رله ها) استفاده می شود ، زیرا هنگام تغییر صفحه ، به الگوی ایجاد باز می گردد.

بلوک زرد برای هر یک از جفت های دکمه تکرار می شود.

مرحله 19: بارگیری کنید

در اینجا فایل های پروژه برای بارگیری وجود دارد:

فایل پروژه MIT App Inventor 2 - بارگیری

APK برنامه برای نصب در اندروید - بارگیری کنید

فایلهای دیگر را بارگیری کنید:

PDF

من نه

توصیه شده: