Kirim perintah AT ke ESP8266 dari Arduino Uno melalui port SoftwareSerial

10

TUJUAN

Dari Arduino UNO, kirim perintah AT ke ESP8266 melalui port SoftwareSerial dan terima hasilnya.

STATUS TERKINI

Saya baik mengirim perintah AT dan mendapatkan kembali ( skema pengkabelan 1 ) atau saya mengirim perintah AT dan mendapatkan sampah kembali ( skema pengkabelan 2 ).

Menggunakan Arduino sebagai pass through (seperti dijelaskan dalam tutorial yang tercantum di bagian sumber daya), saya dapat mengirim perintah AT. Saya telah menemukan bahwa saya dapat berkomunikasi dengan ESP8266 di 115200 baud.

Ini adalah hasil dari menjalankan AT+GMR:

AT version:0.40.0.0(Aug  8 2015 14:45:58)
SDK version:1.3.0
Ai-Thinker Technology Co.,Ltd.
Build:1.3.0.2 Sep 11 2015 11:48:04

SKEMA KABEL 1

!! Saya memiliki kabel hijau yang terpasang pada pin 3 di Arduino Uno dan kabel kuning terpasang pada pin 2; bukan 1 dan 0 seperti yang ditunjukkan gambar !!

masukkan deskripsi gambar di sini

SKEMA KABEL 2

Kabel yang sama seperti di atas, tetapi saya memiliki RX dan TX terbalik. Kabel hijau terpasang ke pin 2 dan kabel kuning terpasang ke pin 3.

KODE

Ini berjalan di Arduino Uno

#include <SoftwareSerial.h>

SoftwareSerial esp8266(2, 3);

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  Serial.println("Started");

  // set the data rate for the SoftwareSerial port
  esp8266.begin(115200);
  esp8266.write("AT\r\n");
}

void loop() {
  if (esp8266.available()) {
    Serial.write(esp8266.read());
  }
  if (Serial.available()) {
    esp8266.write(Serial.read());
  }
}

HASIL DARI SKETCH MENJALANKAN

Skema Pengkabelan 1

Started

Skema Pengkabelan 2

Started
�����

Saya telah menguji ESP8266 melalui instruksi yang tercantum dalam tutorial di bagian Resources Saya telah Digunakan di bawah ini. ESP8266 berfungsi dengan baik saat mengirimkan instruksi melalui Serial Prompt.

SUMBER DAYA AKAN DIGUNAKAN http://rancidbacon.com/files/kiwicon8/ESP8266_WiFi_Module_Quick_Start_Guide_v_1.0.4.pdf

PERTANYAAN

Adakah yang tahu kalau apa yang saya coba lakukan itu mungkin? Dan jika benar, apa yang saya lakukan salah?

Paul
sumber
Coba seperti yang disarankan dalam PDF untuk menggunakan arduino sebagai bypass ke serial (gunakan koneksi seperti pada gambar). Setelah mencoba mengatur baud pada 115200 dan mengujinya menggunakan monitor serial. Anda perlu mengirim \ r \ n sebagai saluran berakhir juga. Jika esp tidak merespons, coba 9600 baudrate. Jika Anda mendapatkan output yang baik maka pindah ke serial perangkat lunak dengan baudrate yang berfungsi. Anda juga dapat mencoba memperbarui firmware esp ke versi terbaru jika Anda belum melakukannya.
brtiberio
Bisakah Anda memposting kode serial perangkat lunak?
Magic-Mouse
@Personagem, Terima kasih. Saya telah melakukan pemecahan masalah (mis. Memeriksa apakah saya dapat mengirim perintah AT dengan menggunakan Arduino sebagai bypass). Saya telah menemukan bahwa saya dapat berkomunikasi dengan esp pada 115200. Saya akan mencoba memperbarui firmware seperti yang Anda sarankan.
Paul
@ Magic-Mouse SoftwareSerial adalah perpustakaan yang disediakan oleh, saya percaya, Arduino. Terima kasih atas bantuan Anda untuk pertanyaan ini, tetapi saya rasa posting perpustakaan di sini tidak akan membantu.
Paul
Saya tahu apa perpustakaan serial perangkat lunak, saya ingin melihat kode di mana Anda menggunakan serial perangkat lunak.
Magic-Mouse

Jawaban:

9

Adakah yang tahu kalau apa yang saya coba lakukan itu mungkin?

Benar-benar mungkin :)

Dan jika benar, apa yang saya lakukan salah?

SoftwareSerial tidak mampu memberikan baud rate 115200 (meskipun "memungkinkan" ini sebagai pengaturan). Beberapa laporan menyarankan setinggi 57600 bisa diterapkan, meskipun dalam pengalaman saya 9600 adalah yang terbaik untuk keandalan. Cara mengubah baud rate pada ESP8266 akan tergantung pada versi firmware. Saya sudah sukses dengan AT+IPR=9600. Anda hanya perlu menjalankan perintah ini sekali saja (ini adalah pengaturan yang persisten). Saya sarankan, berdasarkan uraian Anda, bahwa ini adalah penyebab paling mungkin yang menyebabkan keluaran "sampah" yang Anda gambarkan.

Beberapa catatan lain:

  • ESP8266 berjalan pada 3v3, bukan 5v, jadi Anda seharusnya tidak terhubung langsung ke pin digital — Anda perlu menjalankannya melalui konverter level logika. Menjalankan 5v dapat menggoreng ESP8266 Anda.
  • Output 3v3 Arduino memiliki arus yang tidak cukup untuk mendukung ESP8266 dengan andal (50mA Arduino vs hingga 300mA untuk ESP8266 oleh beberapa akun) —mencoba menjalankan ESP8266 dari pasokan terpisah. Ini mungkin tidak akan memengaruhi perintah-perintah sederhana seperti ATtetapi ketika Anda mencoba menyambung ke jaringan dll. Itu mungkin menyebabkan perangkat tidak diatur ulang.
  • Seperti dicatat oleh orang lain, Anda perlu mengirim \ r \ n - jadi pastikan jendela Serial Anda diatur untuk mengirim keduanya (ini adalah drop-down di jendela serial)
Hibah
sumber
1
Harap dicatat bahwa AT + IPR terkadang dapat merusak ESP8266. Rincian lebih lanjut ada di: arduino.stackexchange.com/questions/24156/…
Emir
7

Anda bisa coba ini:

Mulailah dengan mengunggah sketsa kedip ke Arduino Anda lalu hubungkan ke ESP8266 Anda seperti ini: TX-TX dan RX-RX.

Sekarang buka Serial Monitor dan kirim perintah AT dan lihat apakah ia merespons. Jika demikian maka Anda dapat mengontrolnya menggunakan Arduino Anda dengan menghubungkannya kembali ke TX-RX dan RX-TX.

PS: Jangan lupa untuk mengatur baris yang berakhir di Serial Monitor ke Newline atau Carriage Return.

Gunakan kode ini untuk terhubung ke ESP8266:

#include <SoftwareSerial.h>

const byte rxPin = 2; // Wire this to Tx Pin of ESP8266
const byte txPin = 3; // Wire this to Rx Pin of ESP8266

// We'll use a software serial interface to connect to ESP8266
SoftwareSerial ESP8266 (rxPin, txPin);

void setup() {
  Serial.begin(115200);
  ESP8266.begin(115200); // Change this to the baudrate used by ESP8266
  delay(1000); // Let the module self-initialize
}

void loop() {
  Serial.println("Sending an AT command...");
  ESP8266.println("AT");
  delay(30);
  while (ESP8266.available()){
     String inData = ESP8266.readStringUntil('\n');
     Serial.println("Got reponse from ESP8266: " + inData);
  }  
}

Karena antarmuka Serial Perangkat Keras akan sibuk ketika terhubung ke Komputer, maka Anda harus menggunakan antarmuka Serial lain untuk berkomunikasi dengan ESP8266 Anda. Dalam hal ini, Serial Perangkat Lunak menjadi berguna.

Ikbel
sumber
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah. - Dari Ulasan
Ricardo
1
Ya, saya kira Anda benar. Saya mengedit jawaban saya.
Ikbel
@ Kirira mengapa penundaan (30) diperlukan?
Rahul Rastogi
@RahulRastogi hanya untuk contoh ini, Anda dapat menggunakan penundaan untuk memungkinkan ESP untuk merespons, 30 ms hanya nilai acak tetapi dalam program kehidupan nyata, Anda harus menghindari itu dan menggunakan mekanisme lain untuk memeriksa tanggapan.
Ikbel
1

Adakah yang tahu kalau apa yang saya coba lakukan itu mungkin? Mungkin saja, saya sudah melakukannya dengan 2 arduinos di mana seseorang mensimulasikan ESP8266 (menunggu pesanan ebay).

Dan jika benar, apa yang saya lakukan salah?

Apa yang Anda lakukan salah pada sebagian besar level, tetapi saya pikir Anda paling beres.

Sebuah ide adalah untuk mengimplementasikan teman kecil ini: Tingkat logika shifter itu akan menyelamatkan Anda dari banyak masalah nanti.

Pada "WIRING SCHEME 1" Anda, Anda menggunakan port serial Hardware arduino untuk berbicara langsung ke perangkat seolah-olah terhubung melalui kabel TTL atau kabel FTDI.

Ini berarti bahwa perangkat arduino secara teori akan membaca dari perangkat keras ketika berbicara terlalu ESP8266, jika Anda memiliki arduino lain atau kabel TTL, coba dan hubungkan ke gerbang 2 dan 3 pada arduino "utama" dan Anda harus mendapatkan yang serupa hasil seperti untuk contoh hasil Anda 2. Karena Anda akan seperti itu proxy melalui Arduino. Jika tidak, itu akan menjadi tempat untuk memulai debugging.

Selain itu saya hanya bisa merekomendasikan Anda untuk berinvestasi dalam TTL 3,3v atau konverter level logika. Ketika saya mendapatkan kabel saya semuanya bekerja di luar kotak.

Magic-Mouse
sumber
1

Saya punya banyak masalah juga. Dalam kasus saya masalah hampir diselesaikan dengan beralih dari SoftwareSerial ke AltSoftSerial . Tampaknya di Uno perpustakaan serial perangkat lunak standar tidak berfungsi untuk saya. Setelah beralih saya mulai mendapatkan hasil kembali untuk pertama kalinya. (Saya juga menggunakan level shifting dan catu daya eksternal untuk 3.3V)


Dan dengan hampir memecahkan maksud saya - saya masih mendapatkan, dari waktu ke waktu, omong kosong di terminal. Jadi bahkan AltSoftSerial bukanlah solusi yang sempurna. Saya menggunakan ESP-07 dengan data rate 115200 bps.

Janar Jürisson
sumber
Bisakah Anda menambah deskripsi Anda? Akan sangat membantu untuk mengetahui bagaimana Anda menghubungkan kabel antara Uno dan ESP. Terima kasih!
dlu
0

Berikut adalah beberapa tips saat menggunakan Modul ESP8266.

  1. Jangan gunakan serial perangkat lunak karena tidak dapat diandalkan terutama pada tingkat baud yang lebih tinggi.

  2. Selalu sambungkan modul ESP ke komputer dan uji semua perintah AT sebelum berinteraksi dengan Arduino untuk memastikan bahwa Anda bekerja di arah yang benar

  3. Buat papan adaptor daya untuk membuat modul ESP kompatibel dengan pasokan Arduino 5v

Lihat juga tautan ini untuk detail lebih lanjut

AAA
sumber