Mục lục:

Theo dõi chất lượng không khí bằng Grafana và Raspberry Pi: 7 bước
Theo dõi chất lượng không khí bằng Grafana và Raspberry Pi: 7 bước

Video: Theo dõi chất lượng không khí bằng Grafana và Raspberry Pi: 7 bước

Video: Theo dõi chất lượng không khí bằng Grafana và Raspberry Pi: 7 bước
Video: Đề tài: "ỨNG DỤNG IOT XÂY DỰNG GIẢI PHÁP PHÂN LOẠITRÁI CÂY THÔNG MINH" 2024, Tháng bảy
Anonim
Theo dõi chất lượng không khí bằng Grafana và Raspberry Pi
Theo dõi chất lượng không khí bằng Grafana và Raspberry Pi

Tôi đang tìm kiếm một dự án IOT nhỏ nhỏ và một người bạn đã giới thiệu tôi nên xem hướng dẫn này:

dzone.com/articles/raspberry-pi-iot-sensor…

Tôi thực sự khuyên bạn nên làm theo hướng dẫn để tiếp tục thiết lập Raspberry Pi để theo dõi. Hướng dẫn này sẽ hoàn thành các bước tiếp theo trong việc thiết kế một thiết bị IoT đơn giản cho phép khả năng chịu lỗi cao, cũng như Raspberry Pi có thể hữu ích như thế nào khi được ghép nối với Arduino.

Tôi cũng đi sâu vào tính hiệu quả và phần nào hạn chế của các mẫu cảm biến không khí MQ *. Cảm biến MQ * rẻ và khá hiệu quả, đồng thời rất dễ cài đặt.

Nhìn chung, điều này sẽ giúp bạn bắt đầu kết nối Arduino với internet theo cách đơn giản nhất có thể và đặt cách sử dụng các mô-đun dấu chân nhẹ hơn (re: ESP8266).

Chúc vui vẻ!

Bước 1: Thiết bị + Thiết lập

Trang thiết bị

  • Raspberry Pi đã cài đặt Raspbian
  • Bộ nguồn Raspberry Pi
  • Arduino Uno / Tương đương
  • Nam sang nam USB loại B sang loại A (nên đi kèm với Arduino của bạn)
  • Bất kỳ cảm biến MQ * nào (tôi đã sử dụng MQ-2, 4, 5 và 135)
  • Dây nhảy các loại
  • breadboard mini

Thiết lập

Hướng dẫn này có nghĩa là một phần giới thiệu nhẹ nhàng về cách sử dụng Arduino và Raspberry Pi - nó sẽ giúp bạn biết cách sử dụng thiết bị đầu cuối linux. Tuy nhiên, tôi cho rằng không có nhiều kinh nghiệm làm việc trên Arduino hoặc Raspberry Pi - tất cả những gì bạn thực sự cần là thiết bị được cung cấp và thái độ tò mò.

  • Bạn sẽ cần phải hoàn thành các bước trong hướng dẫn này.
  • Tôi khuyên bạn nên sử dụng Secure Shell (SSH) để giao tiếp với Raspberry Pi, vì điều này cho phép bạn nhập lệnh dễ dàng. Kết nối qua SSH khác nhau cho dù bạn đang sử dụng Windows, Linux hay Mac. Linux và Mac khá dễ sử dụng liên quan đến ssh (lệnh mở SSH theo nghĩa đen là ssh). Kiểm tra Putty cho Windows. Tôi khuyên bạn nên xem màn hình như một cách để duy trì phiên của bạn trong suốt dự án.
  • Bạn cũng sẽ cần cài đặt Python trên Raspbian. Khi tôi hoàn thành các bước này, tôi đã tạo một bản sao của thẻ SD cũ mà tôi đã có từ một dự án trước đó, đã được cài đặt Python. Nếu bản phân phối NOOBS / Raspbian của bạn không có Python 3.7 trở lên, hãy xem các bước sau để biên dịch Python từ nguồn.
  • Làm quen với git và cài đặt nó trong trường hợp nó chưa được cài đặt trong bản phân phối Raspbian của bạn.

Bước 2: Thiết lập mạch

Thiết lập mạch
Thiết lập mạch

Có một mạch bạn cần thiết lập trong Arduino.

Tôi đã cung cấp một giản đồ mà bạn có thể sử dụng làm tài liệu tham khảo.

Vẻ đẹp của tất cả các cảm biến khí MQ- * là một khi kết nối 5 Vôn và nối đất được thực hiện, điện trở đầu vào của các chân tương tự của Arduino cho phép cảm biến hoạt động chính xác.

Hãy cẩn thận để đảm bảo rằng kết nối Analog từ bảng ngắt trong cảm biến được kết nối với Arduino chứ không phải kết nối kỹ thuật số. Nếu bạn đang phải đối mặt với một phạm vi giá trị rất hẹp khi thử nghiệm, tôi khuyên bạn nên kiểm tra kết nối của mình tại đây trước.

Bước 3: Mã Arduino và nhấp nháy

Trong bước sau đây, chúng tôi sẽ kết nối bảng Arduino với Raspberry Pi. Trước khi thực hiện việc này, chúng ta cần flash Arduino bằng mã để đọc cảm biến cũng như truyền dữ liệu cảm biến đến Raspberry Pi. Điều này có thể được thực hiện theo bất kỳ cách nào mà bạn thường đẩy mã vào Arduino. Tôi đã sử dụng một công cụ của bên thứ ba ngoài Arduino IDE - do đó, tôi bao gồm thư viện Arduino ở trên cùng. Điều này không cần thiết cho các dự án khác.

Kiểm tra mã để sao chép / dán ở cuối phần này.

Mã làm gì

Mã được thiết lập để lấy dữ liệu từ bốn cảm biến khác nhau - nếu bạn sử dụng các loại cảm biến khác nhau, sẽ hợp lý khi thay đổi tên trên tín hiệu đầu ra được gửi từ cổng Nối tiếp.

Trong vòng lặp, chúng tôi kiểm tra xem Raspberry Pi có yêu cầu dữ liệu từ chúng tôi hay không. Do đó, chúng tôi đang sử dụng một cấu hình Master / Slave rất đơn giản trong đó Raspberry Pi sẽ liên tục đưa ra các yêu cầu tới Arduino về dữ liệu. Điều này đơn giản hơn nhiều so với việc có một bộ đếm trong mã Arduino vì dễ dàng hơn để kiểm tra những giá trị nào hoạt động từ Raspberry Pi, thay vì phải flash các giá trị mới vào Arduino.

Arduino, khi nhận được yêu cầu dữ liệu, sẽ định dạng đầu ra dưới dạng tham số GET - điều này liên quan đến các phương thức HTTP và chỉ đơn giản là một lựa chọn thiết kế. Nếu bạn thiết kế một lược đồ giao tiếp từ Arduino qua Cổng nối tiếp, bạn có thể dễ dàng thực hiện bất kỳ thứ gì khác, miễn là bạn thiết kế nó sao cho dữ liệu được phân tách hợp lý. Tôi chọn GET vì nó quen thuộc và mạnh mẽ.

Thử nghiệm đơn giản…

Khi bạn đã flash Arduino và chạy mã, hãy mở Trình theo dõi nối tiếp của Arduino IDE. Nếu bạn gửi một ký tự duy nhất "H" (đảm bảo vốn của nó!), Bạn sẽ nhận được khối lượng dữ liệu. Xin chúc mừng, nó hoạt động!

Một bộ thu thập dữ liệu MQ- * không đồng bộ mẫu

