TrashNotes

2025-04-25 07:25:40
#example - Ниже приведён пример простого кода на CircuitPython для работы с модулем nRF24L01 на плате с микроконтроллером RP2040 (например, Raspberry Pi Pico или Arduino Nano RP2040 Connect) с использованием библиотеки circuitpython_nrf24l01. Пример демонстрирует передачу и приём данных по радиоканалу.

import time
import board
import digitalio
import struct
from circuitpython_nrf24l01.rf24 import RF24

# Настройка пинов CE и CSN (подберите пины в соответствии с вашей схемой подключения)
ce = digitalio.DigitalInOut(board.D4)
csn = digitalio.DigitalInOut(board.D5)

# Инициализация SPI шины
spi = board.SPI()

# Создаём объект радиомодуля
nrf = RF24(spi, csn, ce)

# Уровень мощности передатчика (можно менять: -18, -12, -6, 0 dBm)
nrf.pa_level = -12

# Адреса для передачи и приёма (5 байт, в байтовом формате)
address = [b"1Node", b"2Node"]

# Выбираем, какой радио будет передатчиком (0) или приёмником (1)
radio_number = 0  # 0 — передатчик, 1 — приёмник

# Открываем трубы для передачи и приёма
nrf.open_tx_pipe(address[radio_number])       # Труба для передачи
nrf.open_rx_pipe(1, address[not radio_number])  # Труба для приёма

# Включаем динамический размер пакета (по умолчанию включён)
nrf.dynamic_payloads = True

def transmit_data():
    nrf.listen = False  # Выключаем режим приёма, включаем передачу
    payload = 0.0
    while True:
        # Упаковываем float в 4 байта
        buffer = struct.pack("<f", payload)
        result = nrf.send(buffer)
        if result:
            print(f"Отправлено: {payload}")
        else:
            print("Ошибка передачи")
        payload += 0.1
        time.sleep(1)

def receive_data():
    nrf.listen = True  # Включаем режим приёма
    while True:
        if nrf.available():
            buffer = nrf.read()
            # Распаковываем float из полученных байт
            received = struct.unpack("<f", buffer[:4])[0]
            print(f"Получено: {received}")
        time.sleep(0.1)

if __name__ == "__main__":
    try:
        if radio_number == 0:
            transmit_data()
        else:
            receive_data()
    except KeyboardInterrupt:
        print("Завершение работы")
← Previous
Back to list