Gửi lệnh AT đến ESP8266 từ Arduino Uno qua cổng SoftwareSerial


8

MỤC TIÊU

Từ Arduino UNO, gửi các lệnh AT đến ESP8266 qua cổng SoftwareSerial và nhận kết quả.

TÌNH TRẠNG HIỆN TẠI

Tôi hoặc gửi lệnh AT và không nhận được gì ( sơ đồ nối dây 1 ) hoặc tôi gửi lệnh AT và nhận lại rác ( sơ đồ nối dây 2 ).

Sử dụng Arduino như một cách thông qua (như được giải thích trong hướng dẫn được liệt kê trong phần tài nguyên), tôi có thể gửi các lệnh AT. Tôi đã thấy rằng tôi có thể giao tiếp với ESP8266 ở mức 115200 baud.

Đây là kết quả của việc chạy 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

CHƯƠNG TRÌNH DÂY 1

!! Tôi có dây màu xanh lá cây gắn vào chân 3 trên Arduino Uno và dây màu vàng gắn vào chân 2; không phải 1 và 0 như hình ảnh gợi ý !!

nhập mô tả hình ảnh ở đây

CHƯƠNG TRÌNH DÂY 2

Cùng một hệ thống dây như trên, nhưng tôi có đảo ngược RX và TX. Dây màu xanh lá cây được gắn vào chân 2 và dây màu vàng được gắn vào chân 3.

Cái này đang chạy trên 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());
  }
}

KẾT QUẢ TỪ VÒI CHẠY

Sơ đồ nối dây 1

Started

Sơ đồ nối dây 2

Started
�����

Tôi đã thử nghiệm ESP8266 thông qua các hướng dẫn được liệt kê trong hướng dẫn trong phần Tài nguyên tôi đã sử dụng bên dưới. ESP8266 chỉ hoạt động tốt khi gửi hướng dẫn qua Dấu nhắc nối tiếp.

TÀI NGUYÊN Tôi đã sử dụng http://rancidbacon.com/files/kiwicon8/ESP8266_WiFi_Module_Quick_Start_Guide_v_1.0.4.pdf

CÂU HỎI

Có ai biết nếu những gì tôi đang cố gắng làm là có thể? Và nếu có, tôi đang làm gì sai?


Hãy thử như có đường trong PDF để sử dụng arduino như một đường vòng đến nối tiếp (sử dụng các kết nối như trong hình ảnh). Sau khi thử đặt baud ở 115200 và kiểm tra nó bằng màn hình nối tiếp. Bạn cần gửi \ r \ n khi dòng kết thúc cũng. Nếu đặc biệt không phản hồi, hãy thử 9600 baudrate. Nếu bạn nhận được đầu ra tốt thì chuyển sang phần mềm nối tiếp với baudrate hoạt động. Bạn cũng có thể thử cập nhật phần sụn của phiên bản mới nhất nếu chưa có.
brtiberio

Bạn có thể gửi mã nối tiếp phần mềm?
Chuột ma thuật

@Personagem, Cảm ơn. Tôi đã thực hiện việc khắc phục sự cố đó (ví dụ: kiểm tra xem tôi có thể gửi lệnh AT bằng cách sử dụng Arduino làm đường vòng không). Tôi đã thấy rằng tôi có thể giao tiếp với đặc vụ tại 115200. Tôi sẽ thử cập nhật chương trình cơ sở như bạn đề xuất.
Paul

@ Magic-Mouse SoftwareSerial là một thư viện được cung cấp bởi, tôi tin rằng, Arduino. Cảm ơn bạn đã giúp đỡ về câu hỏi nhưng tôi không nghĩ rằng việc đăng thư viện ở đây sẽ hữu ích.
Paul

Tôi biết thư viện nối tiếp phần mềm là gì, tôi muốn lấy mã nơi bạn sử dụng nối tiếp phần mềm.
Chuột ma thuật

Câu trả lời:


8

Có ai biết nếu những gì tôi đang cố gắng làm là có thể?

Hoàn toàn có thể :)

Và nếu có, tôi đang làm gì sai?

SoftwareSerial không có khả năng tốc độ 115200 baud (mặc dù "cho phép" đây là cài đặt). Một số báo cáo cho thấy cao tới 57600 là hoàn toàn khả thi, mặc dù theo kinh nghiệm của tôi, 9600 là tốt nhất cho độ tin cậy. Cách thay đổi tốc độ baud trên ESP8266 sẽ phụ thuộc vào phiên bản phần sụn. Tôi đã thành công với AT+IPR=9600. Bạn chỉ cần chạy lệnh này một lần (đó là cài đặt liên tục). Tôi đề nghị, dựa trên mô tả của bạn, rằng đây là thủ phạm có khả năng nhất gây ra đầu ra "rác" mà bạn mô tả.

Một vài lưu ý khác:

  • ESP8266 chạy trên 3v3, không phải 5v, vì vậy bạn không nên kết nối trực tiếp với các chân kỹ thuật số mà bạn cần chạy qua bộ chuyển đổi mức logic. Chạy 5v có thể chiên ESP8266 của bạn.
  • Đầu ra 3v3 của Arduino không đủ dòng điện để hỗ trợ ESP8266 một cách đáng tin cậy (Arduino 50mA so với tối đa 300mA cho ESP8266 bởi một số tài khoản). Nó có thể sẽ không ảnh hưởng đến các lệnh đơn giản như ATnhưng khi bạn cố gắng kết nối với mạng, v.v ... nó có thể gây ra thiết lập lại thiết bị không mong muốn.
  • Theo ghi nhận của người khác, bạn cần gửi \ r \ n - vì vậy hãy đảm bảo cửa sổ Nối tiếp của bạn được đặt để gửi cả hai (đây là trình đơn thả xuống trong cửa sổ nối tiếp)