#bao gồm
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
int incomingByte;
voidsetup () {
pinMode (mq2, INPUT);
pinMode (mq4, INPUT);
pinMode (mq5, INPUT);
pinMode (mq135, INPUT);
Serial.begin (9600);
}
/ * valuePrint in giá trị cho nhãn này.
* Chỉ tạo ra tác dụng phụ.
*/
voidvaluePrint (Nhãn chuỗi, đọc int) {
Serial.print (nhãn);
Serial.print ("=");
Serial.print (đọc);
}
voidloop () {
// xem có dữ liệu nối tiếp đến không:
if (Serial.available ()> 0) {
// đọc byte cũ nhất trong bộ đệm nối tiếp:
// "Khi bạn gọi Serial.read, một byte được xóa khỏi bộ đệm nhận và trả về mã của bạn"
incomingByte = Serial.read ();
// nếu đó là chữ H viết hoa (ASCII 72), hãy đọc các giá trị và gửi chúng đến máy chủ mâm xôi.
// VIỆC CẦN LÀM: đảm bảo tin nhắn luôn có cùng độ dài, mỗi lần
if (incomingByte == 72) {
int mq2Reading = analogRead (mq2);
int mq4Reading = analogRead (mq4);
int mq5Reading = analogRead (mq5);
int mq135Reading = analogRead (mq135);
Serial.print ("?");
valuePrint ("mq2", mq2Reading);
Serial.print ("&");
valuePrint ("mq4", mq4Reading);
Serial.print ("&");
valuePrint ("mq5", mq5Reading);
Serial.print ("&");
valuePrint ("mq135", mq135Reading);
Serial.print ("\ n");
}
}
// chỉ đọc nối tiếp mỗi giây
chậm trễ (1000);
}

xem rawmain.cpp được lưu trữ với ❤ bởi GitHub

Bước 4: Mã Raspberry Pi

Bây giờ bạn đã định cấu hình Raspberry Pi theo https://dzone.com/articles/raspberry-pi-iot-sensor…, bây giờ bạn có thể chạy mã Raspberry Client sẽ gửi dữ liệu qua MQTT tới cơ sở dữ liệu của chúng tôi. kết nối với Grafana.

  1. Đảm bảo rằng mâm xôi của bạn được kết nối với internet và sau đó thực hiện lệnh git clone để sao chép toàn bộ mã vào Raspberry Pi. Lệnh của bạn sẽ giống như sau:

    git clone

  2. Trong thiết bị đầu cuối của raspberry Pi, thực hiện lệnh thay đổi thư mục (cd) thành "raspberry_client":

    cd raspberry_client.

  3. Bạn sẽ cần sử dụng môi trường ảo *. Đơn giản. Chạy

    python3 -m venv env. Điều này sẽ tạo ra một môi trường ảo được gọi là "env" mà chúng ta sẽ sử dụng để cài đặt các phụ thuộc.

  4. Bây giờ, chúng ta cần vào môi trường ảo của mình. Chạy:

    nguồn env / bin / kích hoạt. Bây giờ bạn đã sẵn sàng để cài đặt các phụ thuộc của dự án.

  5. Trong gói bạn vừa sao chép có một tệp được gọi là request.txt. Mở tệp này; bạn sẽ thấy chúng tôi yêu cầu các gói paho-mqtt và pyserial, cũng như các phiên bản tương ứng của chúng. Bạn có thể xem nội dung của tệp bằng cách chạy

    cat request.txt. Để cài đặt các gói này, ru

    pip install -r request.txt.

  6. Điều này kết thúc cấu hình.

Theo nghĩa đen, mọi hướng dẫn sử dụng python đều đề cập đến Virtual env và ngay cả đối với dự án nhỏ này, tôi sẽ đề cập đến. Môi trường ảo cho phép bạn tách các phiên bản phụ thuộc, cũng như tách riêng quy trình làm việc python của bạn - Đó là một cách hay để thu dọn không gian làm việc Python của bạn. Nếu đây là lần đầu tiên bạn sử dụng môi trường ảo, hãy đọc sơ qua về chúng tại đây.

Mã làm gì…

Tệp client.py sẽ nhập một bộ thư viện đơn giản bao gồm arduinosensor của riêng chúng tôi. Trong chức năng chính, chúng ta sẽ lấy các giá trị từ Arduino, xuất bản dữ liệu lên nhà môi giới MQTT, và sau đó ngủ trong 10 giây.

Tệp arduinosensor.py là một tập hợp các phương thức trợ giúp bao quanh thư viện paho.mqtt, cũng như cung cấp một số lược đồ giao tiếp hữu ích để giao tiếp với tải trọng của Arduino (xem: parse_payload). Tất nhiên, mã được đính kèm ở cuối phần này.

Một ứng dụng khách đơn giản giao tiếp với một mục arduino thông qua màn hình nối tiếp. Mong đợi để tìm thấy mã ở đây khi nó được công khai:

fromimportlibimportimport_module
importos
thời gian nhập khẩu
importarduinosensor
defmain ():
# mở ứng dụng đã xác định
start_time = time.time ()
whileTrue:
read = arduinosensor.get_values (os.enosystem.get ('PORT', "/ dev / ttyUSB0"))
arduinosensor.pub ("python_client", payload = reading)
time.sleep (10.0- ((time.time () -start_time)% 10.0))
if_name _ == "_ main_":
chủ chốt()

xem rawclient.py được lưu trữ với ❤ bởi GitHub

Bước 5: Kết hợp tất cả lại với nhau

Chúng tôi đã thiết lập mã Raspberry Python và chúng tôi đã thiết lập mã máy khách Arduino. Hãy chuyển sang kết nối cả hai thực thể với nhau.

Đầu tiên, hãy kết nối Arduino và thiết lập cấu hình chính xác:

  1. Trên thiết bị đầu cuối Raspberry Pi của bạn, hãy chạy

    python -m serial.tools.list_ports. Điều này sẽ liệt kê tất cả các cổng USB hỗ trợ giao tiếp nối tiếp.

  2. Bây giờ, hãy cắm Arduino của bạn và đợi khoảng 2 giây để Raspberry nhận ra nó. Nhập vào

    python -m serial.tools.list_ports một lần nữa sẽ hiển thị lại cho bạn các cổng. Bạn có thể thấy một danh sách bổ sung hiển thị - nếu đúng như vậy, thì mục nhập mới này là mục nhập mà Arduino của bạn được kết nối. Đây có thể là "/ dev / ttyUSB0".

  3. Thử chạy mã python trong môi trường ảo của bạn bằng cách chạy python3.7 client.py. Chờ một vài giây (nhiều nhất là mười giây) - nếu bạn gặp phải ngoại lệ, điều này có nghĩa là chúng tôi sẽ phải thay đổi giá trị cho cổng com của chúng tôi trên raspberry pi. Nếu bạn thấy mã in ra một dòng bắt đầu bằng "Đã gửi tải trọng sau:…" thì bạn sẽ có thể chuyển sang bước cuối cùng với Grafana. Mẹo: đảm bảo chạy

    màn hình -S python trước khi bạn khởi động ứng dụng khách python, nếu không, khi bạn kết thúc kết nối với raspberry pi, bạn sẽ mất chương trình python đang chạy của mình. Về mặt kỹ thuật, bạn không cần phải sử dụng nghiêm ngặt "python" làm tham số cuối cùng, nhưng tôi thích đặt tên cho các phiên màn hình của mình cho phù hợp.

    1. Để thay đổi giá trị cho cổng COM, bạn sẽ phải đặt một biến môi trường trước khi chạy mã. Bạn sẽ phải thử điều này cho mọi giá trị đầu ra có thể có khi chạy python -m serial.tools.list_ports. Ví dụ: nếu số lượng mục nhập mà tôi nhận được là hai và như sau:

      • / dev / ttyUSB6
      • / dev / acm0

thì các lệnh tôi chạy sẽ là:

PORT = "/ dev / ttyUSB6" python3.7 client.py, và nếu điều đó không hiệu quả, sau đó tôi sẽ bỏ

PORT = "/ dev / acm0" python3.7 client.py

Khi bạn đã hoàn thành các bước này, mã sẽ cam kết dữ liệu vào phiên bản cơ sở dữ liệu infuxdb của chúng tôi, khi được kết nối với Grafana, sẽ cho phép chúng tôi xem trang tổng quan của mình.

Bước 6: Cấu hình Grafana và Xem trang tổng quan

Cấu hình Grafana và Xem trang tổng quan
Cấu hình Grafana và Xem trang tổng quan

Được rồi, chúng ta đang ở đoạn cuối cùng! Bây giờ chúng ta sẽ sử dụng Grafana để tạo một bảng điều khiển đơn giản.

  1. Kết nối với phiên bản Grafana của bạn. Vì bạn đã làm theo các bước từ bài viết gốc của dzone, bạn sẽ có thể đăng nhập bằng người dùng quản trị viên của mình. Đi về phía trước và đăng nhập.
  2. Trên ngăn bên trái, di chuột qua biểu tượng "bảng điều khiển" - bốn hình vuông. Nhấp vào "Quản lý".
  3. Trên trang mới, nhấp vào "Trang tổng quan mới". Hơn nữa, nhấp vào "Thêm bảng điều khiển mới".
  4. Thao tác này sẽ mở trình chỉnh sửa Grafana. Chúng tôi sẽ tạo một chế độ xem đơn giản hiển thị một số liệu duy nhất.

    1. Trong ngăn bên phải, hãy thay đổi tiêu đề của bảng thành một cái gì đó có ý nghĩa, chẳng hạn như "Bài đọc trong bếp". Bạn cũng có thể nhập Mô tả tùy chọn.
    2. Ở dưới cùng bên trái, "Truy vấn", chúng tôi sẽ thêm một chuỗi thời gian. Grafana thực sự tỏa sáng ở đây vì chúng ta có thể dễ dàng tạo các câu lệnh SQL với giao diện dựa trên nhấp chuột. Trong "mặc định", chọn InfluxDB.
    3. Bây giờ, để đọc "A" - trong mệnh đề FROM, hãy chọn phép đo "airtestt". Nếu bạn nhìn vào mã python ban đầu trong hàm get_values của arduinosensor.py, bạn sẽ thấy rằng chúng tôi xác định bảng airtestt này trong mã.
    4. Đối với một mẫu, chúng ta hãy đi tới mệnh đề "CHỌN" và chọn trường (mq4). Ban đầu trang tổng quan của chúng tôi sẽ cung cấp cho chúng tôi lựa chọn "mean ()" - nhấp vào lựa chọn này và chọn "Xóa". sau đó, nhấp vào dấu cộng và trong "Tổng hợp", hãy chọn "khác biệt ()". Điều này sẽ hiển thị các mốc thời gian cụ thể. Chúng tôi có thể chọn các biện pháp khác nhưng hiện tại, bảng điều khiển của chúng tôi sẽ hiển thị các kết quả khác biệt với mq4.
    5. Nhấp vào Lưu ở trên cùng bên phải, và bạn đã hoàn tất!

Trong trường hợp bạn gặp sự cố, bạn có thể xác minh cài đặt của mình bằng những cài đặt trong ảnh chụp màn hình đính kèm.

Bước 7: Kết thúc

Gói (lại
Gói (lại

Trong hướng dẫn này, bạn đã có thể thiết lập một mạng MQTT mạnh mẽ bao gồm một nút và nhà môi giới duy nhất. Bạn cũng có thể hình dung dữ liệu IOT của mình bằng Grafana. Cuối cùng, bạn có thể tạo kiến trúc hệ thống đơn giản này từ (hy vọng) sự thoải mái của trình duyệt và PC của bạn thông qua kết nối SSH.

Có một số điều chúng tôi có thể muốn cải thiện.

  • Các chỉ số cảm biến trong biểu đồ của chúng tôi thực sự không phải là các chỉ số cảm biến chính xác - chúng là điện áp đầu ra từ cảm biến của chúng tôi. Chúng cần được hiệu chỉnh, hãy tham khảo bài đăng trên blog này để biết thêm chi tiết.
  • Cấu hình raspberry pi của chúng tôi có thể nhẹ hơn nhiều bằng cách sử dụng bảng mạch ESP8266 được kết nối với arduino và loại bỏ pi hoàn toàn. Xem phần giới thiệu về mô-đun ESP8266.
  • Chúng tôi có thể muốn thêm cảnh báo cho các sự kiện cụ thể. Rất may, Grafana cung cấp một cách để làm điều đó.

Tôi sẽ để lại một số bài đọc thêm để thu hút trí tưởng tượng của bạn với thế giới IOT. Tôi mong được gặp bạn trong những hướng dẫn tiếp theo!

Đọc thêm:

Đề xuất: