---------------------------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)
MISO | 12 |
MOSI | 11 |
SCK | 13 |
CE | 8 (default) |
CSN | 7 (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 <nRF24l01.h> // このlをLにせんとだめ、上のライブラリがそうなっていた
#include <MirfHardwareSpiDriver.h>
pinMode(buttonPin, INPUT_PULLUP);
Mirf.spi = &MirfHardwareSpi;
Mirf.setRADDR((byte *)"serv1");
Mirf.payload = sizeof(unsigned long);
Serial.println("Listening...");
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;
Serial.println("Reply sent.");
-----------mirf---- client.ino --------------------------------------------------------
// #include <nRF2410l.h> // see server.ino これもLに訂正すること
#include <MirfHardwareSpiDriver.h>
digitalWrite(ledPin, LOW);
Mirf.spi = &MirfHardwareSpi;
Mirf.setRADDR((byte *)"clie1");
Mirf.payload = sizeof(unsigned long);
Serial.println("Beginning ... ");
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!");
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]);
}
------------------------------------------------------------------
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 件のコメント:
コメントを投稿