2023年7月5日水曜日

NRF24L01(arduino,pico/w)

 ---------------------------nrf on arduino---------------------------

無線アダプタはVCCをアルディーノの5Vをもちいる 出力MAXでつかうこと 速度も変換する命令があるげ

ちなみに通信速度は、radio.setDataRate(RF24_250KBPS); or radio.setDataRate(2);
RF24_1MBPS or 0 (デフォルト)RF24_2MBPS or 1  のようです。  吉野さんより
https://burariweb.info/electronic-work/arduino-wireless-communication-module-nrf24l01.html#nRF24L01-2 で出力MAXで成功 atmega168とnanoの組み合わせをやるには上記ライブラリがインストできんかった (arduinoIDEのためかもしれんが、詳細は不要) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 以下はMIRF仕様
nRF24L01モジュールで無線通信 | なんでも独り言 (ehbtj.com)
MISO12
MOSI11
SCK13
CE8 (default)
CSN7 (default)
GitHub - aaronds/arduino-nrf24l01: An Arduino port of the http://www.tinkerer.eu/AVRLib/nRF24L01 library. この中のMirfディレクトリをzipしてIDEにライブラリ導入 ---------------mirf-- server.ino --------------------- #include <SPI.h>
#include <Mirf.h>
#include <nRF24l01.h> // このlをLにせんとだめ、上のライブラリがそうなっていた
#include <MirfHardwareSpiDriver.h>
const int buttonPin = 2;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"serv1");
Mirf.payload = sizeof(unsigned long);
Mirf.config();
Serial.println("Listening...");
}
void loop() {
const byte buttonOpen = 10;
const byte buttonClose = 20;
byte sendData[Mirf.payload]; // 最大32bit, byteの行列なので要素数は4
if (!Mirf.isSending() && Mirf.dataReady()) {
Serial.println("Got packet");
Mirf.getData(sendData); // 適当な信号を受信
Mirf.setTADDR((byte *)"clie1");
int val = digitalRead(buttonPin);
if (val == HIGH) { // スイッチを押さなければ"10"を送信
sendData[0] = buttonOpen;
} else { // スイッチを押せば"20"を送信
sendData[0] = buttonClose;
}
Mirf.send(sendData);
Serial.println("Reply sent.");
}
}

-----------mirf---- client.ino --------------------------------------------------------

#include <SPI.h>
#include <Mirf.h>
// #include <nRF2410l.h> // see server.ino これもLに訂正すること
#include <MirfHardwareSpiDriver.h>
const int ledPin = 2;
void setup(){
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.begin(9600);
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"clie1");
Mirf.payload = sizeof(unsigned long);
Mirf.config();
Serial.println("Beginning ... ");
}
void loop(){
const byte buttonOpen = 10;
const byte buttonClose = 20;
unsigned long time = millis();
byte recvData[Mirf.payload]; // 最大32bit, byteの行列なので要素数は4
Mirf.setTADDR((byte *)"serv1");
Mirf.send(recvData); // 適当な信号を送信
while(Mirf.isSending()) {
}
while (!Mirf.dataReady()) {
if ((millis() - time) > 1000 ) {
Serial.println("Timeout on response from server!");
return;
}
}
Mirf.getData(recvData);
if (recvData[0] == buttonOpen) { // スイッチを押していない情報であれば
digitalWrite(ledPin, LOW);
} else { // スイッチを押した情報であれば
digitalWrite(ledPin, HIGH);
}
Serial.print("recvData: ");
for (int i = 0;i < Mirf.payload;i++) {
Serial.print(recvData[i]);
Serial.print(" ");
}
Serial.println();
delay(100);
} ------------------------------------------------------------------

Raspberry Pi Pico with nRF24L01 using MicroPython - Beky Electronics :: good code

How to easily connect a NRF24L01+ transceiver to your Raspberry Pi Pico - 

micropython/drivers/nrf24l01/nrf24l01.py at v1.19 · micropython/micropython · GitHub

micropython/drivers/nrf24l01/nrf24l01test.py at v1.19 · micropython/micropython · GitHub

(なお、rp2用のConfigを追加する必要があった pico/picow 共通)

を参考にしたがspi(0)の設定がうまくいかんかった 手持の

picoでmachine.SPI(0)をしらべ nrf24l01test.pyのplatform設定で

spi:0,miso:16,mosi:19,sck:18,scn:14,ce:17 

nrf24l01.pyのSPEEDを250Kにあわせてmaster(),slave()のピンポンに成功した!

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

先日おくったファイルでnrf24l01test.pyのusys.platform設定のrpのところがspi(0)の設定になっているのですが、どうもうまくいかず手持のラズピコのreplでimport machime\n machine.SPI(0)とするとmiso:16,mosi:19,sck:18となっておりusys.platformをそうすると成功しました!esp32をmicropython化して、nrf2401test.pyの設定どうりにやってだめなら、上記の方法でspi(0)をしらべ設定しなおせばいいと思います 吉野さんへ

その後picow-brokenでは上記のSPI情報がでるが、うまくいかんかった

picow-normalではSPI情報がちがっており、そのとうりにtest.pyを変更して成功した!

 

0 件のコメント:

コメントを投稿