Raspberry Pi Pico เป็นสมาชิกใหม่ล่าสุดของตระกูล Raspberry Pi ก่อนหน้านี้ กลุ่มผลิตภัณฑ์ Raspberry Pi เป็นคอมพิวเตอร์บอร์ดเดี่ยวที่สามารถใช้ระบบปฏิบัติการได้
Raspberry Pi Pico ใช้ชิป RP2040 ใหม่ รองรับทั้ง MicroPython และ C/C++ Raspberry Pi Pico ช่วยให้มือใหม่และผู้ที่ชื่นชอบสามารถควบคุมฮาร์ดแวร์และอุปกรณ์ที่เชื่อมต่อได้ หมุด GPIO ของ Raspberry Pi Pico สามารถใช้เพื่อทำให้แสงจางลง อ่านสถานะของสวิตช์ และอื่นๆ อีกมากมาย
MicroPython คืออะไร?
การเขียนโปรแกรมบนไมโครคอนโทรลเลอร์ได้ทำเด่นในภาษา C ที่เห็นใช้ในArduino บอร์ดพัฒนา จากนั้นในปี 2014 ได้มีการเผยแพร่ภาษาการเขียนโปรแกรมใหม่สำหรับไมโครคอนโทรลเลอร์ MicroPython MicroPython ให้คุณเขียนโค้ด Python บนโลหะเปล่าของไมโครคอนโทรลเลอร์ ซึ่งหมายความว่าคุณสามารถเขียนโค้ด Python ได้โดยไม่ต้องใช้ระบบปฏิบัติการ
Python เป็นภาษาการเขียนโปรแกรมระดับสูงที่เป็นมิตรกับผู้เริ่มต้นใช้งาน ซึ่งช่วยให้ผู้ใช้สามารถมุ่งเน้นไปที่การเรียนรู้แนวคิดการเขียนโปรแกรม สิ่งนี้เหมือนกันมากกับ MicroPython
การใช้ LED
ในการควบคุมฮาร์ดแวร์ Pico จะคุยกับชุดหมุดตามขอบทั้งสองข้าง สิ่งเหล่านี้เรียกว่าพินอินพุตวัตถุประสงค์ทั่วไป (GPIO) และไฟ LED ออนบอร์ดสามารถพบได้ใน GPIO 25 ในการควบคุม ให้นำเข้าไลบรารีที่จำเป็นก่อน:
import machine
import utime
จากนั้นเรียกใช้ฟังก์ชันพินโดยใช้ไลบรารีของเครื่องเพื่อจัดการกับพิน GPIO ของพิน ในกรณีนี้ เราจะตั้งค่าพินที่ GPIO 25 ดังนั้นจึงเป็นพารามิเตอร์แรก พารามิเตอร์ที่สองตั้งค่าเป็นพินเอาต์พุตแทนที่จะเป็นพินอินพุต พินรู้ว่าควรทำอะไร:
onboard_led = machine.Pin(25, machine.Pin.OUT)
เพื่อดำเนินการต่อในรหัสต่อไปนี้เราจะบอก Pico เพื่อตั้งแล้วขามันคุ้มค่าที่ GPIO 25-1 หรือ 'เปิด'
while True: onboard_led.value(1)
อย่างไรก็ตาม คุณอาจตระหนักว่าไม่มีอะไรเกิดขึ้น เนื่องจาก Pico ทำงานเร็วมาก ดังนั้น LED จึงสว่างเร็วกว่าที่คุณจะมองเห็นได้ด้วยตา ในการแก้ไขปัญหานี้ เราต้องทำให้โปรแกรมช้าลงโดยใช้คำสั่ง sleep จากไลบรารีutime รหัสแบบเต็มที่ LED จะเปิดและปิดอยู่ด้านล่าง:
import machine import utime onboard_led = machine.Pin(25, machine.Pin.OUT) while True: onboard_led.value(1) utime.sleep(5) onboard_led.value(0) utime.sleep(5)
การสลับเปิดและปิดไฟ LED
อีกวิธีหนึ่งในการเปิดและปิดไฟ LED ด้วยคำสั่งสลับ :
import machine import utime onboard_led = machine.Pin(25, machine.Pin.OUT) while True: led_onboard.toggle() utime.sleep(5)
ในตัวอย่างคำสั่งสลับจะแทนที่ความจำเป็นในการตั้งค่าของ LED เป็น 1 และใหม่กว่า 0 โดยจะยังสว่างเป็นเวลา 5 วินาทีแล้วดับอีก 5 วินาที ตราบใดที่โปรแกรมยังทำงานอยู่
การสร้างฟังก์ชัน
เมื่อโปรแกรมมีความซับซ้อนมากขึ้น จะช่วยในการจัดกลุ่มโค้ดต่างๆ เข้าด้วยกัน เพื่อรักษาความสอดคล้องกัน ในการทำเช่นนั้น MicroPython เช่น Python อนุญาตให้ใช้ฟังก์ชันต่างๆ ฟังก์ชันคือกลุ่มของข้อความสั่งที่เกี่ยวข้องซึ่งทำงานเฉพาะอย่าง ตัวอย่างเช่นในรหัสต่อไปนี้ ฟังก์ชันที่เรียกว่าprintNamesถูกกำหนด:
def printNames: print(“Raspberry Pi 1”) print(“Raspberry Pi 2”) print(“Raspberry Pi 3”) print(“Raspberry Pi 4”) print(“Raspberry Pi Compute Module”) print(“Raspberry Pi 400”) print(“Raspberry Pi Pico”) printNames()
บรรทัดสุดท้ายในโค้ดเรียกใช้ฟังก์ชันเพื่อให้ทำงานได้จริง
ลูป
ลอจิกแบบมีเงื่อนไขดำเนินการที่แตกต่างกันขึ้นอยู่กับว่าข้อจำกัดบูลีนประเมินว่าเป็นจริงหรือเท็จ ความอุดมสมบูรณ์ของโครงการ Raspberry Pi Picoจะขึ้นอยู่กับงบตรรกะเหล่านี้ ในตัวอย่างต่อไปนี้ คำสั่ง if-else ใช้เพื่อกำหนดว่าคำสั่งprintจะดำเนินการหรือไม่:
i = 17 def printNames(): if i > 15: print("i is greater than 15!") else: print("i is not greater than 15") printNames()
ในตัวอย่างถัดไป ใช้ for loop กับฟังก์ชันrange ลูปเหล่านี้สามารถใช้เพื่อทำซ้ำบล็อกของรหัสได้หลายครั้ง
สำหรับตัวอย่างนี้พิมพ์คำสั่งจะถูกดำเนินการครั้งที่ห้าที่มีความล่าช้าในห้าวินาทีระหว่างแต่ละของพวกเขาด้วยการนอนหลับสั่ง:
import utime def printNames(): for i in range(5): print("Raspberry Pi Pico") utime.sleep(5) printNames()
ตัวแปลงอนาล็อกเป็นดิจิตอล (ADC)
แม้ว่าคุณจะไม่สามารถมองเห็นมันได้ แต่ Raspberry Pi Pico มีตัวแปลงอนาล็อกเป็นดิจิตอลภายใน ในตัวอย่างต่อไปนี้ โพเทนชิออมิเตอร์เชื่อมต่อกับ Raspberry Pi Pico บน GPIO 26 ซึ่งสามารถใช้งานฟังก์ชัน ADC ได้:
import machine import utime pot = machine.ADC(26) while True: print(pot.read_u16()) utime.sleep(1)
ที่นี่ ก่อนที่เราจะสามารถใช้พินที่มีความสามารถ ADC นี้ได้ จะต้องตั้งค่าด้วยฟังก์ชัน ADC จากนั้นในขณะที่โปรแกรมกำลังทำงาน ค่าของโพเทนชิออมิเตอร์จะพิมพ์ทุกวินาที พินอื่นๆ บน Raspberry Pi Pico ที่ ADC มีความสามารถ ได้แก่ GPIO27, 28 และ 29
การปรับความกว้างพัลส์ (Pwm)
ดิจิตอลเอาท์พุตของไมโครคอนโทรลเลอร์ต้องเป็น 1 หรือ 0 เท่านั้น ในการสร้างสัญญาณอะนาล็อก คุณจะต้องใช้ตัวแปลงดิจิทัลเป็นแอนะล็อก อย่างไรก็ตาม อีกวิธีหนึ่งคือการสร้างสัญญาณแอนะล็อกเทียม โดยใช้การมอดูเลตความกว้างพัลส์หรือ PWM สั้น ๆ
โดยการเปิดและปิดสัญญาณดิจิตอล สิ่งนี้เรียกว่าพัลส์ โดยมอดูเลตความกว้างของพัลส์ สิ่งนี้จะสร้างสัญญาณอะนาล็อกเทียมดังที่เห็นในตัวอย่างต่อไปนี้:
import machine import utime pot = machine.ADC(26 led = machine.PWM(machine.Pin(21)) led.freq(1000) while True: led.duty_u16(pot.read_u16())
ขั้นแรกนำเข้าไลบรารีของเครื่องและUtime ออบเจ็กต์onboard_ledถูกสร้างขึ้นด้วยเอาต์พุต PWM ที่เปิดใช้งานบน GPIO pin 21 จากนั้นใช้คำสั่งfreqซึ่งจะตั้งค่าความถี่เพื่อปรับความกว้างพัลส์ ลองนึกภาพการหมุนโพเทนชิออมิเตอร์ ไฟ LED จะสว่างขึ้นเมื่อหมุนไปทางเดียว
สิ่งนี้เกิดขึ้นเนื่องจากค่าอนาล็อกจากโพเทนชิออมิเตอร์ถูกใช้เป็นค่าสำหรับรอบการทำงานของสัญญาณ PWM ซึ่งเป็นค่าระหว่าง 0 ถึง 65535 อย่างไรก็ตาม หากไม่มีการแปลง การหมุนโพเทนชิออมิเตอร์เล็กน้อยอาจทำให้ LED ไปถึงระดับความสว่างสูงสุดแล้ว .
ในการแก้ไขปัญหานี้ เพื่อให้โพเทนชิออมิเตอร์มีความสว่างเต็มที่เมื่อหมุนไปจนสุดเท่านั้น ค่าจะถูกแปลงด้วยฟังก์ชันduty_u16 ฟังก์ชันนี้แปลงเป็นจำนวนเต็ม 16 บิต ซึ่งเป็นค่าระหว่าง 0 ถึง 1024 ซึ่งเป็นช่วงค่าเดียวกับที่คุณจะได้รับจากพินอะนาล็อกของ Pico
สร้างสรรค์มากขึ้นด้วย Raspberry Pi Pico
บทความนี้ครอบคลุมคำสั่งพื้นฐานใน MicroPython บน Raspberry Pi Pico สำหรับข้อมูลเพิ่มเติมโปรดดูเอกสารอย่างเป็นทางการเกี่ยวกับการเขียนโปรแกรม MicroPython กับราสเบอร์รี่ Pi Pico
หากยังไม่ได้ตั้งค่าบน Raspberry Pi Pico ให้ใช้Thonny IDEเพื่อเรียกใช้โค้ด MicroPython ของคุณ หรือลองใช้โปรแกรมจำลอง CPU ของยูนิคอร์นเพื่อเรียกใช้ไมโครคอนโทรลเลอร์เสมือนบนคอมพิวเตอร์ของคุณโดยตรง