Wireless wind turbine sensor data coding

Good day! My first post here, and I’m hoping to have the experience of this awesome forum help me out. I’m extremely new to anything micro-controller, and have spent many of hours on the net figuring stuff out on my own. What I have are two nano clones, two NRF24L01, Sunfounder hall effect switch, and the Adafruit BME280, and a I2C LCD. So far, everything is up and working. My question is, since I’m so new to this I was hoping someone would take a look at my patched together code. Maybe it can be more efficient? or I have something that is not needed? Thanks in advance!

Tx

#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <RF24.h>
#include <SPI.h>
#include <nRF24L01.h>

int ticks = 0, Speed = 0;
int hallsensor = 2;

RF24 transmit (7,8);
byte address[5] = "00001";

Adafruit_BME280 bme;

struct package{
  float temperature = 0;
  float humidity = 0;
  float pressure = 0;
  float Speed = 0;
};

typedef struct package Package;
Package data;

void pickrpm(){
  ticks++;
}

void setup(){
  Serial.begin(9600);
  pinMode(hallsensor, INPUT);
  attachInterrupt(0, pickrpm, FALLING);
  
  bme.begin(0x77);

  transmit.begin();
  transmit.openWritingPipe(address);
  transmit.setPALevel(RF24_PA_MIN);
  transmit.setDataRate(RF24_250KBPS);
  transmit.setChannel(10);
  transmit.stopListening();
}

void loop(){
  ticks = 0;

  interrupts();
  delay (1000);

  Serial.print (Speed, DEC);    
  Serial.print (" RPM\r\n");

  Speed = (ticks * 60);
  
  data.temperature = bme.readTemperature() * 9 / 5 + 32;
  data.humidity = bme.readHumidity();
  data.pressure = bme.readPressure() / 100 / 33.86;
  data.Speed = Speed;
  transmit.write(&data,sizeof(data));

  noInterrupts();
}

Rx

#include <RF24.h>
#include <SPI.h>
#include <nRF24L01.h>
#include <LiquidCrystal_I2C.h>

RF24 receive (7,8);
byte address[5] = "00001";

LiquidCrystal_I2C lcd(0x3F,16,2);

struct package
  {
    float temperature = 0;
    float humidity = 0;
    float pressure = 0;
    float rpm = 0;
  };

typedef struct package Package;
Package data;

void setup(){
  lcd.init();
  lcd.backlight();
  lcd.print("Now receiving");
  receive.begin();
  receive.openReadingPipe(0,address);     
  receive.setPALevel(RF24_PA_MIN);       
  receive.setDataRate(RF24_250KBPS);     
  receive.setChannel(10);               
  receive.startListening();
}

void loop(){
   if (receive.available())
  {
    receive.read(&data, sizeof(data));
    lcd.init();
    lcd.backlight();
    lcd.print("T:");
    lcd.print(data.temperature,1);
    lcd.print((char)223);
    lcd.print("F ");

    lcd.print("P:");
    lcd.print(data.pressure,2);

    lcd.setCursor(0,1);
    lcd.print("H:");
    lcd.print(data.humidity,0);
    lcd.print("%");

    lcd.setCursor(7,1);
    lcd.print("Rpm:");
    lcd.print(data.rpm,0);

  }

}

TX
The ticks variable is used in an ISR so should be declared volatile.
Not sure what the interrupts(), nointerrupts() is about.
I would not use delay(), but the blink without delay method of timing.

RX
Why reinitialize the LCD in loop()? I think that clear() is faster.