Sự khác biệt giữa SoftwareSerial và serial


7

Từ mã mẫu

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()  
{
  // Open serial communications and wait for port to open:
  Serial.begin(57600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  Serial.println("Goodnight moon!");
  // set the data rate for the SoftwareSerial port
  mySerial.begin(4800);
  mySerial.println("Hello, world?");
}

void loop() // run over and over
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

Sự khác biệt giữa, tại sao sử dụng 2 loại cuộc gọi để thực hiện cuộc gọi lệnh AT.

Phần mềmSerial mySerial (10,11) mySerial.begin (10,11)

Nối tiếp.begin (9600)

Chỉnh sửa, điều này trả lời câu hỏi của tôi bằng lời nói của tôi dựa trên phản hồi @jfpoilpret.

  1. Điều quan trọng là khởi tạo cả Nối tiếp và Phần mềm , vì SoftwareSerial được sử dụng để gửi các lệnh thực tế đến GSM và Nối tiếp được sử dụng cho viewtất cả các lệnh và phản hồi của chúng trên cổng gỡ lỗi của GSM
  2. Các chân trên GSM và Arduino được sử dụng để kết nối 2 và truyền các lệnh thực tế . Trong khi RS232 chỉ được sử dụng để gỡ lỗi. Tuy nhiên, chúng tôi có thể kết nối đầu nối RS232 với USB để kết nối GSM với máy tính để bàn (hoặc máy tính xách tay)
  3. Mã trong vòng lặp là điều cần thiết để giúp chuyển đổi tất cả các lệnh thực tế sang cổng RS232 gỡ lỗi và ngược lại, để cho phép chúng tôi sử dụng một công cụ như cutecom(trên ubfox) để truyền lệnh đến các chân đầu vào nối tiếp GSM.

Lưu ý quan trọng: Khi sử dụng cutecom, đảm bảo rằng bạn chọn đầu dòng CR để gửi lệnh.

Câu trả lời:


7

Tất cả các MCU của Atmel, dựa trên các mô hình Arduino, bao gồm phần cứng đặc biệt để liên lạc nối tiếp; phần này của MCU được gọi là USART (viết tắt của Bộ thu / phát không đồng bộ / không đồng bộ toàn cầu ).

Dựa trên mô hình Arduino mà bạn có, bạn có thể chỉ có một (ví dụ trên UNO) hoặc nhiều USART (leonardo, mega ...) trên bảng MCU.

Mỗi MCU USART được ánh xạ tới các chân cụ thể của bảng, bạn không thể thay đổi các chân đó.

Trên Arduino, nếu bạn sử dụng màn hình để gửi thông tin gỡ lỗi đến PC, thì một USART được sử dụng, đây là khi bạn sử dụng Serial.

Nếu bạn cần nhiều hơn một liên kết giao tiếp nối tiếp (ví dụ: vì bạn có một số thiết bị giao tiếp qua nối tiếp) nhưng mô hình Arduino của bạn chỉ có một USART, thì bạn phải sử dụng thư viện SoftwareSerial"mô phỏng" công việc của USART chỉ bằng phần mềm. Do đó, nó được tối ưu hóa ít hơn nhiều so với USART phần cứng.

Một lợi thế của SoftwareSeriallà bạn có thể ánh xạ nó tới bất kỳ cặp chân nào bạn thích.

Đi đến mẫu mã của bạn:

if (mySerial.available())
    Serial.write(mySerial.read());
if (Serial.available())
    mySerial.write(Serial.read());

Rõ ràng ở đây, Serialđược sử dụng để gỡ lỗi (gửi thông tin đến màn hình nối tiếp của PC của bạn), trong khi đó mySerialđược sử dụng để bắt đầu với thiết bị GSM.

Vì vậy, bản phác thảo này được sử dụng để cho phép bạn gõ các lệnh AT trên màn hình, sau đó sẽ được chuyển tiếp đến thiết bị GSM; ngược lại, bất kỳ chuỗi nào được trả về từ thiết bị GSM sẽ được lặp lại với màn hình nối tiếp.


Tôi đang sử dụng mô-đun SIM808 với Arduino Uno, một điều mà tôi không hiểu là khi tôi sử dụng TX1 và RX0 của Arduino để giao tiếp với mô-đun GSM, tôi gặp lỗi trên phần mềm Arduino trong quá trình tải lên: một cái gì đó như ... . '. Nhưng khi tôi sử dụng cài đặt SoftwareSerial cài đặt chân tx và rx cho pin7 và pin8, sẽ không có vấn đề gì khi tải lên khi chân được kết nối. Một điều khác là khi các phiên bản khác nhau của Arduino được sử dụng, làm thế nào để bạn giao tiếp với thiết bị GSM nếu bạn không sử dụng SoftwareSerial? Tôi đã thấy mã cho các phiên bản khác của Arduino và SIM908 mà tại đó SoftwareSerial lib. hoàn toàn không được sử dụng
RegarBoy

0
#include <SoftwareSerial.h>

SoftwareSerial GSMSerial(7, 8); //use pins 7 and 8 as RX and TX

void setup() {
   GSMSerial.begin(19200);               // the GPRS/GSM baud rate   
   Serial.begin(19200);                 // the GPRS/GSM baud rate   
}

void loop() {
    if(Serial.available()) {
       //to send commands received from Serial Monitor to GSM module
       GSMSerial.print((char)Serial.read());
    }
    else  if(GSMSerial.available()) {
       //To print data responded from GSM module to the Serial Monitor.  
       Serial.print((char)GSMSerial.read());
    }
}

Trong đoạn mã bên trên chức năng vòng lặp, ifcần có câu lệnh đầu tiên để nói chuyện với mô-đun GMS từ Trình giám sát nối tiếp, ví dụ: khi bạn nhập ATvào màn hình và nhấn enter, lệnh của bạn sẽ được gửi đến mô-đun GSM.

Câu lệnh if thứ hai else iflà in bất cứ thứ gì nhận hoặc trả lời từ mô-đun GSM, ví dụ mô-đun GSM trả lời lệnh đã nhận ATvà kết quả của nó OKsau khi bạn gửi lệnh ATđến mô-đun.

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.