תוכן עניינים:

אוטומציה בעלות נמוכה עם ESP01: 19 שלבים
אוטומציה בעלות נמוכה עם ESP01: 19 שלבים

וִידֵאוֹ: אוטומציה בעלות נמוכה עם ESP01: 19 שלבים

וִידֵאוֹ: אוטומציה בעלות נמוכה עם ESP01: 19 שלבים
וִידֵאוֹ: חברת igus מציגה: פתרונות אוטומציה בעלות נמוכה - robolink® DQ + SQ 2024, נוֹבֶמבֶּר
Anonim
Image
Image
MCP23016
MCP23016

היום נדון באוטומציה באמצעות ESP01 עם 16 ממסרים. זהו דגם עיצוב סופר זול שבו תוכלו להכפיל את המודולים ולקבל עד 128 ממסרים, מכיוון שניתן להכניס עד שמונה מרחיבי יציאות במיקרו -בקר זה.

במעגל שלנו תהיה לך אפליקציה בסמארטפון המתקשר עם ה- ESP01. יהיה לו מרחיב עם 16 יציאות, כל אחת מחוברת לממסר. יש לנו גם מקור מתכוונן 3v3. לכן נשלוט במודול ממסר בן 16 ערוצים באמצעות ESP01 באמצעות אפליקציית האנדרואיד, אותה אני מעמיד לרשותך.

שלב 1: טיפ לזכור

חשוב לציין, חברים, שהשתמשתי בשבב זה במעגל בשם MCP23016. חשוב לך גם לצפות בסרטון EXPANSOR OF IOS FOR 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.

קריאת הרישום מספקת את מצב הפינים ביציאה זו.

Bit = 1> HIGH Bit = 0> נמוך

IODIR0 / IODIR1

ישנם שני אוגרים השולטים במצב הסיכה. (קלט או פלט)

Bit = 1> INPUT Bit = 0> OUTPUT

שלב 6: מבנה לתקשורת

מבנה לתקשורת
מבנה לתקשורת

כאן אנו מדברים על כתובת השבב, ונגשים לפקודה ולנתונים, שהם מעין פרוטוקול שצריך לעשות כדי לשלוח מידע.

שלב 7: תכנית

תכנית
תכנית

נכין תוכנית שמורכבת מתקשורת של ESP01 עם MCP23016 על מנת שיהיו יותר GPIO לשימוש. 16 מכשירי ה- GPIO החדשים האלה שיהיו לנו הולכים לשלוט במודול ממסר בן 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 // responsavvel for criar o accesspoint eo webserver server Server Server (80); // webserver for acessarmos através do aplicativo // endereço I2C do MCP23016 #define MCPAddress 0x20 // ENDEREOS הגדר GP0 0x00 // רישום DATA PORT 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 dos pinos האם MCP uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;

שלב 12: התקנה

אנו מאתחלים את ESP01 ומגדירים את היציאות. אנו גם מגדירים את נקודת הגישה ומאתחלים את השרת.

הגדרת void () {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 (); // תצורה של שרת נקודת גישה. Begin (); // רשמי שרת}

שלב 13: לולאה

כאן אני בודק אם לקוחות מחוברים לשרת. קראנו גם את שורת הבקשות הראשונה. אנו חולצים את הנתונים לצורך מניפולציה, מגדירים את כותרת ברירת המחדל של התגובה ושולחים תגובה זו ללקוח.

לולאת void () {WiFiClient client = server.available (); // Verifica se um cliente foi conectado if (! Client) {return; } מחרוזת 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 (דרישה); // 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 (ים); // 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 (נתוני מחרוזת) {uint8_t relay = -1; uint8_t gp = -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'; value = data [אינדקס+6]-'0'; // envia os dados para o MCP23016 // [relay-1] porque o MCP vai de 0-7 os pinos writePinData (ממסר -1, ערך, gp); }}

שלב 15: ConfigurePort

הגדרנו את מצב PIN PIN (GP0 או GP1).

// konfigura 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 // מותאם אישית ערך של 0-255 אינדיקציות או אופציות (1 = INPUT, 0 = OUTPUT) (uint8_t port, uint8_t custom) {if (custom == INPUT) {writeBlockData (יציאה, 0xFF); } אחרת אם (custom == OUTPUT) {writeBlockData (יציאה, 0x00); } else {writeBlockData (יציאה, מותאם אישית); }}

שלב 16: WritePinData

בחלק זה של הקוד, אנו משנים את מצב הסיכה הרצויה ושולחים את הנתונים ל- MCP.

// muda o estado de um pino desejado, passando como parametro: // pin = pino desejado; value = 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; אם (value == 0) {statusGP & = ~ (B00000001 << (pin)); // עוד הודעה עבור LOW} אחרת אם (value == 1) {statusGP | = (B00000001 << (pin)); // 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

כאן אנו שולחים נתונים ל- MCP23016 באמצעות אוטובוס i2c. לאחר מכן, אנו מגדירים את המאפיינים כדי לאפשר את נקודת הגישה. לבסוף, הגדרנו את ה- WiFi למצב נקודת גישה ויצרנו AP עם SSID ו- PASSWORD.

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

// konfigura 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 מבקש בקשה ל- ESP01 שלנו על ידי קישור נתוני MR01 / 1 בכתובת האתר.

2. בלחיצה על כפתור OFF של אחד הממסרים, נבצע שינויים חזותיים בכפתור (בלוקים ירוקים). WebViewer1. GoToUrl מגיש בקשה ל- ESP01 שלנו על ידי קישור נתוני MR01 / 0 בכתובת האתר.

הליך זה משמש לשחזור מצב הלחצנים (ממסרים), מכיוון שבעת שינוי המסך הוא חוזר לדפוס היצירה.

הבלוק הצהוב חוזר על כל אחד מזוגות הכפתורים.

שלב 19: הורדה

להלן קובצי הפרויקט להורדה:

קובץ הפרויקט MIT App Inventor 2 - הורדה

יישום APK להתקנה באנדרואיד - הורדה

הורד את שאר הקבצים:

PDF

INO

מוּמלָץ: