ESP01 ile Düşük Maliyetli Otomasyon: 19 Adım
ESP01 ile Düşük Maliyetli Otomasyon: 19 Adım
Anonim
Image
Image
MCP23016
MCP23016

Bugün, 16 röleli ESP01 kullanarak otomasyonu tartışacağız. Modülleri çoğaltabileceğiniz ve 128 adede kadar röle alabileceğiniz süper ucuz bir tasarım modelidir, çünkü bu mikrodenetleyiciye sekiz adede kadar port genişletici koymak mümkündür.

Devremizde, ESP01 ile haberleşen bir akıllı telefon üzerinde bir uygulamanız olacak. Her biri bir röleye bağlı 16 portlu bir genişleticiye sahip olacaktır. Ayrıca 3v3 ayarlanabilir bir kaynağımız var. Bu nedenle, size sunduğum Android uygulaması üzerinden ESP01 kullanarak 16 kanallı bir röle modülünü kontrol edeceğiz.

Adım 1: Hatırlanması Gereken İpucu

Bu çipi MCP23016 isimli bir devrede kullandığımı belirtmekte fayda var yegenlerim. Ayrıca cihazı test ettiğim ve bu üç tip anakart için çalıştığını gösterdiğim EXPANSOR OF IOS FOR ESP32, ESP8266 AND ARDUINO videosunu izlemeniz de önemli.

2. Adım: MCP23016

Burada 28 pinli bir çip olan MCP23016'nın bir görüntüsü var. Daha yaygın olan ve dahili bir saate sahip olduğu için direnç ve kapasitör gerektirmeyen MCP23017 modelinin de bulunduğunu belirtmekte fayda var. Bu daha kolay hale getirir, ancak sabitlemesi bu videoda gösterdiğimizden farklıdır.

3. Adım: Adres

Adres
Adres

MCP23016'nın adresini tanımlamak için A0, A1 ve A2 pinlerini kullanırız. Adres değişikliği için onları YÜKSEK veya DÜŞÜK olarak bırakabilirsiniz.

Adres aşağıdaki gibi oluşturulacaktır:

MCP_Adresi = 20 + (A2 A1 A0)

A2 A1 A0 YÜKSEK / DÜŞÜK değerleri alabilirken, 0'dan 7'ye kadar bir ikili sayı oluşur.

Örneğin:

A2> GND, A1> GND, A0> GND (000 anlamına gelir, sonra 20 + 0 = 20)

Ya da, A2> YÜKSEK, A1> GND, A0> YÜKSEK (101 anlamına gelir, sonra 20 + 5 = 25)

Adım 4: Komutlar

Komutlar
Komutlar

İşte iletişim komutlarını içeren bir tablo:

Adım 5: Kategoriler

GP0 / GP1 - Veri Bağlantı Noktası Kayıtları

İki GPIO bağlantı noktasına erişim sağlayan iki kayıt vardır.

Kayıt okuması, o port üzerindeki pinlerin durumunu sağlar.

Bit = 1> YÜKSEK Bit = 0> DÜŞÜK

IODIR0 / IODIR1

Pin modunu kontrol eden iki kayıt vardır. (Giriş veya Çıkış)

Bit = 1> GİRİŞ Bit = 0> ÇIKIŞ

Adım 6: İletişim Yapısı

İletişim Yapısı
İletişim Yapısı

Burada çipin adresi hakkında konuşuyoruz ve bilgi göndermek için yapılması gereken bir tür protokol olan komut ve verilere erişiyoruz.

Adım 7: Program

programı
programı

Kullanılacak daha fazla GPIO'ya sahip olmak için ESP01'i MCP23016 ile iletişim kurmaktan oluşan bir program yapacağız. Sahip olacağımız bu 16 yeni GPIO, 16 kanallı bir röle modülünü kontrol edecek.

Komutlar, bir Android uygulaması aracılığıyla ESP01'e gönderilecektir.

Adım 8: MCP23016

MCP23016
MCP23016

Adım 9: ESP-01

ESP-01
ESP-01
ESP-01
ESP-01

Bu 16 röle kartıdır.

Adım 10: ESP01'i Monte Etme

ESP01'i Montaj
ESP01'i Montaj

Adım 11: Kitaplıklar ve Değişkenler

i2c iletişiminden ve Erişim Noktası ve web sunucusunun oluşturulmasından sorumlu kitaplıkları dahil edeceğiz. Chip adresini ve portları tanımlıyoruz. Son olarak MCP pinlerinin değerlerini saklayacak değişkenleri tanımlıyoruz.

#include // i2c ile iletişim için yanıtlar.#include // erişim noktası için yanıtlar ve ağlar WiFiServer sunucusu(80);//uygulamalar için web sunucusu // MCP23016 için I2C'yi tanımlayın #define MCPAddress #DEX20GISTRADOÇRESENDEREOS define 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 yapmak uint8_t currentValueGP0 = 0; uint8_t currentValueGP1 = 0;

Adım 12: Kurulum

ESP01'i başlatıyoruz ve portları yapılandırıyoruz. Ayrıca Erişim Noktasını yapılandırır ve sunucuyu başlatırız.

geçersiz kurulum() { Serial.begin(9600); gecikme(1000); tel.başla(0, 2); //ESP01 Wire.setClock(200000); configurePort(IODIR0, OUTPUT); configurePort(IODIR1, OUTPUT); writeBlockData(GP0, 0x00); writeBlockData(GP1, 0x00); kurulumWiFi(); //Erişim Noktası sunucusunu yapılandırın.begin();//sunucu için sunucu }

Adım 13: Döngü

Burada herhangi bir istemcinin sunucuya bağlı olup olmadığını kontrol ediyorum. İlk istek satırını da okuduk. Manipülasyon için verileri çıkarırız, varsayılan yanıt başlığını tanımlarız ve bu yanıtı istemciye göndeririz.

void loop() { WiFiClient client = server.available(); // Eğer (!client) { return; } String req = client.readStringUntil('\r');// Zamansız bir istek değil /* /MR é o başlık öneki para saber se a requisição é bir esperada para os relés */ if(req.indexOf ("/MR") != -1) { parserData(req); //bir partir da requisição ekstrai os dados para manipulação } else{ Serial.println("geçersiz istek"); dönüş; } client.flush(); String s = "HTTP/1.1 200 TAMAM\r\n"; // istemci.baskı(lar); // müşteri gecikmesi için bir yanıt gönder (1); } // döngüyü sonlandır

Adım 14: ParserData

Ayrıştırıcı Verileri
Ayrıştırıcı Verileri

İstekten, rölelerle ilgili verileri ararız. Daha sonra verileri MCP23016'ya göndeririz.

//busca os dados referente aos relésvoid parserData(Dize verisi) { uint8_t geçiş = -1; uint8_t gp = -1; uint8_t değeri = -1; int indeks = data.indexOf("/MR"); //busca o index do öneki MR if(data[index+5] == '/') // /MR01/1, onde 0 = GP; 1 = RELE; 1 = ESTADO(açık/kapalı) { gp = veri[index+3]-'0'; röle = veri[indeks+4]-'0'; değer = veri[index+6]-'0'; //envia os dados para o MCP23016 //[röle-1] porque o MCP vai de 0-7 os pinos writePinData(röle-1, değer, gp); } }

Adım 15: ConfigurePort

GPIO pin modunu (GP0 veya GP1) ayarladık.

//modo dos pinos GPIO (GP0 veya GP1) yapılandırması//parametro passamos: // port: GP0 veya GP1 // GP trabalharem ortak girişleri için INPUT para todos // GP trabalharem como dedia için ÇIKIŞ para todos // modo das portas için özel değer 0-255 göstergesi (1=GİRİŞ, 0=ÇIKIŞ) // örn: 0x01 veya B00000001 veya 1: GPX.0 trabalhará como giriş, o restante komo dedia void configurationPort (uint8_t bağlantı noktası, uint8_t özel) { if(özel == GİRİŞ) { writeBlockData(bağlantı noktası, 0xFF); } else if(özel == OUTPUT) { writeBlockData(port, 0x00); } else { writeBlockData(port, özel); } }

Adım 16: WritePinData

Kodun bu kısmında istenilen pinin durumunu değiştirip MCP'ye veri gönderiyoruz.

//muda o estado de um pino desejado, passando como parametro://pin = pino desejado; değer = 0/1 (açık/kapalı); gp = 0/1 (PORT do MCP) geçersiz writePinData(int pin, int değeri, uint8_t gp) { uint8_t statusGP = 0; if(gp == GP0) statusGP = currentValueGP0; else statusGP = currentValueGP1; if (değer == 0) { statusGP &= ~(B00000001 << (pin)); // muda o pino para LOW } else if (değer == 1) { statusGP |= (B00000001 << (pin)); // muda o pino para YÜKSEK } if(gp == GP0) currentValueGP0 = statusGP; yoksa currentValueGP1 = statusGP; //envia os dados para o MCP writeBlockData(gp, statusGP); gecikme(10); }

Adım 17: WriteBlockData ve KurulumWiFi

Burada MCP23016'ya i2c bus üzerinden veri gönderiyoruz. Ardından, Erişim Noktasını etkinleştirmek için özellikleri yapılandırıyoruz. Son olarak, WiFi'yi Erişim Noktası modu için yapılandırdık ve SSID ve ŞİFRE ile bir AP oluşturduk.

//envia dados para o MCP23016 barramento i2c//reg: REGISTRADOR //veri: dados (0-255) void writeBlockData(uint8_t bağlantı noktası, uint8_t verisi) { Wire.beginTransmission(MCPAddress); Wire.write(port); Wire.write(veri); Wire.endTransmission(); gecikme(10); }

//propriedes para habilitar olarak yapılandırma o ERİŞİM NOKTASIvoid setupWiFi() { WiFi.mode(WIFI_AP); WiFi.softAP("ESP01_RELAY", "12345678"); }

Adım 18: Uygulama

Uygulama
Uygulama
Uygulama
Uygulama
Uygulama
Uygulama
Uygulama
Uygulama

Uygulamayı oluşturmak için aşağıdaki bağlantıdan erişilebilen MIT App Inventor 2'yi kullanıyoruz:

ai2.appinventor.mit.edu/

Uygulama, her rölenin durumunu gösteren, her birinde sekiz çift düğme içeren iki ekrandan oluşur.

Aşağıda kullanılan programlama bloklarından bazıları verilmiştir:

ÖNEMLİ: Erişim Noktası olarak ESP'nin varsayılan IP adresi 192.168.4.1'dir

1. Ekran başladığında, IP'yi hafızaya kaydediyoruz ve düğmelerin durumunu (ON / OFF) kurtarmak için prosedürü çağırıyoruz.

2. Diğer ekranı arayın

1. Rölelerden birinin ON butonuna tıklandığında butonda (yeşil bloklar) görsel değişiklikler yapacağız. WebViewer1. GoToUrl, URL'deki MR01 / 1 verilerini bağlayarak ESP01'imiz için bir istekte bulunur.

2. Rölelerden birinin OFF butonuna tıklandığında butonda (yeşil bloklar) görsel değişiklikler yapacağız. WebViewer1. GoToUrl, URL'deki MR01 / 0 verilerini bağlayarak ESP01'imize bir istekte bulunur.

Bu prosedür, düğmelerin (rölelerin) durumunu kurtarmak için kullanılır, çünkü ekran değiştirilirken oluşturma modeline döner.

Sarı blok, düğme çiftlerinin her biri için tekrarlanır.

Adım 19: İndir

İşte indirebileceğiniz proje dosyaları:

MIT App Inventor 2 proje dosyası - indir

Android'e yüklemek için uygulama APK'sı - indir

Diğer dosyaları indirin:

PDF

BEN HAYIR

Önerilen: