ESP32 и nrf24l01
- Войдите на сайт для отправки комментариев
Пнд, 09/07/2018 - 15:25
Недавно в моём глупом доме на esp8266 накрылась эта самая esp8266, решил, чтож, к лучшему, пора на ESP32 переходить, заодно отказавшись от 2х расширителей PCF, и упростив код. Но оказалось не всё так радужно, NRF не хочет принимать ничего по радиоканалу, вернее из примеров RF24 работает сканер, выдаёт вполне реалистичную картинку, но вот от устройств принимать ничего не желает. Расключение проверил, да и не работал бы сканер иначе.
Что можно ещё попробовать?
Приёмник (Плата DOIT ESP32 Devkit V1, NRF24L01 PA+LNA - ce-17, cs-5, sck-18, miso-19, mosi-23)
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" char msg[6]; RF24 radio(17, 5); const uint64_t pipe = 0xE8E8F0F0E1LL; void setup(void){ Serial.begin(115200); radio.begin(); radio.setChannel(2); radio.setPayloadSize(7); radio.setDataRate(RF24_250KBPS); radio.openReadingPipe(1,pipe); radio.startListening(); } void loop(void){ if (radio.available()){ radio.read(msg, 6); Serial.println(msg); delay(10); } }
Передатчик (Arduino pro mini)
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" char msg[6] = "hello"; RF24 radio(9,10); const uint64_t pipe = 0xE8E8F0F0E1LL; void setup(void) { Serial.begin(115200); radio.begin(); radio.setChannel(2); radio.setPayloadSize(7); radio.setDataRate(RF24_250KBPS); radio.openWritingPipe(pipe); } void loop(void) { Serial.println("send ..."); radio.write(msg, 6); delay(3000); }
строка 20 приемника ?
а зачем PayloadSize(7). если длина данных 6 ?
В приемнике 4 строка для меги. RF24 radio(9,53);
В передатчике , укажите что это передатчик. radio.stopListening(); после 14 строки
Valera19701 - что строка 20 приёмника? просто выводит в порт, что пришло.
b707 - Да это пример из инета, загрузил его в железяки, для проверки. У меня просто код переплетён сильно, но при этом он перестал работать при замене 8266 на esp32. Ну оттого, что payload больше, вроде казусов не должно быть, у меня на базе приёмник всегда payload 16, при этом устройства передают по разному, кто 4, кто 8, всё работало, я просто считывал те значения, которые отдаются конкретным прибором.
IVAN222 - в смысле пятая? почему для меги? У меня реально СЕ и CS на этих пинах, причём на ардуине и на 8266 CS надо было обозначать, а в ESP32 он и так на D5, как и sck, miso и mosi. Вот тут у меня думка, что тут что-то не так, но по схеме, именно на этих местах вышеозначенные пины. Да, остановить прослушку на передатчике наверное надо, хотя я ему тубу для прослушки не объявлял, но завтра попробую, хотя сомневаюсь. Ещё качал RF24 переделанный, у которого можно назначать все пины, улучшений не наблюдалось, хотя примеры именно из той статьи, ща попробую найти.
Добрый вечер!
Для меня эта тема очень актуальна т. к. сейчас занимаюсь похожим проектом.
На данный момент при попытке компилирования кода - выдает ошибку.
В чем может быть проблемма?
Что можно ещё попробовать?
- Сменить канал nRF
- Если ESP32 работает в режиме SoftAP, задать ей номер канала в верхней части диапазона, а nRF оставить в нижней
- Отпилить кусок печатной платы под антенной ESP32. Антенна должна висеть в воздухе. На совместимость это не повлияет, зато ток потребления при передаче уменьшится раза в полтора.
Насчёт этого можно подумать, когда это заработает, сейчас эти 2 устройства на расстоянии 50 см.
До смены 8266 на esp32, NRF и ESP располагались на одной плате, антенны их рядом, WIFI работал на 9 канале, ESP на 42 (DEC), всё это из прихожей с бетонными стенами перекрывало всю квартиру (перпендикулярно этаж дома). Т.е. с физикой радиоволн тут проблем нет, проблема с библиотекой ESP и ESP32, IMHO.
Просто интересно, у кого-то заработало?, хотя понимаю, что это нужно очень мало кому. Если не получится, скорее всего на ESP8266 сделаю конвертер NRF->MQTT, а ESP23 уже по MQTT будет ловить в другой части квартиры.
vi.markevych - была такая беда, удалил старую бибилиотеку, установил из ардуино через менеджер библиотек последнюю версию RF24.
Спасибо. сегодня попробую.
Вот, отсюда я взял примеры (в первом сообщении) и библиотеку SoftSPI, но с ней у меня так же не работает.
PS Всё, заработало. Оказался неисправен NRF-модуль с антенной, хотя сканер на нём работал, и отображал он тоже, что и обычная nrfка без антенны, только показания больше были, ну оно и понятно, и использовал я его на приём, так что мне непонятно почему он не работал, заменил на обычную - всё пошло.
На модули с усилителем многие жалуются, что он сам себя глушит.
Ну к стати да, на сканере, где помеха есть - всегда FF, т.е. перегруз (ну наверное это WiFi был), на обычной, со встроенной антенной - это именно помеха в этом месте, с гуляющими цифрами. Видимо такой модуль надо именно на большие расстояния использовать, выбирая пустую частоту.
ЗЫ Забыл написать в 1 сообщении, что модуль NRF я тоже сменил, но исправить его нельзя, а потом и забыл.
Добрый день. Использую почти такую же связку.
Приёмник (Плата DOIT ESP32 Devkit V1, NRF24L01 - ce-17, cs-5, sck-18, miso-19, mosi-23)
Передатчик (ARDUINO NANO, NRF24L01).
Код приёмника
Код передатчика
В порте приёмника вижу следующее
Если пересылать одиночный int, массивы float, byte, char всё нормально.
Если пересылать с (ARDUINO NANO, NRF24L01) на (ARDUINO NANO, NRF24L01) тоже всё нормально.
Буду использовать float, но хотелось int, с учетом ограничения в 32 байта.
Может кто сталкивался с подобным?
Или я где то не прав.
Вы учитываете, что на nano тип int имеет длину 2 байта, а на ESP32 - 4 байта?
Замените int на long или на short, тогда на любой архитектуре длина будет одна и та же.