Pengoperasian dasar pada modul wifi ESP8266 dari Arduino

Pengoperasian dasar pada modul wifi ESP8266 dari Arduino

Pengoperasian dasar pada modul wifi ESP8266 dari Arduino

Ketika Espresif meluncurkan modul pertama di pasar wifi dengan yang terintegrasi ESP8266 dan firmware yang dapat digunakan untuk menanganinya menggunakan perintah AT, yang kami minati sebagai pengguna adalah mengintegrasikannya ke dalam rakitan mikrokontroler dan masalahnya direduksi menjadi mengetahui (sebelumnya) kegelapan ESP8266 AT tabel perintah, kebutuhan makan atau Pembaruan firmware ESP8266.

Daftar Isi

    Kemudian alternatif dengan cepat tiba untuk memprogram tersebut ESP8266 dan implementasi modul wifi format yang sangat berbeda yang menimbulkan kekhawatiran lain: modul wifi ESP8266 mana yang harus dipilih tergantung pada jangkauan antena yang berbeda (termasuk antena eksternal) atau integrasi fisik modul baru ini di rakitan kami.

    Tentu saja, karena semua perubahan ini, penekanannya mungkin tidak ditempatkan pada aspek yang paling mendasar, yaitu pengelolaan yang paling mendasar Modul wifi ESP8266. Meskipun polaritas.es Anda dapat menemukan informasi tentang penggunaan ESP8266 dan ada beberapa aplikasi yang dimaksudkan untuk menjelaskan secara umum pengoperasiannya Modul wifi ESP8266 menggunakan perintah AT, terutama pada artikel di perpustakaan untuk membuat query HTTP dari Arduino dengan modul wifi ESP8266, kesan pembaca menunjukkan bahwa akan berguna untuk menambahkan beberapa informasi dasar untuk membantu pengguna ESP8266 untuk melaksanakan implementasinya sendiri.

    Diskusikan operasi dasar untuk bekerja dengan ESP8266 dan mengusulkan solusi umum merupakan tujuan dari beberapa bagian yang sangat berbeda; Untuk membantu mengikuti isi artikel, indeks berikut dapat menjadi panduan:

    Kontrol modul wifi ESP8266 dari komputer melalui port serial

    Dari piring Arduino dan menggunakan milikmu IDE dimungkinkan untuk memantau pengoperasian a Modul wifi ESP8266, kirim Perintah ESP8266 AT dan lihat jawabannya tetapi jauh lebih mudah melakukannya dari komputer dengan aplikasi tipe terminal.

    Menggunakan CuteCom untuk menguji modul wifi ESP8266 melalui port serial

    Tergantung pada papan mana Arduino digunakan, hanya satu port serial perangkat keras yang mungkin tersedia, yang menambah sedikit ketidaknyamanan dalam pengiriman dan penerimaan. Mengubah kecepatan komunikasi jauh lebih nyaman dalam aplikasi komunikasi serial dari komputer dan beberapa motherboard. Arduino (dan dalam beberapa keadaan) tidak mendukung kecepatan komunikasi serial yang lebih tinggi dengan baik, terutama 115200 baud, yang merupakan kecepatan default versi terbaru dari komunikasi serial firmware.

    Tentang Program apa yang digunakan untuk memantau ESP8266 menggunakan port serial, ada banyak pilihan sesuai kebutuhan dan preferensi; akhir-akhir ini saya lebih banyak menggunakan yang klasik LucuCom (yang ada di screenshot di atas) karena sangat nyaman untuk saya ulangi tertentu Modul wifi ESP8266 AT pesanan dalam pengujian proyek.

    Beberapa rekomendasi telah diberikan di sini mengenai program yang berfungsi sebagai konsol serial; Misalnya ketika berbicara tentang PuTTY untuk mengendalikan perangkat serial UART dari komputer. PuttySelain menjadi aplikasi luar biasa, aplikasi ini tersedia untuk sebagian besar sistem operasi desktop. Selanjutnya sebagai Putty dapat digunakan untuk bertindak sebagai konsol dengan port serial dan Keluarga protokol internet (TCP/IP), termasuk yang beroperasi TLS, menjadi alat umum yang lebih dari sekadar membayar (sedikit) waktu yang dihabiskan untuk mengonfigurasinya dan membiasakan penggunaannya.

    Menggunakan Putty untuk menguji modul wifi ESP8266 melalui port serial

    Selain perangkat lunak komunikasi serial, untuk menghubungkan Modul wifi ESP8266 ke pelabuhan USB Komputer juga memerlukan konverter USB untuk seri TTL. Seperti halnya perangkat lunak, ada beberapa versi, yang hanya digunakan untuk mengonversi port USB pada port serial TTL (yang dapat diperoleh dari satu Euro) hingga yang dapat meniru protokol berbeda (seperti SPI o I2C).

    Sama seperti program yang berfungsi sebagai konsol serial, perangkat keras untuk berkomunikasi melalui komputer USB dengan rangkaian logika (bukan hanya ESP8266) akan menjadi alat yang umum dalam pekerjaan pengembang aplikasi yang dikendalikan mikro, ada baiknya memilikinya di kotak peralatan sesegera mungkin dan bekerja dengannya Modul wifi ESP8266 Ini adalah peluang bagus untuk mendapatkannya.

    Perangkat keras untuk komunikasi serial USB UART untuk memantau modul wifi ESP8266

    Konverter USB a UART TTL Ini juga dapat digunakan untuk memantau perilaku rangkaian yang menggunakan ESP8266, untuk melakukan ini, output yang ingin Anda pantau dihubungkan secara seri ke input data (RX) konverter dengan dioda cepat ( 1N4148, misalnya) dan resistor (2K2, misalnya) yang paralel satu sama lain. Pengaturan seperti itu berfungsi seperti sniffer serial perangkat keras.

    Contoh sniffer untuk ESP8266 yang dihubungkan ke Arduino menggunakan konverter USB UART TTL

    Meskipun sniffer pada gambar di atas tentu saja belum sempurna (antara lain tidak ada penyangga) cukup untuk memantau pengoperasian rakitan dengan Arduino dan ESP8266.

    Menghapus sniffer dari skema sebelumnya, yaitu skema yang menunjukkan cara menghubungkan a Modul wifi ESP8266 ke piring Arduino. Selain mengumpankannya pada 3V3, pin reset dan pin aktivasi yang terintegrasi harus dihubungkan ke level tinggi (enable). Tentu saja, pin RX yang satu harus terhubung ke TX yang lain.

    Untuk menyederhanakan diagram sebelumnya, sebuah pelat telah direpresentasikan Arduino diberi daya pada 3V3 dan tegangan pada port serial juga diasumsikan 3V3. Jika Anda menggunakan a mikrokontroler dengan level sinyal yang berbeda pada port serial (biasanya 5 V) akan diperlukan, agar tidak merusak ESP8266, Gunakan konverter tingkat seperti pada diagram di bawah ini. Sirkuit ini sering ditemukan di banyak implementasi modul komersial.

    Konverter Level Sinyal 5V ke 3V3 untuk Modul WiFi ESP8266 dan Arduino

    Perbarui firmware ESP8266

    itu Perintah ESP8266 AT, penghentiannya, kecepatan default modul... tergantung pada versinya Firmware ESP8266. Yang terbaik adalah memastikan bahwa Anda memiliki versi yang sama di semua modul dan, jika mungkin, itu adalah versi terbaru.

    Sayangnya, sebagian besar Model modul wifi ESP8266 Mereka hanya memiliki 4Mbit, jadi versi terbaru tidak dapat diinstal pada mereka. Firmware versi terbaru (resmi) yang dapat diinstal Modul wifi ESP8266 dengan 4 Mbit (sebagian besar) adalah 0.9.4 yang mencakup versi 0.2 tersebut Perintah ESP8266 AT.

    Singkatnya, untuk memperbarui firmware yang Anda perlukan:

    1. Unduh versi firmware yang sesuai. itu versi terbaru (resmi) untuk modul dengan memori 4 Mbit, terdapat di folder Espressif di github. Di Situs web espresif Anda dapat mengunduh firmware versi terbaru, namun sangat penting untuk memverifikasi bahwa modul yang memasangnya memiliki cukup memori.

    2. Unduh alat instalasi firmware versi terbaru. Favorit saya adalah alat bantu yang tertulis di dalamnya Ular sanca, sehingga berfungsi pada platform apa pun. Selain bisa di download juga bisa di install dengan pip install esptool (o pip2 o python -m pip…). Tentu saja, Espresif Ia juga menawarkan alatnya sendiri tetapi saat ini hanya tersedia untuk Windows.

    3. Siapkan file yang diunduh; unzip ke dalam folder yang dapat diakses dan, jika perlu, jadikan alat tersebut dapat dieksekusi alat bantu, dalam kasus saya, sejak itu GNU / Linux, Dengan chmod +x esptool

    4. Hubungkan modul ke komputer menggunakan konverter USB UART TTL yang bekerja pada 3V3 atau gunakan konverter level jika berfungsi pada 5 V. Selain daya, Anda harus menghubungkan TX ke RX konverter USB UART TTL, RX ke TX, GPIO0 pada level rendah (GND) dan mungkin GPIO2 pada level tinggi (dalam pengujian saya, ini berhasil menghubungkannya pada level rendah dan memutusnya). Jika modul memiliki koneksi GPIO15 gratis (seperti yang terjadi pada ESP-12), modul harus terhubung ke level rendah. RESET, yang biasanya berada pada level tinggi selama pengoperasian, dapat dibiarkan tidak terhubung atau dihubungkan ke level tinggi melalui resistor (10K, misalnya), karena sebelum mulai merekam mungkin perlu mengatur ulang perangkat dengan menghubungkannya. ke tingkat yang rendah.
      Dengan menyalakan modul, modul akan tersedia untuk diperbarui tetapi, Jika kesalahan koneksi ditampilkan, maka perlu diatur ulang menghubungkan RESET pada level rendah sesaat kemudian membiarkannya mengudara (tanpa menghubungkan) untuk proses update.
      Modul ini memiliki konsumsi setengah ampere mencapai puncaknya (hingga 600 mA, menurut beberapa pengguna) sehingga penting untuk menggunakan catu daya yang mampu mendukung konsumsi tersebut, terutama untuk update firmware.

      Koneksi modul wifi ESP8266 ESP-01 ke firmware pembaruan konverter USB UART TTL

    5. Jalankan alat untuk memperbarui firmware. Dalam kasus saya, saya telah menyimpan dokumen alat dan firmware pada langkah 3 di folder yang sama, jadi saya jalankan dari konsol:
      cd ~/Datos/firmwareESP8266 (ubah ke folder yang berisi alat dan firmware)
      ./esptool.py --baud 115200 --port /dev/ttyUSB0 write_flash \
      0x00000 ./boot_v1.1.bin \
      0x01000 ./user1.bin \
      0x7C000 ./esp_init_data_default.bin \
      0x7E000 ./blank.bin

      --baud mengatur kecepatan ESP8266 (115200 baud dalam kasus saya) dan --port port serial yang terhubung (dalam kasus saya, ditiru, USB pertama). Berbagai dokumen yang membentuk firmware tertinggal write_flash didahului dengan alamat, dengan dokumen user1.bin berisi muatan pembaruan.

      pembaruan firmware wifi ESP8266 tangkapan konsol esptool

    Kirim perintah ke modul wifi ESP8266

    Untuk mengontrol ESP8266 dari komputer kita harus memulainya konfigurasikan aplikasi untuk itu cukup ① memilih port yang terhubung dengan konverter USB UART TTL, sesuatu seperti /dev/USB0 di GNU/Linux dan sejenisnya atau sejenisnya COM6 di Windows, ② pilih kecepatan di mana ESP8266, mungkin 115200 baud, ③ setel 8 bit data ditambah satu bit stop, tanpa paritas atau jabat tangan, dan ④ setel akhir baris, tergantung pada firmware, hampir selalu CR+LF.

    Konfigurasikan CuteCom untuk memantau modul wifi ESP8266 menggunakan konverter USB UART TTL

    Konfigurasikan PuTTY untuk memantau modul wifi ESP8266 dengan konverter USB UART TTL

    Setelah aplikasi dikonfigurasi (atau, jika perlu, disimpan dan dipilih), aplikasi tersebut akan dikonfigurasi buka koneksi ("perangkat terbuka" dan "buka", masing-masing, pada tangkapan layar contoh di atas dengan LucuCom y Putty) dan Anda dapat mulai mengirim pesanan ke ESP8266.

    Seperti yang dapat dilihat di ESP8266 AT tabel perintah, format untuk mengaktifkan, menonaktifkan, menetapkan nilai, dan merujuknya cukup dapat diprediksi, tetapi secara umum tidak mudah untuk mengingat semuanya dan Anda mungkin perlu memilikinya untuk merujuknya.

    Cara mengirim AT pesanan al Modul wifi ESP8266 dari Arduino sangat sederhana: ① konfigurasi komunikasi dengan Serial.begin(115200); (atau Serial1, Serial2… pada papan dengan beberapa port serial perangkat keras) dan ② mengirim perintah menggunakan format Serial.print(orden+"\r\n");

    Contoh di atas menunjukkan cara mengirim Modul wifi ESP8266 AT pesanan dari Arduino. Dalam hal ini diilustrasikan AT+CWJAP, yang digunakan untuk menyambung ke titik akses. Perintah ini menggunakan pengidentifikasi titik akses sebagai argumen (SSID) dan kuncinya, keduanya dalam tanda kutip, sehingga menjadi sebuah objek Srtring dan sertakan dalam tanda kutip menggunakan kode escape (\"). Untuk menyelesaikan pesanan, gunakan \r\n yang sesuai dengan CR y LF.

    Perlu diingat bahwa port serial tidak selalu diidentikkan dengan Serial (di piring tertentu bisa Serial1, Serial2…) objek port yang digunakan telah ditentukan dengan menugaskannya ke makro PUERTO_SERIE. Mendeteksi jenis papan yang digunakan dapat menambah sedikit kecerdasan pada pemilihan port serial; Nanti kita akan membahas bagaimana Anda bisa mengetahui jenisnya Arduino. Definisi lainnya adalah definisi biasa yang memungkinkan Anda "memberi nama" nilai konstanta agar tidak terulang (dan membuat kesalahan) dan membuatnya lebih mudah untuk diubah.

    Contoh di atas seharusnya menghubungkan Modul wifi ESP8266 ke titik akses yang ditunjukkan tetapi apakah sudah terhubung sebelumnya? Apakah koneksinya berhasil? Untuk mengetahui hal ini, kita perlu “mendengarkan” apa yang dimaksud ESP8266

    Terima data dari modul wifi ESP8266

    Dengan menghubungkan data sniffer yang dijelaskan di atas ke komputer Anda dapat melihat apa Arduino telah mengirim ke ESP8266 dan tanggapannya. Untuk membaca dari Arduino dan memproses informasi di dalamnya perlu dideteksi dengan Serial.available() jika ada data yang telah tiba dan jika demikian muatlah Serial.read(). Contoh berikut menunjukkan cara membaca respons dari AT+CWJAP?, yang akan melaporkan jika ada koneksi ke titik akses mana pun.

    Seperti di piring Arduino Uno (dan di tempat lain) membuka monitor serial akan mengatur ulang program, dapat digunakan untuk melihat di konsol serial Arduino informasi yang Anda kirim ke ESP8266 seperti yang ditunjukkan oleh tangkapan layar gambar di bawah ini.

    Terima data dari modul wifi ESP8266 dari Arduino. Contoh dasar

    Analisis respon yang dikirimkan oleh modul wifi ESP8266

    Kita telah melihat bagaimana membaca informasi yang sampai Arduino dari ESP8266. Masalah yang harus anda hadapi adalah anda tidak tahu kapan mulai sampai, berapa lama sampainya, berapa lama... dan sangat tidak efisien menunggu respon dari pihak ESP8266 diterima tanpa membiarkan mikrokontroler melakukan tugas lain sementara itu.

    Cara sederhana untuk mengelola keadaan ini adalah ulangi data yang diterima untuk mencari jawaban konkrit yang dengannya, misalnya, mengaktifkan indikator (bendera atau variabel Boolean) yang akan menentukan apakah akan melanjutkan pencarian dalam teks yang diterima dan tindakan apa yang harus dilakukan berdasarkan informasi yang diperoleh dari ESP8266. Sementara tanggapannya tiba mikrokontroler dapat mendedikasikan diri untuk tugas lain, misalnya menerima data dari sensor dan memprosesnya.

    Cari teks dalam informasi yang diterima dari ESP8266

    Untuk mencari teks yang berasal dari ESP8266 Anda bisa bandingkan setiap surat yang diterima dengan surat yang sesuai dengan pesan yang Anda cari. Penting untuk menggunakan penghitung (atau penunjuk) yang menunjuk ke huruf yang akan dibandingkan; Jika karakter yang berasal dari ESP8266 sama dengan yang diperiksa di pesan, penghitung maju, jika berbeda diinisialisasi.

    Untuk mengetahui bahwa akhir telah tercapai, karakter berikutnya dari pesan yang dicari dikonsultasikan, yaitu nol (\0) atau panjang pesan disimpan, dengan membandingkannya dengan penghitung, mengetahui apakah perbandingan telah selesai dan oleh karena itu Modul wifi ESP8266 telah mengirim pesan yang diinginkan.

    Contoh berikut menggunakan perintah AT+CWLAP yang akan mengembalikan daftar titik akses dan di dalamnya ada yang disebut "wifi polaridad.es" yang dicari. Meskipun kami telah memilih untuk memverifikasi bahwa karakter terakhir adalah nol, seperti penyangga Ia hanya menyimpan teks yang dicari dan diketahui panjangnya, dapat juga diperiksa apakah jumlah huruf yang benar telah diterima. Dengan LED terhubung ke pin 2 dilaporkan teks yang diharapkan telah ditemukan.

    Dalam kode contoh sebelumnya Anda juga dapat melihat caranya pilih port serial tergantung pada jenis papan Arduino digunakan. Contoh ini mengasumsikan bahwa Anda memiliki tiga jenis papan untuk proyek tersebut: satu Arduino Uno, sebuah Arduino mega 2560 dan arduino leonardo. Jika Anda bekerja dengan a Arduino Uno itu akan digunakan Serial dan sebaliknya Serial1.

    Jika Anda bekerja dengan piring arduino leonardo Anda dapat menggunakan metode yang sama untuk menghentikan program dan menunggu konsol (port serial yang terkait dengannya Serial) tersedia.

    Cari berbagai teks dalam respons ESP8266

    Kode pada contoh sebelumnya digunakan untuk mencari teks pada informasi yang dikirimkan oleh ESP8266 tetapi responsnya mungkin mencakup informasi yang berbeda tergantung pada operasinya. Misalkan, untuk memulai dengan kasus sederhana pada contoh berikutnya, yaitu teks yang dikirim oleh MCU ESP8266 es OK ketika operasi dilakukan dengan benar dan ERROR Jika tidak, seperti halnya pesanan AT+CWJAP?, yang berfungsi untuk memverifikasi apakah Modul wifi ESP8266 sudah terhubung ke titik akses.

    Implementasi baru dari metode yang sama, yang mencari kecocokan dengan beberapa kemungkinan pesan, memungkinkan Anda memilih di antara tindakan yang berbeda tergantung pada respons yang diterima dari ESP8266, cukup nyalakan LED sesuai.

    Batasi waktu yang diperlukan untuk menerima tanggapan

    Sampai saat ini belum ada referensi yang dibuat mengenai isu yang relevan: the waktu tunggu maksimum (timeout) sebelum menganggap suatu operasi gagal. Jika karena alasan apa pun koneksi dengan Modul wifi ESP8266, modul dengan titik akses, titik akses dengan Internet atau, misalnya, server hipotetis tidak tersedia, program mungkin diblokir pada satu titik menunggu tanpa batas waktu, sehingga respons harus diartikulasikan untuk keadaan seperti itu. Waktu tunggu maksimum dapat dikonfigurasi untuk seluruh aplikasi, biasanya akan lebih "murah" dalam hal ini, atau waktu tunggu individual dapat diprogram untuk setiap operasi.

    Untuk memeriksa bahwa (setidaknya) interval waktu tertentu telah berlalu "Waktu" saat akun dimulai biasanya dikurangi dari "waktu" saat ini dan diverifikasi bahwa perbedaannya lebih besar dari batas yang diinginkan. "Waktu" ini tidak harus waktu nyata, biasanya sesuai dengan interval yang telah berlalu sejak saat itu MCU mulai menghitung waktu; Hal ini tidak mempengaruhi program karena yang menarik adalah waktu yang telah berlalu dan bukan waktu absolut.

    Biasanya, untuk memeriksa apakah interval tertentu telah berlalu, ekspresi tipe ini digunakan:

    Variabel milisegundos_al_empezar mengandung nilai millis() suatu momen tertentu dalam pelaksanaan yang waktunya ditentukan, sehingga tidak jarang namanya mengacu pada kata "kronometer". Variabel intervalo_de_tiempo berisi jumlah milidetik maksimum yang membuat ekspresi sebelumnya menjadi benar, yaitu mewakili batas waktu; Biasanya berupa konstanta (atau makro) dan, seperti pada kasus sebelumnya, kata "TIMEOUT" sering muncul di namanya. Jika Anda bekerja dengan interval yang sangat pendek, Anda dapat menggunakannya micros() di tempat millis() (mikrodetik, bukan milidetik) meskipun ini jauh lebih jarang dan kurang tepat.

    Bilangan bulat panjang masuk Arduino (unsigned long) menempati 4 byte (32 bit), sehingga nilai terbesar yang dapat diwakilinya adalah 4294967295 (2 pangkat 32 dikurangi satu, karena dimulai dari nol). di piring Arduino Saat berjalan terus menerus, penghitung milidetik akan diatur ulang (kembali ke nol) kira-kira setiap 50 hari. Saat melakukan pengurangan dengan tipe data yang tidak ditandatangani, perilaku yang sama direproduksi (membalik penghitung) sehingga memungkinkan untuk mengontrol batas waktu tanpa batas.

    Kode di atas menunjukkan a implementasi yang sangat mendasar dari batasan waktu habis menggabungkan garis-garis yang ditandai sehubungan dengan contoh sebelumnya. Karena verifikasi batas waktu dilakukan setelah memproses data yang datang dari Modul wifi ESP8266, operasi dapat dianggap berhasil meskipun penerimaan memakan waktu lebih lama dari waktu tunggu yang ditentukan.

    Jalankan operasi kompleks yang ditentukan oleh beberapa perintah AT

    Untuk mendapatkan contoh referensi tujuan aplikasi yang mengeksploitasi tersebut Modul wifi ESP8266, anggap saja demikian menyimpan informasi dalam database yang diakses melalui layanan web untuk memantau suhu. Kode berikut membaca sensor yang terhubung ke input analog setiap interval waktu tertentu, menghitung nilai rata-rata dan, setelah interval waktu yang lebih lama, mengirimkannya ke server web (gaya IOT) melalui a petisi HTTP (POSKAN, DAPATKAN…).

    Dalam contoh pencatatan suhu ini, server web diakses setiap lima menit. Meskipun ketersediaannya tidak terlalu tinggi, proposal ini diharapkan dapat berhasil, namun jika diperlukan frekuensi pencatatan yang lebih tinggi, sumber daya lain harus diterapkan, misalnya, a penyangga data menunggu untuk dikirim, untuk mengirim beberapa saat server dapat hadir dan menyimpannya saat tidak tersedia. Jika frekuensi pencatatan data lebih besar lagi, jenis protokol lain harus diusulkan sebagai alternatif terhadap HTTP atau bahkan menggantinya TCP oleh UDP untuk dapat mengirim sebagian besar data dengan kecepatan yang diperlukan bahkan dengan mengorbankan sebagian data.

    Operasi yang membentuk tugas yang harus dilakukan untuk mengirim suhu adalah:

    • Setel ulang modul wifi
    • Putuskan sambungan dari titik akses saat ini (jika ada sambungan default)
    • Tetapkan pengaturannya. Misalnya, diasumsikan bahwa mode koneksi (sederhana) dan peran dalam komunikasi Wi-Fi (stasiun) harus dikonfigurasi.
    • Hubungkan ke titik akses
    • Pastikan koneksi sudah benar (sebenarnya ini adalah titik masuknya) Jika tidak ada koneksi, mulai proses dari awal
    • Sambungkan ke server
    • Kirim permintaan HTTP dengan data yang akan disimpan

    Urutan operasi tidak harus persis seperti ini (walaupun operasinya persis seperti ini) dan setiap langkah mungkin memerlukan beberapa langkah Perintah ESP8266 ATMisalnya, konfigurasi yang tercantum di atas memerlukan dua: AT+CIPMUX=0 y AT+CWMODE=1.

    Struktur data untuk mewakili operasi pada ESP8266

    Dalam contoh sebelumnya, meskipun dalam cara yang sangat mendasar, solusi umum untuk masalah ini sudah disarankan: menggunakan struktur data yang menyimpan kemungkinan tanggapan dan tindakan yang harus diambil dalam setiap kasus; kirim tindakan, tunggu tanggapan, dan lanjutkan sesuai dengan maksud tanggapan tersebut. Karena setiap operasi yang kompleks akan memerlukan beberapa Perintah ESP8266 AT, struktur data harus menghubungkan suatu operasi dengan operasi lain, berikutnya atau sebelumnya, yang harus dilakukan dalam setiap kasus tergantung pada respons dari ESP8266.

    Dalam contoh sebelumnya, sebuah pesan dicari dalam respons dari ESP8266 dan itu diartikan sebagai keberhasilan atau kesalahan. Selain penerimaan (dan analisis) dari seluruh teks yang diterima, Untuk mendapatkan nilai minimum yang umum, disarankan untuk juga memperhatikan penyelesaian pesan atau, dengan kata lain, ketersediaan Modul wifi ESP8266 untuk menerima pesanan baru. Dengan cara ini, perubahan ke keadaan yang dapat kita panggil, misalnya, "wifi tersedia", dapat berupa menerima nama titik akses dan menerima teks ERROR atau teksnya OK akan berarti bahwa ESP8266 Anda telah menyelesaikan tanggapan dan sekarang Anda dapat mengirimkan tanggapan berikutnya Perintah AT ke ESP8266.

    Kode di atas menggunakan vektor (operacion) untuk menyimpan teks operasi berurutan yang membentuk tugas lengkap. Array dua dimensi digunakan (mensaje) dengan tiga tanggapan yang dianalisis. Seperti dijelaskan di atas, perlu dicari pesan-pesan yang mewakili akhir dari respon selain pesan yang mewakili respon yang benar atau salah. Tidak semua operasi mempunyai jumlah kemungkinan jawaban yang sama; Jika responsnya lebih sedikit, pesan kosong dapat digunakan yang menggunakan jumlah siklus sekecil mungkin dalam analisisnya (meskipun demikian, ini bukan cara yang paling optimal). Logikanya, diperlukan jumlah minimum respons yang dicari (tiga pada contoh) untuk mencakup seluruh kemungkinan operasi, meskipun tidak semuanya memungkinkan.

    Jika berbicara tentang kemungkinan jawaban, sudah terlihat bahwa contoh ini tidak terlalu berguna untuk menerima data dengan format sembarangan dari a Modul wifi ESP8266, tapi masalahnya, dalam konteks penggunaan dengan mikrokontroler itu tidak biasa; Hal yang paling umum adalah mengirimkan data yang dikumpulkan oleh sensor yang terhubung dan/atau menerima informasi tentang apa yang harus dilakukan dengan aktuator yang dikontrolnya. Informasi yang sangat berharga, yang dapat diprediksi dengan sangat baik.

    Pada struktur data sebelumnya, seperti yang dilakukan untuk menyatakan kemungkinan respon yang dianalisis, matriks dua dimensi juga digunakan untuk menentukan operasi yang harus dilakukan dalam setiap kasus (siguiente_operacion). Secara khusus, kami telah memilih untuk menanggapi tiga jenis pesan: ① teks arbitrer (LITERAL) untuk memverifikasi apakah ada koneksi ke titik akses Wi-Fi dan server, ② teks untuk mendeteksi kesalahan dalam proses (FALLO) dan ③ teks yang menunjukkan bahwa operasi berhasil diselesaikan (ACIERTO).

    Terakhir, ada dua vektor lagi untuk mengatur waktu tunggu maksimum sebelum menyerah (timeout) dan tentukan (configuracion) jika operasi berakhir tanpa menunggu respons (ESPERAR_RESPUESTA) dan pesan yang menunjukkan akhir komunikasi. Vektor terakhir ini, untuk mengilustrasikan contoh bagaimana memori dapat disimpan, bekerja dengan bit-bit byte konfigurasi untuk menunjukkan keadaan yang berbeda.

    Pertama Perintah ESP8266 AT struktur data selalu mengharapkan respon, yang dapat berupa pesan sukses atau pesan kesalahan. Ketika terjadi kesalahan, modul di-restart dan dimulai lagi dan jika pesan menunjukkan bahwa operasi sudah benar, maka akan dilanjutkan ke operasi berikutnya.

    Ketika Anda sudah terhubung ke server, polanya berubah. Dalam hal ini perlu ① mengirimkan panjang paket data yang akan dikirim dan ② membuat permintaan HTTP dengan teks tetap ditambah nilai (suhu) yang dikirim untuk disimpan di server. Penyiapan data ini dilakukan pada setiap pengiriman dan perlu dibagi menjadi dua (beritahukan panjangnya) atau tiga (kirim permintaan HTTP) On ESP8266 SESUAI pesanan. Hanya bagian terakhir yang menjadi bagian operasi yang akan menunggu tanggapan.

    Dalam hal ini akan bekerja tanpa masalah (mungkin memperingatkan bahwa modul sedang sibuk) tetapi ketika panjang data lebih besar maka blok data perlu dibagi menjadi bagian-bagian yang lebih kecil dan bahkan mungkin perlu untuk mengimplementasikan menunggu, sebagai dilakukan dengan pembacaan suhu, untuk memberikan waktu pada modul untuk mengirim data tanpa mengisinya penyangga.

    Bersama dengan makro lain yang telah dijelaskan sebelumnya, contoh kode di atas menunjukkan bagaimana berbagai status ditentukan untuk menentukan apakah akan menunggu respons dan, jika berlaku, pesan apa yang menunjukkan bahwa respons telah selesai.

    Seperti pada titik yang berbeda dalam kode, sebuah operasi akan dikirim (ketika tiba waktunya untuk mengirim suhu rata-rata, jika waktu tunggu suatu operasi terlampaui, ketika operasi saat ini berhasil diselesaikan...) tetapi bagaimana melakukannya adalah ditetapkan secara global, telah didefinisikan secara makro ENVIAR_OPERACION yang mengelompokkan langkah-langkah yang terlibat dalam pengiriman.

    Berikut ini adalah kode program utama contohnya. Tugas paling eksternal adalah yang bertugas mengambil sampel suhu untuk menghitung rata-rata dan, setiap jangka waktu tertentu, dikirim ke server menggunakan Modul wifi ESP8266. Setelah setiap operasi dikirim, respons dianalisis untuk menentukan operasi berikutnya atau apakah tugas pengiriman informasi telah selesai.

    Logikanya, beberapa tindakan pengoptimalan dapat dilakukan pada kode sebelumnya, tetapi karena ini adalah contoh untuk memahami caranya ESP8266 Secara umum, ada baiknya hanya berfokus pada beberapa aspek, yang pertama adalah struktur data. Tampaknya hal yang logis adalah menggunakan struktur data bahasa pemrograman (struct) untuk mewakili informasi yang sedang diproses: itu Perintah ESP8266 AT dan pesan yang dianalisis.

    Gunakan struktur (struct) untuk menyimpan data alih-alih array contoh (berdasarkan array tersebut) adalah hal yang sepele dan, meskipun dapat menghasilkan kode yang lebih elegan, hal ini tidak berarti peningkatan apa pun pada hasilnya. Alternatif sebenarnya yang ditimbulkan oleh penggunaan struct adalah menerapkan, seperti yang dijelaskan di bawah ini, panjang variabel dalam struktur yang berisi data "dalam". yang dirujuk oleh mereka. Dengan cara ini, misalnya, suatu operasi tidak perlu mempunyai jumlah respons yang tetap untuk dianalisis.

    Pendekatan ini menunjukkan bahwa ini adalah cara terbaik untuk mengimplementasikan solusi, namun kelemahannya adalah hal ini diperlukan menggunakan alokasi memori dinamis, praktik berisiko bekerja dengan a mikrokontroler yang memerlukan pengukuran cermat tentang berapa banyak memori yang akan digunakan saat runtime, karena kompiler tidak akan dapat memperingatkan kita tentang hal ini dan ada kemungkinan tertentu akan menghabiskan memori (atau tumpukan) dengan konsekuensi fatal bagi eksekusi program.

    Sehubungan dengan pengoptimalan kode, menarik untuk diingat bahwa, dalam program jenis ini, yang menggunakan teks dalam jumlah besar, dapat menghemat ruang memori SRAM menyimpan string teks dalam memori program (flash) dengan makro F(). Dalam tangkapan layar berikut Anda dapat melihat program yang berbeda dan distribusi memori dinamis dengan penggunaan teks normal dan menggunakan makro F().

    Contoh kode Arduino menggunakan teks yang disimpan dalam memori program (flash)
    Contoh kode Arduino menggunakan teks di SRAM

    Sehubungan dengan tindakan yang dilakukan sesuai dengan informasi yang diperoleh dari Modul wifi ESP8266, sebagai alternatif untuk memeriksa pesan dari kode dan melakukan satu atau yang lain sesuai dengan apa yang diterima, dapat disimpan dalam struktur data ini penunjuk ke fungsi yang melakukan setiap tugas, bukan indikator status (bendera) yang memperingatkan keadaan tertentu yang menjadi tanggung jawab aplikasi untuk dikelola, misalnya, dalam loop utama.

    Berikut ini adalah contoh struktur untuk menyimpan data permintaan ke ESP8266 (tipe datanya operacion_esp8266) dan tanggapan mereka (tipe data respuesta_esp8266).

    Sebagai struktur yang mewakili operasi (data yang dikirim ke Modul wifi ESP8266) mengacu pada struktur yang menentukan respons, dan struktur respons terhadap struktur operasi, keduanya perlu dideklarasikan terlebih dahulu, dengan mendefinisikan tipe data baru, dan kemudian mendefinisikan isinya.

    Contoh sebelumnya menganggap bahwa program yang menyertakannya telah memilih untuk menggunakan a indikator status, yang harus sesuai dengan variabel yang dapat diakses dari kode yang bertanggung jawab untuk melakukan satu atau operasi lain seperti yang ditunjukkan oleh nilai tersebut. Jika di respon dari ESP8266 Ketika teks tertentu dianalisis, keadaan mengambil nilai yang menunjukkan struktur respons yang sesuai.

    Seperti disebutkan sebelumnya, alternatif lain, baik untuk menggantikan atau melengkapi indikator status, adalah menyimpan fungsi dalam struktur referensi (sebuah penunjuk) yang akan dipanggil saat menemukan teks tertentu dalam respons dari Modul wifi ESP8266.

    Pada contoh sebelumnya telah ditambahkan struktur data yang digunakan untuk memproses respon dari Modul wifi ESP8266 sebuah penunjuk ke fungsi (seharusnya) yang mengembalikan tipe data float (bisa berupa nilai tertimbang dari pembacaan analog) dan dua byte disediakan sebagai argumen (dua unsigned char yang bisa menjadi pin dari mana input analog dibaca dan pin yang mengaktifkan ENABLE dari integrasi hipotetis).

    Dalam pengembangan untuk MCU, bertentangan dengan apa yang terjadi dalam gaya pengembangan untuk sistem yang lebih besar, tidak jarang menggunakan variabel global ketika mendefinisikan perilaku (global) dari aplikasi yang mengontrol rakitan, sehingga tidak jarang menemukan definisi seperti ini. sebagai fungsi tanpa parameter dan tidak mengembalikan nilai, kira-kira void (*accion)();

    Jika Anda bekerja dengan cara merepresentasikan data ini, gunakan struct data dengan panjang variabel, perlu mengalokasikan memori secara dinamis malloc() (o new(), jika objek digunakan), yang akan menggunakan jumlah memori yang dialokasikan sebagai parameter dan mengembalikan pointer ke awal area memori yang dicadangkan. Dengan sizeof() Berdasarkan jenis yang disimpan, dikalikan dengan jumlah elemen yang digunakan, Anda bisa mendapatkan jumlah memori yang dibutuhkan. Contoh dengan dan tanpa penggunaan dapat dilihat pada screenshot di bawah ini. malloc(); Hati-hati dengan memori yang digunakan oleh program, dalam kasus pertama, Anda perlu memuat perpustakaan yang berisi fungsi ini.

    Contoh alokasi memori dengan malloc di Arduino

    Contoh tugas teks tanpa malloc di Arduino

    Jika operasi pada Modul wifi ESP8266 akan bervariasi sepanjang eksekusi program, maka perlu mengosongkan memori yang tidak digunakan free() (o delete(), dalam hal menjadi objek). Meskipun masuk akal untuk mengharapkan bahwa kompiler (GCC) akan mengoptimalkan program untuk menghindari partisi memori, tentunya kinerjanya tidak akan seoptimal bekerja dengan memori yang dialokasikan secara statis.

    Meskipun dalam contoh ini (dalam kedua implementasi) hal ini tidak masuk akal, untuk menggeneralisasi operasi agar dapat diterapkan pada kasus lain, perlu diperhatikan bahwa pengiriman data selalu mengulangi protokol yang sama: memberitahukan jumlah byte yang akan dikirim, tunggu indikator (>) dan kirim data.

    Karena dalam contoh ini hanya digunakan sekali (keseluruhan permintaan dibuat dalam satu paket), hal ini tampaknya tidak terlalu berguna tetapi, secara umum, mungkin perlu melakukan beberapa pengiriman dalam operasi yang sama, termasuk kasus di mana pengiriman harus dilakukan. dikirimkan sejumlah besar data yang harus difragmentasi untuk menghindari meluapnya memori ESP8266.

    Untuk menerapkan perilaku ini, dua elemen koneksi terakhir dapat digunakan sehingga setiap kali data dikirim, data tersebut diisi dengan nilai yang sesuai: dalam kasus pertama, jumlah byte yang dikirim dan yang kedua, ( bagian dari) permintaan untuk dikirimkan.

    Untuk mengulangi penugasan dan pengiriman elemen berbeda yang harus ditransmisikan dapat disimpan dalam vektor. Vektor baru inilah yang akan menentukan akhir dari operasi kompleks dan bukan operasi terakhir seperti selama ini.

    komentar 1

    pengguna komentar
    ดู บอล สด.

    Pasti ada banyak untuk mencari tahu tentang subjek ini. Saya suka semua poin yang Anda buat

    Anda mungkin melewatkannya