Cara Penggunaan ESP8266-01 Pins dan Leds

Dikemaskini pada 1 Julai 2018 - nota tambahan untuk reprogramming apabila GPIO0 digunakan sebagai output.

Dikemaskini 2 April 2018 untuk menunjukkan ESP8266-01 Leds. Anda boleh mengawal leds ini dari pin yang mereka sambungkan.

Pengenalan

ESP8266-01 adalah cip canggih WiFi kos yang sangat rendah. Tetapi ia sangat terhad I / O. Pada pandangan pertama, sebaik sahaja anda mengkonfigurasinya untuk pengaturcaraan semua pin digunakan.

Ini boleh dibimbing menggunakan Menggunakan pin ESP8266 GPIO0 / GPIO2 / GPIO15 untuk menunjukkan kepada anda bagaimana anda boleh mendapatkan empat (4) input / output berguna untuk anda seterusnya projek ESP8266-01 dan bagaimana menggunakan IC2 untuk mendapatkan lebih banyak input.

Kod di sini menganggap anda memprogramkan modul menggunakan persediaan Arduino IDE seperti yang diterangkan pada //github.com/esp8266/arduino di bawah Pemasangan Dengan Pengurus Papan . Semasa membuka Pengurus Papan dari menu Alat → Papan dan pilih Taip Sumbangan dan pasang platform esp8266.

Arahan ini juga boleh didapati dari www.pfod.com.au di ESP8266-01 Pin Magic

Langkah 1: ESP8266-01 Pins

ESP8266-01 adalah modul ESP8266 terkecil dan hanya mempunyai 8 pin. Daripada VCC, GND, RST (reset) dan CH_PD (pilihan cip) bukan pin I / O tetapi memerlukan operasi modul. Ini meninggalkan GPIO0, GPIO2, TX dan RX boleh didapati sebagai pin I / O, tetapi ini juga mempunyai fungsi yang telah ditetapkan. GPIO0 dan GPIO2 menentukan mode modul yang dimulakan dan pin TX / RX digunakan untuk memprogram modul dan untuk Serial I / O, yang biasa digunakan untuk penyahpepijatan. GPIO0 dan GPIO2 perlu mempunyai resistor tarik yang disambungkan untuk memastikan modul bermula dengan betul.

Langkah 2: Petua Pemrograman ESP8266 (tidak dapat dijawab oleh espcomm)

Apabila pengaturcaraan ESP8266 menggunakan IDE Arduino (lihat ESP8266-01 Wifi Shield) anda kadang-kadang (sering) mendapatkan mesej ralat dalam Arduino IDE seperti: -
buka esp_com gagal
ralat: Gagal membuka COM33
ralat: espcomm_open gagal
ralat: espcomm_upload_mem gagal

Dalam hal ini ikuti langkah-langkah berikut untuk mendapatkannya: -

  1. Semak anda mempunyai papan ESP8266 yang dipilih dalam menu Alat Arduino
  2. Semak anda telah memilih port COM dalam menu Alat Arduino
  3. Kitaran kuasa ESP8266 dengan GPIO0 berasaskan (aplikasi kuasa bersih, lihat di bawah)
  4. Sekiranya 3) tidak membaikinya, cabut kabel USB dari komputer tunggu beberapa saat dan pasang kembali
  5. Jika 4) tidak membaikinya, naik kabel USB dari PC, tutup Arduino IDE, buka Arduino IDE, pasang kembali kabel USB.

Apabila anda menggunakan kuasa untuk ESP8266, selepas meletakkan GPIO0, pastikan ia digunakan dengan bersih. Jangan ganggu sambungan. ESP8266 yang diketuai hanya perlu diteruskan dan terus tanpa sebarang kilauan.

Langkah 3: Trik Terbaik - Gunakan I2C

Silap mata terbaik untuk mendapatkan input tambahan ke dalam ESP8266-01 adalah menggunakan antara muka I2C.

Satu pilihan ialah menggunakan GPIO0 dan GPIO2 sebagai bas I2C.

Resistor pullup yang diperlukan untuk mendapatkan modul untuk memulakan dengan betul boleh berganda sebagai perintang pull-up perangkap I2C dan yang lain, hamba, komponen pada bas adalah pemungut terbuka dan oleh itu tidak boleh menarik bas turun pada kuasa. Walau bagaimanapun, dalam sesetengah kes, hamba, terutamanya yang mempunyai sandaran bateri, boleh menjadi tersekat dan menahan bas. Dalam kes tersebut, anda perlu mengasingkan bas sehingga ESP8266 mendapat melalui tahap but.

Anda boleh mengelakkan masalah ini dengan menggunakan TX dan RX untuk bas I2C

Beberapa perkara yang perlu diperhatikan:

  1. GPIO1 (TX) digunakan sebagai baris Data, kerana anda akan sentiasa mendapatkan beberapa output debug pada GPIO1 pada kuasa. Tidak ada cara untuk menyekat output ini, tetapi garis Jam (RX) akan dipertahankan tinggi supaya tidak ada data ini akan disesuaikan dengan hamba
  2. Apabila pengaturcaraan ESP8266, barisan RX disambungkan kepada output pengaturcara. Pada akhir pengaturcaraan reboot ESP8266 dan 330 Resistor Perlindungan menghalang RX memendekkan pemacu keluaran programmer.
  3. Resistor siri I2C menyediakan perlindungan yang sama untuk TX, RX daripada seluar pendek di bas I2C

ESP8266 adalah peranti 3.3V dengan sebaik-baiknya menggunakan hamba 3.3V I2C. Ramai, tetapi tidak semua, peranti I2C adalah 3.3V hari ini. "Secara umum, dalam sistem di mana satu peranti berada pada voltan yang lebih tinggi daripada yang lain, mungkin untuk menyambung kedua-dua peranti melalui I2C tanpa sebarang litar peralihan tahap di antara mereka. Caranya adalah untuk menyambungkan perintang pull-up ke bawah yang lebih rendah daripada dua tegangan. " (Tutorial SparkFun I2C) Untuk campuran peranti 5V dan 3.3V, sambungkan resistor pullup ke baris 3.3V, seperti ditunjukkan di atas.

Menggunakan I2C adalah cara yang baik untuk menambah penukar A-to-D pelbagai saluran ke ESP8266-01 yang tidak mendedahkan input ADC tunggal kepada modul yang mendasari. Sebagai contoh menggunakan Adafruit 12bit I2C 4 channel ADC atau untuk output analog SparkFun's I2C DAC Breakout - papan MCP4725. Banyak jenis sensor lain juga boleh didapati dengan bas I2C.

Lihat //www.i2c-bus.org/i2c-primer/common-problems ... untuk mendapatkan maklumat lanjut mengenai masalah I2C. Juga lihat Permulaan yang Boleh Dipercayai untuk RTC Baterai Cadangan I2C untuk kaedah ringkas untuk membantu membersihkan bas

Langkah 4: Menggunakan GPIO0 / GPIO2 untuk OUTPUT dan RX untuk INPUT

Walaupun boleh menghantar mesej debug melalui sambungan WiFi, ia sering mudah digunakan untuk menggunakan sambungan TX. Contoh seterusnya menunjukkan cara menggunakan GPIO0 dan GPIO2 sebagai output dan RX sebagai input.

Menggunakan
Serial.begin (115200, SERIAL_8N1, SERIAL_TX_ONLY);
membolehkan anda menggunakan RX sebagai input tujuan umum (atau output lain), semasa masih menulis pesan debug ke Serial. Sekali lagi 330 ohm perintang di RX menyebabkan Flash programmer melindungi daripada memendekkan pemandu programmer. NOTA: S1 perlu dibuka untuk program ESP8266.

Pin TX boleh diakses dari lakaran sebagai GPIO1 dan RX adalah GPIO3

Bagaimana untuk memprogram semula apabila menggunakan GPIO0 sebagai output

Nota: GPIO0 perlu didasarkan untuk masuk ke mod pengaturcaraan. Sekiranya anda membuat lakaran yang tinggi, asasnya boleh merosakkan cip ESP8266 anda. Cara selamat untuk memprogram semula ESP8266 apabila kod anda memacu output GPIO0 adalah untuk: -
a) Kuasa ke papan
b) GPIO0 pendek ke gnd
c) menaikkan papan yang masuk ke dalam mod program kerana yang singkat pada GPIO0
d) keluarkan yang singkat dari GPIO0 supaya anda tidak melepaskan output apabila program dijalankan
e) reprogram lembaga
f) kuasa kitaran lembaga jika perlu.

Langkah 5: Satu lagi Trick - Memandu Relay dan Membaca Butang Tekan Menggunakan GPIO0 / GPIO2

Berikut adalah cara lain untuk mengkonfigurasi pin. Nota: Silap mata ini hanya berfungsi jika anda mempunyai modul geganti dengan input terasing (N1 dan N1-com). Oleh kerana batasan ini dan kerumitan kod sokongan, contoh sebelumnya, menggunakan RX sebagai input, adalah lebih baik.

Menggunakan pin ESP8266 GPIO0 / GPIO2 / GPIO15 telah dilindungi bagaimana menggunakan GPIO0 / GPIO2 bersama untuk mendapatkan input tambahan. Contoh berikut akan diperluaskan untuk menggunakan GPIO0 sebagai output pemandu geganti dan GPIO0 / GPIO2 sebagai masukan.

Inilah skema sebagai pdf.

Di sini GPIO0 digunakan sebagai output untuk memandu relay dan GPIO0 / GPIO2 digunakan sebagai input untuk membaca butang tekan sementara yang digunakan sebagai override manual untuk menghidupkan relay dan mematikan, selain kawalan jauh melalui WiFi sambungan. Butang tekan seketika juga digunakan untuk membolehkan mod konfigurasi jika ia menekan apabila kuasa digunakan.

Silap di sini adalah untuk melakukan semua ini sementara masih menjaga GPIO0 dan GPIO2 tinggi ketika modul ESP8266 sedang diinisialisasi.

Resistor pull-up, R1 dan R3, memberikan High yang diperlukan untuk kedua-dua pin ini, tetapi anda perlu memastikan bahawa sebarang litar tambahan yang dilampirkan pada GPIO0 dan GPIO2 tidak boleh menarik pin rendah. Relay optik terpencil dihubungkan antara + 3.3V dan GPIO0. Ini menjadikan GPIO0 tinggi pada permulaan tetapi membolehkan GPIO0 dibuat output, selepas permulaan, dan memasukkan input relay untuk mengendalikan relay. Tidak kira jika butang tolakan seketika dikendalikan semasa modul diisytiharkan, kerana ia hanya menghubungkan GPIO0 ke GPIO2 dan menyambung kedua-duanya kepada perintang pullup mereka.

Mengesan Mod Config

Menggunakan ESP8266 sebagai titik akses sementara anda boleh mengkonfigurasinya melalui laman web seperti yang diterangkan di sini. Sebahagian daripada proses itu adalah menggunakan butang tekan, atau pautan pendek, pada power-up untuk menunjukkan kepada perisian yang anda ingin masukkan mod konfigurasi.

Setelah modul ESP8266 dimulakan, ia menjalankan kod persediaan () . Dalam kod itu, untuk mengesan jika butang tekan sementara ditekan, anda tidak perlu membuat GPIO0 rendah untuk membekalkan butang GND untuk menekan dan kemudian semak input GPIO2 untuk melihat jika ia rendah. Sebaliknya kesan dari pemeriksaan ini ialah relay akan sentiasa dikendalikan apabila unit dimasukkan ke dalam mod konfigurasi. Sebaik sahaja anda melihat relay beroperasi anda boleh dapat melepaskan butang tekan, kerana inputnya akan dikesan kemudian. Berikut adalah beberapa contoh kod untuk melakukan ini dalam persediaan ()

 boolean configMode = false; // tidak dalam mod konfigurasi biasanya tidak sah persediaan () {pinMode (0, OUTPUT); digitalWrite (0, LOW); // buat output GPIO0 rendah // periksa input GPIO2 untuk melihat apakah butang tekan ditekan menyambungkannya ke GPIO0 configMode = (digitalRead (2) == LOW); jika (configMode) {// mula AP dan bersiap-siap untuk menyampaikan halaman web konfigurasi / kirimkan relay ke untuk menunjukkan dalam mod konfigurasi // ......} else {// penggunaan biasa // buat GPIO0 HIGH untuk mematikan digitalWrite relay (0, TINGGI); // .....} // rest of setup ()} 

Mengesan Butang Push Manual Manual

Seksyen sebelumnya dilindungi mengesan apabila butang tekan ditekan pada kuasa sehingga membolehkan mod konfigurasi. Kami juga ingin menggunakan butang tolak seperti penumpasan manual untuk menghidupkan geganti dan mematikan selain dapat mengawal relay melalui pautan WiFi.

Kawalan WiFi relay tidak dilindungi di sini, tetapi boleh dilakukan dengan mudah menggunakan pfodApp. Lihat Generator Menu OLIMEX untuk cara menghasilkan kod Arduino dengan pfodDesigner untuk modul ESP8266.

Bahagian ini akan menangani bagaimana untuk mengesan apabila butang tolak ditolak, menunjukkan pengguna ingin menukar geganti, iaitu mematikannya OFF atau mematikannya jika ia dimatikan. Skema adalah sama seperti di atas, semua helah adalah dalam kod. Terdapat dua kes untuk dipertimbangkan: -

  1. Relay OFF dan pengguna mahu menghidupkannya menggunakan butang tekan,
  2. Relay adalah ON dan pengguna mahu mematikannya menggunakan butang tekan.

Relay OFF dan pengguna mahu menghidupkannya menggunakan butang tekan.

Dalam kes ini output GPIO0 adalah TINGGI. Sebenarnya GPIO0 boleh menjadi input dalam kes ini sebagai pull resistor R1 akan memastikan relay tidak dihidupkan. Itulah silap mata. Dalam hal ini membuat GPIO0 satu Input dan membuat GPIO2 Output LOW dan kemudian apabila pengguna menekan butang tekan, dua perkara akan terjadi: - a) relay akan dihidupkan kerana tanah yang disediakan oleh GPIO2 melalui butang tekan dan b) Input GPIO0 akan rendah. Kod ini memeriksa keadaan Input GPIO0 dan ketika ia pergi LOW kod itu tahu penggunaannya telah menekan butang tekan dan mahu relay berada. Kod ini kemudian menjadikan GPIO0 Output LOW untuk mengekalkan relay apabila butang tekan dikeluarkan.

Relay adalah ON dan pengguna mahu mematikannya menggunakan butang tekan.

Dalam kes ini, dari kes di atas, GPIO0 adalah Output LOW yang memegang geganti ON. Sekarang untuk kes ini buat GPIO2 suatu Input (ditarik oleh R3) dan kemudian apabila pengguna menekan butang tekan, Input GPIO2 ditarik LOW oleh Output LOW pada GPIO0. Apabila penggunaan melepaskan butang tekan kod mengesan RENDAH untuk peralihan HIGH dan kemudian menjadikan GPIO0 sebuah Input, yang melepaskan relay disebabkan oleh pull resistor, R1, dan membuat GPIO2 Output LOW untuk menubuhkan untuk kes i) di atas.

Satu lagi helah. Untuk kes ii) kita memerlukan GPIO2 sebagai Input yang mengesan RENDAH untuk peralihan HIGH untuk menghidupkan OFF. Tetapi jika kami membuat GPIO2 dan masukan pada akhir kes i) maka kami akan mendapat LOW untuk peralihan HIGH apabila pengguna melepaskan butang tekan yang mereka hanya tekan untuk menghidupkan geganti ON. Untuk mengelakkan menghidupkan geganti semula dengan serta-merta, LOW yang pertama untuk peralihan HIGH selepas menukar relay akan diabaikan kerana hanya pengguna melepaskan butang tekan yang mereka tekan untuk menghidupkan geganti ON.

Sampel gelung () Kod untuk Manual Relay Over-ride

Dalam kod ini, saya mengabaikan perbahasan suis untuk kesederhanaan. Input-input tersebut harus dimaklumkan dalam mana-mana permohonan sebenar.

Kod sampel ada di sini, ESP8266_01pinMagic_1.ino

Sekali lagi ini meninggalkan pin TX / RX yang tersedia untuk debugging Serial atau digunakan sebagai I / O yang lain

Kesimpulannya

Halaman ini menunjukkan cara untuk memanfaatkan pin yang terhad pada ESP8266-01. Menggunakan GPIO0 / GPIO2 sebagai bas I2C memberikan pengembangan terbesar, tetapi jika anda menggunakan projek tidak menggunakan I2C, anda masih boleh memandu relay dan mengesan input butang tekan menggunakan GPIO0 / GPIO2. Dalam kedua-dua kes TX / RX juga tersedia untuk debugging Serial atau jika anda menghantar pernyataan pencetakan debug melalui pautan WiFi, pin ini tersedia untuk umum I / O juga ..

Artikel Berkaitan