Каталог
|
Огляд плати Raspberry Pi Pico (приклад роботи з MPU6050)2022-12-29 Все статьи →Вступ У цій статті розглянемо плату для розробки Raspberry Pi Pico на мікроконтролері власного виробництва Raspberry Pi - RP2040. Ціль статті розглянути цю плату, описати її можливості і надати вичерпну характеристику. Також до статті буде додано приклад роботи цієї плати з модулем трьохосьового акселерометра і гіроскопа MPU6050. Огляд плати Raspberry Pi Pico Плата Raspberry Pi Pico з’явилася у сегменті мікроконтролерів не так і давно, але вже є достатньо інформації і прикладів для того, щоб мати змогу надати їй характеристику. Основою цієї плати став 32-х бітний мікроконтролер RP2040, який містить два ядра ARM Cortex M0+, максимальна частота кожного 133 МГц, містить 264 Кб оперативної пам’яті SRAM. Сама плата містить мікросхему пам’яті 2 Мб flash, а загалом підтримує до 16 Мб. Містить наступні інтерфейси:
На платі доступно 26 I/O каналів, містить 16 каналів PWM. Також містить 4 канали ADC. В залежності від модифікації плати на ній може бути присутній вбудований WiFi модуль (Raspberry Pi Pico W). Також зазначу, що на платі присутній вбудований датчик температури. Із цікавого можна зазначити, що RP2040 містить 2 блоки PIO, кожен блок якого містить по 4 контакти (PIO - Programmable I/O state machines). Зауважу, що існує навіть можливість реалізації завдань машинного навчання на цій платі. На малюнку нижче зображено загальний опис усіх контактів цієї плати з нумерацією. Порівняння з іншими платами розробки Після прочитаного вище аналізу виникає справедливе запитання, а чи варто купувати Raspberry Pi Pico, можливо є інші і кращі варіанти? Якщо підходити до цього питання з огляду на «Чи варто купувати цю плату новачкам?» які тільки починають вивчати програмування мікроконтролерів, то на мою думку так. Якщо порівнювати з Arduino (на 8-ми бітних мікроконтролерах) то перевага звісно в RP Pico, тому що поріг входження у розробку орієнтовно однаковий, а якщо говорити про програмування, то існує багато ресурсів і проектів для ознайомлення (включно на GitHub). Програмувати можна на модифікаціях мови Python (MicroPython, CircuitPython) використовуючи Thonny IDE, мовою С++, але в мене особисто виникли певні складнощі при встановленні і налаштуванні середовища (процес налаштування описаний в офіційній документації), а також можна використовувати Arduino IDE. Якщо говорити про економічну доцільність, то тут також на рівень вище RP Pico (в Україні орієнтовна ціна 300 грн), так як її вартість набагато менше за Arduino, але параметри кращі. Але варто зазначити, що Arduino також має певні переваги, а саме ширше ком’юніті розробників, більше матеріалів, більше проектів, більше різних шилдів і спеціалізованих модулів під Arduino, а в деяких випадках навіть простіше в опануванні програмування. Якщо порівнювати цю плату з найпростішою з STM32, а саме Blue Pill, то вони більш менш схожі за своїми параметрами (Blue Pill побудований на Cortex-M3). Звісно ці дві плати мають свої переваги і недоліки, але в даному випадку вже кожен обирає на власний смак і за цільовим призначенням. Середня ціна цих двох плат орієнтовно однакова. Але плати розробки STM32 зазвичай вимагають окремий програматор. Raspberry Pi Pico і MPU6050 Мій приклад роботи з MPU6050 реалізовано мовою MicroPython в середовищі розробки Thonny IDE. На рисунку нижче зображено підключення модуля до плати (інтерфейс I2C).
Для того, щоб мати змогу прошити мікроконтролер необхідно затиснути кнопку Bootsel і одночасно підключити до USB. Після цієї дії повинен з’явитися новий диск RPI-RP2, який відображатиметься наступним чином. Таку дію потрібно виконати кожен раз, коли необхідно перепрограмувати мікроконтролер. На цей диск зазвичай в ручному режимі перекидають відкомпілюваний файл, але використовуючи Thonny IDE достатньо лише зберегти .py файл на Pico. Варто зазначити, що виконавчий файл завжди потрібно зберігати, як main.py. На рисунку нижче зображено інтерфейс середовища. Це середовище як і будь-яке інше під розробку на Python досить мінімалістичне. Для роботи з модулем MPU6050 потрібно буде використати два додаткових файли, а саме imu.py і vector3d.py в яких описано основні функції роботи з модулем. Варто зазначити що в інтернеті є багато модифікацій бібліотеки для роботи з цим модулем (всі необхідні файли додані в цьому архіві). Для встановлення мови програмування необхідно натиснути в правому нижньому куті на вибір, обрати MicroPython і відповідну плату (в даному прикладі Rasberry Pi Pico H) і натиснути інсталювати. Після інсталяції можливо потрібно буде повторно зайти в це меню і натиснути на вже інстальовану мову. Після всіх налаштувань можна переходити до процесу програмування. Спочатку необхідно підключити всі необхідні файли. import machine import utime from time import sleep from imu import MPU6050 Тепер перейдемо до написання загальної тестової функції, яка буде містити функціонал визначення кутової швидкості і положення. def MPU6050_test(adress): imu = MPU6050(adress) while True: ax = round(imu.accel.x, 2) ay = round(imu.accel.y, 2) az = round(imu.accel.z, 2) #gx = round(imu.gyro.x) #gy = round(imu.gyro.y) #gz = round(imu.gyro.z) print("ax", ax,"\t","ay", ay,"\t","az", az,"\t", end = "\r") #print("gx", gx,"\t","gy", gy,"\t","gz", gz,"\t", end = "\r") sleep(0.2) У даному прикладі використовується лише визначення положення, а кутова швидкість закоментована, але можна у будь-який момент знову додати ці функції і трохи переписати виведення даних у термінал для адекватного відображення їх зміни. Тепер виконаємо процес визначення пристрою і його адреси на шині I2C наступним чином. sda = machine.Pin(0) scl = machine.Pin(1) freq = 400000 i2c = machine.I2C(0, sda = sda, scl = scl, freq = freq) devices = i2c.scan() Після того, як ми отримали доступ необхідно виконати перевірку на наявність підключеного пристрою, і якщо пристрій є, то запустити тестову функцію вказавши отриману адресу модуля MPU6050. Це можна зробити наступним чином. if len(devices) == 0: print("No found device!") else: print("I2C devices found: ", len(devices)) for device in devices: print("Address device: ", hex(device)) MPU6050_test(i2c) Цей код виконує перевірку використовуючи if/else і у разі наявності виводить кількість знайдених пристроїв та адреси, після чого викликає функцію MPU6050_test(i2c), де i2c - це визначена адреса пристрою. Якщо всі дії було виконано правильно, то отримаємо наступний результат. Для того, щоб програма працювала автономно всі файли необхідно зберегти на Raspberry. Для цього необхідно натиснути зберегти і обрати Raspberry Pi Pico, як зображено на рисунку нижче. І це треба виконати для всіх файлів - main.py, imu.py, vector3d.py. Після виконання всіх цих дій повинно бути наступне. Висновки Плата розробника Raspberry Pi Pico чудовий представник цієї ніші на ринку. Він досить гнучкий у використанні, має непоганий функціонал, має гарні характеристики, що надає цій платі великий спектр для застосування і впровадження в різні розробки. А також він має дуже недорогу вартість за такий великий функціонал. Єдина проблема на даний момент є те, що майже немає українського сегменту оглядів або навчальних і описових статей роботи з цією платою (але завжди можна скористатися зарубіжними англомовними сайтами), а також нажаль не так і багато є опублікованих проектів виконаних на цій платі, якщо порівнювати з Arduino, що трохи ускладнює процес навчання.
Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Сергiй
21.05.2023 11:57:50
Добре, корисна оглядова стаття.
|