Chương trình vẽ dữ liệu nối tiếp


36

Tôi cần vẽ đồ thị dữ liệu nối tiếp từ Arduino.

Tôi cần hỗ trợ cho:

  1. Các định dạng dữ liệu khác nhau (ví dụ: đã ký, không dấu, 8 bit, 16 bit);
  2. Vẽ một số dữ liệu trên cùng một trục;
  3. Xuất / nhập dữ liệu tập tin.

Vì âm mưu dữ liệu nối tiếp từ Arduino là một nhu cầu phổ biến, câu hỏi của tôi là: Những chương trình / tiện ích nào có sẵn để vẽ dữ liệu nối tiếp từ Arduino đáp ứng các nhu cầu trên?

Những lợi thế / bất lợi của phương pháp bạn đã đề xuất là gì?


Tôi quyết định mở lại với chỉnh sửa cuối cùng của bạn. Khi câu hỏi này xuất hiện, nó dường như thuộc chủ đề vì nó cụ thể. Tôi sẽ nói rõ với bất kỳ ai (vì không có nhiều loại câu hỏi như vậy): nếu điều này quá lạc đề, tôi có thể phải bước vào. Tuy nhiên, khả năng điều đó xảy ra là rất hiếm. :) @JRobert Nếu GnuPlot đáp ứng các yêu cầu trong câu hỏi, hãy đăng nó.
Chim cánh cụt vô danh

1
Trang "Giao diện với phần mềm khác" trên Sân chơi Arduino cho thấy rất nhiều cách để vẽ dữ liệu nối tiếp từ Arduino sang iPhone, PC Windows, PC Linux, v.v.
David Cary

Câu trả lời:


19

Có một số ứng dụng tốt để hiển thị dữ liệu nối tiếp, bao gồm:

  • MegunoLink ($ 29,95; Lite miễn phí) - âm mưu, ghi nhật ký, lập trình, báo cáo và nhiều hơn nữa.

    MegunoLink

  • MakerPlot ($ 39) - âm mưu kỹ thuật số & tương tự, giám sát, giao diện tùy chỉnh và nhiều hơn nữa.

    MakerPlot

  • ArduinoPlot (miễn phí) - âm mưu đơn giản.

    ArduinoPlot

  • arduino- cốt truyện (miễn phí) - âm mưu dễ dàng, trọng lượng nhẹ với sự hỗ trợ cho tất cả các loại nguyên thủy

    máy vẽ arduino

  • Bảng điều khiển cầu (miễn phí) - ghi nhật ký, vẽ sơ đồ, v.v.

    Bảng điều khiển cầu

  • RealtimePlotter (miễn phí) - Vẽ sơ đồ dữ liệu 6 kênh.

    RealtimePlotter

  • Công cụ vẽ dữ liệu nối tiếp thời gian thực (miễn phí) - Vẽ dữ liệu CSV, ghi nhật ký và hơn thế nữa.

  • SimPlot (miễn phí) - âm mưu 4 kênh.

    SimPlot

  • Arduino serial Plotter (miễn phí) - được tích hợp trong Arduino Editor trong Công cụ> Plotter nối tiếp .

    Máy vẽ nối tiếp Arduino

(Đây là wiki cộng đồng, bạn có thể mở rộng danh sách.)


Tôi bối rối. Tôi đã đăng giải pháp của riêng mình bên dưới nhưng bây giờ tôi không chắc có nên chỉnh sửa bài đăng của mình hay không vì nó là wiki. Bạn nghĩ sao ?
Overdrivr

@Overdrivr Chắc chắn, hãy mở rộng wiki này vì lợi ích của người khác!
niutech

8

Gô-lô

Ưu điểm: Nó rất linh hoạt, có thể viết được và có sẵn miễn phí.

Nhược điểm: Một chút phức tạp để tìm hiểu (nhưng tôi đã tìm ra cách để bắt đầu trong vài phút và khá chức năng trong một hoặc hai giờ), chạy trong cửa sổ đầu cuối (nếu bạn cho rằng đó là một bất lợi).

Một cái gì đó tôi thấy rất hữu ích là kịch bản nó để tải lại logfile của chương trình đầu cuối của tôi để tôi có một biểu đồ động khi thử nghiệm của tôi tiến triển.

Hình ảnh của GnuPlot



Chỉnh sửa: Đây là tập lệnh GnuPlot vẽ sơ đồ:

#!/usr/local/bin/gnuplot -rv
# Note reverse video here ^^^   til I find a way to put it in the script

