Arduino Nano 33 BLE with ArduinoBLE library - Change data rate and/or TX power of Antenna

I am using Arduino Nano 33 BLE with Microchip RN4870 BLE chip. I am having the range issues with BLE protocol. Ideally, as per datasheet of RN4870 I should be getting 10 meters and Arduino Nano 33 BLE has Nordic nRF52840 BLE chip which claims to have 1 km of range. But I am getting only 1 meter of range when I connect these two devices.
I think the problem could be partly solved if both devices had external antenna. Since they don't have it, I am thinking of using data-rate 125 kbps instead of 1 Mbps. Also, is there a way to increase the Antenna TX power on Arduino? Is this possible using ArduinoBLE library?

1 meter of range is very insufficient for my project. I am hoping to get at least 8=10 meters.

I found this solution on Github. I checked on my machine I don't have mbed library anywhere. Can someone help me achieve 125 kbps of data rate on Arduino Nano 33 BLE?

Github - ArduinoCore-nRF528x-mbedos/issues

There is a big thread on changing the physical layer to 125 kbps and using the LongRange mode here
https://forum.arduino.cc/t/nano-33-ble-nrf52840-ble-long-range-pairing-mbed-ble-api-adafruit-lib/644684/10

I think the problem could be partly solved if both devices had external antenna

The Nano33 BLE has an antenna (unless the board is defective and is missing the 5 small components in green antenna) and most people can get more than a few meters range.

I think that the range issues are most likely on the Microchip RN4870 side.

Even if you set the nrf52840 to long range or the lower kbps how are you going to get the Microchip into the same mode?

I think the most promissing thing to explore is the rn4870 antenna.
http://ww1.microchip.com/downloads/en/DeviceDoc/50002489C.pdf
Some models are supposed to have an integrated antenna, and the data sheet says the ones without (rn4870u) can have one added.

Can you test both boards with your smartphone? I did some range tests and 1m is not a good sign.
As cattledog suggested please inspect your PCB antenna. I broke one component off myself by accident. Two are at the edge of the PCB.

The nRF52840 can run proprietary protocols. You would need to use the Nordic tools to make use of that. Even then 1km will come at the cost of bandwidth. It is a marketing number and was likely tested in Norway, away from people, shielded inside a Fjord. :slight_smile:
With BLE and standard PHY you will not get 1km. That would defeat the low energy purpose. But 10 meters air should not be any problem.

I think the Microchip devices are designed to work together with each other and with smartphones. I tested a RN4678 a little bit and it did not play nice together with my Arduino while it worked OK with my phone. It may be my fault.

I am going to look into changing the data rate for RN4870 as well.

I noticed when the Arduino was put inside the case, the range reduced from 15 meters to 5 meter when I tested with the smart phone. I understand one of the reason is signal interference from the reflected signal inside the case. But I want to see if I can get more range first and if that is successful then I will look for another case for Arduino.

With RN4870 and Smart phone I was getting 5-6 meters of range when I tested with my smart phone, which is okay. But with Arduino, I was getting only 1 meter.

I checked the link @cattledog shared. I haven't tried it yet. But I am guessing it is a bit complicated. And I am pretty newbie in Arduino and micro-controller things. With that example, will I be able to find peripherals nearby starting with some name and get connected to it?

Also, it doesn't have void setup() and void loop() functions which are must for Arduino. How do I program Arduino with only main.c() program?