สารบัญ:

ระบบอัตโนมัติต้นทุนต่ำด้วย ESP01: 19 ขั้นตอน
ระบบอัตโนมัติต้นทุนต่ำด้วย ESP01: 19 ขั้นตอน

วีดีโอ: ระบบอัตโนมัติต้นทุนต่ำด้วย ESP01: 19 ขั้นตอน

วีดีโอ: ระบบอัตโนมัติต้นทุนต่ำด้วย ESP01: 19 ขั้นตอน
วีดีโอ: ระบบปั้มจ่ายน้ำ แบบอัตโนมัติสำเร็จรูป ควบคุม 6 โซน จบในชุดเดียว 2024, พฤศจิกายน
Anonim
Image
Image
MCP23016
MCP23016

วันนี้ เราจะพูดถึงระบบอัตโนมัติโดยใช้ ESP01 พร้อมรีเลย์ 16 ตัว นี่เป็นโมเดลการออกแบบราคาถูกสุด ๆ ที่คุณสามารถคูณโมดูลและรับรีเลย์ได้ถึง 128 ตัว เนื่องจากสามารถใส่ตัวขยายพอร์ตได้ถึงแปดตัวในไมโครคอนโทรลเลอร์นี้

ในวงจรของเรา คุณจะมีแอปพลิเคชันบนสมาร์ทโฟนที่สื่อสารกับ ESP01 มันจะมีตัวขยายที่มี 16 พอร์ตแต่ละพอร์ตเชื่อมต่อกับรีเลย์ เรายังมีแหล่งที่ปรับได้ 3v3 ดังนั้น เราจะควบคุมโมดูลรีเลย์ 16 ช่องโดยใช้ ESP01 ผ่านแอปพลิเคชัน Android ซึ่งฉันให้บริการแก่คุณ

ขั้นตอนที่ 1: เคล็ดลับที่ต้องจำ

เพื่อนของฉัน สิ่งสำคัญที่ควรทราบคือ ฉันใช้ชิปนี้ในวงจรที่เรียกว่า MCP23016 การดูวิดีโอ EXPANSOR ของ 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> สูง, A1> GND, A0> สูง (หมายถึง 101 จากนั้น 20 + 5 = 25)

ขั้นตอนที่ 4: คำสั่ง

คำสั่ง
คำสั่ง

นี่คือตารางที่มีคำสั่งสำหรับการสื่อสาร:

ขั้นตอนที่ 5: หมวดหมู่

GP0 / GP1 - รีจิสเตอร์พอร์ตข้อมูล

มีรีจิสเตอร์สองตัวที่ให้การเข้าถึงพอร์ต GPIO สองพอร์ต

การอ่านค่ารีจิสเตอร์แสดงสถานะของพินบนพอร์ตนั้น

บิต = 1> สูง บิต = 0> ต่ำ

IODIR0 / IODIR1

มีรีจิสเตอร์สองตัวที่ควบคุมโหมดพิน (อินพุตหรือเอาต์พุต)

บิต = 1> อินพุต บิต = 0> เอาต์พุต

ขั้นตอนที่ 6: โครงสร้างเพื่อการสื่อสาร

โครงสร้างเพื่อการสื่อสาร
โครงสร้างเพื่อการสื่อสาร

ในที่นี้เราจะพูดถึงที่อยู่ของชิป และเข้าถึงคำสั่งและข้อมูล ซึ่งเป็นโปรโตคอลประเภทหนึ่งที่ต้องทำเพื่อส่งข้อมูล

ขั้นตอนที่ 7: โปรแกรม

โปรแกรม
โปรแกรม

เราจะทำโปรแกรมที่ประกอบด้วยการสื่อสาร ESP01 กับ MCP23016 เพื่อให้มี GPIO เพิ่มขึ้น GPIO ใหม่ 16 ตัวนี้ที่เราจะควบคุมโมดูลรีเลย์ 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 MCPAddressE DETRAS // กำหนด 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 dos pinos ทำ MCP uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;

ขั้นตอนที่ 12: ตั้งค่า

เราเริ่มต้น ESP01 และกำหนดค่าพอร์ต นอกจากนี้เรายังกำหนดค่าจุดเข้าใช้งานและเริ่มต้นเซิร์ฟเวอร์

การตั้งค่าเป็นโมฆะ () { Serial.begin (9600); ล่าช้า (1000); Wire.begin(0, 2); //ESP01 Wire.setClock (200000); กำหนดค่าพอร์ต (IODIR0, OUTPUT); กำหนดค่าพอร์ต (IODIR1, OUTPUT); writeBlockData(GP0, 0x00); writeBlockData(GP1, 0x00); ตั้งค่า WiFi(); //configuração do Access Point server.begin();//inicializa o เซิร์ฟเวอร์ }

ขั้นตอนที่ 13: วนรอบ

ที่นี่ฉันตรวจสอบว่าไคลเอนต์ใดเชื่อมต่อกับเซิร์ฟเวอร์หรือไม่ เราอ่านบรรทัดคำขอแรกด้วย เราดึงข้อมูลสำหรับการจัดการ กำหนดส่วนหัวการตอบสนองเริ่มต้น และส่งการตอบกลับนี้ไปยังไคลเอนต์

วงเป็นโมฆะ () { ลูกค้า WiFiClient = server.available (); // Verifica se um ลูกค้า 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 ตกลง\r\n"; // cabeçalho padrão de resposta client.print(s); // อิจฉา resposta para o ลูกค้าล่าช้า (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 = 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'; ค่า = data[index+6]-'0'; //envia os dados para o MCP23016 //[relay-1] porque o MCP vai de 0-7 os pinos writePinData(รีเลย์-1, ค่า, gp); } }

ขั้นตอนที่ 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 saysa // กำหนดเอง um valor de 0-255 indicando o modo das portas (1=INPUT, 0=OUTPUT) // เช่น: 0x01 ou B00000001 ou 1: indica que apenas o GPX.0 trabalhará como entrada o restante como saya void configurationPort (พอร์ต uint8_t, uint8_t กำหนดเอง) { ถ้า (กำหนดเอง == INPUT) {writeBlockData (พอร์ต, 0xFF); } else if (กำหนดเอง == OUTPUT) {writeBlockData (พอร์ต, 0x00); } อื่น ๆ { writeBlockData (พอร์ต กำหนดเอง); } }

ขั้นตอนที่ 16: WritePinData

ในโค้ดส่วนนี้ เราจะเปลี่ยนสถานะของพินที่ต้องการและส่งข้อมูลไปยัง MCP

//muda o estado de um pino desejado, passando como parametro://pin = pino desejado; ค่า = 0/1 (เปิด/ปิด); gp = 0/1 (PORT do MCP) เป็นโมฆะ writePinData (พิน int, ค่า int, uint8_t gp) { uint8_t statusGP = 0; ถ้า (gp == GP0) statusGP = currentValueGP0; อื่น statusGP = currentValueGP1; ถ้า (ค่า == 0) { statusGP &= ~(B00000001 << (พิน)); // muda o pino para LOW } else if (value == 1) { statusGP |= (B00000001 << (pin)); // muda o pino para HIGH } if(gp == GP0) currentValueGP0 = statusGP; อื่น currentValueGP1 = statusGP; //envia ระบบปฏิบัติการ สำหรับ 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, ข้อมูล uint8_t) { Wire.beginTransmission (MCPAddress); Wire.write (พอร์ต); Wire.write (ข้อมูล); Wire.endTransmission(); ล่าช้า(10); }

//configura เป็น 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 - ดาวน์โหลด

ดาวน์โหลดไฟล์อื่นๆ:

ไฟล์ PDF

ฉันไม่

แนะนำ: