การตรวจสอบแบนด์วิดธ์: 7 ขั้นตอน (พร้อมรูปภาพ)
การตรวจสอบแบนด์วิดธ์: 7 ขั้นตอน (พร้อมรูปภาพ)
Anonim
การตรวจสอบแบนด์วิดธ์
การตรวจสอบแบนด์วิดธ์
การตรวจสอบแบนด์วิดธ์
การตรวจสอบแบนด์วิดธ์
การตรวจสอบแบนด์วิดธ์
การตรวจสอบแบนด์วิดธ์

เมื่อฉันถามตัวเองบ่อยๆ ว่า ISP ของฉันมีแบนด์วิดท์อะไรบ้าง (ฉันใช้โมเด็ม LTE สำหรับการเชื่อมต่ออินเทอร์เน็ต) ฉันนึกถึงระบบตรวจสอบแบนด์วิดท์ เนื่องจากระบบควรมีขนาดกะทัดรัดและประหยัดพลังงาน ฉันจึงเลือก Raspberry Pi Zero เป็นส่วนประกอบหลัก Raspberry เชื่อมต่อกับโมเด็มผ่าน WLAN ดังนั้นจึงสามารถตรวจพบปัญหา WLAN ได้เช่นกัน

เสบียง

  • Raspberry Pi Zero WH
  • จอแสดงผล Waveshare e-ink (โมดูลกระดาษอิเล็กทรอนิกส์ 2.9 นิ้ว)
  • ตัวแปลง DC-DC (เช่น DEBO DCDC 20W)
  • RGB LED (นำออกจากอุปกรณ์เก่า)
  • ปุ่มกด
  • สวิตช์
  • โมดูลรีเลย์ (เช่น โมดูลรีเลย์ 2 ทาง โมดูลรีเลย์ 2 ทาง)
  • ขั้วต่อตัวผู้ + ขั้วต่อตัวเมีย (ทั้งขนาดพอดีกับปลั๊กไฟของโมเด็มของคุณ)
  • เคสพิมพ์ 3 มิติ

ขั้นตอนที่ 1: คุณสมบัติ

คุณสมบัติ
คุณสมบัติ
คุณสมบัติ
คุณสมบัติ
คุณสมบัติ
คุณสมบัติ
  • Raspberry Pi Zero เชื่อมต่อผ่าน WLAN ทดสอบความเร็วและดาวน์โหลด และทำการวัดค่า ping ทุกครึ่งชั่วโมง เวอร์ชันบรรทัดคำสั่งของ speedtest.net ถูกใช้เป็นพื้นฐานสำหรับการวัด
  • ผลลัพธ์ของการวัดแบนด์วิดธ์และ ping จะแสดงบนจอแสดงผล e-ink เวลาของการวัดจะแสดงด้วย
  • หากความเร็วในการดาวน์โหลดต่ำกว่าค่าเกณฑ์ที่กำหนดไว้ รีเลย์จะปิดและเปิดโมเด็มเป็นเวลาสั้นๆ โมเด็มจะถูกรีเซ็ตโดยไม่มีการดัดแปลงอุปกรณ์ (เฉพาะแหล่งจ่ายไฟเท่านั้นที่ถูกขัดจังหวะ)
  • มีปุ่มที่ด้านหน้าของอุปกรณ์เพื่อเรียกใช้การวัดแบนด์วิดท์ด้วยตนเอง
  • ค่าที่วัดได้จะแสดงบนแดชบอร์ด Ubidots (IOT Portal) ในภาพรวม คุณยังสามารถดูประวัติเวลาของค่าที่วัดได้และสาเหตุของการรีเซ็ตครั้งล่าสุด
  • ในพอร์ทัล IOT คุณยังสามารถค้นหาปุ่มเพื่อรีเซ็ตโมเด็มจากระยะไกลได้อีกด้วย
  • จอภาพแบนด์วิดท์ใช้แหล่งจ่ายไฟของโมเด็ม ไม่จำเป็นต้องมีอุปทานเพิ่มเติม relais ขัดจังหวะการส่งต่อของแหล่งจ่ายไฟไปยังโมเด็ม - ราสเบอร์รี่ยังคงเปิดอยู่

ขั้นตอนที่ 2: การเดินสายไฟ

การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ

ในภาพแรก คุณสามารถเห็นการออกแบบภายในของจอภาพแบนด์วิดธ์:

ส่วนประกอบหลักคือ:

    1. ปุ่มกด
    2. จอแสดงผลหมึกอิเล็กทรอนิกส์
    3. Raspberry Pi Zero
    4. โมดูลรีเลย์
    5. RGB LED + ตัวต้านทาน (ขึ้นอยู่กับ RGB LED ที่คุณใช้)
    6. สวิตช์
    7. ตัวแปลง DC-DC
    8. ขั้วต่อหญิง

ภาพที่สองแสดงแผนผังของการเดินสาย ขั้วบวกของแรงดันไฟฟ้าจ่ายผ่านสวิตช์ไปยังตัวแปลงแรงดันไฟฟ้า DC-DC (ซึ่งแปลงแรงดันไฟฟ้า 12V ของเราเตอร์เป็น 5V สำหรับ Raspberry) และผ่านรีเลย์ (ผ่านพินที่เชื่อมต่อตามปกติ) กลับไปที่ ขั้วต่อเอาต์พุต ดังนั้นโมเด็มจะได้รับพลังงานเมื่อปิดจอภาพแบนด์วิดธ์

การวัดแบนด์วิดธ์สามารถเริ่มต้นได้ด้วยตนเองโดยใช้ปุ่ม RGB LED ถูกใช้เพื่อแสดงภาพสถานะการทำงานต่างๆ

การเชื่อมต่อระหว่าง Raspberry Pi และจอแสดงผล e-ink ไม่แสดงในแผนภาพวงจร เชื่อมต่อจอแสดงผลตามตารางและหมุดด้านบน

ขั้นตอนที่ 3: การพิมพ์ 3 มิติและสร้างการไล่ล่า

การพิมพ์ 3 มิติและการสร้างการไล่ล่า
การพิมพ์ 3 มิติและการสร้างการไล่ล่า
การพิมพ์ 3 มิติและการสร้างการไล่ล่า
การพิมพ์ 3 มิติและการสร้างการไล่ล่า
การพิมพ์ 3 มิติและการสร้างการไล่ล่า
การพิมพ์ 3 มิติและการสร้างการไล่ล่า
การพิมพ์ 3 มิติและการสร้างการไล่ล่า
การพิมพ์ 3 มิติและการสร้างการไล่ล่า

ชิ้นส่วนต่อไปนี้จำเป็นสำหรับเคส (ดูภาพด้านบน):

    1. ส่วนล่าง
    2. ส่วนบน
    3. ด้านหน้า
    4. กลับ
    5. เมานต์ 4x

สามารถพิมพ์ชิ้นส่วนทั้งหมดได้โดยไม่ต้องรองรับ คุณยังสามารถค้นหาไฟล์และการออกแบบอื่นๆ ของฉันได้ที่ Thingiverse:

สามารถติดจอแสดงผลเข้ากับแผงด้านหน้าโดยใช้ตัวยึดและเทปกาวสองหน้า สวิตช์ปุ่มและขั้วต่อตัวเมียถูกขันเข้ากับแผงด้านหลังและด้านหลัง ฉันใช้สกรู 3x20 มม. เพื่อเชื่อมต่อสองส่วนของตัวเรือน ความคลาดเคลื่อนของร่องสำหรับแผงด้านหน้าและด้านหลังค่อนข้างแน่น หากจำเป็น แผงด้านหน้าและด้านหลังจะต้องขัดที่ขอบ (ด้านในเพื่อหลีกเลี่ยงการทำลายพื้นผิว)

ขั้นตอนที่ 4: การตั้งค่า Raspberry PI

การตั้งค่า Raspberry PI
การตั้งค่า Raspberry PI
การตั้งค่า Raspberry PI
การตั้งค่า Raspberry PI

คู่มือการตั้งค่านี้อ้างอิงจากการรวบรวมคำแนะนำการติดตั้งต่างๆ จากแหล่งต่างๆ (ผู้ผลิตจอแสดงผล e-Ink, …) สำหรับฉันคำแนะนำได้นำไปสู่ผลลัพธ์ที่ต้องการ เนื่องจากฉันไม่ใช่ผู้เชี่ยวชาญ Linux จึงไม่มีการเพิ่มประสิทธิภาพหรือสิ่งที่คล้ายคลึงกัน ฉันทราบดีว่ามีวิธีแก้ปัญหาที่ดีกว่าและมีประสิทธิภาพมากกว่าแน่นอน

ให้ถือว่าคุณติดตั้ง Raspbian บน Pi ของคุณแล้ว (มีบทช่วยสอนมากมายเกี่ยวกับวิธีการติดตั้งระบบปฏิบัติการพื้นฐาน) และคุณมีจอแสดงผล (ผ่าน miniHDMI) เชื่อมต่อเมาส์และคีย์บอร์ด ถือว่าตั้งค่าการเชื่อมต่อ WLAN อย่างถูกต้องกับเราเตอร์หรืออินเทอร์เน็ตด้วย เว้นแต่จะระบุไว้เป็นอย่างอื่น ขั้นตอนการติดตั้งทั้งหมดจะดำเนินการในเทอร์มินัล

ติดตั้งเดสก์ท็อประยะไกล (เพื่อเข้าถึง PI จากคอมพิวเตอร์ของคุณ):

sudo apt-get update

sudo apt-get

ติดตั้ง xrdp

หรือคุณสามารถทำงานหัวขาดผ่าน ssh ได้ (ดูเช่น

เปลี่ยนรหัสผ่าน:

www.raspberrypi.org/forums/viewtopic.php?t=193620

ติดตั้ง speedtest:

sudo

apt-get ติดตั้ง python-pip

sudo pip ติดตั้ง speedtest-cli

เพื่อทดสอบว่าการติดตั้งสำเร็จหรือไม่ ให้รัน Speedtest ในเทอร์มินัล:

speedtest-cli

หากทุกอย่างถูกต้องคุณควรได้รับสิ่งที่ชอบในภาพแรกด้านบน

ติดตั้งสายไฟPI

sudo apt-get ติดตั้ง git-core

โคลน git git://git.drogon.net/wiringPi

cdสายไฟPi

./สร้าง

(ดูเพิ่มเติมที่

ทางเลือก:

sudo apt-get ติดตั้งสายไฟpi

(ดู

ติดตั้ง BCM2835

(ดู

ดาวน์โหลด bcm2835-1.60.tar.gz (หรือเวอร์ชันที่ใหม่กว่าถ้ามี)

tar zxvf bcm2835-1.60.tar.gz

cd bcm2835-1.60

./configure

ทำ

sudo ทำการตรวจสอบ

sudo ทำการติดตั้ง

ติดตั้งไลบรารีภาพ Python

sudo apt-get ติดตั้ง python-imaging

ทางเลือก:

sudo apt-get ติดตั้ง python-pil

เปิดใช้งานฟังก์ชัน I2C

เรียกใช้คำสั่งต่อไปนี้เพื่อกำหนดค่าบอร์ด Raspberry Pi ของคุณ:

sudo raspi-config

เลือกตัวเลือกอินเทอร์เฟซ -> I2C -> ใช่ เพื่อเริ่มต้นไดรเวอร์หลักของ I2C จากนั้นคุณต้องแก้ไขไฟล์การกำหนดค่าด้วย เรียกใช้คำสั่งต่อไปนี้เพื่อเปิดไฟล์การกำหนดค่า:

sudo nano /etc/modules

เพิ่มสองบรรทัดต่อไปนี้ในไฟล์การกำหนดค่า

i2c-bcm2708

i2c-dev

ดูเพิ่มเติม

เปิดใช้งานฟังก์ชัน SPI

เรียกใช้คำสั่งต่อไปนี้เพื่อกำหนดค่าบอร์ด Raspberry Pi ของคุณ:

sudo raspi-config

เลือกตัวเลือกอินเทอร์เฟซ -> SPI -> ใช่ เพื่อเริ่มต้นไดรเวอร์หลักของ SPI

ติดตั้งแบบอักษรเพิ่มเติม:

sudo apt-get install ttf-mscorefonts-installer

ดาวน์โหลดและติดตั้งแบบอักษร (Roboto + Droid)

gksudo

pcmanfm

ในการเริ่มตัวจัดการไฟล์ด้วยสิทธิ์ของรูทและคัดลอกฟอนต์ truetype ลงในโฟลเดอร์ /usr/share/fonts/truetype

ทางเลือก:

คัดลอกแบบอักษรไปยังโฟลเดอร์ดาวน์โหลดด้วย WinSCP (ต้องเปิดใช้งาน ssh เพื่อใช้ WinSCP)

sudo cp -r /home/pi/Downloads/droid /usr/share/fonts/truetype

sudo cp -r /home/pi/Downloads/roboto /usr/share/fonts/truetype

คุณต้องมีสิทธิ์รูทเพื่อเข้าถึงโฟลเดอร์ฟอนต์ อาจมีวิธีที่ดีกว่าในการทำเช่นนี้ (ดังที่ได้กล่าวมาแล้วว่าฉันไม่ใช่ผู้เชี่ยวชาญ Linux) แต่ทั้งสองวิธีก็ใช้ได้สำหรับฉัน

ไฟล์ไพทอน:

ใช้ตัวจัดการไฟล์เพื่อสร้างโฟลเดอร์ใหม่ "bandwidth_monitor"

คัดลอกไฟล์ทั้งหมดไปยังไดเร็กทอรี bandwidth_monitor

ทำให้ไฟล์ python และสคริปต์ปฏิบัติการได้

chmod +x *.py

chmod +x speedtest-cron.sh

กำหนดค่า crontab

crontab -e

Crontab ใช้เพื่อกำหนดเวลาการทำงานของโปรแกรมเช่น speedtest ทุกๆ 30 นาที เพิ่มบรรทัดต่อไปนี้ใน crontab ของคุณ (ดูรูปที่สองด้วย):

@reboot /usr/bin/python /home/pi/bandwidth_monitor/post_restart_message.py &

@reboot sleep 30 && /usr/bin/python /home/pi/bandwidth_monitor/poll_test_now_button.py */30 * * * * /home/pi/bandwidth_monitor/speedtest-cron.sh */3 * * * * /usr/ bin/python /home/pi/bandwidth_monitor/poll_killswitch.py 13 03 * * * /usr/bin/python /home/pi/bandwidth_monitor/refresh_display.py

คำอธิบายของงานที่กำหนดเวลาไว้:

  • เมื่อรีบูตข้อความรีสตาร์ทจะถูกเขียนไปยังแดชบอร์ด IOT
  • เมื่อรีบูตโพล test_now_button จะเริ่มขึ้น
  • จะทำการวัดแบนด์วิดธ์ทุกๆ 30 นาที
  • ทุกๆ 3 นาที สถานะของปุ่มรีโมตรีเซ็ต (บนแดชบอร์ด IOT) จะถูกตรวจสอบ
  • รอบการรีเฟรชจอภาพเริ่มต้นวันละครั้ง

ดูส่วนซอฟต์แวร์สำหรับคำอธิบายสั้น ๆ ของโปรแกรม

ขั้นตอนที่ 5: ซอฟต์แวร์

ซอฟต์แวร์
ซอฟต์แวร์

ซอฟต์แวร์ถูกแบ่งออกเป็นหลายไฟล์ / โปรแกรม:

bandwidth_monitor_0_4.py เป็นโปรแกรมหลักที่ Crontab เรียกใช้ทุกครึ่งชั่วโมง มันทำการทดสอบแบนด์วิดธ์ (ผ่านรุ่นบรรทัดคำสั่งของ speedtest.net) ระหว่างการทดสอบ ไฟ LED RGB จะเป็นสีน้ำเงิน หากแบนด์วิดท์สูงกว่าเกณฑ์ที่เลือก ค่าจะแสดงบนจอแสดงผล e-ink (พร้อมกับการประทับเวลา) และส่งออกไปยังแดชบอร์ด Ubidots หากแบนด์วิดท์ต่ำกว่าเกณฑ์ ไฟ LED จะเปลี่ยนเป็นสีแดงและการวัดจะทำซ้ำหลังจากหน่วงเวลาสั้นๆ หลังจากพยายามลบ 3 ครั้ง รีเลย์จะเปิดใช้งานและทำให้แหล่งจ่ายไฟของโมเด็มหยุดชะงัก รหัสรีเซ็ต (value=2) ถูกเขียนลงในส่วนบันทึก

poll_killswitch.py อ่านสถานะของตัวแปรบูลีนบนแดชบอร์ด ถ้า killswitch_state เป็นจริง relais จะถูกเปิดใช้งานและแหล่งจ่ายไฟของโมเด็มจะถูกขัดจังหวะ ไฟ LED RGB เปลี่ยนเป็นสีเขียวระหว่างโพลของ killswitch หลังจากการรีเซ็ต killswitch_state จะถูกตั้งค่าเป็นเท็จ และสร้างรายการในส่วนบันทึกของแดชบอร์ด (value=1)

poll_test_now_button.py กำลังรอให้กดปุ่มที่แผงด้านหน้าของเคส เมื่อเปิดใช้งานปุ่ม การวัดแบนด์วิดท์จะถูกเรียกใช้ด้วยตนเอง เมื่อโปรแกรมเริ่มทำงาน (เมื่อรีบูต Raspberry Pi) ไฟ LED RGB จะกะพริบเป็นสีแดง

post_restart_message.py เขียนรหัสรีเซ็ต (value=3) ไปยังส่วนบันทึกของแดชบอร์ด ซึ่งบ่งชี้ว่าได้เริ่มการตรวจสอบแบนด์วิดธ์ใหม่แล้ว ระหว่างโปรแกรมเริ่มต้น ไฟ LED RGB จะกะพริบเป็นสีน้ำเงิน

test_LED.py และ test_relay.py เป็นสคริปต์ง่ายๆ ที่สามารถใช้ทดสอบฟังก์ชันฮาร์ดแวร์ของ RGB LED และรีเลย์ได้

epdconfig.py และ epd2in9.py เป็นไดรเวอร์อุปกรณ์สำหรับการแสดงผล e-ink ที่ Waveshare จัดหาให้

เพื่อให้โปรแกรมเข้าถึงแดชบอร์ด Ubidots คุณต้องเพิ่มโทเค็นและชื่ออุปกรณ์หรือตัวแปรส่วนบุคคลของคุณ (หากคุณใช้สัญลักษณ์ต่างกัน) ค้นหาส่วนเหมือนที่แสดงในภาพด้านบน (แทนที่ XXXXXXXX ด้วยโทเค็นของคุณ)

บทแนะนำที่ครอบคลุมเกี่ยวกับวิธีการสร้างแดชบอร์ดและวิธีผสานรวมแดชบอร์ดเข้ากับโปรแกรม Python สามารถพบได้โดยตรงที่หน้า Ubidots (https://help.ubidots.com/en/) หรือผ่านทาง Google

ขั้นตอนที่ 6: IOT Dashboard

IOT Dashboard
IOT Dashboard

แดชบอร์ดที่โฮสต์โดย Ubidots (ดู https://ubidots.com) มีหลายส่วนที่อธิบายไว้ด้านล่างโดยย่อ

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

บทแนะนำที่ครอบคลุมเกี่ยวกับวิธีการสร้างแดชบอร์ดและวิธีผสานรวมแดชบอร์ดเข้ากับโปรแกรม Python สามารถพบได้โดยตรงที่หน้า Ubidots (https://help.ubidots.com/en/) หรือผ่านทาง Google