สารบัญ:

ตารางฟุตบอล Raspberry Pi IoT: 11 ขั้นตอน
ตารางฟุตบอล Raspberry Pi IoT: 11 ขั้นตอน

วีดีโอ: ตารางฟุตบอล Raspberry Pi IoT: 11 ขั้นตอน

วีดีโอ: ตารางฟุตบอล Raspberry Pi IoT: 11 ขั้นตอน
วีดีโอ: Raspberry Pi 101 EP.2 : เริ่มต้นใช้งาน Raspberry Pi 4 Model B ครั้งแรก สำหรับมือใหม่ 2024, พฤศจิกายน
Anonim
Raspberry Pi IoT ตารางฟุตบอล
Raspberry Pi IoT ตารางฟุตบอล

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

การตั้งค่าหลักใช้ตารางฟุตบอลที่มีอยู่ซึ่งเชื่อมต่อกับ Raspberry Pi ซึ่งสามารถทำงานต่อไปนี้ทั้งหมด:

  • ใช้พิน GPIO เพื่อขับเคลื่อน IR LED/Receivers และโมดูลดอทเมทริกซ์ 8x8
  • เรียกใช้เว็บไซต์ Flask โดยใช้ nginx
  • เรียกใช้ฐานข้อมูล MySQL/MariaDB สำหรับการจัดเก็บข้อมูล

ในการสร้างโครงการนี้ขึ้นมาใหม่ คุณจะต้องมีทักษะดังต่อไปนี้:

แบ็กเอนด์:

  • ทำความเข้าใจ HTML/CSS/Javascript สำหรับลูกค้าของเว็บไซต์
  • ทำความเข้าใจ Python ด้วย Flask/Flask-SocketIO/Jinja2 สำหรับฝั่งเซิร์ฟเวอร์ของเว็บไซต์
  • ความรู้พื้นฐานของ MySQL
  • รู้วิธีเรียกใช้เว็บเซิร์ฟเวอร์

ต้นแบบ

  • ความรู้เบื้องต้นในการต่อวงจรไฟฟ้า
  • บัดกรี
  • ความเข้าใจพื้นฐานเกี่ยวกับวิธีการเขียนสคริปต์ใน Python
  • การทำงานกับลินุกซ์ (Raspbian)
  • มีความอดทนมากเพราะจะมีการดีบักมากมายที่เกี่ยวข้อง

ขั้นตอนที่ 1: วัสดุ

นี่คือรายการพร้อมส่วนที่จำเป็นทั้งหมดสำหรับตาราง:

  • Raspberry Pi Model 3 (พร้อมเคส)
  • T-Cobbler สำหรับเชื่อมต่อ Pi กับเขียงหั่นขนม
  • โต๊ะบอล (ผมใช้โต๊ะเก่ามากๆ คล้ายๆ ตัวนี้ ต้องยอมเจาะรูเข้าไปครับ)
  • MAX7219 โมดูล Arduino Dot Matrix (2)
  • IR LED Emitters (2+ เพราะแตกคล้ายกับอันนี้)
  • ตัวรับ IR (2+ เพราะพวกมันแตกเหมือนกัน)
  • เขียงหั่นขนมแบบพื้นฐาน
  • ลวดจำนวนมาก (ขึ้นอยู่กับขนาดของโต๊ะฟุตบอล)
  • ขั้วต่อชาย (30+)
  • ขั้วต่อหญิง (10+)
  • ตัวต้านทาน 100-220 โอห์ม (4+)
  • วัสดุบัดกรี
  • สายรัด
  • ผู้ถือ LED
  • ไม้/สกรู เผื่อต้องการถ่ายทอดลูกในรางน้ำ

ค่าใช้จ่ายทั้งหมดของโครงการนี้ขึ้นอยู่กับค่าใช้จ่ายของโต๊ะฟุตบอลของคุณ (แพง) นอกจากโต๊ะ วัสดุจะสูงสุด 150 ยูโร

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

วงจรไฟฟ้า
วงจรไฟฟ้า
วงจรไฟฟ้า
วงจรไฟฟ้า
วงจรไฟฟ้า
วงจรไฟฟ้า

ก่อนที่คุณจะพยายามประสาน ให้ประกอบส่วนประกอบทั้งหมด ผมขอแนะนำให้ทดสอบบนเขียงหั่นขนมก่อน การเปลี่ยนส่วนประกอบที่ผิดพลาดได้ง่ายกว่าก่อนที่คุณจะใช้เวลาหลายชั่วโมงในการบัดกรี

ตอนแรกฉันพยายามใช้เมทริกซ์ LED 8x8 กับรีจิสเตอร์ 74HC595 (ภาพแรก) และอาร์เรย์ทรานซิสเตอร์ แต่เนื่องจากสายไฟจำนวนมากและเอาต์พุตที่ต่ำมาก ฉันจึงเปลี่ยนมาใช้โมดูล MAX7219 Dot Matrix เพราะใช้เพียง 5 สายและขับเคลื่อนโดย บัส SPI

วงจรที่ฉันใช้ในที่สุดถูกวาดด้วย Fritzing โปรดทราบว่า IR LEDS และตัวรับสัญญาณสามารถเชื่อมต่อกับพิน GPIO ฟรีของคุณ

ตัวรับ IR และ LED ควรอยู่ตรงข้ามกัน และด้านบนของ LED ควรชี้ไปที่ตัวรับสัญญาณ เนื่องจากเราต้องการจำลองลำแสงตรงซึ่งสามารถหักได้โดยการเคลื่อนที่ของลูกบอล ซึ่งในกรณีนี้ จะมีการเปลี่ยนแปลงสถานะของสายข้อมูลของเครื่องรับจาก 0 เป็น 1

ขั้นตอนที่ 3: การเข้ารหัสเซ็นเซอร์

การเข้ารหัสเซ็นเซอร์
การเข้ารหัสเซ็นเซอร์

ฉันได้เขียนโค้ดส่วนใหญ่ของโปรเจ็กต์นี้โดยใช้ Pycharm เพราะช่วยให้ปรับใช้ SSH กับ Raspberry Pi ได้ง่ายโดยใช้ล่ามระยะไกล ฉันจะไม่ลงรายละเอียดเกี่ยวกับวิธีการทำงานของโปรแกรมนี้ แต่ข้อมูลมากมายสามารถพบได้บนเว็บไซต์ pycharm

ตอนนี้ฉันยังคงทำงานในโครงการ แต่เมื่อทุกอย่างเสร็จสิ้น ทั้งโปรเจ็กต์จะพร้อมใช้งานในโปรไฟล์ github ของฉัน

รหัสสำหรับเซ็นเซอร์ประกอบด้วย 3 คลาสซึ่งทำงานในเธรดพื้นหลังบนเซิร์ฟเวอร์ Flask ของฉัน (ซึ่งจะอธิบายในภายหลัง):

  1. คลาสเป้าหมาย (ลิงก์) -ไฟล์นี้เริ่มต้นส่วนประกอบที่แยกจากกันทั้งหมด ซึ่งสามารถเรียกใช้ได้โดยการใส่อุปกรณ์/บัส SPI และหมายเลขพินที่ถูกต้อง
  2. The Matrix Class (ลิงค์) -นี่คือคลาสหลักสำหรับเพิ่มพลังให้กับโมดูล MAX7219
  3. คลาส LED และตัวรับสัญญาณ (ลิงก์) - นี่คือคลาสหลักในการเปิดไฟเบรกบีมอินฟราเรดโดยใช้เธรดแยกกันเพื่อลดภาระ CPU ของ RPi

ทั้ง LED และตัวรับสัญญาณทำงานบนความถี่ 38kHz และเครื่องรับคาดว่าพัลส์ขึ้น 50% และดาวน์ 50% จะทำงานได้อย่างถูกต้องเสมอ

ขั้นตอนที่ 4: การเตรียมและวางเซ็นเซอร์

การเตรียมและการวางเซนเซอร์
การเตรียมและการวางเซนเซอร์
การเตรียมและการวางเซ็นเซอร์
การเตรียมและการวางเซ็นเซอร์
การเตรียมและการวางเซนเซอร์
การเตรียมและการวางเซนเซอร์

ตอนนี้เรากำลังเตรียม IR LED และตัวรับสัญญาณ ในรูปภาพของตาราง คุณสามารถค้นหาตำแหน่งที่ควรวาง RPi และเซ็นเซอร์

แต่ก่อนอื่นเราต้องเตรียมสายไฟ:

  1. ตรวจสอบว่าคุณวัดปริมาณลวดที่ต้องการจากตำแหน่ง RPi/เขียงหั่นขนมไปยังตำแหน่งเซ็นเซอร์
  2. บัดกรีหมุดตัวรับสัญญาณ IR ที่ปลายด้านหนึ่งของสาย (COM/GND/V+)
  3. บัดกรีขั้วต่อตัวผู้ที่ปลายอีกด้านของสาย

ตอนนี้เรากำลังเตรียมโต๊ะ:

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

ขั้นตอนที่ 5: การเตรียมและวางโมดูลเมทริกซ์

การเตรียมและการวางโมดูลเมทริกซ์
การเตรียมและการวางโมดูลเมทริกซ์

ต่อไปเราจะเชื่อมต่อโมดูลเมทริกซ์ LED 2 โมดูล

บันทึก:

เพราะฉันใช้โต๊ะฟุตบอลแบบเก่า จึงมีรูขึ้นไปทางส่วนบนอยู่แล้วเพราะที่ใส่บุหรี่ หากคุณไม่มีสิ่งเหล่านี้ คุณจะต้องสร้างมันขึ้นมา

เพื่อเตรียมสายไฟ:

  1. วัดเส้นลวดจากเขียงหั่นขนมไปทางส่วนบนของโต๊ะ
  2. บัดกรีขั้วต่อตัวเมียบางตัวเข้ากับปลายสายด้านแรก
  3. บัดกรีขั้วต่อตัวผู้บางตัวเข้ากับปลายอีกด้านของสาย

การวางเมทริกซ์:

  1. ดึงเมทริกซ์ผ่านรูด้านบน
  2. รัด + พันสายไฟด้านในไม้เพื่อหลีกเลี่ยงการข้าม
  3. ใส่หมุดตัวผู้บนเขียงหั่นขนมตามวงจรที่ให้มาก่อนหน้านี้

ในบางจุดฉันจะเพิ่มขั้นตอน DIY เล็ก ๆ เพื่อเพิ่มเคสสำหรับโมดูลเมทริกซ์ แต่ตอนนี้พวกมันเปลือยเปล่า

ขั้นตอนที่ 6: ทำให้เป็น IoT

ทำให้เป็น IoT
ทำให้เป็น IoT

หากคุณเพียงต้องการลงทะเบียนและแสดงคะแนน คุณสามารถปิดโครงการได้โดยการเขียนสคริปต์ Python ที่ทำงานอยู่ขนาดเล็กซึ่งจะวนซ้ำจนกว่าคะแนนใดคะแนนหนึ่งจะถึง 9 แล้วรีเซ็ต

อย่างไรก็ตาม หากคุณต้องการเชื่อมต่อโต๊ะกับอินเทอร์เน็ต ขั้นตอนต่อไปควรอยู่ในซอยของคุณ

ในไม่กี่ขั้นตอนถัดไป เราจะกล่าวถึงสิ่งต่อไปนี้:

  • การกำหนดค่า Raspberry Pi
  • จัดทำฐานข้อมูลสำหรับจัดเก็บ
  • การสร้างเว็บไซต์
  • วางออนไลน์

ณ จุดนี้ หากคุณคุ้นเคยกับ git ฉันแนะนำให้คุณสร้างที่เก็บบน GitHub/GitLab เพื่อติดตามไฟล์ของคุณ หากคุณไม่ใช่ คุณสามารถสร้างโฟลเดอร์ที่มีโครงสร้างเดียวกับในภาพได้

โปรเจ็กต์เต็มจะพร้อมใช้งานเร็ว ๆ นี้บน GitHub อย่างไรก็ตาม มีไฟล์ rar ชั่วคราวพร้อมไฟล์ที่จำเป็นทั้งหมด

ขั้นตอนที่ 7: เชื่อมต่อ Raspberry Pi

ต่อไป เราจะตั้งค่าสภาพแวดล้อม raspberry pi ในการดำเนินการนี้ คุณต้องทำตามขั้นตอนต่อไปนี้:

  • เชื่อมต่อผ่าน SSH กับ Rasberry Pi ของคุณ (คุณสามารถใช้ PuTTY ได้)
  • สร้างโฟลเดอร์ (ตัวอย่างโครงการ mkdir) และย้ายไปยังโฟลเดอร์นี้โดยใช้คำสั่ง cd
  • สร้างสภาพแวดล้อม Python เสมือนในโฟลเดอร์นี้โดยใช้คำสั่ง python3 -m venv --system-site-packages env
  • เปิดใช้งานล่ามเสมือนด้วยซอร์ส /env/bin/activate คำสั่ง
  • ติดตั้งแพ็คเกจจาก requirements.txt ด้วย python -m pip install package-name command
  • โอนไฟล์จากไฟล์ project_example.rar ที่ให้ไว้ก่อนหน้านี้ผ่าน SSH ในโฟลเดอร์โปรเจ็กต์ของคุณ

ตอนนี้คุณควรจะสามารถรันโปรเจ็กต์แบบเต็มบน Raspberry Pi ของคุณได้ ฉันแนะนำให้คุณใช้ Python IDE เช่น PyCharm ซึ่งช่วยให้คุณใช้การดีบักจากตัวแปลระยะไกลผ่าน SSH และอัปโหลดการเปลี่ยนแปลงโดยตรงหากจำเป็น

ขั้นตอนที่ 8: การตั้งค่าฐานข้อมูล

การตั้งค่าฐานข้อมูล
การตั้งค่าฐานข้อมูล

ตอนนี้ คุณต้องตั้งค่าฐานข้อมูลพื้นฐานมาก ตามโมเดลนี้

วิธีที่ง่ายที่สุดในการดำเนินการนี้คือการสร้างฐานข้อมูลของคุณในฐานข้อมูล MySQL ซึ่งคุณสามารถทำการทดสอบได้

เมื่อเสร็จแล้วคุณสามารถส่งออกดัมพ์ของฐานข้อมูลของคุณและอัปโหลดบน RPi ของคุณแล้วดำเนินการด้วย sudo mariadb < pathtofile/file.sql

ขั้นตอนที่ 9: การสร้างเว็บไซต์

การสร้างเว็บไซต์
การสร้างเว็บไซต์
การสร้างเว็บไซต์
การสร้างเว็บไซต์
การสร้างเว็บไซต์
การสร้างเว็บไซต์

ถัดไป คุณสามารถวิเคราะห์ (และใช้) รหัสที่ให้ไว้ในไฟล์ project_example.rar

ไฟล์หลักคือ Flask.py ซึ่งเป็นขนมปังและเนยของโปรเจ็กต์นี้:

  • เรียกใช้แอพ Flask-SocketIO ที่จัดการแบ็กเอนด์ของเว็บไซต์
  • สร้างการเชื่อมต่อระหว่างฐานข้อมูลและ Flask
  • ให้การตรวจสอบการเข้าสู่ระบบและการลงทะเบียนผู้ใช้
  • ให้รหัสที่จำเป็นเกี่ยวกับวิธีการเล่นเกมใช้ socketio เพื่ออัปเดตเว็บไซต์แบบเรียลไทม์ระหว่างเกม
  • นำผลการแข่งขันลงฐานข้อมูล

ในโฟลเดอร์สแตติกและเทมเพลต คุณสามารถค้นหา HTML/CSS/JS ซึ่งให้ส่วนหน้าของเว็บไซต์ ปรับเปลี่ยนได้ตามใจชอบ

ขั้นตอนที่ 10: การเชื่อมต่อกับเวิลด์ไวด์เว็บ

ในการเชื่อมต่อเว็บไซต์ของเรากับเว็บ เราจะใช้ nginx และ uwsgi ในตัวอย่างโครงการ คุณสามารถค้นหาไฟล์ที่จำเป็นในโฟลเดอร์ conf

