สารบัญ:

ติดตามคุณภาพอากาศโดยใช้ Grafana และ Raspberry Pi: 7 ขั้นตอน
ติดตามคุณภาพอากาศโดยใช้ Grafana และ Raspberry Pi: 7 ขั้นตอน

วีดีโอ: ติดตามคุณภาพอากาศโดยใช้ Grafana และ Raspberry Pi: 7 ขั้นตอน

วีดีโอ: ติดตามคุณภาพอากาศโดยใช้ Grafana และ Raspberry Pi: 7 ขั้นตอน
วีดีโอ: Measuring particle count, VOC gas, and CO2 air quality 2024, พฤศจิกายน
Anonim
ติดตามคุณภาพอากาศโดยใช้ Grafana และ Raspberry Pi
ติดตามคุณภาพอากาศโดยใช้ Grafana และ Raspberry Pi

ฉันกำลังมองหาโครงการ IOT เล็กๆ และเพื่อนแนะนำให้ฉันดูบทช่วยสอนนี้:

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

ฉันขอแนะนำอย่างยิ่งให้ทำตามบทช่วยสอนเพื่อติดตามในการตั้งค่า Raspberry Pi สำหรับการตรวจสอบ บทช่วยสอนนี้จะเสร็จสิ้นขั้นตอนเพิ่มเติมในการออกแบบอุปกรณ์ IoT อย่างง่ายที่ช่วยให้มีความทนทานต่อข้อผิดพลาดสูง รวมถึงประโยชน์ที่ Raspberry Pi สามารถทำได้เมื่อจับคู่กับ Arduino

ฉันยังพูดถึงประสิทธิภาพและข้อจำกัดบางประการของเซ็นเซอร์อากาศรุ่น MQ* เซ็นเซอร์ MQ* มีราคาถูกและมีประสิทธิภาพพอสมควร และตั้งค่าได้ง่ายมาก

โดยรวมแล้วสิ่งนี้จะช่วยให้คุณเริ่มต้นในการเชื่อมต่อ Arduino กับอินเทอร์เน็ตในวิธีที่ง่ายที่สุด และกำหนดวิธีการสำหรับการใช้โมดูลรอยเท้าที่เบากว่า (อีกครั้ง: ESP8266)

มีความสุข!

ขั้นตอนที่ 1: อุปกรณ์ + ตั้งค่า

อุปกรณ์

  • Raspberry Pi พร้อม Raspbian ติดตั้งอยู่
  • แหล่งจ่ายไฟ Raspberry Pi
  • Arduino Uno/เทียบเท่า
  • USB ตัวผู้ถึงตัวผู้ B ถึง Type A (ควรมาพร้อมกับ Arduino ของคุณ)
  • เซ็นเซอร์ MQ* รุ่นใดก็ได้ (ฉันใช้ MQ-2, 4, 5 และ 135)
  • สายจัมเปอร์คละแบบ
  • เขียงหั่นขนมขนาดเล็ก

ติดตั้ง

บทช่วยสอนนี้มีขึ้นเพื่อเป็นการแนะนำเบื้องต้นเกี่ยวกับการใช้ Arduino และ Raspberry Pi - จะช่วยให้ทราบวิธีใช้เทอร์มินัล linux อย่างไรก็ตาม ฉันไม่ถือว่ามีประสบการณ์มากในการทำงานกับ Arduino หรือ Raspberry Pi - สิ่งที่คุณต้องการจริงๆ ก็คืออุปกรณ์ที่ให้มาและทัศนคติที่อยากรู้อยากเห็น

  • คุณจะต้องทำตามขั้นตอนในบทช่วยสอนนี้
  • ฉันแนะนำให้คุณใช้ Secure Shell (SSH) เพื่อเชื่อมต่อกับ Raspberry Pi เนื่องจากจะช่วยให้คุณป้อนคำสั่งได้อย่างง่ายดาย การเชื่อมต่อผ่าน SSH นั้นแตกต่างกันไปไม่ว่าคุณจะใช้ Windows, Linux หรือ Mac Linux และ Mac ค่อนข้างใช้งานง่ายสำหรับ ssh (คำสั่งในการเปิด SSH คือ ssh อย่างแท้จริง) ลองใช้สีโป๊วสำหรับ Windows ฉันแนะนำให้คุณตรวจสอบหน้าจอเพื่อรักษาเซสชันของคุณในระหว่างโครงการ
  • คุณจะต้องติดตั้ง Python บน Raspbian ด้วย เมื่อฉันทำตามขั้นตอนเหล่านี้เสร็จแล้ว ฉันได้สร้างสำเนาของการ์ด SD เก่าที่ฉันวางไว้จากโปรเจ็กต์ก่อนหน้าซึ่งติดตั้ง Python ไว้แล้ว หากการแจกจ่าย NOOBS/Raspbian ของคุณไม่มี Python 3.7 ขึ้นไป ให้ตรวจสอบขั้นตอนเหล่านี้เพื่อคอมไพล์ Python จากแหล่งที่มา
  • ทำความคุ้นเคยกับ git และติดตั้งในกรณีที่ยังไม่ได้ติดตั้งในการแจกจ่าย Raspbian ของคุณ

