สารบัญ:

Keysorter: 6 ขั้นตอน
Keysorter: 6 ขั้นตอน

วีดีโอ: Keysorter: 6 ขั้นตอน

วีดีโอ: Keysorter: 6 ขั้นตอน
วีดีโอ: How to Sort the Keys of a Hash in Ruby 2024, พฤศจิกายน
Anonim
ตัวเรียงลำดับคีย์
ตัวเรียงลำดับคีย์
ตัวเรียงลำดับคีย์
ตัวเรียงลำดับคีย์

ฉันกำลังศึกษา NMCT ที่ Howest สำหรับภาคเรียนสุดท้ายของเรา เราต้องทำโครงงาน ดังนั้นฉันจึงทำ Keysorter

มันทำอะไร?

เรามีกุญแจรถมากมายที่บ้านและพวกมันก็เหมือนกันหมด ดังนั้นฉันจึงสร้าง Keysorter เพื่อแก้ไขปัญหานี้

ต้องสแกนคีย์ผ่าน RFID และใส่ลงในกล่อง ถ้าฉันสแกนคีย์เดิมอีกครั้ง มันจะแสดงตำแหน่งที่ได้รับมอบหมายก่อนหน้านี้ มีปุ่มแสดงรถที่ล้างล่าสุดด้วย

สิ่งนี้จะทำงานบน Raspberry Pi ซึ่งมีตัวเลือกในการเพิ่มเว็บเพจผ่าน Flask

ในเพจ ฉันควรจะสามารถดูคีย์ทั้งหมด เพิ่มชื่อให้กับคีย์ และลบคีย์ได้

ขั้นตอนที่ 1: ขั้นตอนที่ 1: ฉันต้องการอะไร

ขั้นตอนที่ 1: ฉันต้องการอะไร
ขั้นตอนที่ 1: ฉันต้องการอะไร
ขั้นตอนที่ 1: ฉันต้องการอะไร
ขั้นตอนที่ 1: ฉันต้องการอะไร

ฉันเริ่มต้นด้วยการทำรายการส่วนประกอบที่ฉันจะต้องทำให้สิ่งนี้ใช้งานได้

ส่วนประกอบ:

  • ราสเบอร์รี่ปี่
  • 2 x Shift register (74hc595)
  • 3 x ปุ่ม
  • 9 x ไฟ LED สีเขียว
  • เครื่องสแกน RFID (MFRC522)
  • ตัวต้านทาน 12 x 220 โอห์ม

จากนั้นฉันก็ใส่ทั้งหมดนี้ลงในแผนผังของฉัน

เมื่อฉันทำสิ่งนี้เสร็จแล้วฉันก็สร้างมันขึ้นมาในชีวิตจริง

ขั้นตอนที่ 2: ขั้นตอนที่ 2: การสร้างแผนผังฐานข้อมูล

ขั้นตอนที่ 2: การสร้างแผนผังฐานข้อมูล
ขั้นตอนที่ 2: การสร้างแผนผังฐานข้อมูล

เพื่อบันทึกข้อมูลของฉันทั้งหมด ฉันต้องสร้างฐานข้อมูลที่สามารถทำงานบน Pi ของฉันได้

ฉันสร้างมันใน Mysql

รถตั้งโต๊ะ:

  • รหัสรถ
  • ID ผู้ใช้
  • ยี่ห้อ (ยี่ห้อรถ)
  • พิมพ์
  • ล้างครั้งสุดท้าย
  • กุญแจ
  • RFID_ID

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

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

เมื่อทั้งหมดนี้พร้อม ผมก็เริ่มเขียนโค้ดได้เลย

ฉันเริ่มต้นด้วยการสร้างโค้ดสำหรับเซ็นเซอร์ของฉันใน Python 3.5

ดาวน์โหลดรหัสคลิกที่นี่

ใช้ลิงก์เพื่อโคลนโครงการ

ขั้นตอนที่ 4: ขั้นตอนที่ 4: ใส่ Al the Code บน Raspberry Pi ของฉัน

การติดตั้งแพ็คเกจ

ก่อนอื่นฉันติดตั้งแพ็คเกจทั้งหมดที่ฉันต้องการเพื่อให้ใช้งานได้

me@my-rpi:~ $ sudo apt update

me@my-rpi:~ $ sudo apt install -y python3-venv python3-pip python3-mysqldb mysql-server uwsgi nginx uwsgi-plugin-python3

สภาพแวดล้อมเสมือนจริง

me@my-rpi:~ $ python3 -m pip install --upgrade pip setuptools wheel virtualenvme@my-rpi:~ $ mkdir project1 && cd project1 me@my-rpi:~/project1 $ python3 -m venv --system- แพ็คเกจไซต์ env me@my-rpi:~/project1 $ source env/bin/activate (env)me@my-rpi:~/project1 $ python -m pip ติดตั้ง mysql-connector-python argon2-cffi Flask Flask-HTTPAuth Flask-MySQL mysql-connector-python passlib

อัปโหลดโครงการไปยัง Pi ของคุณโดยใช้ pycharm

เปิด Pycharm แล้วไปที่ VCS > นำเข้าจากการควบคุมเวอร์ชัน > Github และโคลนไฟล์ Github ของฉัน

ใส่การกำหนดค่าการปรับใช้ไปยังไดเร็กทอรีที่คุณเพิ่งสร้าง (/home/me/project1). กดสมัคร!

ไปที่การตั้งค่าล่ามและเลือกสภาพแวดล้อมเสมือนที่คุณเพิ่งสร้าง (/home/me/project1/env/bin/pyhon)

ตรวจสอบว่าการแมปเส้นทางถูกต้องหรือไม่

ตอนนี้คุณสามารถอัปโหลดรหัสไปยังไดเร็กทอรีของคุณโดยใช้ Pycharm

ฐานข้อมูล

ตรวจสอบว่าฐานข้อมูลกำลังทำงานอยู่หรือไม่ คุณควรได้รับสิ่งนี้:

me@my-rpi:~ $ sudo systemctl status mysql● mariadb.service - เซิร์ฟเวอร์ฐานข้อมูล MariaDB โหลดแล้ว: โหลดแล้ว (/lib/systemd/system/mariadb.service; เปิดใช้งาน; ตั้งค่าล่วงหน้าของผู้ขาย: เปิดใช้งาน) ใช้งานอยู่: ใช้งานอยู่ (ทำงาน) ตั้งแต่ Sun 2018-06-03 09:41:18 CEST; 1 วัน 4 ชั่วโมงที่แล้ว Main PID: 781 (mysqld) สถานะ: "รับคำขอ SQL ของคุณตอนนี้…" งาน: 28 (จำกัด: 4915) CGroup: /system.slice/mariadb.service └─781 /usr/sbin/mysqld

03 มิ.ย. 09:41:13 my-rpi systemd[1]: กำลังเริ่มเซิร์ฟเวอร์ฐานข้อมูล MariaDB… 03 มิ.ย. 09:41:15 my-rpi mysqld[781]: 2018-06-03 9:41:15 4144859136 [หมายเหตุ] / usr/sbin/mysqld (mysqld 10.1.26-MariaDB-0+deb9u1) 03 มิ.ย. 09:41:18 my-rpi systemd[1]: เริ่มต้นเซิร์ฟเวอร์ฐานข้อมูล MariaDB

me@my-rpi:~ $ ss -lt | grep mysql ฟัง 0 80 127.0.0.1:mysql *:*

สร้างผู้ใช้และเพิ่มฐานข้อมูล

ฉัน@my-rpi:~ $ sudo mariadb

เมื่อคุณอยู่ในฐานข้อมูลให้ทำสิ่งนี้

สร้างผู้ใช้ 'project1-admin'@'localhost' ระบุโดย 'adminpassword';สร้างผู้ใช้ 'project1-web'@'localhost' ระบุโดย 'webpassword'; สร้างผู้ใช้ 'project1-sensor'@'localhost' ระบุโดย 'sensorpassword';

สร้างโครงการฐานข้อมูล1;

ให้สิทธิ์ทั้งหมดในโปรเจ็กต์1.* ถึง 'project1-admin'@'localhost' พร้อมตัวเลือก GRANT; GRANT SELECT, INSERT, UPDATE, DELETE ON project1.* เป็น 'project1-web'@'localhost'; GRANT SELECT, INSERT, UPDATE, DELETE ON project1.* เป็น 'project1-sensor'@'localhost'; สิทธิพิเศษในการล้าง;

สร้างตาราง `ผู้ใช้' (`idUser` int (11) ไม่ใช่ NULL, `รหัสผ่าน' varchar (45) ค่าเริ่มต้น NULL, คีย์หลัก (`idUser`)) ENGINE=InnoDB ค่าเริ่มต้น CHARSET=utf8

สร้างตาราง `car` (`idCar` int (11) ไม่ใช่ NULL AUTO_INCREMENT, `idUser` int (11) ไม่ใช่ NULL, `Brand' varchar (45) ค่าเริ่มต้น NULL, `ประเภท' varchar (45) ค่าเริ่มต้น NULL, `LastWashed' วันที่เวลา DEFAULT NULL, `RFID_Number` varchar (15) ค่าเริ่มต้น NULL, `Key` varchar (5) ค่าเริ่มต้น NULL, คีย์หลัก (`idCar`, `idUser`), KEY `fk_Car_User1_idx` (`idUser`), CONSTRAINT `fk_Car_User คีย์ต่างประเทศ (`idUser`) ข้อมูลอ้างอิง `ผู้ใช้' (`idUser`) ในการลบไม่มีการดำเนินการใดๆ เมื่ออัปเดตไม่มีการดำเนินการ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

เชื่อมต่อฐานข้อมูลของคุณกับ Pycharm

คลิกที่แท็บฐานข้อมูลทางด้านขวา หากคุณไม่มีแท็บที่เปิดอยู่ ให้ทำดังนี้: View > Tool Windows > Database

คลิกเพิ่มการเชื่อมต่อ เลือกแหล่งข้อมูล > MySQL (หากมีปุ่มดาวน์โหลดไดรเวอร์ให้กด)

ไปที่ SSH/SSL และตรวจสอบ SSH กรอกข้อมูลรับรอง Raspberry pi ของคุณ (โฮสต์/ผู้ใช้/รหัสผ่าน) พอร์ตควรเป็น 22 และอย่าลืมตรวจสอบการจำรหัสผ่าน

กลับไปที่ทั่วไป โฮสต์ควรเป็น localhost และฐานข้อมูลควรเป็น project1 กรอกข้อมูลประจำตัวจาก project1-admin เพื่อทดสอบการเชื่อมต่อ

หากการเชื่อมต่อใช้ได้ ให้ไปที่แท็บ สคีมา และตรวจสอบให้แน่ใจว่าได้เลือกโปรเจ็กต์ 1 แล้ว

ตรวจสอบว่าฐานข้อมูลถูกต้องหรือไม่

me@my-rpi:~ $ echo 'แสดงตาราง;' | mysql project1 -t -u project1-admin -pEnter รหัสผ่าน: +---------------------------+ | Tables_in_project1 | +---------------------------+ | เซ็นเซอร์ | | ผู้ใช้ | +---------------------------+

ไฟล์การกำหนดค่า

ในไดเร็กทอรี conf คุณจะพบ 4 ไฟล์ คุณควรเปลี่ยนชื่อผู้ใช้เป็นชื่อผู้ใช้ของคุณ

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-* ● project1- flask.service - อินสแตนซ์ uWSGI เพื่อให้บริการเว็บอินเตอร์เฟสของโครงการ 1 โหลดแล้ว: โหลดแล้ว (/etc/systemd/system/project1-flask.service; ปิดใช้งาน; ค่าที่ตั้งไว้ล่วงหน้าของผู้ขาย: เปิดใช้งาน) ใช้งาน: ใช้งานอยู่ (ทำงาน) ตั้งแต่วันจันทร์ 2018-06-04 13: 14:56 CEST; 1 วินาทีที่แล้ว PID หลัก: 6618 (uwsgi) งาน: 6 (จำกัด: 4915) กลุ่ม C: /system.slice/project1-flask.service ├─6618 /usr/bin/uwsgi --ini /home/me/project1/conf/ uwsgi-flask.ini ├─6620 /usr/bin/uwsgi --ini /home/me/project1/conf/uwsgi-flask.ini ├─6621 /usr/bin/uwsgi --ini /home/me/project1/ conf/uwsgi-flask.ini ├─6622 /usr/bin/uwsgi --ini /home/me/project1/conf/uwsgi-flask.ini ├─6623 /usr/bin/uwsgi --ini /home/me/ โครงการ1/conf/uwsgi-flask.ini └─6624 /usr/bin/uwsgi --ini /home/me/project1/conf/uwsgi-flask.ini

04 มิ.ย. 13:14:56 น. my-rpi uwsgi[6618]: แมป 383928 ไบต์ (374 KB) สำหรับ 5 คอร์ 04 มิ.ย. 13:14:56 my-rpi uwsgi[6618]: *** โหมดการทำงาน: preforking ***

● project1-sensor.service - บริการเซ็นเซอร์ Project 1 โหลดแล้ว: โหลดแล้ว (/etc/systemd/system/project1-sensor.service; ปิดใช้งาน; ค่าที่ตั้งไว้ล่วงหน้าของผู้ขาย: เปิดใช้งาน) ใช้งาน: ใช้งานอยู่ (ทำงาน) ตั้งแต่วันจันทร์ 2018-06-04 13: 16:49 CEST; 5s ago Main PID: 6826 (python) งาน: 1 (limit: 4915) CGroup: /system.slice/project1-sensor.service └─6826 /home/me/project1/env/bin/python /home/me/project1 /sensor/sensor.py

04 มิ.ย. 13:16:49 น. my-rpi systemd[1]: เริ่มบริการเซ็นเซอร์โครงการ 1 04 มิ.ย. 13:16:49 น. my-rpi python[6826]: DEBUG:_main_:Saved sensor process_count=b'217\n' to database Jun 04 13:16:55 my-rpi python[6826]: DEBUG:_main_: เซ็นเซอร์ที่บันทึกไว้ process_count=b'218\n' ไปยังฐานข้อมูล

nginx

me@my-rpi:~/project1 $ ls -l /etc/nginx/sites-*

/etc/nginx/sites-available: total 4 -rw-r--r-- 1 root root 2416 Jul 12 2017 ค่าเริ่มต้น

/etc/nginx/sites-enabled: Total 0 lrwxrwxrwx 1 root 34 ม.ค. 18 13:25 ค่าเริ่มต้น -> /etc/nginx/sites-available/default

เพื่อให้ทุกอย่างเป็นค่าเริ่มต้นให้รันคำสั่งเหล่านี้

me@my-rpi:~/project1 $ sudo cp conf/nginx /etc/nginx/sites-available/project1me@my-rpi:~/project1 $ sudo rm /etc/nginx/sites-enabled/default 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

สตาร์ทอัตโนมัติ

ตรวจสอบให้แน่ใจว่าทุกอย่างเริ่มต้นโดยอัตโนมัติ

ไปที่ไดเร็กทอรี conf และรันคำสั่งสุดท้ายเหล่านี้ เท่านี้ก็เรียบร้อย!

me@my-rpi:~/project1 $ sudo systemctl enable project1-*

หากคุณรีบูต Pi ของคุณ ควรเริ่มต้นโดยอัตโนมัติ

ขั้นตอนที่ 5: ขั้นตอนที่ 5: การสร้างที่อยู่อาศัย

ขั้นตอนที่ 5: การสร้างที่อยู่อาศัย
ขั้นตอนที่ 5: การสร้างที่อยู่อาศัย
ขั้นตอนที่ 5: การสร้างที่อยู่อาศัย
ขั้นตอนที่ 5: การสร้างที่อยู่อาศัย
ขั้นตอนที่ 5: การสร้างที่อยู่อาศัย
ขั้นตอนที่ 5: การสร้างที่อยู่อาศัย
ขั้นตอนที่ 5: การสร้างที่อยู่อาศัย
ขั้นตอนที่ 5: การสร้างที่อยู่อาศัย

รีไซเคิล

เพื่อสร้างที่อยู่อาศัย ฉันใช้ตู้เสื้อผ้าเก่าที่แม่จะทิ้ง

ฐาน

ฉันเลื่อยไม้กระดาน 4 แผ่น (34 ซม. x 26 ซม.) (ดังนั้นจึงเป็นลูกบาศก์จาก 34 x 34 x 26)

ที่ด้านล่างฉันเพิ่มไม้บาง ๆ ไว้ที่ด้านล่าง

บอร์ดพร้อมไฟ LED

ตรงกลางฉันวางไม้เล็กๆ 2 ชิ้นไว้ข้างละ 9 ซม. จากด้านบน สิ่งนี้ถือเป็นกระดานที่ผู้นำจะนั่ง

กระดานที่มีไฟ LED เป็นกระดานขนาดเล็ก (32 ซม. x 32 ซม.)

ฉันเจาะ 9 รูเพื่อให้ไฟ LED ออกมา

แผนก

ฉันทำการหารด้วยวัสดุเดียวกันกับด้านล่างและกระดานที่มีไฟ LED

มี 4 ชิ้น กรีด 10.3 ซม. (9 ซม. x 31 ซม.) ตอนนี้ฉันสามารถรวมมันเข้าด้วยกัน

ปุ่มและเครื่องอ่าน RFID

ฉันเจาะรูที่ฐานเพื่อใส่เครื่องอ่าน RFID และปุ่มต่างๆ สำหรับ RFID ฉันวางแผ่นบาง ๆ ไว้ข้างหน้าเพื่อให้ดูสะอาดขึ้น

ขั้นตอนที่ 6: ขั้นตอนที่ 6: ใส่ทุกอย่างลงในตัวเรือน

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

ฉันติดไฟ LED เข้าที่แล้วติดเครื่องอ่าน RFID และเขียงหั่นขนมเข้ากับเคส

และนั่นคือวิธีที่คุณสร้าง Keysorter!

แนะนำ: