GNU/Linux >> Belajar Linux >  >> Linux

Kembangkan Aplikasi Jaringan untuk ESP8266 menggunakan Mongoose di Linux

Mari kita bicara tentang bagaimana memulai mengembangkan aplikasi jaringan untuk chip ESP8266 menggunakan Server Web Tertanam Mongoose di Linux. Saya akan menggunakan Ubuntu, tetapi semua hal dapat dengan mudah diadaptasi untuk distribusi Linux apa pun.

Siapa adalah siapa

Sejak Anda mulai membaca artikel ini, saya berasumsi Anda tahu tentang Linux, ESP8266 dan Mongoose. Jadi hanya intro singkat.

ESP8266

Chip murah dengan WiFi terintegrasi, dikembangkan oleh Expressif. Jika Anda ingin mengetahui lebih detail, lihat situs resminya.

Luwak

Mongoose adalah perpustakaan multi-protokol lengkap dengan inti di bawah 40kB yang dikembangkan oleh Cesanta. Temukan informasi mode tentangnya di situs Cesanta.

Linux

Betulkah? :-)

Menghubungkan ESP8266 ke komputer Anda

Ok, hal pertama yang perlu kita lakukan adalah menghubungkan chip ESP8266 ke komputer Anda. Anda dapat melakukannya dengan beberapa cara.

NodeMCU

Jika Anda memiliki modul NodeMCU, dengan konverter UART-ke-USB onboard, yang harus Anda lakukan hanyalah menghubungkan modul ke komputer melalui USB. Ciuman!

Menghubungkan dengan konverter UART-USB eksternal

Jika modul ESP Anda tidak memiliki konverter UART-USB internal, Anda memerlukan yang eksternal. Ada banyak sekali - cari saja di google.

Pilih salah satu yang bekerja dengan Linux (pada dasarnya, kebanyakan dari mereka) dan memiliki pin 3.3V dan ingat:sebagian besar konverter UART-USB memiliki pin untuk 3.3V dan 5V tetapi Anda tidak boleh menghubungkan ESP ke pin 5V. Perangkat ini tidak tahan voltase dan modul Anda dapat terbakar.

Sekarang hubungkan (ESP -> Konverter):

VCC -> 3.3V

GND -> GND

RX0 -> TX (bukan RX)

TX0 -> RX

CH_PD -> 3.3V

Menghubungkan dengan Arduino

Jika Anda tidak memiliki konverter UART-USB, tetapi memiliki Arduino dengan pin 3.3V, Anda dapat dengan mudah menggunakannya untuk menghubungkan ESP:

  1. Hubungkan Arduino ke komputer melalui USB
  2. Hubungkan RESET Arduino ke GND-nya:diperlukan untuk menonaktifkan prosesor host, karena kita hanya membutuhkan modul UART-USB
  3. Hubungkan ESP (ESP -> Arduino)
    1. VCC -> 3.3V
    2. GND -> GND
    3. RX0 -> RX0 (bukan TX)
    4. TX0 -> TX
    5. CH_PD -> 3.3V

Memverifikasi koneksi

Jika koneksi Anda baik-baik saja, ESP akan muncul sebagai perangkat tty baru. Biasanya, NodeMCU dan ESP yang terhubung melalui konverter UART-USB muncul sebagai /dev/ttyUSBx (x =0, 1, 2 dst) dan versi Arduino muncul sebagai /dev/ttyACMx (x =0, 1, 2 dst)

Anda dapat menggunakan perintah dmesg | grep usb untuk menemukan perangkat Anda.

Misalnya, setelah koneksi NodeMCU Anda akan melihat sesuatu seperti ini:

 

[  1496.765417] usb 2-3.3: new full-speed USB device number 15 using xhci_hcd
[ 1496.867729] usb 2-3.3: New USB device found, idVendor=10c4, idProduct=ea60
[ 1496.867736] usb 2-3.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1496.867740] usb 2-3.3: Product: CP2102 USB to UART Bridge Controller
[ 1496.867743] usb 2-3.3: Manufacturer: Silicon Labs
[ 1496.867745] usb 2-3.3: SerialNumber: 4202
[ 1497.900384] usbcore: registered new interface driver usbserial
[ 1497.900423] usbcore: registered new interface driver usbserial_generic
[ 1497.900457] usbserial: USB Serial support registered for generic
[ 1497.903897] usbcore: registered new interface driver cp210x
[ 1497.903989] usbserial: USB Serial support registered for cp210x
[ 1497.904382] usb 2-3.3: cp210x converter now attached to ttyUSB0

Seperti yang Anda lihat, NodeMCU sekarang tersedia sebagai /dev/ttyUSB0 .

Sebagai  pemeriksaan terakhir, gunakan terminal apa pun untuk menyambung ke perangkat baru; Saya akan menggunakan picocom. Ini adalah terminal yang ringan. Di Ubuntu dapat diinstal dengan: 

sudo apt install picocom

Mencoba:

picocom /dev/ttyUSB0 -b 115200

Jika semuanya baik-baik saja, Anda akan melihat “Terminal siap ” dalam keluaran picocom.

Memperbaiki kesalahan “Akses Ditolak”

Jika picocom mengatakan "Access Denied" itu biasanya berarti, bahwa pengguna saat ini bukan anggota dialout group:di Linux, untuk mengakses port serial, pengguna harus menjadi anggota grup ini.

Jalankan:

sudo usermod -aG docker $USER

perintah, logout, login kembali dan coba sambungkan kembali ESP. "Akses ditolak" harus hilang.

Membangun Luwak

Unduh rilis Mongoose terbaru dari sini.

Mongoose dikirimkan dengan contoh untuk ESP8266 dan RTOS SDK. Itu terletak di sini di GitHub.

Catatan:ESP8266 memiliki dua versi SDK. Yang pertama adalah non-OS dan yang kedua berbasis RTOS. Dalam artikel ini saya akan menggunakan yang terakhir. Untuk menemukan perbedaan di antara keduanya, google atau baca jawaban ini di forum resmi.

Untuk membuat contoh, Anda memiliki dua opsi:

  1. Gunakan buruh pelabuhan dan gambar buruh pelabuhan siap pakai
  2. Instal SDK dan rantai alat di komputer Anda

Menggunakan Docker

Ini lebih sederhana dan saya percaya cara yang lebih baik. Gambar buruh pelabuhan Cesanta berisi semua yang Anda butuhkan untuk membangun Mongoose untuk ESP (dan bukan hanya Mongoose saja - aplikasi ESP apa pun). Jadi, Anda tidak perlu menginstal sesuatu secara lokal dan Anda dapat dengan mudah membagikan kode Anda kepada teman dan kolega sehingga mereka dapat membangun firmware Anda dan mendapatkan hasil yang sama persis.

Panduan instalasi buruh pelabuhan tersedia di sini. Coba, ini sangat sederhana, Anda hanya perlu menambahkan repositori buruh pelabuhan ke Linux Anda dan menginstalnya seperti program biasa dengan apt .

Setelah buruh pelabuhan diinstal, buka folder luwak/contoh/ESP8266_RTOS dan jalankan build.sh

Pada build docker pertama akan mengunduh gambar yang diperlukan. Mungkin perlu beberapa saat, tergantung pada saluran internet Anda. Namun, setelah build.sh selesai di folder ./bin, Anda akan menemukan dua file .bin.

Itu adalah firmwarenya. Anda melakukan ini!

Menggunakan SDK lokal

Jika buruh pelabuhan terlalu sederhana untuk Anda atau karena alasan apa pun Anda ingin menggunakan alat yang diinstal secara lokal, Anda juga dapat melakukannya.

Ini sedikit lebih sulit dan membosankan, tetapi tidak ada yang terlalu rumit. Terutama, mengingat Cesanta membuat  beberapa alat untuk Anda dan Anda tidak perlu membuatnya dari sumber.

Begini cara kerjanya:

  1. Klon ESP RTOS SDK dari repo ini. Contoh makefile mencarinya di folder /opt/ESP8266_RTOS_SDK, jadi, Anda dapat meletakkan repo kloning ke folder ini atau memodifikasi jalurnya sebelum membuat contoh (lihat di bawah).
  2. Unduh xtensa-lx106-elf.tar.bz2 dari folder publik ini.
  3. Buka file xtensa-lx106-elf.tar.bz2. Misalnya, ke folder /opt:

    sudo tar -xvf xtensa-lx106-elf.tar.bz2 -C /opt

  4. Ubah variabel PATH Anda, misalnya Anda membongkar rantai alat ke folder /opt gunakan perintah berikut:

    ekspor PATH=/opt /xtensa-lx106-elf/bin:$PATH

(Saya juga merekomendasikan untuk menambahkan perintah ini ke folder .bashrc atau .profile Anda, untuk menyimpan perubahan setelah sistem reboot)

Sekarang jalankan:

$ export SDK_PATH=/opt/ESP8266_RTOS_SDK  # Put your path to SDK here
$ export BIN_PATH=./bin; mkdir ./bin
$ make clean; make BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=dio SPI_SIZE_MAP=0

Dan sekarang, jika semuanya diinstal dengan benar, Anda akan memiliki firmware di ./bin map

Anda melakukannya lagi!

Mem-flash ESP

Ada banyak alat yang tersedia untuk mem-flash ESP8266. Kami akan menggunakan esptool . Untuk menggunakannya, klon repo ini dan tambahkan path ke esptool.py di variabel PATH Anda (ini opsional, dan hanya nyaman).

Sekarang, putuskan sambungan picocom, jika masih terhubung (Petunjuk:tekan Ctrl+A; Ctrl+D untuk keluar darinya) dan jalankan:

esptool.py --port /dev/ttyUSB0 --baud 230400 \
   write_flash --flash_mode=dio --flash_size=4m \
   0x00000 ${BIN_PATH}/eagle.flash.bin \
   0x20000 ${BIN_PATH}/eagle.irom0text.bin \
   0x7e000 ${SDK_PATH}/bin/esp_init_data_default.bin

Catatan penting: jika modul Anda bukan NodeMCU, Anda perlu melakukan ground GPIO0 sebelum flashing (grounding GPIO0 mengalihkan modul ke mode flashing). Setelah mem-flash, putuskan sambungan GPIO0 dari ground dan mulai ulang ESP.

Jika tidak terjadi kesalahan, Anda akan melihat output seperti ini:

Connecting...

Erasing flash...

Took 0.58s to erase flash block

Wrote 35840 bytes at 0x00000000 in 1.8 seconds (157.5 kbit/s)...

Erasing flash...

Took 2.02s to erase flash block

Wrote 301056 bytes at 0x00020000 in 15.4 seconds (156.7 kbit/s)...

Erasing flash...

Took 0.11s to erase flash block

Wrote 1024 bytes at 0x0007e000 in 0.1 seconds (163.5 kbit/s)...

Leaving…

Siap! Sekarang perangkat di-flash dengan firmware Anda.

Hasil pertama

Sekarang Anda akan melihat jaringan WiFi "Mongoose" muncul. Contoh mengatur AP. Gunakan kata sandi “Mongoose” untuk terhubung, lalu navigasikan ke http://192.168.4.1/, dan Anda akan melihat halaman ucapan “Halo, dunia”.

Selamat! Anda baru saja menjalankan Web Server di ESP8266!

Langkah selanjutnya

Langkah selanjutnya tergantung pada Anda. Anda dapat menggunakan contoh yang dijelaskan sebagai titik awal.

Lihat user_main.c -nya mengajukan. Ini mengatur titik akses WiFi dan memulai server web. Anda dapat dengan mudah mengubah mode AP ke mode stasiun (dan terhubung ke jaringan WiFi Anda) dan menggunakan API Mongoose untuk mengimplementasikan apa pun yang Anda inginkan. Ini adalah cara umum untuk menggunakan Mongoose, jadi, Anda dapat menggunakan contoh Mongoose lain untuk membangun program Anda dan memiliki http, tcp, udp, mqtt, dan lebih banyak lagi fitur lainnya di perangkat ESP Anda.

Gunakan dokumen Espressif (misalnya yang ini) untuk mempelajari cara mengatur modul WiFi ESP8266 (dan bukan hanya WiFi) dan dokumentasi Mongoose untuk menemukan fitur Mongoose.

Punk tidak mati!


Linux
  1. Menggunakan AppImage untuk manajemen paket Linux

  2. Panduan Lengkap untuk Menggunakan AsciiDoc di Linux

  3. Menggunakan alat SS untuk pemecahan masalah jaringan

  1. Kiat Linux untuk menggunakan cron untuk menjadwalkan tugas

  2. Linux – Bagaimana Cara Berhenti Berbagi Jaringan Untuk Proses Saat Ini?

  3. Menggunakan variabel dalam SQLCMD untuk Linux

  1. Cara mengemas aplikasi Python untuk Linux

  2. 10 Perintah Linux Untuk Diagnostik Jaringan

  3. Menggunakan di untuk pekerjaan cron sekali pakai di Linux