Как разработчик, всегда находящийся в поиске доступных, но мощных микроконтроллерных плат, я влюбился в Raspberry Pi Pico. Его компактный размер, впечатляющая производительность и универсальные возможности программирования делают его идеальным для широкого спектра проектов. В этом посте я поделюсь некоторыми из моих любимых проектов Pico, которые демонстрируют его возможности, от простых конструкций для начинающих до более сложных приложений.
Проект 1: Мигающий светодиод с настраиваемыми шаблонами (подходит для начинающих)
Настройка оборудования
Для этого проекта вам понадобятся Raspberry Pi Pico, макетная плата, светодиод, резистор на 220 Ом и соединительные провода. Подключите анод светодиода к выводу GPIO 25 через резистор, а катод — к выводу заземления на Pico. Такая схема обеспечивает защиту светодиода от перегрузки по току с помощью резистора и правильное подключение к выводу GPIO Pico для управления.

Реализация кода
С помощью MicroPython мы создадим программу, которая будет заставлять светодиод мигать по-разному. Сначала импортируем необходимые модули:
from machine import Pin, Timer
Затем инициализируйте вывод светодиода:
led = Pin(25, Pin.OUT)
Создайте объект таймера для управления интервалами мигания. Следующий фрагмент кода настраивает таймер, который переключает светодиод каждые 500 миллисекунд:
tim = Timer()
def tick(timer):
led.toggle()
tim.init(freq=2, mode=Timer.PERIODIC, callback=tick)
Тестирование и настройка
После загрузки кода в Pico (сохранив его как main.py и подключив Pico), светодиод должен начать мигать. Вы можете настроить схемы мигания, изменив период таймера или создав более сложные функции для управления временем включения и выключения светодиода. Например, вы можете создать функцию, которая заставляет светодиод мигать в соответствии с кодом Морзе или схемой, которая меняется в зависимости от внешнего входа. Этот проект — отличный способ ознакомиться с управлением контактами GPIO и MicroPython на Pico.
Проект 2: Система контроля температуры (средний уровень)
Требования к оборудованию
Возьмите Raspberry Pi Pico, датчик температуры DS18B20, резистор 4,7 кОм, макетную плату и соединительные провода. DS18B20 использует интерфейс 1-Wire, поэтому подключите его VCC к 3,3 В, GND к земле, а вывод DATA к выводу GPIO 18 на Pico. Резистор подключается между выводом DATA и VCC для подтяжки сигнала. Такая настройка обеспечивает стабильную связь между Pico и датчиком температуры, поскольку протокол 1-Wire требует наличия подходящего подтягивающего резистора для надежной передачи данных.

Разработка кода
В MicroPython для связи с датчиком используются библиотеки onewire и ds18x20. Сначала импортируйте библиотеки и инициализируйте шину 1-Wire:
import machine
import onewire
import ds18x20
import time
Затем настройте шину на выбранном выводе GPIO:
ds_pin = machine.Pin(18)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
Сканируйте устройства и создайте объект DS18B20:
roms = ds_sensor.scan()
print('Found DS devices: ', roms)
Следующий код считывает температуру и выводит ее в консоль:
while True:
ds_sensor.convert_temp()
time.sleep_ms(750)
for rom in roms:
print(ds_sensor.read_temp(rom))
time.sleep(2)
Регистрация и отображение данных
Чтобы сделать систему более полезной, можно добавить небольшой OLED-дисплей (подключенный через I2C) для отображения температуры в режиме реального времени или записи данных в файл на подключенном компьютере. Для OLED-дисплея можно использовать библиотеку ssd1306. Сначала импортируйте необходимые модули и инициализируйте интерфейс I2C:
from machine import I2C, Pin
import ssd1306
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
oled = ssd1306.SSD1306_I2C(128, 32, i2c)
Затем измените цикл считывания температуры, чтобы отобразить температуру на OLED-дисплее:
while True:
ds_sensor.convert_temp()
time.sleep_ms(750)
for rom in roms:
temp = ds_sensor.read_temp(rom)
print(temp)
oled.fill(0)
oled.text(f"Temp: {temp} C", 0, 0)
oled.show()
time.sleep(2)
Для регистрации данных можно использовать следующий код, чтобы записать данные о температуре в файл во внутренней файловой системе Pico:
file = open('temperatures.txt', 'w')
while True:
ds_sensor.convert_temp()
time.sleep_ms(750)
for rom in roms:
temp = ds_sensor.read_temp(rom)
print(temp)
file.write(f"{time.time()},{temp}\n")
file.flush()
time.sleep(2)
Этот проект демонстрирует, как подключаться к внешним датчикам с помощью контактов GPIO Pico, и показывает его способность обрабатывать данные, полученные с датчиков.
Проект 3: Загрузчик данных IoT (продвинутый уровень)
Настройка оборудования
Вам понадобятся Raspberry Pi Pico W (со встроенным Wi-Fi), датчик окружающей среды BME280 (измеряет температуру, влажность и давление), макетная плата и соединительные провода. Подключите BME280 к Pico с помощью I2C: SDA к GPIO 8, SCL к GPIO 9, VCC к 3,3 В и GND к земле. Такая настройка подключения позволяет Pico обмениваться данными с датчиком BME280 через шину I2C, что обеспечивает возможность получения данных об окружающей среде.

Интеграция кода и IoT
Используя MicroPython на Pico W, сначала подключитесь к сети Wi-Fi. Настройте учетные данные Wi-Fi:
import network
ssid = 'your_SSID'
password = 'your_PASSWORD'
Подключитесь с помощью сетевого интерфейса:
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while not wlan.isconnected():
pass
print('Connected to WiFi')
Затем инициализируйте датчик BME280 с помощью класса bme280. Возможно, вам понадобится установить библиотеку bme280, если она еще не установлена. Вот как можно ее инициализировать:
import bme280_i2c
i2c = machine.I2C(0, sda=machine.Pin(8), scl=machine.Pin(9))
bme = bme280_i2c.BME280_I2C(i2c)
Код считывает данные датчика и загружает их на платформу IoT, такую как Ubidots или Thingspeak, с помощью метода HTTP POST. Вот упрощенная версия функции загрузки данных:
import urequests
def upload_data(temperature, humidity, pressure):
url = 'https://industrial.api.ubidots.com/api/v1.6/devices/your_device_label'
headers = {'X-Auth-Token': 'your_token', 'Content-Type': 'application/json'}
data = '{"temperature": %s, "humidity": %s, "pressure": %s}' % (temperature, humidity, pressure)
response = urequests.post(url, headers=headers, data=data)
if response.status_code == 200:
print('Data uploaded successfully')
else:
print('Error uploading data')
response.close()
while True:
temperature, pressure, humidity = bme.values
temperature = float(temperature.strip(' C'))
humidity = float(humidity.strip(' %'))
pressure = float(pressure.strip(' hPa'))
upload_data(temperature, humidity, pressure)
time.sleep(60)
Тестирование и масштабируемость
После запуска кода Pico W подключится к Интернету, прочитает данные с BME280 и загрузит их на выбранную платформу IoT. Вы можете просматривать данные в режиме реального времени на панели управления платформы. Этот проект демонстрирует беспроводные возможности Pico W и показывает, как создавать масштабируемые решения IoT с помощью Pico, открывая возможности для применения в умных домах, мониторинге окружающей среды и многом другом. Если вы планируете масштабировать этот проект, вы можете добавить больше датчиков, настроить интервалы сбора данных или даже использовать более надежную платформу IoT с расширенными аналитическими функциями.
Заключение
Raspberry Pi Pico — это фантастический инструмент для создателей любого уровня квалификации, предлагающий безграничные возможности для творческих проектов. Независимо от того, начинаете ли вы с простого мигающего светодиода или создаете сложную систему IoT, доступность, производительность и простота использования Pico делают его лучшим выбором. Надеюсь, эти проекты вдохновят вас на эксперименты с собственными сборками Pico. Поделитесь своими проектами в комментариях ниже — я с удовольствием посмотрю, что вы создали!



