สารบัญ:
- ขั้นตอนที่ 1: เคล็ดลับที่ต้องจำ
- ขั้นตอนที่ 2: MCP23016
- ขั้นตอนที่ 3: ที่อยู่
- ขั้นตอนที่ 4: คำสั่ง
- ขั้นตอนที่ 5: หมวดหมู่
- ขั้นตอนที่ 6: โครงสร้างเพื่อการสื่อสาร
- ขั้นตอนที่ 7: โปรแกรม
- ขั้นตอนที่ 8: MCP23016
- ขั้นตอนที่ 9: ESP-01
- ขั้นตอนที่ 10: การติดตั้ง ESP01
- ขั้นตอนที่ 11: ไลบรารีและตัวแปร
- ขั้นตอนที่ 12: ตั้งค่า
- ขั้นตอนที่ 13: วนรอบ
- ขั้นตอนที่ 14: ParserData
- ขั้นตอนที่ 15: กำหนดค่าพอร์ต
- ขั้นตอนที่ 16: WritePinData
- ขั้นตอนที่ 17: WriteBlockData & SetupWiFi
- ขั้นตอนที่ 18: แอป
- ขั้นตอนที่ 19: ดาวน์โหลด
วีดีโอ: ระบบอัตโนมัติต้นทุนต่ำด้วย ESP01: 19 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
วันนี้ เราจะพูดถึงระบบอัตโนมัติโดยใช้ 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
ขั้นตอนที่ 9: ESP-01
นี่คือบอร์ด 16 รีเลย์
ขั้นตอนที่ 10: การติดตั้ง 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
จากคำขอ เราจะค้นหาข้อมูลที่เกี่ยวข้องกับรีเลย์ จากนั้นเราก็ส่งข้อมูลไปที่ 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
ฉันไม่
แนะนำ:
ESP01 การเขียนโปรแกรมแผงวงจรพิมพ์: 5 ขั้นตอน
ESP01 การเขียนโปรแกรมแผงวงจรพิมพ์: เมื่อเร็ว ๆ นี้ฉันต้องเขียนรหัสบน ESP01 ของฉันและตัดสินใจใช้อะแดปเตอร์เพื่อโอนรหัสไปยัง CHIP อย่างไรก็ตาม จำเป็นต้องทำการแก้ไขบางอย่างกับอแด็ปเตอร์เพื่อให้สามารถโอนรหัสได้ นั่นคือ อแดปเตอร์ไม่เข้า
โครงการ Totoro - IoT & MQTT & ESP01: 7 ขั้นตอน (พร้อมรูปภาพ)
โครงการ Totoro - IoT & MQTT & ESP01: โครงการ Totoro เป็นโครงการ IoT ที่ดีที่คุณสามารถคัดลอกในรูปแบบต่างๆ ได้มากมาย การใช้บอร์ด ESP01 กับโปรโตคอล MQTT คุณสามารถสื่อสารสถานะของปุ่มไปยังโบรกเกอร์ MQTT (ใน my case AdafruitIO).คำแนะนำที่เป็นประโยชน์สำหรับ MQTT และ Ad
ESP01 Moodlight พร้อม Firebase แบบเรียลไทม์ + OTA: 7 ขั้นตอน
ESP01 Moodlight พร้อม Firebase แบบเรียลไทม์ + OTA: รองรับโหมด RGB และเอฟเฟกต์จาง นอกจากนี้ยังมีการรองรับการควบคุมความสว่าง รองรับการอัปเดต OTA
Flash AT Command Firmware เป็นโมดูล ESP01 (ต้องใช้อะแดปเตอร์ USB เป็น TTL): 5 ขั้นตอน
เฟิร์มแวร์คำสั่ง Flash AT ไปยังโมดูล ESP01 (ต้องใช้อะแดปเตอร์ USB เป็น TTL): โดย Jay Amiel AjocGensan PHfacebook.com/geeamealyoutube.com/jayamielajoc
บทแนะนำโมดูลรีเลย์ ESP01/01S: 4 ขั้นตอน
ESP01/01S RELAY MODULE TUTORIAL: คำอธิบาย รีเลย์ WiFi นี้อิงตามโมดูล WiFi ของ AI-Thinker ESP-01/01S เราใช้ GPIO0 ของ ESP-01/ 01S เพื่อควบคุมรีเลย์ในระดับต่ำ ง่ายต่อการ DIY สวิตช์อัจฉริยะของคุณไปยังอุปกรณ์ใด ๆ ด้วยโทรศัพท์ของคุณทุกที่ด้วยรีเลย์อัจฉริยะนี้ ข้อมูลจำเพาะW