- pyrf24 0.2.3
- Навигация
- Ссылки проекта
- Статистика
- Метаданные
- Сопровождающие
- Классификаторы
- Описание проекта
- Introduction
- Pinout
- Installing from PyPI
- Installing from Github
- Building a wheel
- Using a specific RF24 driver
- Differences in API
- Migrating to pyrf24
- Python Type Hints
- Documentation
- Использование SPI из Python на Raspberry Pi
pyrf24 0.2.3
A python package for the wrapping nRF24 related C++ libraries.
Навигация
Ссылки проекта
Статистика
Метаданные
Лицензия: GNU General Public License v2 (GPLv2) (GPLv2)
Метки nrf24l01, nRF24L01+, raspberry, pi, driver, radio, transceiver
Требует: Python >=3.7
Сопровождающие
Классификаторы
Описание проекта
Introduction
This is the official home of the python wrappers for the RF24 stack. It is meant for Linux-based SoC boards like the Raspberry Pi. Documentation is hosted at http://pyrf24.rtfd.io/.
Pinout
The nRF24L01’s CE and IRQ pins can be connected to other GPIO pins on the SoC. The MISO, MOSI, SCK are limited to the corresponding counterparts on the SoC’s SPI bus. The CSN pin is limited to the chosen SPI bus’s “Chip Select” options (also labeled as “CE” pins on many Raspberry Pi pinout diagrams). The following table shows the default pins used in all the examples for this package.
The IRQ pin is not typically connected, and it is only used in the interrupt_configure example.
If connecting a nRF24L01+PA+LNA module to the Raspberry Pi, you MUST use a external 3V power supply because the Raspberry Pi (all models) do not provide enough power for the nRF24L01+PA+LNA modules.
It is highly recommended that the nRF24L01’s VCC and GND pins have a parallel capacitor to stabilize the power supply. Usually 100 microfarad is enough, but the capacitance ultimately depends on the nature of your power supply’s stability.
Notice that RPi.GPIO (for python) is used to manage the GPIO pins on the Raspberry Pi (exclusively during the interrupt_configure.py example).
RPi.GPIO is not required for normal usage (when not using the radio’s IRQ pin).
sudo apt install python3-rpi.gpio
Installing from PyPI
We have distributed binary wheels to pypi.org for easy installation and automated dependency. These wheels specifically target any Linux platform on aarch64 architecture. If you’re using Raspberry Pi OS (32 bit), then the above command will fetch armv7l binary wheels from the piwheels index (which is already configured for use in the Raspberry Pi OS).
If you’re installing from a Linux machine that is not using an architecture aarch64 or armv7l , then pip may try to build the package from source code. In this case, you’ll likely need to install some extra build dependencies:
sudo apt install python3-dev cmake
Installing from Github
Installing from source will require CMake and CPython headers:
sudo apt install python3-dev cmake
To build this python package locally, you need to have cloned this library’s repository with its submodules.
git clone --recurse-submodules https://github.com/nRF24/pyRF24.git pyRF24 -m pip install . -v
For consecutive build attempts, it is recommended to delete any previous build artifacts before attempting to build again.
The -v is optional. Here, we use it to show that pip isn’t frozen during the build process.
Installing the package can take a long time, and you might think that pip is frozen on the step labeled “Building wheel for pyrf24 (pyproject.toml)”. Just wait for about 5 minutes (maybe longer on older/slower variants of Raspberry Pi).
Building a wheel
Building a somewhat portable binary distribution for python packages involves building a .whl file known as a wheel. This wheel can be used to install the pyrf24 package on systems using the same version of CPython, CPU architecture, and C standard lib.
- Because building wheels is not done in an isolated build environment, it is advised that some build-time dependencies be installed manually to ensure up-to-date stable releases are used. Execute the following from the root directory of this repo:
python -m pip install -r requirements.txt
python -m pip wheel -w dist .
python -m pip install dist/pyrf24-MAJOR.MINOR.PATCH-cp3X-cp3X-linux_ARCH.whl
- MAJOR.MINOR.PATCH is the current version of the pyrf24 package.
- If not building a tagged commit, then the version will describe the commit relative to the number of commits since the latest tag. For example, 0.1.1.post1.dev3 is the third commit ( dev3 ) since the first “post release” ( post1 ) after the tagged version 0.1.1 . This adhere’s to PEP440.
Using a specific RF24 driver
By default, this package is built using the RF24 driver SPIDEV. If you want to build the package using a different RF24 driver (like RPi , MRAA , wiringPi , etc), then it is necessary to use an environment variable containing additional arguments for CMake:
You can also use this environment variable to enable debug output from different layers of the RF24 stack. For a list of supported options, look at the script in this repository’s cmake/using_flags.cmake.
The following value will turn on debug output for the RF24Mesh and RF24Network classes (respectively).
Then just build and install the package from source as usual.
Differences in API
This package intentionally adheres to PEP8 standards as much as possible. This means that class members’ names use snake casing (eg. get_dynamic_payload_size() ) instead of using the C++ conventional camel casing (eg. getDynamicPayloadSize() ). However, the older python wrappers provided with each C++ library (RF24, RF24Network, & RF24Mesh) had used camel casing. So, the API provided by this package exposes both snake cased and camel cased versions of the API. The camel cased API is not documented to avoid duplicate and complicated documentation.
Some of the C++ functions that do not accept arguments are wrapped as a class property. But, the C++ style functions are still exposed. For example:
Migrating to pyrf24
If you have a project that uses code from the older individually installed wrappers, then you can use this package as a drop-in replacement. You only need to change the import statements in your project’s source. Everything from the old individual wrappers is exposed through the pyrf24 package.
Using the old individual wrappers
Python Type Hints
This package is designed to only function on Linux devices. But, it is possible to install this package on non-Linux devices to get the stub files which help auto-completion and type checking in various development environments.
Documentation
Each release has corresponding documentation hosted at http://pyrf24.rtfd.io/.
Before submitting contributions, you should make sure that any documentation changes build successfully. This can be done locally but on Linux only. The documentation of API requires this package (& all its latest changes) be installed.
This package’s documentation is built with the python package Sphinx and the sphinx-immaterial theme. It also uses the dot tool provided by the graphviz software to generate graphs.
sudo apt-get install graphviz
python -m pip install -r docs/requirements.txt
docs sphinx-build -E -W . _build
Использование SPI из Python на Raspberry Pi
Приведенная в этой статье информация получена в процессе подключения трансивера nRF24L01+ к RPi. Естественно, все это можно использовать и для работы с другими SPI устройствами.
Для включение аппаратного интерфейса SPI нужно в файле /etc/modprobe.d/raspi-blacklist.conf закомментировать строку «blacklist spi-bcm2708» и перезагрузить Pi. Для того, что бы убедиться, что SPI включен можно запустить листинг директории /dev:
Расположение сигналов SPI на разъеме GPIO:
Для проверки корректности работы SPI нужно замкнуть между собой MOSI и MISO и выполнить следующие команды:
$ wget https://raw2.github.com/torvalds/linux/master/Documentation/spi/spidev_test.c $ gcc spidev_test.c $ sudo ./a.out -D /dev/spidev0.0
Правильный результат выполнения должен быть таким:
Python модуль для работы с SPI можно взять здесь. Установка модуля выполняется следующим образом:
$ git clone https://github.com/doceme/py-spidev $ cd py-spidev/ $ sudo python setup.py install
Основные функции модуля py-spidev.
- SpiDev([bus],[client]). Return a new SPI object that is (optionally) connected to the specified SPI device interface.
- open(bus, device). Connects the object to the specified SPI device. open(X,Y) will open /dev/spidev-X.Y
- xfer2([values]). Perform SPI transaction. CS will be held active between blocks.
- close(). Disconnects the object from the interface.
Пример работы с SPI из Python:
nrf = spidev.SpiDev(0, 0) nrf.xfer2([0x1, 0x8]) nrf.close()