Softwareserial.h là gì

Loading Preview

Sorry, preview is currently unavailable. You can download the paper by clicking the button above.

Tôi có Arduino kết nối với một mô-đun bluetooth HC-06.

Tôi sẽ không gửi dữ liệu từ một số Ứng dụng Android mà tôi đã viết cho Arduino và để Arduino thực hiện công việc tùy thuộc vào dữ liệu nhận được. Cho đến nay tôi đang gửi các giá trị Integer trong khoảng từ 0 đến 1024.

Thật không may mySerial.read [] sẽ không kết thúc ở đây. Nó đọc dữ liệu dưới dạng một chuỗi lớn.

Chân mô-đun RX và TX của tôi được kết nối với chân Arduinos RX- và TX. [Bảng điều khiển không hiển thị bất kỳ dữ liệu nào khi tôi kết nối chúng với Cổng 10 và 11, vì vậy tôi nghĩ đây là cách SoftwareSerial định nghĩa Cổng RX và TX của Arduino ...]

Phác thảo của tôi:

#include SoftwareSerial mySerial[10, 11]; // RX, TX char character; void setup[] { // set the data rate for the SoftwareSerial port mySerial.begin[9600]; } void loop[] // run over and over { String Data = ""; while[mySerial.available[]] { character = mySerial.read[]; Data.concat[character]; // Serial.println[Data]; Serial.println["foo"]; }

Điều này sẽ xuất ra:

154888143201270341421501588671750825906975101110241005969922864792711629540451369290213140600

Tôi không thể đọc dữ liệu này đúng cách và tôi không thể phân tích dữ liệu sang một số chức năng để xử lý nó, bởi vì mySerial.read [] sẽ không kết thúc. Phải có một cách tốt hơn để nhận hoặc gửi Dữ liệu này.

Nguồn phát Bluetooth của tôi Nguồn:

public void sendPWM[int progress] { OutputStream tmpOut = null; try { tmpOut = mmSocket.getOutputStream[]; } catch [IOException e] { // TODO Auto-generated catch block Log.e["error", "NO OUTPUT STREAM", e]; e.printStackTrace[]; return; } try { // byte[] buffer = stringToBytesUTFCustom["1"]; byte[] buffer = String.valueOf[progress].getBytes[]; tmpOut.write[buffer]; // tmpOut.flush[]; /*I have turned this ON and OFF, to see if it // makes any difference*/ } catch [IOException e] { // TODO Auto-generated catch block Log.e["error", "EXCEPTION DURING WRITE", e]; e.printStackTrace[]; } }

Tôi không đóng outputStream, vì điều này cũng sẽ hủy kết nối với HC-06 và tôi phải gửi rất nhiều dữ liệu. Tôi không thể để người dùng kết nối lại với mô-đun mỗi lần anh ta gửi dữ liệu. Bạn có thể giúp tôi ra ở đây?

Lập trình IoT với ESP8266 Arduino

Đối tượng Serial làm việc giống nhiều với Arduino bình thường. Ngoại trừ việc phần cứng của ESP8266 có thêm 128 bytes RAM FIFO và 256 bytes RX-TX Buffer. Cả TX và RX đều truyền nhận dựa vào interrupt. Việc đọc và ghi dữ liệu chỉ bị block lại khi FIFO/buffer đầy/rỗng.

Serial sử dụng là UART0, được map thằng vào chân GPIO1 [TX] và GPIO3 [RX]. Serial có thể REMAP lại vào GPIO15 [TX] và GPIO13 [RX] bởi việc gọi hàm Serial.swap[] sau khi gọi Serial.begin. Gọi swap lại sẽ MAP UART0 trở lại GPIO1 và GPIO3.

Serial1 sử dụng UART1, TX pin là chân GPIO2. UART1 không thể sử dụng để nhận dữ liệu bởi vì bình thường nó được sử dụng để kết nối với Flash. Để sử dụng Serial1, gọi Serial1.begin[baudrate].

Ghi chú

Nếu Serial1 không được sử dụng và Serial không bị REMAP - TX cho UART0 có thể MAP sang GPIO2 bởi gọi hàm Serial.set_tx[2] sau Serial.begin hay trực tiếp với Serial.begin[baud, config, mode, 2].

Mặc định, tất cả thông tin chuẩn đoán hệ thống và thư viện sẽ bị bỏ qua nếu gọi hàm Serial.begin. Để cho phép những thông tin đó, có thể gọi Serial.setDebugOutput[true]. Để chuyển thông tin đó ra Serial1, gọi hàm Serial1.setDebugOutput[true].

Ghi chú

Bạn cũng cần phải gọi Serial.setDebugOutput[true] để cho phép hàm printf[].

Cả đối tượng SerialSerial1 hỗ trợ 5, 6, 7, 8 bits dữ liệu, odd [O], even [E], và no [N] parity, và 1 hay 2 bits stop. Để cấu hình các mode trên, gọi Serial.begin[baudrate, SERIAL_8N1], Serial.begin[baudrate, SERIAL_6E2], v.v..

Một phương thức được hiện thực trên cả 2 SerialSerial1 để lấy baud rate hiện tại như sau: Serial.baudRate[], Serial1.baudRate[] trả về một số int của tốc độ Baud hiện tại.

Ví dụ

// Set Baud rate 57600 Serial.begin[57600]; // Kiểm tra baud rate hiện tại int br = Serial.baudRate[]; // sẽ xuất ra "Serial is 57600 bps" Serial.printf["Serial is %d bps", br];

Ngoài ra, các Contributor Team ESP8266 Arduino cũng hoàn thiện thư viện Software Serial cho ESP8266, xem pull request.

Cảnh báo

Thư viện này được thực hiện chỉ duy nhất cho ESP8266 boards, và sẽ không làm việc với các thư viện Arduino khác.

© Copyright 2017, TuanPM.

Built with Sphinx using a theme provided by Read the Docs.

Video liên quan

Chủ Đề