ขั้นตอนที่ 2: การตั้งค่าวงจร

การตั้งค่าวงจร
การตั้งค่าวงจร

มีวงจรเดียวที่คุณต้องตั้งค่าใน Arduino

ฉันได้จัดทำแผนผังที่คุณสามารถใช้เป็นข้อมูลอ้างอิงได้

ความสวยงามของเซ็นเซอร์ก๊าซ MQ-* ทั้งหมดก็คือ เมื่อทำการเชื่อมต่อ 5 โวลต์และกราวด์แล้ว ความต้านทานอินพุตของพินอะนาล็อกของ Arduino ช่วยให้เซ็นเซอร์ทำงานได้อย่างถูกต้อง

ระวังให้แน่ใจว่าการเชื่อมต่ออนาล็อกจากบอร์ดฝ่าวงล้อมในเซ็นเซอร์เชื่อมต่อกับ Arduino ไม่ใช่การเชื่อมต่อแบบดิจิตอล หากคุณกำลังเผชิญกับช่วงค่าที่แคบมากเมื่อทำการทดสอบ เราขอแนะนำให้คุณตรวจสอบการเชื่อมต่อของคุณที่นี่ก่อน

ขั้นตอนที่ 3: รหัส Arduino และการกะพริบ

ในขั้นตอนต่อไป เราจะเชื่อมต่อบอร์ด Arduino กับ Raspberry Pi ก่อนที่เราจะทำสิ่งนี้ เราต้องแฟลช Arduino พร้อมโค้ดเพื่ออ่านเซ็นเซอร์และส่งข้อมูลเซ็นเซอร์ไปยัง Raspberry Pi สามารถทำได้ในทุกวิถีทางที่คุณมักจะกดโค้ดไปยัง Arduino ฉันใช้เครื่องมือของบุคคลที่สามนอกเหนือจาก Arduino IDE ดังนั้นฉันจึงรวมไลบรารี Arduino ไว้ที่ด้านบน สิ่งนี้ไม่จำเป็นสำหรับโครงการอื่น

ตรวจสอบรหัสเพื่อคัดลอก/วางที่ส่วนท้ายของส่วนนี้

รหัสทำอะไรได้บ้าง

รหัสได้รับการตั้งค่าเพื่อรับข้อมูลจากเซ็นเซอร์ที่แตกต่างกันสี่ตัว - หากคุณใช้เซ็นเซอร์ประเภทต่าง ๆ การเปลี่ยนชื่อบนสัญญาณเอาต์พุตที่ส่งจากพอร์ตอนุกรมจะสมเหตุสมผล

ในลูปเราตรวจสอบว่า Raspberry Pi ร้องขอข้อมูลจากเราหรือไม่ ดังนั้นเราจึงใช้การกำหนดค่า Master/Slave ที่ง่ายมาก โดย Raspberry Pi จะส่งคำขอข้อมูลไปยัง Arduino อย่างต่อเนื่อง สิ่งนี้ง่ายกว่าการมีตัวนับในโค้ด Arduino มากเพราะง่ายต่อการทดสอบว่าค่าใดทำงานจาก Raspberry Pi แทนที่จะต้องแฟลชค่าใหม่ไปยัง Arduino

Arduino เมื่อได้รับคำขอข้อมูล จะจัดรูปแบบเอาต์พุตเป็นพารามิเตอร์ GET ซึ่งเกี่ยวข้องกับวิธี HTTP และเป็นเพียงตัวเลือกการออกแบบ หากคุณต้องออกแบบสคีมาการสื่อสารจาก Arduino ผ่าน Serial Port คุณสามารถทำอย่างอื่นได้อย่างง่ายดาย ตราบใดที่คุณออกแบบเพื่อให้ข้อมูลแยกจากกันอย่างสมเหตุสมผล ฉันเลือก GET เพราะมันคุ้นเคยและแข็งแกร่ง

การทดสอบอย่างง่าย…

เมื่อคุณให้ Arduino แฟลชและรันโค้ดแล้ว ให้เปิด Serial Monitor ของ Arduino IDE หากคุณส่งอักขระตัวเดียว "H" (ตรวจสอบให้แน่ใจว่าเป็นตัวพิมพ์ใหญ่!) คุณจะได้รับข้อมูล ยินดีด้วย มันได้ผล!

ตัวอย่าง ตัวรวบรวมแบบอะซิงโครนัสของ MQ-* data

#รวม
int mq2 = A2;
int mq4 = A3;
int mq5 = A4;
int mq135 = A5;
ขาเข้าไบต์;
voidsetup() {
โหมดพิน (mq2, INPUT);
โหมดพิน (mq4, INPUT);
โหมดพิน (mq5, อินพุต);
โหมดพิน (mq135, INPUT);
Serial.begin(9600);
}
/* valuePrint พิมพ์ค่าสำหรับป้ายกำกับนี้
* สร้างผลข้างเคียงเท่านั้น
*/
voidvaluePrint (ป้ายกำกับสตริง, การอ่าน int) {
Serial.print (ฉลาก);
Serial.print("=");
Serial.print (การอ่าน);
}
โมฆะลูป () {
// ดูว่ามีข้อมูลซีเรียลเข้ามาหรือไม่:
ถ้า (Serial.available() >0) {
// อ่านไบต์ที่เก่าที่สุดในบัฟเฟอร์อนุกรม:
// "เมื่อคุณเรียก Serial.read ไบต์จะถูกลบออกจากบัฟเฟอร์การรับและกลับสู่โค้ดของคุณ"
ขาเข้า = Serial.read();
// ถ้าเป็นตัวพิมพ์ใหญ่ H (ASCII 72) ให้อ่านค่าและส่งไปยังโฮสต์ราสเบอร์รี่
// TODO: ตรวจสอบให้แน่ใจว่าข้อความมีความยาวเท่ากันทุกครั้ง
ถ้า (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");
}
}
// อ่านซีเรียลทุกวินาที
ล่าช้า (1000);
}

ดู rawmain.cpp โฮสต์ด้วย ❤ โดย GitHub

ขั้นตอนที่ 4: รหัส Raspberry Pi

ตอนนี้คุณได้กำหนดค่า Raspberry Pi ตาม https://dzone.com/articles/raspberry-pi-iot-sensor… ตอนนี้คุณสามารถเรียกใช้รหัส Raspberry Client ที่จะส่งข้อมูลผ่าน MQTT ไปยังฐานข้อมูลของเรา ซึ่งยัง เชื่อมต่อกับ Grafana

  1. ตรวจสอบให้แน่ใจว่าราสเบอร์รี่ของคุณเชื่อมต่อกับอินเทอร์เน็ตแล้วใช้คำสั่ง git clone เพื่อคัดลอกโค้ดทั้งหมดไปยัง Raspberry Pi คำสั่งของคุณจะมีลักษณะดังนี้:

    โคลน git

  2. ภายในเทอร์มินัลของ raspberry Pi ให้ดำเนินการคำสั่ง change directory (cd) เป็น "raspberry_client":

    cd raspberry_client.

  3. คุณจะต้องใช้สภาพแวดล้อมเสมือน* เรียบง่าย. วิ่ง

    python3 -m venv env. สิ่งนี้จะสร้างสภาพแวดล้อมเสมือนที่เรียกว่า "env" ซึ่งเราจะใช้ในการติดตั้งการพึ่งพา

  4. ตอนนี้ เราต้องเข้าสู่สภาพแวดล้อมเสมือนของเรา วิ่ง:

    แหล่งที่มา env/bin/activate. ตอนนี้คุณพร้อมที่จะติดตั้งการพึ่งพาของโปรเจ็กต์แล้ว

  5. ในแพ็คเกจที่คุณเพิ่งโคลนมีไฟล์ชื่อ requirements.txt เปิดไฟล์นี้ คุณจะเห็นว่าเราต้องการแพ็คเกจ paho-mqtt และ pyserial รวมถึงเวอร์ชันที่เกี่ยวข้อง คุณสามารถดูเนื้อหาของไฟล์ได้โดยการเรียกใช้

    ข้อกำหนดของแมว.txt. ในการติดตั้งแพ็คเกจเหล่านี้ ru

    pip install -r requirements.txt.

  6. สิ่งนี้จะสรุปการกำหนดค่า

แท้จริงทุกบทช่วยสอนที่ใช้ python กล่าวถึง Virtual env และแม้แต่สำหรับโครงการเล็ก ๆ นี้ ฉันจะพูดถึง สภาพแวดล้อมเสมือนช่วยให้คุณสามารถแยกเวอร์ชันของการพึ่งพาได้ รวมทั้งแยกเวิร์กโฟลว์ไพ ธ อนของคุณ - เป็นวิธีที่ดีในการจัดพื้นที่ทำงาน Python ของคุณ หากนี่เป็นครั้งแรกที่คุณใช้สภาพแวดล้อมเสมือน โปรดอ่านข้อมูลคร่าวๆ ที่นี่

รหัสทำอะไร…

ไฟล์ client.py จะนำเข้าชุดไลบรารีอย่างง่ายรวมถึง arduinosensor ของเราเอง ในฟังก์ชันหลัก เราจะรับค่าจาก Arduino เผยแพร่ข้อมูลไปยังโบรกเกอร์ MQTT แล้วพักเครื่องเป็นเวลา 10 วินาที

ไฟล์ arduinosensor.py เป็นชุดของวิธีการช่วยเหลือที่ล้อมรอบไลบรารี paho.mqtt รวมทั้งจัดเตรียมสคีมาการสื่อสารที่มีประโยชน์สำหรับการสื่อสารกับเพย์โหลดของ Arduino (ดู: parse_payload) แน่นอน รหัสถูกแนบมาที่ส่วนท้ายของส่วนนี้

ไคลเอนต์ธรรมดาที่สื่อสารกับรายการ Arduino ผ่าน Serial monitor คาดว่าจะพบรหัสที่นี่เมื่อเผยแพร่สู่สาธารณะ:

fromimportlibimportimport_module
นำเข้า
เวลานำเข้า
เซ็นเซอร์นำเข้า
defmain():
# เปิดกำหนดไคลเอนต์
start_time=time.time()
ในขณะที่จริง:
reading=arduinosensor.get_values(os.environ.get('PORT', "/dev/ttyUSB0"))
arduinosensor.pub("python_client", payload=reading)
time.sleep(10.0- ((time.time() -start_time) %10.0))
if_name_=="_main_":
หลัก()

ดู rawclient.py โฮสต์ด้วย ❤ โดย GitHub

ขั้นตอนที่ 5: นำทุกอย่างมารวมกัน

เราได้ตั้งค่าโค้ด Raspberry Python และเราได้ตั้งค่าโค้ดไคลเอ็นต์ Arduino มาต่อกันที่การเชื่อมต่อเอนทิตีทั้งสองเข้าด้วยกัน