# gpFanCtl - Plots DiffThermo fan controller data (aloft, alow, Tdiff, fan-state).
# $Id: gpFanCtl,v 1.8 2014-04-28 09:40:51-04 jrobert Exp jrobert $

set terminal x11 1 noraise
set xtics 3600
set mxtics 4
set xdata time

set ytics 1 nomirror
set mytics 2

set y2range [0:3]
set y2tics 1
set my2tics 4

set grid
set ylabel 'Temperature, degC'
set y2label 'Tdiff, degC' textcolor rgb '#00CD63'

cd '/Users/jrobert/Desktop'
plot "Logfile.txt" using ($0*4):1 title "Aloft" with lines lc rgb "red",\
     "Logfile.txt" using ($0*4):2 title "Alow" with lines lc rgb "#3982FF",\
     "Logfile.txt" using ($0*4):3 title "Tdiff" with lines lc rgb "#00CD63" axis x1y2,\
     "Logfile.txt" using ($0*4):4 title "Fan" with lines lc rgb "orange" axis x1y2;
pause 4
refresh
reread

1
Điều này có vẻ tuyệt vời. Bạn có thể thêm một số mã demo?
geometrikal

Nhưng nó vẽ dữ liệu từ Logfile.txt, không phải dữ liệu nối tiếp thời gian thực. Làm thế nào để kết nối nó với một cổng nối tiếp?
niutech

1
Không, tập lệnh này không phải là "thời gian thực" - nó có thể chậm hơn khoảng 4 giây. Logfile.txt là đầu ra tệp chụp từ một chương trình đầu cuối. Trong trường hợp của tôi, hệ thống thu thập dữ liệu lấy mẫu và ghi nhật ký cứ sau 4 giây và tập lệnh GnuPlot thay thế tệp nhật ký cứ sau 4 giây. Điều này đủ năng động cho những gì tôi đang làm với nó (theo dõi nhiệt độ phòng).
JRobert

7

Tôi sử dụng Matplotlib cho bất kỳ âm mưu nào tôi cần làm.

Nó không phải là arduino cụ thể theo bất kỳ cách nào, nhưng nó là một bộ công cụ vẽ đồ thị Python rất tuyệt vời .

Tôi đã xây dựng một số ứng dụng vẽ dữ liệu từ nhiều bộ vi điều khiển trong thời gian thực sang đồ thị, nhưng đó thực sự là một quá trình gồm hai bước: 1. Lấy dữ liệu từ thiết bị vào máy tính, 2. vẽ dữ liệu thời gian thực .

Thực sự, tôi nghĩ bạn nên chia câu hỏi của bạn thành hai phần:

  • Làm thế nào để bạn có được dữ liệu từ Arduino / Bất kỳ thiết bị nối tiếp nào vào máy tính một cách dễ dàng.
  • Một thư viện âm mưu tốt là dễ sử dụng.

+1. Video "Arduino thời gian thực Matlab" [ youtube.com/watch?v=ntHZsLmNkgw] có sử dụng kỹ thuật tương tự không?
David Cary

Vâng. Nó sử dụng một cuộc gọi đọc dữ liệu arduino vào một biến MATLAB, và sau đó một cuộc gọi cập nhật biểu đồ MATLAB với biến MATLAB.
Sói Connor

Matplotlib là trăn, không phải matlab.
DaveP 24/2/2015

Tôi không đồng ý với bạn, câu hỏi này không nên chia thành 2. Có những giải pháp (như giải pháp tôi đã đăng dưới đây) quan tâm đến cả hai, bởi vì thật khó chịu khi phải quay lại bánh xe để theo dõi và kiểm soát các ứng dụng arduino từ xa, và cũng bởi vì viết mã python cho các ô thời gian thực thực sự rất xa tầm thường. Mọi thứ có thể được thực hiện với matplotlib nhưng rõ ràng có những lựa chọn thay thế tốt hơn cho điều đó như pyqtgraph.
Overdrivr

Đối với phần 1: nhận dữ liệu từ Arduino: github.com/ElectricRCAircraftGuy/eRCaGuy_PyTerm
Gabriel Staples

6

SerialPlot (miễn phí). Nó làm mọi thứ bạn yêu cầu và nhiều hơn nữa.

Các tính năng khác:

  • Phóng to dữ liệu
  • Nhấp vào datapoint để xem giá trị
  • Gửi lệnh trở lại Arduino
  • Điều chỉnh tổng số điểm được vẽ
  • Khả năng hiển thị mỗi kênh trong âm mưu tự động riêng của nó
  • Giải thích các gói nhị phân, ASCII và các gói tùy chỉnh
  • Chế độ demo cho phép bạn chơi với các tính năng

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


