was successfully added to your cart.

มาใช้เขียน Python เพื่อใช้ UART Port บน Raspberry PI กันเถอะ

By April 22, 2013Uncategorized

ใช้ราสเบอรี่ไพติดต่อสื่อสารกับอุปกรณ์อย่างอื่นผ่าน UART

จากรูปด้านบน pin connector ของราสเบอรี่ไพ จะมี pin ที่สามารถเชื่อมต่อผ่านโพรโตคอล UART ได้สองพินคือ GPIO14 และ GPIO15 ตามรูปโดยฟังก์ชั่นเริ่มต้นของสองพินนี้ เป็น UART และภายใน kernel ยังใช้เป็น console อีกด้วยสังเกตุได้จาก kernel parameter ดังต่อไปนี้

dma.dmachans=0x7f35 bcm2708_fb.fbwidth=1920 bcm2708_fb.fbheight=1080 bcm2708.boardrev=0x3 bcm2708.serial=0x85d14de1 smsc95xx.macaddr=B8:27:EB:D1:4D:E1 sdhci-bcm2708.emmc_clock_freq=100000000 vc_mem.mem_base=0xec00000 vc_mem.mem_size=0x10000000  dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

จริงๆ มีหลายตัวที่น่าสนใจครับแต่บทนี้เราสังเกตุแค่ console=ttyAMA0,115200 ตรงนี้ละครับตัวบอกให้ kernel เข้าใจว่าจะใช้พอร์ตไหนเป็น console port โดยตัวราสเบอรี่ไพมันก็มีพอร์ต uart พอร์ตเดียวคือ /dev/ttyAMA0 แล้วก็ใช้คอนโซลไปแล้วละซิ

ต่อมาเรามาหาวิธีทำให้ Linux ไม่ใช้ UART กันเถอะเพราะว่าต้องการจะใช้เอง อิอิ

/boot/cmdline.txt

ไฟล์เจ้าปัญหาไฟล์แรกของเราที่ต้องแก้ไขซะก่อน

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

เนื้อในก็จะมีประมาณด้านบนแก้ไขซะ อ่อ ก่อนจะแก้ให้ใช้สิทธิของ root ในการแก้นะครับเช่น sudo vi /boot/cmdline.txt

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

หลังจากแก้ตรงนี้จะเป็นการป้องกันไม่ให้ system ใช้ serial port ในการแสดงผล แต่เมื่อถึงขั้นตอน root file system
promt จะขึ้นมาต้อนรับเราเหมือนเดิม T^T เราต้องมาแก้ไขอีกที่หนึ่งในไฟล์

/etc/inittab

ในไฟล์นี้ไปที่บรรทัดสุดท้ายที่เขียนว่า

#Spawn a getty on Raspberry Pi serial line
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

คอมเมนท์ซะเลยให้กลายเป็น

#Spawn a getty on Raspberry Pi serial line
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

จบขั้นตอนนี้ ถ้าทำมาถูกต้องก็ไม่ควรที่จะมี Application หรือว่า Kernel ใช้ Serial Port แข่งกับเราแล้วเรามาทดลองพัฒนาซอฟแวร์กับ Serial Port เพื่อส่งข้อมูลมาที่คอมพิวเตอร์กัน โดยเราจะใช้ไลบรารี่ที่ชื่อว่า python-serial สนใจรายละเอียดดูได้ที่

http://pyserial.sourceforge.net/

เขียนแบบเบื้องต้น เลยนะครับ โดยเราจะส่งข้อมูลจาก ราสเบอรี่ไพมาที่  terminal บนคอมพิวเตอร์

Screen Shot 2556-04-22 at 9.22.03 PM

เท่านี้เราก็จะสามารถใช้ Raspberry PI เชื่อมต่อกับอุปกรณ์อื่นๆ โดยไม่ต้องกังวลเรื่อง console มากวนใจแล้วครับ
แล้วพบกับบทความดีดี ต่อไปที่ DEAWARE ครับ

 

 

Leave a Reply

*