ก่อนอื่นคุณต้องอัปเดตสิ่งต่อไปนี้ในไฟล์เหล่านี้:

  • ใน uwsgi-flask.ini คุณต้องเปลี่ยนเส้นทางของพารามิเตอร์ virtualenv เป็นล่ามของคุณ
  • ใน project1-flask.service คุณต้องอัปเดตส่วน [Service] ของไฟล์ด้วยข้อมูลรับรองและพาธของคุณไปยังไฟล์ที่เกี่ยวข้อง
  • ในไฟล์ nginx คุณต้องอัปเดตเซิร์ฟเวอร์และตำแหน่ง / เส้นทางไปยังซ็อกเก็ตที่เกี่ยวข้องของคุณ

ถัดไป คุณต้องแทนที่ไฟล์เว็บเซิร์ฟเวอร์ nginx ที่เป็นค่าเริ่มต้นด้วยตำแหน่งของไฟล์กำหนดค่า nginx ของคุณ ด้านล่างนี้เป็นตัวอย่างของคำสั่ง linux ที่จะทำสิ่งนี้

  • me@my-rpi:~/project1 $ sudo cp conf/nginx /etc/nginx/sites-available/project1
  • me@my-rpi:~/project1 $ sudo rm /etc/nginx/sites-enabled/defaul t
  • me@my-rpi:~/project1 $ sudo ln -s /etc/nginx/sites-available/project1 /etc/nginx/sites-enabled/project1
  • me@my-rpi:~/project1 $ sudo systemctl restart nginx.service

สุดท้ายคุณต้องเพิ่มบริการที่กำหนดเองลงในโฟลเดอร์ systemd ของคุณ นี่คือตัวอย่างวิธีการทำ:

  • me@my-rpi:~/project1 $ sudo cp conf/project1-*.service /etc/systemd/system/
  • me@my-rpi:~/project1 $ sudo systemctl daemon-reload
  • me@my-rpi:~/project1 $ sudo systemctl start project1-*
  • me@my-rpi:~/project1 $ sudo systemctl status project1-*

หากคุณต้องการให้เว็บเซิร์ฟเวอร์เริ่มทำงานเมื่อบูตราสเบอร์รี่ pi ของคุณ คุณต้องใช้คำสั่ง sudo systemctl enable project1-*.service

หากทำอย่างถูกต้อง หลังจากที่ระบบรีบูต เว็บไซต์ของคุณควรทำงานโดยใช้ที่อยู่ IP ของคุณ หากคุณต้องการแก้ไขไฟล์ปรับแต่งเหล่านี้ คุณต้องหยุดบริการเสมอ ให้อัปโหลดไฟล์ใหม่และใช้คำสั่ง daemon-reload ตามด้วยการเริ่มต้น มิฉะนั้น การเปลี่ยนแปลงจะไม่มีผล

ขั้นตอนที่ 11: ปิดท้าย

ปิดท้าย
ปิดท้าย

ขณะพิมพ์ส่วนสุดท้ายของคำแนะนำนี้ โครงการโรงเรียนเล็กๆ นี้ยังอยู่ในระหว่างดำเนินการ

ฉันใช้เวลามากมายในการทำสิ่งนี้ให้เสร็จภายใน 2.5 สัปดาห์ แม้ว่าทุกอย่างจะเร่งรีบเล็กน้อย แต่ฉันก็ยังภูมิใจในสิ่งที่ฉันทำสำเร็จ ในระหว่างขั้นตอนการประกอบ ฉันพบข้อผิดพลาด/ข้อผิดพลาด/เซ็นเซอร์ผิดพลาดนับไม่ถ้วน ดังนั้นอย่าท้อแท้เกินไปหากทุกอย่างไม่ทำงานในการลองครั้งแรก

สิ่งที่ดีที่สุดที่คุณสามารถทำได้คือขอหรือมองหาความช่วยเหลือบนอินเทอร์เน็ต มีผู้คนมากมายที่มีความรู้ที่ดีกว่านี้มากซึ่งกระตือรือร้นที่จะช่วยเหลือคุณ

สุดท้ายนี้ ผมต้องขอขอบคุณอาจารย์จาก New Media and Communication Technology ที่ให้คำแนะนำมากมายและช่วยให้ผมทำโครงงานนี้สำเร็จ

แนะนำ: