初始化提交
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
#
|
||||
# Simplest possible example of using RF24Network,
|
||||
#
|
||||
# RECEIVER NODE
|
||||
# Listens for messages from the transmitter and prints them out.
|
||||
#
|
||||
from __future__ import print_function
|
||||
import time
|
||||
from struct import *
|
||||
from RF24 import *
|
||||
from RF24Network import *
|
||||
|
||||
# CE Pin, CSN Pin, SPI Speed
|
||||
|
||||
# Setup for GPIO 22 CE and GPIO 25 CSN with SPI Speed @ 1Mhz
|
||||
# radio = radio(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_18, BCM2835_SPI_SPEED_1MHZ)
|
||||
|
||||
# Setup for GPIO 22 CE and CE0 CSN with SPI Speed @ 4Mhz
|
||||
# radio = RF24(RPI_V2_GPIO_P1_15, BCM2835_SPI_CS0, BCM2835_SPI_SPEED_4MHZ)
|
||||
|
||||
# Setup for GPIO 22 CE and CE1 CSN with SPI Speed @ 8Mhz
|
||||
# radio = RF24(RPI_V2_GPIO_P1_15, BCM2835_SPI_CS0, BCM2835_SPI_SPEED_8MHZ)
|
||||
|
||||
# Setup for GPIO 22 CE and CE0 CSN for RPi B+ with SPI Speed @ 8Mhz
|
||||
# radio = RF24(RPI_BPLUS_GPIO_J8_22, RPI_BPLUS_GPIO_J8_24, BCM2835_SPI_SPEED_8MHZ)
|
||||
|
||||
radio = RF24(RPI_V2_GPIO_P1_15, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ)
|
||||
network = RF24Network(radio)
|
||||
|
||||
millis = lambda: int(round(time.time() * 1000))
|
||||
octlit = lambda n: int(n, 8)
|
||||
|
||||
# Address of our node in Octal format (01, 021, etc)
|
||||
this_node = octlit("00")
|
||||
|
||||
# Address of the other node
|
||||
other_node = octlit("01")
|
||||
|
||||
radio.begin()
|
||||
time.sleep(0.1)
|
||||
network.begin(90, this_node) # channel 90
|
||||
radio.printDetails()
|
||||
packets_sent = 0
|
||||
last_sent = 0
|
||||
|
||||
while 1:
|
||||
network.update()
|
||||
while network.available():
|
||||
header, payload = network.read(8)
|
||||
print("payload length ", len(payload))
|
||||
ms, number = unpack('<LL', bytes(payload))
|
||||
print('Received payload ', number, ' at ', ms, ' from ', oct(header.from_node))
|
||||
time.sleep(1)
|
||||
@@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
#
|
||||
# Simplest possible example of using RF24Network,
|
||||
#
|
||||
# TRANSMITTER NODE
|
||||
# Sends messages from to receiver.
|
||||
#
|
||||
from __future__ import print_function
|
||||
import time
|
||||
from struct import *
|
||||
from RF24 import *
|
||||
from RF24Network import *
|
||||
|
||||
# CE Pin, CSN Pin, SPI Speed
|
||||
|
||||
# Setup for GPIO 22 CE and GPIO 25 CSN with SPI Speed @ 1Mhz
|
||||
# radio = radio(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_18, BCM2835_SPI_SPEED_1MHZ)
|
||||
|
||||
# Setup for GPIO 22 CE and CE0 CSN with SPI Speed @ 4Mhz
|
||||
# radio = RF24(RPI_V2_GPIO_P1_15, BCM2835_SPI_CS0, BCM2835_SPI_SPEED_4MHZ)
|
||||
|
||||
# Setup for GPIO 22 CE and CE1 CSN with SPI Speed @ 8Mhz
|
||||
# radio = RF24(RPI_V2_GPIO_P1_15, BCM2835_SPI_CS0, BCM2835_SPI_SPEED_8MHZ)
|
||||
|
||||
# Setup for GPIO 22 CE and CE0 CSN for RPi B+ with SPI Speed @ 8Mhz
|
||||
# radio = RF24(RPI_BPLUS_GPIO_J8_22, RPI_BPLUS_GPIO_J8_24, BCM2835_SPI_SPEED_8MHZ)
|
||||
|
||||
radio = RF24(RPI_V2_GPIO_P1_15, RPI_V2_GPIO_P1_24, BCM2835_SPI_SPEED_8MHZ)
|
||||
network = RF24Network(radio)
|
||||
|
||||
millis = lambda: int(round(time.time() * 1000)) & 0xffffffff
|
||||
octlit = lambda n: int(n, 8)
|
||||
|
||||
# Address of our node in Octal format (01,021, etc)
|
||||
this_node = octlit("01")
|
||||
|
||||
# Address of the other node
|
||||
other_node = octlit("00")
|
||||
|
||||
# ms - How long to wait before sending the next message
|
||||
interval = 2000
|
||||
|
||||
radio.begin()
|
||||
time.sleep(0.1);
|
||||
network.begin(90, this_node) # channel 90
|
||||
radio.printDetails()
|
||||
packets_sent = 0
|
||||
last_sent = 0
|
||||
|
||||
while 1:
|
||||
network.update()
|
||||
now = millis()
|
||||
# If it's time to send a message, send it!
|
||||
if (now - last_sent >= interval):
|
||||
last_sent = now
|
||||
print('Sending ..')
|
||||
payload = pack('<LL', millis(), packets_sent)
|
||||
packets_sent += 1
|
||||
ok = network.write(RF24NetworkHeader(other_node), payload)
|
||||
if ok:
|
||||
print('ok.')
|
||||
else:
|
||||
print('failed.')
|
||||
@@ -0,0 +1,133 @@
|
||||
#include "boost/python.hpp"
|
||||
#include "RF24/RF24.h"
|
||||
#include "RF24Network/RF24Network.h"
|
||||
|
||||
namespace bp = boost::python;
|
||||
|
||||
// **************** expicit wrappers *****************
|
||||
// where needed, especially where buffer is involved
|
||||
//
|
||||
void throw_ba_exception(void)
|
||||
{
|
||||
PyErr_SetString(PyExc_TypeError, "buf parameter must be bytes or bytearray");
|
||||
bp::throw_error_already_set();
|
||||
}
|
||||
|
||||
char* get_bytes_or_bytearray_str(bp::object buf)
|
||||
{
|
||||
PyObject* py_ba;
|
||||
py_ba = buf.ptr();
|
||||
if (PyByteArray_Check(py_ba)) {
|
||||
return PyByteArray_AsString(py_ba);
|
||||
} else if (PyBytes_Check(py_ba)) {
|
||||
return PyBytes_AsString(py_ba);
|
||||
} else {
|
||||
throw_ba_exception();
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int get_bytes_or_bytearray_ln(bp::object buf)
|
||||
{
|
||||
PyObject* py_ba;
|
||||
py_ba = buf.ptr();
|
||||
if (PyByteArray_Check(py_ba)) {
|
||||
return PyByteArray_Size(py_ba);
|
||||
} else if (PyBytes_Check(py_ba)) {
|
||||
return PyBytes_Size(py_ba);
|
||||
} else {
|
||||
throw_ba_exception();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
bp::tuple read_wrap(RF24Network& ref, size_t maxlen)
|
||||
{
|
||||
char* buf = new char[maxlen + 1];
|
||||
RF24NetworkHeader header;
|
||||
|
||||
uint16_t len = ref.read(header, buf, maxlen);
|
||||
bp::object
|
||||
py_ba(bp::handle<>(PyByteArray_FromStringAndSize(buf, len)));
|
||||
delete[] buf;
|
||||
|
||||
return bp::make_tuple(header, py_ba);
|
||||
}
|
||||
|
||||
bool write_wrap(RF24Network& ref, RF24NetworkHeader& header, bp::object buf)
|
||||
{
|
||||
return ref.write(header, get_bytes_or_bytearray_str(buf), get_bytes_or_bytearray_ln(buf));
|
||||
}
|
||||
|
||||
std::string toString_wrap(RF24NetworkHeader& ref)
|
||||
{
|
||||
return std::string(ref.toString());
|
||||
}
|
||||
|
||||
// **************** RF24Network exposed *****************
|
||||
//
|
||||
BOOST_PYTHON_MODULE(RF24Network){{ //::RF24Network
|
||||
typedef bp::class_< RF24Network > RF24Network_exposer_t;
|
||||
RF24Network_exposer_t RF24Network_exposer = RF24Network_exposer_t( "RF24Network", bp::init< RF24 & >(( bp::arg("_radio"))));
|
||||
bp::scope RF24Network_scope( RF24Network_exposer );
|
||||
bp::implicitly_convertible< RF24 &, RF24Network >();
|
||||
{ //::RF24Network::available
|
||||
|
||||
typedef bool ( ::RF24Network::*available_function_type )();
|
||||
|
||||
RF24Network_exposer.def("available", available_function_type(&::RF24Network::available));
|
||||
|
||||
}
|
||||
{ //::RF24Network::begin
|
||||
|
||||
typedef void ( ::RF24Network::*begin_function_type )(::uint8_t, ::uint16_t);
|
||||
|
||||
RF24Network_exposer.def("begin", begin_function_type(&::RF24Network::begin),
|
||||
(bp::arg("_channel"), bp::arg("_node_address")));
|
||||
|
||||
}
|
||||
{ //::RF24Network::parent
|
||||
|
||||
typedef ::uint16_t ( ::RF24Network::*parent_function_type )() const;
|
||||
|
||||
RF24Network_exposer.def("parent", parent_function_type(&::RF24Network::parent));
|
||||
|
||||
}
|
||||
{ //::RF24Network::read
|
||||
|
||||
typedef bp::tuple ( * read_function_type )(::RF24Network&, size_t);
|
||||
|
||||
RF24Network_exposer.def("read"
|
||||
//, read_function_type( &::RF24Network::read )
|
||||
, read_function_type(&read_wrap), (bp::arg("maxlen")));
|
||||
|
||||
}
|
||||
{ //::RF24Network::update
|
||||
|
||||
typedef void ( ::RF24Network::*update_function_type )();
|
||||
|
||||
RF24Network_exposer.def("update", update_function_type(&::RF24Network::update));
|
||||
|
||||
}
|
||||
{ //::RF24Network::write
|
||||
|
||||
typedef bool ( * write_function_type )(::RF24Network&, ::RF24NetworkHeader&, bp::object);
|
||||
|
||||
RF24Network_exposer.def("write", write_function_type(&write_wrap),
|
||||
(bp::arg("header"), bp::arg("buf")));
|
||||
|
||||
}
|
||||
RF24Network_exposer.def_readwrite( "txTimeout", &RF24Network::txTimeout );}
|
||||
|
||||
// **************** RF24NetworkHeader exposed *****************
|
||||
//
|
||||
bp::class_< RF24NetworkHeader >( "RF24NetworkHeader", bp::init< >())
|
||||
.def( bp::init< uint16_t, bp::optional< unsigned char > >(( bp::arg("_to"), bp::arg("_type")=(unsigned char)(0))))
|
||||
.def("toString", &toString_wrap )
|
||||
.def_readwrite( "from_node", &RF24NetworkHeader::from_node )
|
||||
.def_readwrite( "id", &RF24NetworkHeader::id )
|
||||
.def_readwrite( "next_id", RF24NetworkHeader::next_id )
|
||||
.def_readwrite( "reserved", &RF24NetworkHeader::reserved )
|
||||
.def_readwrite( "to_node", &RF24NetworkHeader::to_node )
|
||||
.def_readwrite( "type", &RF24NetworkHeader::type );}
|
||||
|
||||
18
arduino-cli/libraries/RF24/pyRF24/pyRF24Network/setup.py
Normal file
18
arduino-cli/libraries/RF24/pyRF24/pyRF24Network/setup.py
Normal file
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from distutils.core import setup, Extension
|
||||
import sys
|
||||
|
||||
if sys.version_info >= (3,):
|
||||
BOOST_LIB = 'boost_python3'
|
||||
else:
|
||||
BOOST_LIB = 'boost_python'
|
||||
|
||||
module_RF24Network = Extension('RF24Network',
|
||||
libraries=['rf24network', BOOST_LIB],
|
||||
sources=['pyRF24Network.cpp'])
|
||||
|
||||
setup(name='RF24Network',
|
||||
version='1.0',
|
||||
ext_modules=[module_RF24Network]
|
||||
)
|
||||
Reference in New Issue
Block a user