#1 2024-03-29 16:16:50

AVKrobotics
Учасник
Зареєстрований: 2014-12-25
Повідомлень: 15

Плата RP2040 Zero

RP2040-Zero 2МБ плата розробника, початок.
29.03.2024  Автор- Кравченко Олексій Володимирович (AVKrobotics).

На мою думку RP2040- це дуже дешевий та потужний мікроконтролер встановлений на платі розміром із поштову марку.

Мікроконтролер RP2040
Двоядерний Arm Cortex M0+ з гнучкою тактовою частотою до 133 МГц
264 КБ SRAM та 2 МБ вбудованої флеш-пам'яті USB-накопичувач із підтримкою UF2
Інтерфейс PICOBOOT — це низькорівневий протокол USB для взаємодії з RP2040, коли він перебуває в режимі BOOTSEL. Це інтерфейс можна використовувати одночасно з інтерфейсом накопичувача USB. Він забезпечує гнучке читання та запис у RAM або Flash, перезавантаження, виконання коду на пристрої та кілька інших функцій управління. Константи та структури, пов’язані з інтерфейсом, можна знайти в заголовку SDK https://github.com/raspberrypi/picosdk/
blob/master/src/common/boot_picoboot/include/boot/picoboot.h
Перезавантажує RP2040 з режиму BOOTSEL. Зауважте, що режим BOOTSEL може бути повторно ввімкнено, якщо перезавантажити флеш, а ні знайдено дійсний завантажувач другого етапу.
Роз'єм USB-C використовується для програмування та живлення плати.

Для початку написання програм на Python- на ПК встановити програму Thonny c сайту  https://thonny.org/
https://github.com/thonny/thonny/releases для різних операційних систем.

Щоб почати працювати з платою RP2040-Zero 2МБ треба встановити пакет Cirquitpython на плату, для цього:
1.Натиснути кнопку rp2040 - boot з'єднати кабель USB type C з ПК
2.Відкриється нова флеш пам'ять rp2040
3.Вкласти папку circuitpython-main флеш пам'ять rp2040 взяти з сайту https://github.com/adafruit/circuitpython вона містить 49мБайт
4. інсталяційний файл adafruit-circuitpython-waveshare_rp2040_zero-ru-8.2.10
взяти з сайту https://circuitpython.org/board/waveshare_rp2040_zero/
і вкласти у флешку rp2040.
5. C сайту https://github.com/adafruit/Adafruit_CircuitPython_NeoPixel
з папки Adafruit_CircuitPython_NeoPixel-main відкрити в Thonny файл neopixel.py та зберегти на rp2040, запустити в Thonny -натиснути зелений трикутник перевірити.
6. З сайту https://github.com/adafruit/Adafruit_CircuitPython_Pixelbuf взяти файл adafruit_pixelbuf.py
відкрити в Thonny і вкласти в rp2040 lib папку (папка відкривається якщо натиснути)
файл adafruit_pixelbuf.py, запустити перевірити.
7. зберегти файл main.py
8. видалити файл code.py
9. запустити файл main.py
З'єднати buzzer динамік і підключити до 14 пін та GND.
Спочатку вмикання живлення, запуститься вбудована програма миготіння білим кольором світлодіод ws2812. Потім запуститься програма main.py, її можна редагувати та змінювати. Спочатку блимає світлодіод червоним кольором, після блимання червоного світлодіода звучатиме мелодія play_melody(MELODY) шість нот. Якщо закоротити 5V і 29 пін, то відбудеться блимання зеленим кольором і синім. Але мелодія не звучатиме.
Проект створений для контролю води у водопроводі. Замість кнопки встановити датчик тиску, який працює на замикання контактів, якщо є тиск води. Якщо датчик води під тиском, скорочений
то блимає синій зелений, якщо води немає, то червоний з мелодією. Може працювати від батареї.



main.py

import board
import neopixel
import time
import digitalio
import array
import pulseio
import pwmio

# Define the number of LEDs
NUM_LEDS = 16

# Initialize pin 29
pin29 = digitalio.DigitalInOut(board.GP29)
pin29.switch_to_input(pull=digitalio.Pull.DOWN)

# Define the frequencies for each note
NOTES = {
    'C4': 262,
    'D4': 294,
    'E4': 330,
    'F4': 349,
    'G4': 392,
    'A4': 440,
    'B4': 494,
    'REST': 0  # Represents a rest
}

# Define the melody as a list of tuples (note, duration)
MELODY = [
    ('C4', 0.2),
    ('D4', 0.1),
    ('E4', 0.2),
    ('F4', 0.3),
    ('G4', 0.2),
    ('A4', 0.5),
    ('B4', 0.2)
]

# Initialize PWM output on pin GP14
#pwm = pulseio.PulseOut(board.GP14, frequency=440, duty_cycle=0)
pwm = pwmio.PWMOut(board.GP14, duty_cycle=0, frequency=440, variable_frequency=True)

# Function to play a note
def play_note(note, duration):
    if note == 'REST':
        time.sleep(duration)
        return
    frequency = NOTES[note]
    pwm.frequency = frequency
    pwm.duty_cycle = 65536 // 2  # 50% duty cycle
    time.sleep(duration)
    pwm.duty_cycle = 0  # Turn off the PWM

# Function to play the melody
def play_melody(melody):
    for note, duration in melody:
        play_note(note, duration)
        time.sleep(0.1)  # Add a short pause between notes

# Initialize the built-in neopixel
pixels = neopixel.NeoPixel(board.NEOPIXEL, NUM_LEDS, auto_write=False)

# Function to turn on all LEDs to red
def turn_on_red():
    pixels.fill((0, 255, 0))  # Red color
    pixels.show()
   
# Function to turn on all LEDs to red
def turn_on_green():
    pixels.fill((255, 0, 0))  # Red color
    pixels.show()
   
# Function to turn on all LEDs to red
def turn_on_blue():
    pixels.fill((0, 0, 255))  # Red color
    pixels.show()

# Function to turn off all LEDs
def turn_off():
    pixels.fill((0, 0, 0))  # Turn off
    pixels.show()
   
   
while True:
 
  if pin29.value:
      # Turn on the LEDs
       turn_on_green()

       # Wait for some time
       time.sleep(0.5)

       # Turn off the LEDs
       turn_on_blue()
       # Wait for some time
       time.sleep(0.5)
  else:
      # Turn on the LEDs
      turn_on_red()

      # Wait for some time
      time.sleep(0.5)

      # Turn off the LEDs
      turn_off()
      # Wait for some time
      time.sleep(0.5)
     
      # Play the melody
      play_melody(MELODY)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму