ก่อนหน้านี้ฉันได้เขียนบทความหัวข้อ DIY เคส Raspberry Pi ด้วย Stripboard/Perfboard (ตอนที่ 1) ซึ่งฉันอธิบายวิธีที่ฉันสร้างกล่องหุ้มโมดูลาร์ที่ทำจาก แผ่นปริ้น PCB (stripboard/perfboard) หรือแนวคิดโดยรวม ตอนนี้ฉันได้ออกแบบสองด้านที่ “smart” สำหรับโครงตู้: ด้านสตริปบอร์ด LED 16 ดวง และด้านสตริปบอร์ดรีเลย์ 5V วันนี้ฉันจะอธิบายรายละเอียดว่าฉันทำสิ่งนี้ได้อย่างไร โดยมีรายละเอียดเกี่ยวกับอุปกรณ์อิเล็กทรอนิกส์, การบัดกรี, การประกอบ, การแจกจ่าย Linux (สร้างด้วย Yocto) รวมถึงโปรแกรม C, เพจ HTML และเชลล์สคริปต์ (CGI) ที่ใช้เพื่อทำให้ LED 16 ดวงและควบคุมหลอดไฟ 220V มาตรฐานพร้อมรีเลย์ผ่านเว็บเบราว์เซอร์ของโทรศัพท์ของฉัน
แผนผังด้านสตริปบอร์ด ไฟLED 16 ดวง, การบัดกรีและการทดสอบ
ฉันได้ตัดสินใจออกแบบแผงด้านบนของกล่องหุ้มด้วย LED หลายดวง, LED 3 ดวงที่ด้านข้าง และผลราสเบอร์รี่ (LED สีแดง 6 ดวง) และใบไม้ 2 ดวง (LED สีเขียว 4 ดวง) ก่อนเริ่มต้น ฉันได้ทดลองบนเบรดบอร์ด และค้นพบอย่างรวดเร็วว่า LED 5Vไม่สามารถวางเป็นอนุกรมได้ ( LED 2 ดวง 10V, LED 6 ดวง 30V และอื่นๆ) ดังนั้นฉันจึงต้องเชื่อมต่อพวกมันแบบขนาน กับตัวต้านทาน (resistor) แต่ละตัว แผนแรกของฉันคือการใช้ LED 11 ดวงในซีรีย์สำหรับ Raspberry เท่านั้น ซึ่งฉันลดขนาดลงเป็น LED 6 ดวง แบบคู่ขนานกันเนื่องจากไม่มีที่ว่าง
ในที่สุดฉันก็ไปกับแผนผังด้านล่าง ซึ่งวาดขึ้นเพื่อจุดประสงค์ในการโพสต์บล็อกนี้ด้วย Kicad ใน Ubuntu
เนื่องจาก LED เป็น 5V และ Raspberry Pi GPIO เอาต์พุต 3.3V คุณจึงต้องมีทรานซิสเตอร์เพื่อจัดการกับความแตกต่างของแรงดันไฟฟ้า ตัวต้านทานฐานทรานซิสเตอร์คือการจำกัด กระแส GPIO (ตัวต้านทาน 33k Ohm ใช้งานได้สำหรับฉัน) และฉันเลือกตัวต้านทาน LED ตามการทดลองและข้อผิดพลาดของเบรดบอร์ด 220 โอห์มดูเหมือนจะดีสำหรับไฟ LED สีแดงและสีเหลือง เช่นเดียวกับไฟ LED สีเขียวขนาดเล็ก แต่ผมต้องใช้ตัวต้านทาน 75 โอห์มสำหรับไฟ LED สีเขียว เนื่องจากพวกมันหรี่แสงเกินไปด้วยตัวต้านทาน 220 โอห์ม
ฉันตัดสินใจที่จะแสดงเฉพาะ LED ที่ด้านบนของบอร์ด และประสานส่วนประกอบอื่นๆ ทั้งหมดไว้ที่อีกด้านหนึ่ง คุณเพียงแค่ต้องใช้คีมเพื่อตัดสายนำส่วนประกอบให้ใกล้ที่สุดจากพื้นผิวแผ่นกระดาน
ฉันเริ่มบัดกรีสาย 5V และคุณสามารถเห็นได้ว่าฉันมีปัญหาเล็กน้อยในการเชื่อมต่อแผ่นบัดกรี ในที่สุดฉันพบว่าฉันต้องถอดหัวแร้งออกอย่างรวดเร็ว ทันทีที่บัดกรีละลายบนแผ่นสคริปบอร์ด 2 แผ่นที่อยู่ติดกัน และส่วนที่เหลือของบอร์ดก็ดูดีขึ้นเล็กน้อย
ก่อนทำการทดสอบ คุณควรตรวจสอบ และตรวจสอบอีกครั้ง การเชื่อมต่อกับมัลติมิเตอร์ หรือคุณอาจสร้างความเสียหายให้กับ Raspberry Pi ของคุณหากมีสิ่งผิดปกติเกิดขึ้น ฉันเชื่อมต่อ 5V และ GND กับส่วนหัว 26 พินของ Raspberry Pi รวมถึงพิน 3.3V เพื่อทดสอบอินพุต 9 ตัว (และ LED 16 ดวง) เมื่อฉันยืนยันว่าทุกอย่างทำงานแล้ว ฉันใช้ปืนกาวเพื่อเพิ่มการแยกระหว่างชิ้นส่วนที่เสี่ยงต่อการลัดวงจร
แผนผังด้านรีเลย์ สตริปบอร์ด การบัดกรีและการทดสอบ
ฉันใ่ช้โมดูลรีเลย์ เพื่อเพิ่มการ์ด SD/ด้านแหล่งจ่ายไฟของเคส Raspberry Pi
ฉันปรับแผนผังด้านบนจากsusa.net เนื่องจากฉันไม่ต้องการD1 diode พิเศษ เพราะเป็นส่วนหนึ่งของบอร์ดรีเลย์อยู่แล้ว แทนที่จะใช้ทรานซิสเตอร์ BC337 ฉันใช้ 2N2222 กับตัวต้านทานฐานทรานซิสเตอร์ 33 kOhm ฉันต้องความระมัดระวังในขณะที่ฉันเชื่อมต่อโหลด 220V
เมื่อเทียบกับบอร์ด LED การบัดกรีเป็นเรื่องง่ายๆ
ฉันใช้ขา stand off 7 อัน เพื่อยึดบอร์ดรีเลย์เข้ากับบอร์ดของฉัน โดยเพิ่มแคปสำหรับแยกสกรูบางส่วน เนื่องจากสกรูขา stand off 3 ตัวที่ด้านบนยาวเกินไป 3 พิน ทางด้านซ้ายของภาพด้านล่างคือ +(เชื่อมต่อกับ 5V), –(เชื่อมต่อกับกราวด์) และ S (เชื่อมต่อกับ GPIO 25 บน RPi) ทางด้านขวา คุณจะพบกับโหลดสามพินโดยมี COMMON อยู่ตรงกลาง, NC (หน้าสัมผัสปิดปกติ) และ NO (หน้าสัมผัสปกติเปิด) ที่ด้านข้าง หากคุณต้องการให้อุปกรณ์ของคุณเปิดโดยค่าเริ่มต้น ให้เชื่อมต่อ NC และ COMMON มิฉะนั้น NO และ COMMON
เช่นเดียวกับบอร์ด LED ฉันตรวจสอบการเชื่อมต่อด้วยมัลติมิเตอร์ก่อนแล้วจึงใช้เบรดบอร์ด เนื่องจากการใช้ 220V กับเบรดบอร์ดจะไม่ดีนัก ฉันตัดสินใจที่จะใช้หลอดไฟ LED ที่ 5V สำหรับการทดสอบแทน
มันใช้งานได้ดี ดังนั้นถึงเวลาต้องย้ายไปประกอบโครงตู้แล้ว
การเชื่อมต่อและการประกอบตู้โมดูลาร์ Raspberry Pi
อันที่จริงฉันมี 3 ด้าน “smart”: บอร์ดด้านบน LED, บอร์ดรีเลย์ และบอร์ดเพื่อเข้าถึงคอนโซลซีเรียล
บอร์ด LED ต้องการ +5V และ GND และพิน GPIO 9 ตัวที่แสดงอยู่ในแผนผัง บอร์ดรีเลย์ต้องใช้พิน 5V และ GND อีกสองตัว เช่นเดียวกับ GPIO 25 ตัวและบอร์ดพอร์ตอนุกรมเชื่อมต่อกับ Tx/Rx และ GND สายเคเบิลทั้งหมดเชื่อมต่อกับหัวพิน P1 บน Raspberry Pi
หลังจากตรวจสอบและตรวจสอบการเชื่อมต่ออีกครั้ง ฉันสามารถยึดชิ้นส่วนต่างๆ เข้าด้วยกันได้เหมือนเมื่อก่อนเมื่อไม่มีวงจรบนแผ่นต่อพ่วง
ขั้นตอนสุดท้ายก่อนที่จะย้ายไปใช้ซอฟต์แวร์คือการเชื่อมต่อโหลดที่น่าสนใจ ฉันพบว่าวิธีที่ง่ายที่สุดคือเชื่อมต่อหลอดไฟและถอดสวิตช์หลอดไฟ
เพื่อหลีกเลี่ยงไม่ให้สายทั้ง 2 ส่วนลัดวงจร ฉันจึงใช้ฉนวนเทปสีดำ
ซอฟต์แวร์ – Linux, การควบคุม LED ด้วย GPIO และรีเลย์พร้อมหน้าเว็บ
มีคำแนะนำมากมายสำหรับควบคุม GPIO ของ Raspberry Pi ตั้งค่าเว็บเซิร์ฟเวอร์ ฯลฯ… แต่ฉันเพิ่มความท้าทายเล็กน้อยในการตั้งค่าโดยใช้การ์ด SD ขนาด 256MB นั่นหมายความว่า Raspbian ไม่สามารถติดตั้งได้ คุณต้องคอมไพล์โปรแกรมของคุณ เนื่องจากมีพื้นที่ไม่เพียงพอสำหรับติดตั้ง GCC toolchain และคุณไม่สามารถใช้เว็บเซิร์ฟเวอร์เช่น Apache2 หรือ nginx ได้เช่นกัน ซึ่งดูเหมือนเป็นสิ่งที่ไม่ดี แต่เป็นการฝึกหัดที่ดี เพราะมันใกล้เคียงกับสิ่งที่วิศวกรใช้จริงๆ ในการพัฒนาอุปกรณ์ฝังตัวในเครือข่าย
เนื่องจากฉันใช้ Raspbian ไม่ได้ ฉันจึงตัดสินใจใช้รูปภาพขั้นต่ำที่สร้างด้วย Yocto แทน ฉันได้เขียนคำแนะนำในการใช้Yocto สำหรับ Raspberry Piแล้ว แต่ฉันจะไม่ใช้อิมเมจ Yocto ที่ ฉันสร้างในโพสต์นั้นอย่างแน่นอน เนื่องจากฉันต้องเปิดใช้งานตัวเลือกเพิ่มเติมใน busybox
เราไม่สามารถสร้างอะไรได้โดยตรงบน Raspberry Pi ดังนั้นเราจึงต้องหา cross-toolchain แต่ว่า Yocto แล้วทำอย่างใด ซึ่งคุณจะพบใน./poky/build/tmp/sysroots/x86_64-linux/usr/bin/armv6-vfp-poky-linux-gnueabi/directory
มาเพิ่มในเส้นทางของเรา:
1 |
export PATH=$PATH:/home/jaufranc/edev/rpi/yocto/poky/build/tmp/sysroots/x86_64-linux/usr/bin/armv6-vfp-poky-linux-gnueabi/ |
ฉันจะใช้ไลบรารี bcm2835 เพื่อควบคุมGPIO ดังนั้นมาดาวน์โหลด สร้าง และติดตั้งลงในไดเร็กทอรี ~/edev/rpi/gpio:
1 2 3 4 5 6 7 8 9 |
cd ~/edev/rpi mkdir gpio cd gpio wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.26.tar.gz tar xzvf bcm2835-1.26.tar.gz cd bcm2835-1.26/ ./configure --target=arm-poky-linux-gnueabi- --host=arm-poky-linux-gnueabi --prefix=/home/jaufranc/edev/rpi/gpio make make install |
ฉันได้เขียนโปรแกรม C ง่าย ๆ สองโปรแกรม:
- gpio_out.c – ใช้เพื่อตั้งค่าพิน GPIO ให้สูงหรือต่ำ การใช้งาน: ./gpio_out [พิน] [ค่า] ฉันจะใช้มันเพื่อควบคุมรีเลย์
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include #include "bcm2835.h" int main(int argc, char **argv) { int gpiopin, gpiovalue; if (argc != 3) { printf("Usage gpioout pin value\n"); return 1; } gpiopin = atoi(argv[1]); gpiovalue = atoi(argv[2]); /* Init bcm2835 library */ if (!bcm2835_init()) return 1; /* Set the pin to be an output */ bcm2835_gpio_fsel(gpiopin, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_write(gpiopin, gpiovalue); printf("Set pin %d to %s\n", gpiopin, gpiovalue?"HIGH":"LOW"); bcm2835_close(); return 0; } |
- stripboardled.c – วนเพื่อจุดไฟ LED 16 ดวงบนกระดานด้านบนอย่างแฟนซี
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
/* stripboardled.c * * Demo program for LED stripboard top * */ #include #include "bcm2835.h" #define LED_RED_LEFT 4 #define LED_RED_RIGHT 7 #define LED_GREEN_LEFT 17 #define LED_GREEN_RIGHT 8 #define LED_YELLOW_LEFT 18 #define LED_YELLOW_RIGHT 11 #define LED_LEAF_LEFT 22 #define LED_LEAF_RIGHT 24 #define LED_RASPBERRYPI 23 void ledconfig () { /* Set all pins to output mode */ bcm2835_gpio_fsel(LED_RED_LEFT, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(LED_RED_RIGHT, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(LED_GREEN_LEFT, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(LED_GREEN_RIGHT, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(LED_YELLOW_LEFT, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(LED_YELLOW_RIGHT, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(LED_LEAF_LEFT, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(LED_LEAF_RIGHT, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(LED_RASPBERRYPI, BCM2835_GPIO_FSEL_OUTP); } void ledson () { bcm2835_gpio_write(LED_RED_LEFT, HIGH); bcm2835_gpio_write(LED_RED_RIGHT, HIGH); bcm2835_gpio_write(LED_GREEN_LEFT, HIGH); bcm2835_gpio_write(LED_GREEN_RIGHT, HIGH); bcm2835_gpio_write(LED_YELLOW_LEFT, HIGH); bcm2835_gpio_write(LED_YELLOW_RIGHT, HIGH); bcm2835_gpio_write(LED_LEAF_LEFT, HIGH); bcm2835_gpio_write(LED_LEAF_RIGHT, HIGH); bcm2835_gpio_write(LED_RASPBERRYPI, HIGH); } void ledsoff() { bcm2835_gpio_write(LED_RED_LEFT, LOW); bcm2835_gpio_write(LED_RED_RIGHT, LOW); bcm2835_gpio_write(LED_GREEN_LEFT, LOW); bcm2835_gpio_write(LED_GREEN_RIGHT, LOW); bcm2835_gpio_write(LED_YELLOW_LEFT, LOW); bcm2835_gpio_write(LED_YELLOW_RIGHT, LOW); bcm2835_gpio_write(LED_LEAF_LEFT, LOW); bcm2835_gpio_write(LED_LEAF_RIGHT, LOW); bcm2835_gpio_write(LED_RASPBERRYPI, LOW); } int main(int argc, char **argv) { /* Init bcm2835 library */ if (!bcm2835_init()) return 1; /* configure LED gpios to output mode */ ledconfig(); /* demo loop */ while (1) { int i=0; /* turn off all LEDs, and wait 1 second*/ ledsoff(); bcm2835_delay(1000); ledson(); bcm2835_delay(500); ledsoff(); bcm2835_delay(500); ledson(); bcm2835_delay(500); ledsoff(); bcm2835_delay(500); bcm2835_gpio_write(LED_RED_LEFT, HIGH); bcm2835_gpio_write(LED_RED_RIGHT, HIGH); bcm2835_delay(500); bcm2835_gpio_write(LED_GREEN_LEFT, HIGH); bcm2835_gpio_write(LED_GREEN_RIGHT, HIGH); bcm2835_delay(500); bcm2835_gpio_write(LED_YELLOW_LEFT, HIGH); bcm2835_gpio_write(LED_YELLOW_RIGHT, HIGH); bcm2835_delay(500); bcm2835_gpio_write(LED_LEAF_LEFT, HIGH); bcm2835_gpio_write(LED_LEAF_RIGHT, HIGH); bcm2835_gpio_write(LED_RASPBERRYPI, HIGH); bcm2835_delay(1000); ledsoff(); bcm2835_delay(500); bcm2835_gpio_write(LED_RED_LEFT, HIGH); bcm2835_gpio_write(LED_YELLOW_RIGHT, HIGH); bcm2835_delay(500); bcm2835_gpio_write(LED_RED_LEFT, LOW); bcm2835_gpio_write(LED_YELLOW_RIGHT, LOW); bcm2835_gpio_write(LED_GREEN_LEFT, HIGH); bcm2835_gpio_write(LED_GREEN_RIGHT, HIGH); bcm2835_delay(500); bcm2835_gpio_write(LED_GREEN_LEFT, LOW); bcm2835_gpio_write(LED_GREEN_RIGHT, LOW); bcm2835_gpio_write(LED_RED_RIGHT, HIGH); bcm2835_gpio_write(LED_YELLOW_LEFT, HIGH); bcm2835_delay(500); ledsoff(); bcm2835_delay(200); for(i=0;i<5;i++) { bcm2835_gpio_write(LED_LEAF_LEFT, HIGH); bcm2835_gpio_write(LED_LEAF_RIGHT, LOW); bcm2835_gpio_write(LED_RASPBERRYPI, LOW); bcm2835_delay(250); bcm2835_gpio_write(LED_LEAF_LEFT, LOW); bcm2835_gpio_write(LED_LEAF_RIGHT, HIGH); bcm2835_gpio_write(LED_RASPBERRYPI, LOW); bcm2835_delay(250); bcm2835_gpio_write(LED_LEAF_LEFT, LOW); bcm2835_gpio_write(LED_LEAF_RIGHT, LOW); bcm2835_gpio_write(LED_RASPBERRYPI, HIGH); bcm2835_delay(250); } } bcm2835_close(); return 0; } |
มาคอมไพล์ข้ามกันในไดเร็กทอรี ~/edev/rpi/gpio:
1 2 |
arm-poky-linux-gnueabi-gcc gpio_out.c -o gpio_out -I./include -L./lib -lbcm2835 arm-poky-linux-gnueabi-gcc stripboardled.c -o stripboardled -I./include -L./lib -lbcm2835 |
ตอนนี้เรามีไบนารีในพีซี Linux ของเราแล้ว วิธีทั่วไปในการแลกเปลี่ยนไฟล์ระหว่างอุปกรณ์เป้าหมายและเครื่องสร้างคือการใช้เซิร์ฟเวอร์ NFS:
1 2 3 |
sudo mkdir /srv/nfs sudo chown jaufranc.jaufranc /srv/nfs sudo vi /etc/exports |
จากนั้นแก้ไข /etc/exports เป็นรูท (sudo) และเพิ่มบรรทัด:
1 |
/srv/nfs 192.168.0.0/24(rw,no_root_squash,async,no_subtree_check) |
ตอนนี้เข้าถึงบอร์ด Raspberry Pi ผ่านคอนโซลซีเรียล, SSH หรือจอแสดงผล HDMI และติดตั้งการแชร์ NFS:
1 2 |
mkdir /mnt/nfs mount -t nfs -o nolock 192.168.0.105:/srv/nfs /mnt/nfs |
คัดลอกโปรแกรมในคอมพิวเตอร์ Linux ไปยัง NFS share:
1 2 |
cp stripboardled /srv/nfs cp gpio_out /srv/nfs |
เราสามารถลองใช้ Raspberry Pi เพื่อแฟลช LED และเปิดไฟที่เชื่อมต่อกับรีเลย์:
1 2 3 |
cd /mnt/nfs/ ./stripboardled & ./gpio_out 25 1 |
ไม่มีเซิร์ฟเวอร์ http ในอิมเมจ Yocto ขั้นต่ำ และเนื่องจากความต้องการของเรามีจำกัด (html + cgi) ฉันจะเปิดใช้งาน httpd ใน busybox อ้างถึงรูปภาพ โพสต์สำหรับ Raspberry Pi โดยใช้ Yocto Project เราจะต้องกำหนดค่า busybox เปิดใช้งาน httpd ด้วยการสนับสนุน CGI และสร้างภาพใหม่:
1 2 3 4 |
bitbake busybox -c menuconfig <a href="http://www.cnx-software.com/wp-content/uploads/2013/07/Busybox_HTTPD_CGI.jpg"><img class="aligncenter wp-image-11767" alt="Busybox_HTTPD_CGI" src="http://www.cnx-software.com/wp-content/uploads/2013/07/Busybox_HTTPD_CGI.jpg" width="619" height="395" /></a> bitbake busybox bitbake rpi-basic-image |
มาคัดลอกรูปภาพไปยังการ์ด SD บูต Raspberry Pi และสร้างไฟล์ที่จำเป็นในบอร์ดเพื่อควบคุมรีเลย์
- /www/light.htm – แบบฟอร์ม HTML พร้อมปุ่มเปิด/ปิด (ดูรหัส )
- /www/cgi-bin/lighton – เชลล์สคริปต์เพื่อเปิดรีเลย์ (ดูรหัส )
- /www/cgi-bin/lightoff – เชลล์สคริปต์เพื่อปิดรีเลย์ (ดูรหัส )
สคริปต์เชลล์ lighton/off เป็นแฮ็กที่น่าเกลียดที่เรียก /usr/sbin/gpio_out และโหลดlight.htm ใหม่ด้วยการเปลี่ยนเส้นทาง มีวิธีที่ดีกว่าในการทำเช่นนี้กับ HTML + CGI อย่างแน่นอน แต่ได้ผล…
เรายังต้องคัดลอกไบนารี “GPIO” ไปยัง /usr/sbin ใน Raspberry Pi และตั้งค่าการอนุญาตสำหรับสคริปต์:
1 2 3 4 |
cp /mnt/nfs/stripboardled /usr/sbin cp /mnt/nfs/gpio_out /usr/sbin chmod +x /www/cgi-bin/lighton chmod +x /www/cgi-bin/lightoff |
เนื่องจากฉันต้องการให้ระบบทำงานโดยอัตโนมัติ ฉันได้เพิ่มบรรทัดต่อไปนี้ที่ส่วนท้ายของ /etc/inittab:
1 |
2:2345:respawn:/usr/sbin/rpi.sh |
และสร้าง /usr/sbin/ rpi.shเพื่อเริ่มเซิร์ฟเวอร์ http และโปรแกรมสาธิต LED:
1 2 3 |
#!/bin/sh httpd -h /www /usr/sbin/stripboardled |
สุดท้าย ตั้งค่าการอนุญาตสำหรับrpi.shและรีสตาร์ทบอร์ด:
1 2 3 |
chmod +x /usr/sbin/rpi.sh sync reboot |
ไฟ LED ควรเริ่มกะพริบหลังจากผ่านไปสองสามวินาที และคุณควรจะสามารถเปิด/ปิดหลอดไฟด้วยเว็บเบราว์เซอร์ได้ตามที่แสดงในการสาธิตด้านล่าง
แปลจากบทความภาษาอังกฤษ : DIY Stripboard/Veroboard Enclosure for Raspberry Pi (Part 2)
บรรณาธิการข่าวและบทความภาษาไทย CNX Software ได้มีความสนใจในด้านเทคโนโลยี โดยเฉพาะ Smart Home และ IoT