1
Câu trả lời hay, tôi thích serialplot, nó tự động tìm thấy cổng COM & tốc độ truyền của tôi, tôi chỉ cần thay đổi từ nhị phân sang CSV và tăng lên 3 kênh (đối với từ kế) và nó đang âm mưu độc đáo.
Hamish_Fernsby

Đây là cách gọn gàng và dễ sử dụng nhất - nhưng tôi ước có mac Binary :)
willwade

5

Trả lời câu hỏi của riêng tôi ở đây .. Tôi sử dụng Bảng điều khiển cầu như đã đề cập.

Ưu điểm: Rất nhiều tính năng.

Nhược điểm: Khó cài đặt và báo cáo cú pháp / lỗi rất kém.

Để sử dụng: Bạn cần ghi dữ liệu Arduino qua Cổng nối tiếp một byte mỗi lần. Đối với kiểu dữ liệu int trông như sau:

// RX8 [h=43] @1Key1 @0Key1
Serial.print("C");
Serial.write(data>>8);
Serial.write(data&0xff);

Trong Bridge, lệnh để đọc dữ liệu là:

RX8 [h=43] @1Key1 @0Key1

RX8 là lệnh đọc [h = 43] có nghĩa là byte hợp lệ tiếp theo là "C" trong ASCII, sau đó là Byte cao của Key1 sau đó là Byte thấp của Key1

Có vẻ như thế này trong Bridge:

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

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


5

Bạn có thể thử serialchart . Đó là chương trình phía trước khá eo biển. Nó làm chính xác những gì bạn yêu cầu. Nhược điểm duy nhất là nó yêu cầu dữ liệu ở định dạng CSV (không đáp ứng điểm đầu tiên).

Ảnh chụp màn hình từ trang dự án:

thí dụ


Tôi đã thử điều này và thấy rất khó để làm việc, không có cấu hình mặc định, không tự động, sau nửa giờ làm việc với cú pháp tôi vẫn không có cốt truyện chỉ là một đường thẳng, vì vậy tôi đã từ bỏ và sử dụng SerialPlot làm việc trong vòng vài phút, chỉ cần xác định văn bản và số lượng kênh.
Hamish_Fernsby

4

Bạn có thể quan tâm đến Telemetry Xem trên Github . Đây là một giao thức giao tiếp, rất đơn giản để sử dụng, với giao diện sạch sẽ, cho phép giao tiếp hai chiều với các thiết bị Arduino / Mbed.

Nếu bạn không muốn đọc bài viết dài này, hãy xem Hướng dẫn về tất cả các tính năng tuyệt vời trong đó

Sức mạnh của thư viện này đến từ giao diện dòng lệnh của máy tính để bàn ( không yêu cầu kỹ năng lập trình trong python).

Nó có thể mở các ô hiệu suất cao (cao hơn nhiều so với những gì có thể được thực hiện với matplotlib) chỉ bằng cách gõ một lệnh .

Giao thức hỗ trợ các cấu trúc dữ liệu phức tạp . Bây giờ mảngmảng thưa có thể được gửi từ bảng nhúng.

Các ô được mở từ giao diện dòng lệnh hiểu loại dữ liệu và đối với các mảng, thay vì vẽ từng mẫu theo thời gian, mẫu sẽ được vẽ theo chỉ mục của chính nó.

Trong một tương lai gần, nó được lên kế hoạch để thêm hỗ trợ cho các tọa độ không gian (dữ liệu xyz), điều này sẽ cho phép bạn vẽ dữ liệu không gian ngay lập tức. Một lần nữa, các ô sẽ tìm ra mọi thứ, vẽ dữ liệu của bạn trong không gian 2D hoặc 3D và bạn có thể tập trung vào phát triển ứng dụng của mình.

Tôi tin rằng các tính năng này chỉ đơn giản là duy nhất cho một dự án như vậy.

Pytelemetry CLI Phiên bản PyPI

Sau khi cài đặt pip, dòng lệnh có thể được bắt đầu với

pytlm

Sau đó, bạn có thể connect, ls(danh sách) các chủ đề đã nhận, printdữ liệu nhận được về một chủ đề, pub(xuất bản) về một chủ đề hoặc mở plotmột chủ đề để hiển thị dữ liệu nhận được trong thời gian thực

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

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

Bắt đầu

Wiki

PS: Tôi là tác giả.

Tôi đã phát triển nó bởi vì tôi không thể tìm thấy một giải pháp cho phép tôi:

  • viết nhanh các kịch bản PC để điều khiển Arduino
  • gỡ lỗi nhanh
  • vẽ dữ liệu phức tạp (không chỉ là giá trị thay đổi theo thời gian)

tất cả những điều trên mà không sử dụng các giải pháp độc quyền hoặc GUI cồng kềnh.

Sử dụng thư viện này, thời gian để thiết lập giao tiếp giữa Arduino và PC thường kéo dài từ nửa ngày đến 5 phút.


PS: ghi nhật ký dữ liệu cổng nối tiếp trong các gói python (dữ liệu thô và dữ liệu được giải mã) cũng được hỗ trợ đầy đủ. Tôi dự định sử dụng nó để thực hiện chức năng phát lại ngoại tuyến (mô phỏng luồng dữ liệu nối tiếp)
Overdrivr

4

Không ai từng đề cập đến Chế biến siêu linh hoạt. Bạn có thể làm nhiều hơn là chỉ vẽ nhưng nếu đó là tất cả những gì bạn muốn làm, bạn có thể sử dụng thư viện gwoptics; kết nối Arduino và xử lý theo chỉ dẫn ở đây .


2

Tôi đã tạo ra một công cụ tương đương với python in dữ liệu thời gian thực từ gia tốc kế ADXL345. https://github.com/mba7/SerialPort-RealTime-Data-Plotter

có thể nó sẽ hữu ích cho ai đó

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

Chỉ cần chọn com và tốc độ nối tiếp và gửi dữ liệu nối tiếp theo định dạng sau:

  • 3 đầu vào, mỗi đầu vào là 2 byte (Bổ sung hai)
  • 6 byte được ngăn cách bởi một khoảng trắng
  • gói là một chuỗi kết thúc bởi '\ n'

Có thể dễ dàng điều chỉnh để thay đổi định dạng này


Bạn có thể giải thích làm thế nào để sử dụng này, và những lợi thế và bất lợi của việc này là gì?
Chàng trai với chiếc mũ

2

Bạn có thể sử dụng MATLAB Student Edition , điều này cũng có thể tiết kiệm thời gian của bạn để phân tích thêm. Bạn chỉ có thể mở cổng COM trong MATLAB và vẽ tín hiệu nhận được và / hoặc lưu tín hiệu trong không gian làm việc hoặc bất cứ điều gì. MATLAB làm cho mọi thứ dễ dàng!


2
Chào mừng bạn đến với Arduino SE! Bạn có thể vui lòng chỉnh sửa câu trả lời của mình để thêm thông tin mô tả mức độ phù hợp với nhu cầu của OP và có thể một chút thông tin khác như liên kết hoặc ảnh không? Cảm ơn!
Chim cánh cụt vô danh

Câu trả lời hay, sẽ không nghĩ đến việc sử dụng Matlab, có một luồng SO ở đây về nó stackoverflow.com/questions/19483098/ chủ
Hamish_Fernsby

2

Định dạng CSV linh hoạt nhất cho mọi dữ liệu (được ký / không dấu, kích thước và độ chính xác khác nhau).

Công cụ đa nền tảng (được viết bằng Java / Scala) Scsvlog có thể nhận / phân tích chuỗi CSV từ cổng / ổ cắm nối tiếp, hiển thị giá trị và vẽ biểu đồ (tối đa 8).


Thật không thể tìm thấy công cụ bây giờ, thật không may - liên kết ban đầu đã chết và tôi dường như không thể tìm thấy bất kỳ bản sao nào.
Hôm nay,

2

Bạn có thể dùng thử phần mềm tôi đã phát triển cho đề xuất đó. Nó nhằm mục đích dễ sử dụng. Xem Công cụ nối tiếp - Máy khách Cổng nối tiếp miễn phí mã nguồn mở có khả năng nhận các giá trị biểu đồ được nhận ở định dạng JSON.


1

Mặc dù tôi chưa sử dụng nó, "rqt_plot" chạy trên PC dường như là một cách phổ biến để vẽ dữ liệu trên PC đi qua một cổng nối tiếp từ Arduino chạy một bản phác thảo bao gồm thư viện rosserial_arduino hoặc thư viện ros_arduino_bridge .


1

Tôi biết đây là một câu hỏi rất cũ, nhưng gần đây tôi đã tạo ra một ứng dụng mac giải quyết vấn đề này rất tốt. Bạn có thể tìm thêm thông tin về nó trên www.bloonapp.com. Có một số video demo trên trang web mà bạn có thể xem.nhập mô tả hình ảnh ở đây


1
Kể từ ngày 1 tháng 8 năm 18, trang web này đã chết.
Dan

1

Tôi biết bạn có thể sau khi đầu ra GUI nâng cao hơn, nhưng tôi đã quản lý để sao chép một tác vụ mà người ta thường làm với máy hiện sóng: Đầu ra Arduino serial Plotter

sử dụng máy vẽ nối tiếp trong Arduino IDE và mô-đun ADC mà bạn có thể nhận được với giá 3 đô la trên eBay. Tôi thừa nhận rằng nó hơi thô, nhưng có thể đáng để chơi với công cụ này một thời gian, trước khi bạn đầu tư vào các giải pháp cấp độ Python / Matlab / ect. Nó rất dễ sử dụng. Sẽ không mất nhiều thời gian để thêm ghi thẻ SD vào quy trình.

Xem: https://edwardmallon.wordpress.com/2016/08/15/USE-the-arduino-uno-as-a-basic-data-acquisition-system/


0

Trình xem từ xa

Ưu điểm:

  1. Dễ sử dụng
  2. Giao diện người dùng trực quan và linh hoạt
  3. Nguồn mở và miễn phí
  4. Các loại đồ thị khác nhau
  5. Tốc độ cập nhật đồ thị rất nhanh

Nhược điểm:

  1. Ngừng phát triển
  2. Định dạng dữ liệu nhị phân chưa hoàn tất.
  3. Điều khiển đồ thị nguyên thủy như phóng to, chụp màn hình và ... nhập mô tả hình ảnh ở đây

0

Plotter nối tiếp là một chương trình đơn giản mà tôi đã thực hiện với Electron nhận dữ liệu theo định dạng sau: data1,data2,timestamp;và chuyển đổi nó thành biểu đồ thời gian thực.

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


0

Hầu như hữu ích. Nó cần:

  1. ghi dữ liệu nối tiếp vào một tệp HOẶC
  2. vẽ đồ thị từ một tập tin và cập nhật mỗi xxx mili giây.

Live Graph là một tùy chọn tốt hơn và tôi sử dụng nó cùng với Tera Term để lấy dữ liệu qua liên kết USB / nối tiếp (và lưu nó vào tệp nhật ký mà sau đó thăm dò Live Graph).

Live Graph hơi lỗi khi lưu trữ dữ liệu vào bộ nhớ cache và tôi chưa tìm được cách đặt cửa sổ chuyển động để hiển thị kết quả. Ngoài ra, hiển thị nhiều biểu đồ đòi hỏi phải chia tỷ lệ thủ công, nhưng mặc dù vậy, nó vẫn rất hữu ích. Nó được viết bằng java vì vậy bạn sẽ cần JRE. Tôi thích điều này hơn là phải cài đặt python như một số chương trình đồ họa khác làm. Một nhược điểm khác là nó mở 4 cửa sổ khác nhau, đó là một nỗi đau khi tôi muốn lật giữa nó và Tera Term.

Tôi vẫn chưa tìm thấy phần mềm

  1. Một tệp thực thi (.EXE) để nó không có sự phụ thuộc bên ngoài
  2. Bao gồm một trình giả lập thiết bị đầu cuối hoặc bộ ghi dữ liệu nối tiếp
  3. Nhật ký dữ liệu nối tiếp
  4. Vẽ đồ thị nhiều mục từ CSV
  5. Cho phép dữ liệu được phân định bằng tab VÀ VÀ tab (dễ đọc hơn khi cuộn dọc theo trong khi đồng thời theo dõi biểu đồ.
  6. Cho phép thiết lập các tỷ lệ khác nhau cho từng biểu đồ được phủ mà không phải chia tỷ lệ thành [0..1] hoặc đặt hệ số nhân, tức là cho phép đặt phạm vi [y0..y1] cho từng mục được vẽ biểu đồ.

1
Chào mừng bạn đến với Arduino SE! Câu trả lời của bạn có nhiều thông tin nhưng bạn có thể vui lòng cải thiện định dạng của câu trả lời bằng hướng dẫn đánh dấu mà bạn có thể xem bằng cách nhấn ?nút trong trình chỉnh sửa.
Avamander 29/2/2016

0

Tôi đang sử dụng process.org cho âm mưu nối tiếp từ Arduino. Đó là ứng dụng duy nhất tôi có thể tìm thấy cho phép tôi tạo ra các biểu đồ thực (ví dụ: một triệu sự kiện trong một trăm thùng) và hiển thị nhiều số thông tin khác nhau ngoài ý nghĩa sigma cho mỗi kênh. Hai vấn đề chính: A) hóa ra là dựa trên Java mà không có byte B) không đồng bộ với ig với bộ đệm tròn và các điểm đánh dấu yêu cầu trong dữ liệu. (tốc độ cao, không bắt tay)


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.