#NRF24L01 issues
1 messages · Page 1 of 1 (latest)
The raspberry pi runs a python script to transmit
import RPi.GPIO as GPIO
from lib_nrf24 import NRF24
import time
import spidev
import configparser
import codecs
import platform
import struct
import logging
import pytz
from datetime import datetime, timedelta
import sacn
# Import config file
CONFIG_FILE = "config/config.ini"
config = configparser.ConfigParser()
config.read_file(codecs.open(CONFIG_FILE, "r", "utf-8"))
# Set settings based off of config file
# Grab channels to be used for the shoe RGB values, and take one as Python counts from 0, not 1.
SHOE_CH1=int(config.get("Shoes", "shoe_one_channel")) - 1
SHOE_CH2=int(config.get("Shoes", "shoe_two_channel")) - 1
# Configure nrf24 variables, a lot of these are not use and so are hashed out
RADIO_HOSTNAME = config.get("Radio", "hostname")
RADIO_PORT = config.get("Radio", "port")
RADIO_ADDRESS = config.get("Radio", "address")
# RADIO_GPIO_MOSI = config.get("Radio", "gpio_mosi")
# RADIO_GPIO_MISO = config.get("Radio", "gpio_miso")
# RADIO_GPIO_SCK = config.get("Radio", "gpio_sck")
RADIO_GPIO_CE = int(config.get("Radio", "gpio_ce"))
# RADIO_GPIO_CSN = config.get("Radio", "gpio_csn")
#timestamp 12:01
UNIVERSE_ID = int(config.get("sACN", "universe"))
TIMEZONE_CFG = config.get("Logging", "timezone")
GPIO.setmode(GPIO.BCM)
pipe = [0x31, 0x53, 0x4E, 0x53, 0x52]
radio = NRF24(GPIO, spidev.SpiDev())
radio.begin(0, 17)
radio.setPayloadSize(6)
radio.setChannel(0x76)
radio.setDataRate(NRF24.BR_250KBPS)
radio.setPALevel(NRF24.PA_MIN)
radio.openWritingPipe(pipe)
radio.printDetails()
receiver = sacn.sACNreceiver()
receiver.start()
@receiver.listen_on('universe', universe=int(UNIVERSE_ID)) # listens on universe 1
def callback(packet): # packet type: sacn.DataPacket
# clear()
rgb_data = packet.dmxData[SHOE_CH1:SHOE_CH2 + 3]
print(rgb_data, datetime.now()) # print the received DMX
# Create a string to be used in the log
rgb_str = ''
for x in range(len(rgb_data)):
rgb_str += str(rgb_data[x]) + ', '
# Assign the data in the appropriate channels to two tuples
rgb_ch1 = rgb_data[0:3]
rgb_ch2 = rgb_data[3:6]
# Make payload
payload = [
rgb_data[0],
rgb_data[1],
rgb_data[2],
rgb_data[3],
rgb_data[4],
rgb_data[5],
]
radio.write(payload)
print(f'Payload: {payload}')
start = time.time()
radio.startListening()
while not radio.available(0):
time.sleep(1/100)
if time.time() - start > 2:
print("Timed out.")
break
# optional: if you want to use multicast use this function with the universe as parameter
receiver.join_multicast(int(UNIVERSE_ID))
py code ^
This is what happens with the current script trying to broadcast to the arduino
I can't show the arduino code due to my friend losing his laptop charger
#include <SPI.h>
#include <printf.h>
#include <RF24.h>
#define SHOEPIN1 6
#define NUMPIXELS1 60
#define SHOEPIN2 5
#define NUMPIXELS2 60
// Set up two sets of NeoPixels (one for each shoe)
Adafruit_NeoPixel shoe1(NUMPIXELS1, SHOEPIN1, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel shoe2(NUMPIXELS2, SHOEPIN2, NEO_GRB + NEO_KHZ800);
// Set up the NRF24L01 radio
RF24 radio(7, 8); // CE, CSN
void setup() {
// Begin serial output for troubleshooting
Serial.begin(9600);
// Begin writing to LED shoes
shoe1.begin();
shoe2.begin();
shoe1.show();
shoe2.show();
// Test blink
chaser(shoe1, NUMPIXELS1);
chaser(shoe2, NUMPIXELS2);
// Set up the radio and start listening for data
radio.begin();
radio.setPALevel(RF24_PA_MIN);
radio.setChannel(0x76);
const uint64_t pipe = 0x31534E5352;
radio.openReadingPipe(1, pipe);
radio.powerUp();
radio.startListening();
}
void loop() {
int RGBRGB[6];
// Read data given its available
if (radio.available()) {
// Data received will be 2 channels of 8 bit RGB data
radio.read(&RGBRGB, sizeof(RGBRGB));
int srlRGB = RGBRGB;
Serial.println(RGBRGB[0]);
Serial.println(RGBRGB[1]);
Serial.println(srlRGB);apt
uint32_t CH1 = shoe1.Color(RGBRGB[0], RGBRGB[1], RGBRGB[2]);
uint32_t CH2 = shoe2.Color(RGBRGB[3], RGBRGB[4], RGBRGB[5]);
// Show the given data across the two halves of LEDs.
shoe1.fill(CH1);
shoe2.fill(CH2);
shoe1.show();
shoe2.show();
}
}
void chaser(Adafruit_NeoPixel strip, int num_leds) {
strip.setPixelColor(0, strip.Color(255, 0, 0));
strip.show();
delay(25);
for (int i = 1; i < num_leds; i++) {
strip.setPixelColor(i - 1, strip.Color(0, 0, 0));
strip.setPixelColor(i, strip.Color(255,0,0));
strip.show();
delay(25);
}
strip.setPixelColor(num_leds - 1, strip.Color(0,0,0));
strip.show();
}```
^
Tried switching to circuitpython and there is still no communication between the radios. Arduino serial monitor is only reporting "0"
#include <Adafruit_NeoPixel.h>
#include <SPI.h>
#include <printf.h>
#include <RF24.h>
#define SHOEPIN1 6
#define NUMPIXELS1 60
#define SHOEPIN2 5
#define NUMPIXELS2 60
// Set up two sets of NeoPixels (one for each shoe)
Adafruit_NeoPixel shoe1(NUMPIXELS1, SHOEPIN1, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel shoe2(NUMPIXELS2, SHOEPIN2, NEO_GRB + NEO_KHZ800);
// Set up the NRF24L01 radio
RF24 radio(7, 8); // CE, CSN
void setup() {
// Begin serial output for troubleshooting
Serial.begin(9600);
// Begin writing to LED shoes
shoe1.begin();
shoe2.begin();
shoe1.show();
shoe2.show();
// Test blink
chaser(shoe1, NUMPIXELS1);
chaser(shoe2, NUMPIXELS2);
// Set up the radio and start listening for data
radio.begin();
radio.setPALevel(RF24_PA_MIN);
radio.setChannel(69);
uint8_t pipe[6] = "1SNSR";
radio.openReadingPipe(1, pipe);
radio.powerUp();
radio.startListening();
}
void loop() {
int RGBRGB[6];
// Read data given its available
if (radio.available()) {
// Data received will be 2 channels of 8 bit RGB data
radio.read(&RGBRGB, sizeof(RGBRGB));
int srlRGB = RGBRGB;
Serial.println(RGBRGB[0]);
Serial.println(RGBRGB[1]);
uint32_t CH1 = shoe1.Color(RGBRGB[0], RGBRGB[1], RGBRGB[2]);
uint32_t CH2 = shoe2.Color(RGBRGB[3], RGBRGB[4], RGBRGB[5]);
// Show the given data across the two halves of LEDs.
shoe1.fill(CH1);
shoe2.fill(CH2);
shoe1.show();
shoe2.show();
}
}
void chaser(Adafruit_NeoPixel strip, int num_leds) {
strip.setPixelColor(0, strip.Color(255, 0, 0));
strip.show();
delay(25);
for (int i = 1; i < num_leds; i++) {
strip.setPixelColor(i - 1, strip.Color(0, 0, 0));
strip.setPixelColor(i, strip.Color(255,255,255));
strip.show();
delay(25);
}
strip.setPixelColor(num_leds - 1, strip.Color(0,0,0));
strip.show();
}
Arduino .c file ^
import board
from digitalio import DigitalInOut
import busio
import sacn
from circuitpython_nrf24l01.rf24 import RF24
import time
import struct
print("Hello blinka!")
# Try to great a Digital input
pin = DigitalInOut(board.D4)
print("Digital IO ok!")
# Try to create an I2C device
i2c = busio.I2C(board.SCL, board.SDA)
print("I2C ok!")
# Try to create an SPI device
spi = busio.SPI(board.SCLK, board.MOSI, board.MISO)
print("SPI ok!")
try:
import spidev
SPI_BUS = spidev.SpiDev()
CSN_PIN = 0
CE_PIN = DigitalInOut(board.D22)
except ImportError:
SPI_BUS = board.SPI()
CE_PIN = DigitalInOut(board.D4)
CSN_PIN = DigitalInOut(board.D5)
nrf = RF24(SPI_BUS, CSN_PIN, CE_PIN)
print('Radio initialised!')
nrf.pa_level = -12
address = b"1SNSR"
radio_number = 0
nrf.open_tx_pipe(address)
nrf.channel = 69
print('Transmission ready!')
payload = bytearray(b'\x00\x00\x00\x00\x00\x00')
def master(count=5):
nrf.listen = False
print('Beginning loop!')
while count:
buffer = struct.pack(
'<BBBBBB',
payload[0],
payload[1],
payload[2],
payload[3],
payload[4],
payload[5]
)
print('Transmitting data!')
start_timer = time.monotonic_ns()
result = nrf.send(buffer)
end_timer = time.monotonic_ns()
print('Data Transmitted!')
if not result:
print('It\'s dead, mate')
else:
print(f'It was successful, time to transmit was {(end_timer-start_timer) / 1000} us. Send {payload}')
for x in payload:
payload[x] += 50
time.sleep(1)
count -= 1
master()
print("done!")
python file ^
What board are you using as the receiver? When you say you used Circuitpython, was that on the Pi or in the receiver?
If you are running the Circuitpython on the Pi, via "Blinka" you should be using the board.SPI() not the spidev. but you pin assignments don't appear to be consistent. I may just be misunderstanding what you are doing....
I'm using an Arduino nano to receive, using circuitpython on the pi
try removing the import spidev section and set the pins correctly for the board.SPI() section
Good luck -- I have used the circuitpython library to communicate between a Pi and an microcontroller running Circuitpython.
I have not tried to talk to an Arduino board with it.
@true spruce @thorny nova I reread the examples and I see that they now do use spidev -- my mistake. I still think your pin assignments are incorrect, How do you have the nrf24l01 wired to the Pi? Your code is using pin D22 for CE -- is that correct? Your other python example appears to use pin 17 on the Pi
There have been several changes in the examples since the last time I used them (the use of spidev is new) so my experiences may nat be relevant.
I have just changed it to the port it should be in - port 20 if i'm correct. Unfortunately that has net no improvement.
@jaunty haven
What pins are connected to CE and CS on both boards. Please post the code you are now using on both boards. I’m not sure I understand how you have them wired and I’m confused about the port setting.
#include <Adafruit_NeoPixel.h>
#include <SPI.h>
#include <printf.h>
#include <RF24.h>
#define SHOEPIN1 6
#define NUMPIXELS1 60
#define SHOEPIN2 5
#define NUMPIXELS2 60
// Set up two sets of NeoPixels (one for each shoe)
Adafruit_NeoPixel shoe1(NUMPIXELS1, SHOEPIN1, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel shoe2(NUMPIXELS2, SHOEPIN2, NEO_GRB + NEO_KHZ800);
// Set up the NRF24L01 radio
RF24 radio(7, 8); // CE, CSN
void setup() {
// Begin serial output for troubleshooting
Serial.begin(9600);
// Begin writing to LED shoes
shoe1.begin();
shoe2.begin();
shoe1.show();
shoe2.show();
// Test blink
chaser(shoe1, NUMPIXELS1);
chaser(shoe2, NUMPIXELS2);
// Set up the radio and start listening for data
radio.begin();
radio.setPALevel(RF24_PA_MIN);
radio.setChannel(69);
uint8_t pipe[6] = "1SNSR";
radio.openReadingPipe(1, pipe);
radio.powerUp();
radio.startListening();
}
void loop() {
int RGBRGB[6];
// Read data given its available
if (radio.available()) {
// Data received will be 2 channels of 8 bit RGB data
radio.read(&RGBRGB, sizeof(RGBRGB));
int srlRGB = RGBRGB;
Serial.println(RGBRGB[0]);
Serial.println(RGBRGB[1]);
uint32_t CH1 = shoe1.Color(RGBRGB[0], RGBRGB[1], RGBRGB[2]);
uint32_t CH2 = shoe2.Color(RGBRGB[3], RGBRGB[4], RGBRGB[5]);
// Show the given data across the two halves of LEDs.
shoe1.fill(CH1);
shoe2.fill(CH2);
shoe1.show();
shoe2.show();
}
}
void chaser(Adafruit_NeoPixel strip, int num_leds) {
strip.setPixelColor(0, strip.Color(255, 0, 0));
strip.show();
delay(25);
for (int i = 1; i < num_leds; i++) {
strip.setPixelColor(i - 1, strip.Color(0, 0, 0));
strip.setPixelColor(i, strip.Color(255,255,255));
strip.show();
delay(25);
}
strip.setPixelColor(num_leds - 1, strip.Color(0,0,0));
strip.show();
}
arduino ^
import board
from digitalio import DigitalInOut
import busio
import sacn
from circuitpython_nrf24l01.rf24 import RF24
import time
import struct
print("Hello blinka!")
# Try to great a Digital input
pin = DigitalInOut(board.D4)
print("Digital IO ok!")
# Try to create an I2C device
i2c = busio.I2C(board.SCL, board.SDA)
print("I2C ok!")
# Try to create an SPI device
spi = busio.SPI(board.SCLK, board.MOSI, board.MISO)
print("SPI ok!")
try:
import spidev
SPI_BUS = spidev.SpiDev()
CSN_PIN = 0
CE_PIN = DigitalInOut(board.D20)
except ImportError:
SPI_BUS = board.SPI()
CE_PIN = DigitalInOut(board.D4)
CSN_PIN = DigitalInOut(board.D5)
nrf = RF24(SPI_BUS, CSN_PIN, CE_PIN)
print('Radio initialised!')
nrf.pa_level = -12
address = b"1SNSR"
radio_number = 0
nrf.open_tx_pipe(address)
nrf.channel = 69
print('Transmission ready!')
payload = bytearray(b'\x00\x00\x00\x00\x00\x00')
def master(count=5):
nrf.listen = False
print('Beginning loop!')
while count:
buffer = struct.pack(
'<BBBBBB',
payload[0],
payload[1],
payload[2],
payload[3],
payload[4],
payload[5]
)
print('Transmitting data!')
start_timer = time.monotonic_ns()
result = nrf.send(buffer)
end_timer = time.monotonic_ns()
print('Data Transmitted!')
if not result:
print('It\'s dead, mate')
else:
print(f'It was successful, time to transmit was {(end_timer-start_timer) / 1000} us. Send {payload}')
for x in payload:
payload[x] += 50
time.sleep(1)
count -= 1
master()
print("done!")
raspi ^
This is where the program hangs on raspi:
pin 22 ce
24 csn
Miscounted before
We're considering using Bluetooth to broadcast and then NRF24 to receive
I don't understand how you will do that?
I don't really know either, @thorny nova just said it may work
Obviously it's better to have this working natively
I am looking at the nrf24l01_simple_test.py from the library and I don't understand how this works on the pi ```try: # on Linux
import spidev
SPI_BUS = spidev.SpiDev() # for a faster interface on linux
CSN_PIN = 0 # use CE0 on default bus (even faster than using any pin)
CE_PIN = DigitalInOut(board.D22) # using pin gpio22 (BCM numbering)
except ImportError: # on CircuitPython only
# using board.SPI() automatically selects the MCU's
# available SPI pins, board.SCK, board.MOSI, board.MISO
SPI_BUS = board.SPI() # init spi bus object
# change these (digital output) pins accordingly
CE_PIN = DigitalInOut(board.D4)
CSN_PIN = DigitalInOut(board.D5)
initialize the nRF24L01 on the spi bus object
nrf = RF24(SPI_BUS, CSN_PIN, CE_PIN)
On Linux, csn value is a bit coded
0 = bus 0, CE0 # SPI bus 0 is enabled by default
10 = bus 1, CE0 # enable SPI bus 2 prior to running this
21 = bus 2, CE1 # enable SPI bus 1 prior to running this``` -- This is all new since the last time I tried using this library on a Raspberry Pi-- I will have to set up a system to test this on myself and see if I can get it to work. I don't think I'll be able to do this today but I am curious how this works... Do you have 2 Raspberry Pis? If so , as a first step, I suggest trying to get them to communicate using the library examples just to make sure the hardware is properly connected.
I have not got two pis, though i may be able to get access to one.
The code you are using appears to to want you use CS on CE0 (not 24) -- again, I have no idea if this works . could just try replacing ```try:
import spidev
SPI_BUS = spidev.SpiDev()
CSN_PIN = 0
CE_PIN = DigitalInOut(board.D20)
except ImportError:
SPI_BUS = board.SPI()
CE_PIN = DigitalInOut(board.D4)
CSN_PIN = DigitalInOut(board.D5)``` with ```
SPI_BUS = board.SPI()
CE_PIN = DigitalInOut(board.D22)
CSN_PIN = DigitalInOut(board.D24)``` to see if that works better
Just to clarify, do you have the spidev module installed on your Pi?
If you don't have spidev installed then your code will be trying to use D4 and D5, not D22 and D24 as desired.
Pretty sure it's installed
OK - then try the code above to avoid it ```SPI_BUS = board.SPI()
CE_PIN = DigitalInOut(board.D22)
CSN_PIN = DigitalInOut(board.D24)```
also, I don't understand why you used D20 if you have CE on D22
I have managed to find my nrf24l01 test boards for the Pi and for a CircuitPython feather board. I'll see if I can get them working with the newer version of the library. I have to go offline for several hours now and may not get back to this until tomorrow. In the meanwhile, I suggest confirming the pins you are using on your Pi and make sure the code matches. If you are using the "spidev" code then CS must be on CE0 -- with the "board.SPI()" code -- it should be on D24. I'm curious if fixing the pin assignments stops your code from "hanging".
We're currently testing with two arduinos and having issues...
One of the radios may be dead, we'll keep you updated
FYI -- I have verified that I can get the circuitpython_nrf24l01 library nrf24l01_simple_test.py file to work between a Raspberry Pi and a feather m4 express. The Pi uses the spidev module with CS on CE0 and CE on D22. The M4 uses D4 and D5 as in the example. Note, I ran into a minor syntax error with the Circuitpython library on the M4: See this issue for the workaround https://github.com/nRF24/CircuitPython_nRF24L01/issues/40
I'll see I I can get it to talk to the M4 using the Arduino Library ....
I have had partial success getting the Pi to communicate with my feather M4 express running the Arduino rf24 library. When the Pi transmits, the M4 does receive the packet, but the Pi does not receive the ACK and reports a failed transmission. When sending from the M4, the Pi is still not receiving. Still investigating...
Ah -- OK -- the Pi and the M4 running the Arduino rf24 "GettingStarted" example works fine together. On the Pi I hade to uncomment these lines ```# uncomment the following 3 lines for compatibility with TMRh20 library
nrf.allow_ask_no_ack = False
nrf.dynamic_payloads = False
nrf.payload_length = 4
@true spruce @thorny nova see notes above. You should be able to communicate between your Pi and your Arduino board if you add in the uncommented lines from the nrf24l01_simple_test.py example on the Pi.
I suggest trying the examples I used above to verify that you can get them to communicate.
@thorny nova
Got it, will try now
Okay, I've given it a go with the follow code (from both the examples)
Output from Raspberry Pi: send() failed or timed out
That's with code directly from the examples (python code taken directly from github, though I did uncomment the lines above)
@thorny nova I have the Pi as Radio 0 and the Transmiter running nrf24l01_simple_test,py with the uncommented lines (the CE is on D22 and the CS is CE0 - the defaults) The Arduino board is using Radio 1 and the Receiver running the Getting Started sketch with the correct pin settings for my board (CE=4, CS=5) On the Pi I see```Which radio is this? Enter '0' or '1'. Defaults to '0' 0
nRF24L01 Simple test
*** Enter 'R' for receiver role.
*** Enter 'T' for transmitter role.
*** Enter 'Q' to quit example.
T
Transmission successful! Time to Transmit: 1431.048 us. Sent: 0.0
Transmission successful! Time to Transmit: 1333.235 us. Sent: 0.01
Transmission successful! Time to Transmit: 1393.079 us. Sent: 0.02
Transmission successful! Time to Transmit: 1317.61 us. Sent: 0.03
Transmission successful! Time to Transmit: 1366.516 us. Sent: 0.04
*** Enter 'R' for receiver role.
*** Enter 'T' for transmitter role.
*** Enter 'Q' to quit example.
on the receiver I seeRF24/examples/GettingStarted
Which radio is this? Enter '0' or '1'. Defaults to '0'
radioNumber = 1
*** PRESS 'T' to begin transmitting to the other node
Received 4 bytes on pipe 1: 0.00
Received 4 bytes on pipe 1: 0.01
Received 4 bytes on pipe 1: 0.02
Received 4 bytes on pipe 1: 0.03
Received 4 bytes on pipe 1: 0.04
I'll try again with the Arduino as radio 1
This is with Arduino as Radio 1 and Raspberry Pi as Radio 0
Pretty sure they're all connected right
I don't know what to say -- I know "it works for me" is not very helpful. I have had to be very careful with the wiring to make sure I have solid connections.
hard to see -- Arduino on lop -- pi on bottom -- I have the nrf24l01 boards in sockets.
Yeah, I'll try that (the boards have got decoupling caps and things that I'm not using)
I do have caps installed between 3.3V and GND 100 microF and .1 microF
Mmkay, it's going to be a bit then before I do it (running out of jumper cables) will let you know how it goes
Good luck !
FYI -- I also tried it without the caps and it did not seem to make any difference. I have had issues with poor connections on the breadboard causing problems. I reinstalled the capacitors and reseated all my jumpers and it seems to be working reliably now.
better picture of the boards. Arduino (feather m4) on left , pi on right. What board are you running the Arduino code on?
Was driving, at uni for exam
I just got it to work between the pi and the Arduino
I honestly think I wasn't running the Arduino as radio 1 the whole time, I'll do a bit more testing and see how it goes with the actual production code
Yay!
Yeah, it's great that I've finally got something. Thanks for your help
You're welcome -- Good luck with your project --- and your exams!
Well, something has yet again broken it, editing the example causes it to stop working - i think it's changing the float to an 6 byte integer
Yay! Congratulations!
Yeah, we've got lighting software running over the network (LAN) to a raspberry pi which is then transmitting specific bytes to the arduino using the NRF24L01s which is then taking the 4 channels of RGB and splitting it up across the two strips
Silly bugs were fixed (and there were, as usual, many silly bugs)
It's all part of the experience!! Glad it is working!
Yeah, thanks again
@jaunty haven Hey, we're at the theatre trying to get it working now, and it's not working
@thorny nova is running example code (transmitting from the Arduino to the Pi) and the pi is receiving but the Arduino says it timed out
I reckon it's a power supply issue
If the Arduino is sending but timing out, then it sounds like it is not receiving the "ACK" from the Pi. Make sure you have the Pi properly configured - that is with the extra lines in the code uncommented.
as discussed here <#985807426613809203 message>
what are you using for power?
3.3V pin on an Arduino nano (well, Arduino nano equivalent from local electronics store)
What is the power source?
I'm not sure if powering it via the 3.3V pin is a good idea -- see the data sheet https://docs.arduino.cc/resources/datasheets/ABX00030-datasheet.pdf
The 3,3V pin is meant to be an output.. Were you powering it this way in your previous testing that was working?
also see here " You can use both the 5V pin and the 3.3V pin to provide power to modules that are connected to the Arduino. But you can't use the 3.3V pin to power your Arduino Uno/Nano." https://circuitjournal.com/arduino-power-pins
"You can use the 3.3V pin to power sensors and modules that need 3.3V power.
It can supply about 100 to 150mA of current. The 3.3V regulator is connected to the output of the 5V regulator. Drawing current from the 3.3V regulator will dissipate heat in both the 3.3V regulator and the 5V regulator. This means that if you connect a 3.3V device to the 3.3V pin, then it also limits the maximum current you can use for the 5V modules connected to the 5V pin."
@thorny nova Did I understand you correctly. Are you powering the nano via its 3.3V pin?
Yes, that is what I meant
OK -- so as noted, that may be a problem.