Xin lưu ý rằng AT + IPR đôi khi có thể gạch ESP8266. Chi tiết có tại địa chỉ: arduino.stackexchange.com/questions/24156/...
Emir

7

Vâng, bạn có thể thử điều này:

Bắt đầu bằng cách tải lên bản phác thảo nhấp nháy lên Arduino của bạn sau đó kết nối nó với ESP8266 của bạn như thế này: TX-TX và RX-RX.

Bây giờ hãy mở serial Monitor và gửi lệnh AT và xem nó có phản hồi không. Nếu vậy thì bạn có thể điều khiển nó bằng Arduino của mình bằng cách nối lại với TX-RX và RX-TX.

PS: Đừng quên đặt dòng kết thúc trong Màn hình nối tiếp thành Dòng mới hoặc Trả về vận chuyển.

Sử dụng mã này để kết nối với 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);
  }  
}

Vì giao diện Phần cứng Nối tiếp sẽ bận khi được kết nối với Máy tính, do đó bạn phải sử dụng giao diện Nối tiếp khác để liên lạc với ESP8266. Trong trường hợp này, Phần mềm nối tiếp có ích.


Mặc dù liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi. - Từ đánh giá
Ricardo

1
Vâng, tôi đoán bạn đúng. Tôi chỉnh sửa câu trả lời của tôi.
Ikbel

@KiraSan tại sao phải trì hoãn (30)?
Rahul Rastogi

@RahulRastogi chỉ cho ví dụ này, bạn có thể sử dụng độ trễ để cho phép ESP phản hồi, 30ms chỉ là một giá trị ngẫu nhiên nhưng trong một chương trình thực tế, bạn nên tránh điều đó và sử dụng một cơ chế khác để kiểm tra phản hồi.
Ikbel

1

Có ai biết nếu những gì tôi đang cố gắng làm là có thể? Có thể, tôi đã thực hiện nó với 2 arduinos trong đó một cái đang mô phỏng ESP8266 (đang chờ đặt hàng ebay).

Và nếu có, tôi đang làm gì sai?

Những gì bạn đang làm là sai ở hầu hết các cấp độ, nhưng tôi nghĩ rằng bạn đã sắp xếp ra hầu hết.

Một ý tưởng là để thực hiện điều này một chút: Trình dịch mức logic nó sẽ giúp bạn tiết kiệm nhiều rắc rối sau này.

Trên "CHƯƠNG TRÌNH DÂY 1" của bạn, bạn đang sử dụng cổng nối tiếp Phần cứng của arduino để nói chuyện trực tiếp với thiết bị như thể nó được kết nối qua cáp TTL hoặc cáp FTDI.

Điều này có nghĩa là về mặt lý thuyết, thiết bị arduino sẽ đọc từ phần cứng khi nói quá ESP8266, nếu bạn có một arduino hoặc cáp TTL khác, hãy thử và kết nối nó với cổng 2 và 3 trên arduino "chính" và bạn sẽ nhận được một tương tự kết quả như đối với kết quả ví dụ của bạn 2. Vì bạn sẽ theo cách đó thông qua arduino. Nếu không đó sẽ là một nơi để bắt đầu gỡ lỗi.

Bên cạnh đó tôi chỉ có thể khuyên bạn đầu tư vào một bộ chuyển đổi mức logic 3,3v hoặc logic. Khi tôi nhận được cáp của tôi, tất cả mọi thứ làm việc ra khỏi hộp.


1

Tôi đã có rất nhiều vấn đề là tốt. Trong trường hợp của tôi, các vấn đề gần như được giải quyết bằng cách chuyển từ SoftwareSerial sang AltSoftSerial . Dường như trên Uno, thư viện nối tiếp phần mềm tiêu chuẩn không hoạt động với tôi. Sau khi chuyển đổi, tôi bắt đầu lấy lại kết quả lần đầu tiên. (Tôi cũng đã sử dụng dịch chuyển mức và cung cấp điện bên ngoài cho 3,3V)


Và gần như đã được giải quyết, ý tôi là - thỉnh thoảng tôi vẫn nhận được, vô nghĩa trên thiết bị đầu cuối. Vì vậy, ngay cả AltSoftSerial cũng không phải là một giải pháp hoàn hảo. Tôi đã sử dụng ESP-07 với tốc độ dữ liệu 115200 bps.


Bạn có thể thêm vào mô tả của bạn? Sẽ rất hữu ích khi biết cách bạn kết nối kết nối giữa Uno và ESP. Cảm ơn!
dlu


0

Dưới đây là một vài lời khuyên khi sử dụng Mô-đun ESP8266.

  1. Không sử dụng nối tiếp phần mềm vì nó không đáng tin cậy, đặc biệt là ở tốc độ truyền cao hơn.

  2. Luôn kết nối mô-đun ESP với máy tính và kiểm tra tất cả các lệnh AT trước khi kết nối với Arduino để đảm bảo rằng bạn đang làm việc đúng hướng

  3. Tạo bảng mạch nguồn để làm cho mô-đun ESP tương thích với nguồn cung cấp Arduino 5v

Ngoài ra kiểm tra liên kết này để biết thêm chi tiết

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.