שיעור 14 - תקשורת רדיו

ברוכים הבאים לשיעור!

השיעור מורכב מסדרה של סרטונים, צפו בהם לפי הסדר.

תהנו 🙂

חלק 1: הקדמה

חלק 2: קבלת הודעות בשלט

העתיקו את הקוד מקופסה זו:

/*
* Arduino Wireless Communication Tutorial
*       Example 1 - Receiver Code
*                
* by Dejan Nedelkovski, www.HowToMechatronics.com
* 
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(4, 8); // CE, CSN
const byte address[6] = "00001";
void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
  Serial.println("Listening");
}
void loop() {
  if (radio.available()) {
    char text[32] = "";
    radio.read(&text, sizeof(text));
    Serial.println(text);
  }
} 

חלק 3: שליחת הודעות מפליירו

העתיקו את הקוד מקופסה זו:

#include <SPI.h>
#include "RF24.h"

extern RF24 radio;
RF24 radio(26,25);
byte address[6] = "00001";
char text[17];

void setup() {
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
}

void loop() {
  char text[] = "Hello";
  radio.write(&text, sizeof(text));
  delay(1000);
} 

חלק 4: הדפסת הודעות על המסך

הקוד הסופי בסרטון:

/*
* Arduino Wireless Communication Tutorial
*       Example 1 - Receiver Code
*                
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(4, 8); // CE, CSN
const byte address[6] = "00001";

//LCD
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);  // If 0x27 is not working use 0x3F



void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
  Serial.println("Listening");
  lcd.init();
  // Print a message to the LCD.
  lcd.backlight();

}
void loop() {
  if (radio.available()) {
    char text[32] = "";
    radio.read(&text, sizeof(text));
    Serial.println(text);
    lcd.setCursor(1,0);
    lcd.print(text);
  }
}
 

חלק 5: הוספת הודעות

קוד שליחת הודעה בודדת:

#include <SPI.h>
#include "RF24.h"

extern RF24 radio;
RF24 radio(26,25);
byte address[6] = "00001";
char text[17];

void setup() {
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
}

void loop() {
  char text[] = "Alex";
  radio.write(&text, sizeof(text));
  delay(1000);
  
  //Send another message
  
  
  //Send another message
  
  
} 

חלק 6: שליחת הודעות מהשלט לפליירו

קוד שליחת הודעות על ידי ארדואינו:

/*
* Arduino Wireless Communication Tutorial
*       Example 1 - Receiver Code
*                
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(4, 8); // CE, CSN
const byte address[6] = "00001";

//LCD
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,20,4);  // If 0x27 is not working use 0x3F



void setup() {
  Serial.begin(9600);
  radio.begin();
  //radio.openReadingPipe(0, address);
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
  Serial.println("Sending");

}
void loop() {
  /*
  if (radio.available()) {
    char text[32] = "";
    radio.read(&text, sizeof(text));
    Serial.println(text);
    lcd.setCursor(1,0);
    lcd.print("Alex");
  }
  */
  char text[] = "1";
  radio.write(&text, sizeof(text));
  delay(1000);
  // Send another message
  char text2[] = "2";
  radio.write(&text2, sizeof(text2));
  delay(1000);
  // Send another message
  char text3[] = "3";
  radio.write(&text3, sizeof(text3));
  delay(1000);
} 

קוד קבלת הודעות על ידי ESP32:

#include <SPI.h>
#include "RF24.h"

extern RF24 radio;
RF24 radio(26,25);
byte address[6] = "00001";
char text[17];

void setup() {
  radio.begin();
  //radio.openWritingPipe(address);
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
  Serial.begin(9600);
}

void loop() {
  if (radio.available())
  {
      char text[32];
      radio.read(&text, sizeof(text));
      Serial.println(text);
  }
 
} 

חלק 7: בונוס

פתרון המשימה:

//FastLED
#include <FastLED.h>
#define NUM_LEDS 16
#define DATA_PIN 33
CRGB leds[NUM_LEDS];

#include <SPI.h>
#include "RF24.h"

extern RF24 radio;
RF24 radio(26,25);
byte address[6] = "00001";
char text[17];

void setup() {
  //FastLED setup
  FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
  FastLED.setBrightness(50);
 
  radio.begin();
  //radio.openWritingPipe(address);
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
  Serial.begin(9600);
}

void loop() {
  if (radio.available())
  {
      radio.read(&text, sizeof(text));
      Serial.println(text);
      if (text[0]=='1')
      {
        // paint red
        for (int i=0 ; i<16 ; i++ )
          leds[i] = CRGB::Red;
        FastLED.show();
      }
      if (text[0]=='2')
      {
        // paint blue
        for (int i=0 ; i<16 ; i++ )
          leds[i] = CRGB::Blue;
        FastLED.show();
      }    
      if (text[0]=='3')
      {
        // paint green
        for (int i=0 ; i<16 ; i++ )
          leds[i] = CRGB::Green;        
      }      
  }
 
}