ขั้นแรก ให้เชื่อมต่อ Arduino และตั้งค่าคอนฟิกที่ถูกต้อง:

  1. บนเทอร์มินัล Raspberry Pi ของคุณ ให้เรียกใช้

    หลาม -m serial.tools.list_ports. นี่จะแสดงรายการพอร์ต USB ทั้งหมดที่รองรับการสื่อสารแบบอนุกรม

  2. ตอนนี้เสียบ Arduino ของคุณและรอประมาณ 2 วินาทีเพื่อให้ Raspberry รู้จัก กำลังพิมพ์

    หลาม -m serial.tools.list_ports อีกครั้งจะแสดงพอร์ตให้คุณเห็นอีกครั้ง คุณอาจเห็นรายการเพิ่มเติมปรากฏขึ้น - หากเป็นกรณีนี้ รายการใหม่นี้เป็นรายการที่ Arduino ของคุณเชื่อมต่ออยู่ ซึ่งน่าจะเป็น "/dev/ttyUSB0"

  3. ลองรันโค้ด python ภายในสภาพแวดล้อมเสมือนของคุณโดยเรียกใช้ python3.7 client.py รอสองสามวินาที (สูงสุดสิบ) - หากคุณพบข้อยกเว้น หมายความว่าเราจะต้องเปลี่ยนค่าสำหรับพอร์ต com ของเราบน raspberry pi หากคุณเห็นว่าโค้ดพิมพ์บรรทัดที่ขึ้นต้นด้วย "Sent following payload:…" จากนั้น คุณก็พร้อมที่จะไปยังขั้นตอนสุดท้ายกับ Grafana เคล็ดลับ: อย่าลืมวิ่ง

    หน้าจอ -S python ก่อนที่คุณจะเริ่มไคลเอนต์ python มิฉะนั้น เมื่อคุณสิ้นสุดการเชื่อมต่อกับ raspberry pi คุณจะสูญเสียโปรแกรม python ที่กำลังทำงานอยู่ ในทางเทคนิค คุณไม่จำเป็นต้องใช้ "python" เป็นพารามิเตอร์สุดท้ายอย่างเคร่งครัด แต่ฉันชอบตั้งชื่อเซสชันหน้าจอตามนั้น

    1. ในการเปลี่ยนค่าสำหรับพอร์ต COM คุณจะต้องตั้งค่าตัวแปรสภาพแวดล้อมก่อนรันโค้ด คุณจะต้องลองสิ่งนี้กับทุกค่าที่เป็นไปได้ของเอาต์พุตที่คุณได้รับเมื่อรัน python -m serial.tools.list_ports ตัวอย่างเช่น หากจำนวนผลงานที่ฉันได้รับเป็นสองรายการ และมีดังต่อไปนี้:

      • /dev/ttyUSB6
      • /dev/acm0

คำสั่งที่ฉันเรียกใช้จะเป็น:

PORT="/dev/ttyUSB6" python3.7 client.pyและถ้านั่นไม่ได้ผล ฉันจะรู

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

เมื่อคุณทำตามขั้นตอนเหล่านี้เสร็จแล้ว โค้ดจะส่งข้อมูลไปยังอินสแตนซ์ฐานข้อมูล influxdb ซึ่งเมื่อเชื่อมต่อกับ Grafana จะช่วยให้เราดูแดชบอร์ดได้

ขั้นตอนที่ 6: การกำหนดค่า Grafana และการดูแดชบอร์ด

การกำหนดค่า Grafana และการดูแดชบอร์ด
การกำหนดค่า Grafana และการดูแดชบอร์ด

เอาล่ะ เรามาถึงช่วงสุดท้ายแล้ว! ตอนนี้เราจะใช้ Grafana เพื่อสร้างแดชบอร์ดอย่างง่าย

  1. เชื่อมต่อกับอินสแตนซ์ Grafana ของคุณ เนื่องจากคุณทำตามขั้นตอนจากบทความ dzone ต้นฉบับ คุณควรจะสามารถเข้าสู่ระบบด้วยผู้ใช้ที่เป็นผู้ดูแลระบบของคุณได้ ไปข้างหน้าและเข้าสู่ระบบ
  2. ในบานหน้าต่างด้านซ้าย ให้วางเมาส์เหนือไอคอน "แดชบอร์ด" - สี่เหลี่ยมทั้งสี่ คลิกที่ "จัดการ"
  3. ในหน้าใหม่ ให้คลิกที่ "แดชบอร์ดใหม่" นอกจากนี้ คลิก "เพิ่มแผงใหม่"
  4. ซึ่งจะเปิดเอดิเตอร์ Grafana เราจะสร้างมุมมองแบบง่ายที่แสดงเมตริกเดียว

    1. ในบานหน้าต่างด้านขวา เปลี่ยนชื่อแผงเป็นสิ่งที่มีความหมาย เช่น "การอ่านในครัว" คุณยังสามารถป้อนคำอธิบายเพิ่มเติมได้อีกด้วย
    2. ที่ด้านล่างซ้าย "แบบสอบถาม" เราจะเพิ่มอนุกรมเวลาเดียว Grafana โดดเด่นที่นี่ เพราะเราสามารถสร้างคำสั่ง SQL ได้อย่างง่ายดายด้วยอินเทอร์เฟซแบบคลิก ภายใต้ "ค่าเริ่มต้น" เลือก InfluxDB
    3. ตอนนี้สำหรับการอ่าน "A" - ในส่วนคำสั่ง FROM ให้เลือกการวัด "airtestt" หากคุณดูโค้ดหลามดั้งเดิมในฟังก์ชัน get_values ของ arduinosensor.py คุณจะเห็นว่าเรากำหนดตาราง airtestt นี้ภายในโค้ด
    4. สำหรับตัวอย่าง ให้เราไปที่ส่วนคำสั่ง "SELECT" และเลือก field(mq4) เดิมแดชบอร์ดของเราจะให้เราเลือก "mean ()" - คลิกที่ตัวเลือกนี้และเลือก "Remove" จากนั้น คลิกที่เครื่องหมายบวก และภายใต้ "การรวม" เลือก "distinct()" ซึ่งจะแสดงจุดเวลาที่เฉพาะเจาะจง เราสามารถเลือกการวัดอื่นๆ ได้ แต่สำหรับตอนนี้ แผงของเราจะแสดงการอ่านที่แตกต่างจาก mq4
    5. คลิกบันทึกที่มุมขวาบน เสร็จแล้ว!

ในกรณีที่คุณประสบปัญหา คุณสามารถตรวจสอบการตั้งค่าของคุณด้วยการตั้งค่าในภาพหน้าจอที่แนบมา

ขั้นตอนที่ 7: สรุป

สรุป
สรุป

ในบทช่วยสอนนี้ คุณสามารถตั้งค่าเครือข่าย MQTT ที่แข็งแกร่งซึ่งประกอบด้วยโหนดเดียวและนายหน้า คุณยังสามารถแสดงภาพข้อมูล IOT ของคุณโดยใช้ Grafana สุดท้ายนี้ คุณสามารถเขียนสถาปัตยกรรมระบบที่เรียบง่ายนี้จาก (หวังว่า) ความสะดวกสบายของเบราว์เซอร์และพีซีของคุณผ่านการใช้การเชื่อมต่อ SSH

มีบางสิ่งที่เราอาจต้องการปรับปรุง

  • การอ่านค่าเซ็นเซอร์ในกราฟของเรานั้นไม่ใช่การอ่านค่าเซ็นเซอร์ที่แม่นยำจริง ๆ แต่เป็นแรงดันเอาต์พุตจากเซ็นเซอร์ของเรา พวกเขาต้องได้รับการปรับเทียบ โปรดดูรายละเอียดเพิ่มเติมในบล็อกโพสต์นี้
  • การกำหนดค่า Raspberry Pi ของเราสามารถทำให้น้ำหนักเบาขึ้นได้มากโดยใช้บอร์ด ESP8266 ที่เชื่อมต่อกับ Arduino และถอด pi ออกทั้งหมด ดูข้อมูลเบื้องต้นเกี่ยวกับโมดูล ESP8266
  • เราอาจต้องการเพิ่มการแจ้งเตือนสำหรับเหตุการณ์เฉพาะ โชคดีที่ Grafana เสนอวิธีการทำเช่นนั้น

ฉันจะปล่อยให้การอ่านเพิ่มเติมเพื่อดึงดูดจินตนาการของคุณกับโลกของ IOT ฉันหวังว่าจะได้พบคุณในคำแนะนำต่อไป!

การอ่านเพิ่มเติม:

แนะนำ: