Hey, I have a project and I need to be able to receive commands and send data to another 433MHz LoRa SX1278. Here is how it should go: send the sensors data, check if there are any incoming commands, and like that all the time. Is this possible? If yes, how can I do it? Note: I will use two 433MHz LoRa SX1278 and each should be able to send and receive. Thank you!
Yes it is probably possible.
Interesting project but we are not a free design or code writing service. We will be happy help out with your design and or code but first you have to make an attempt to design it, write it, post it and explain what is not working properly.
If there is hardware it is always best to post links to technical information as there are many versions
of the same or different items. Since we cannot see your project, my eyes are to weak, you need to post
using the language of electronics, an annotated schematic (best) or a clear picture of a drawing.
Pictures never hurt. Frizzing diagrams are not considered schematics here.
have a look at post need-advice-on-a-home-project which uses LoRa.h library for peer-to-peer communication of data in a structure - the receiver polls a number of transmitters for data - on being polled each transmitter sends a packet of data
which specific 433MHz LoRa SX1278 modules are you using?
what host microcontrollers are you using?
how have you connected the LoRa modules to the host microcontrollers?
what programs have you run on the devices to test them?
I am using a arduino nano for one of the 433MHz LoRa SX1278 and a mega 2560 pro mini for the other 433MHz LoRa SX1278. Here is the code for the nano:
#include <SPI.h>
#include <LoRa.h>
#define NSS_PIN 10
#define RESET_PIN 9
#define DIO0_PIN 2
unsigned long lastSendTime = 0;
const unsigned long sendInterval = 500; // Send message every 5 seconds
void setup() {
Serial.begin(9600);
while (!Serial);
// Initialize LoRa module
SPI.begin();
LoRa.setPins(NSS_PIN, RESET_PIN, DIO0_PIN);
if (!LoRa.begin(433E6)) {
Serial.println("LoRa initialization failed.");
while (1);
}
Serial.println("LoRa initialized.");
// Set LoRa receiver mode initially
LoRa.receive();
}
void sendMessage(const char* message) {
// Switch to standby mode to send
LoRa.idle();
LoRa.beginPacket();
LoRa.print(message);
LoRa.endPacket();
Serial.println("Message sent: " + String(message));
// Switch back to receive mode
LoRa.receive();
}
void loop() {
unsigned long currentTime = millis();
// Check if it's time to send a message
if (currentTime - lastSendTime >= sendInterval) {
// Send a message
sendMessage("Hello, LoRa!");
lastSendTime = currentTime;
}
// Check if a packet has been received
int packetSize = LoRa.parsePacket();
if (packetSize) {
// Read the received packet
Serial.print("Received packet: ");
while (LoRa.available()) {
Serial.print((char)LoRa.read());
}
Serial.println();
}
}
Here for the mega:
#include <SPI.h>
#include <LoRa.h>
#define NSS_PIN 53
#define RESET_PIN 48
#define DIO0_PIN 49
unsigned long lastSendTime = 0;
const unsigned long sendInterval = 500; // Send message every 5 seconds
void setup() {
Serial.begin(9600);
while (!Serial);
// Initialize LoRa module
SPI.begin();
LoRa.setPins(NSS_PIN, RESET_PIN, DIO0_PIN);
if (!LoRa.begin(433E6)) {
Serial.println("LoRa initialization failed.");
while (1);
}
Serial.println("LoRa initialized.");
// Set LoRa receiver mode initially
LoRa.receive();
}
void sendMessage(const char* message) {
// Switch to standby mode to send
LoRa.idle();
LoRa.beginPacket();
LoRa.print(message);
LoRa.endPacket();
Serial.println("Message sent: " + String(message));
// Switch back to receive mode
LoRa.receive();
}
void loop() {
unsigned long currentTime = millis();
// Check if it's time to send a message
if (currentTime - lastSendTime >= sendInterval) {
// Send a message
sendMessage("Hello, LoRa!");
lastSendTime = currentTime;
}
// Check if a packet has been received
int packetSize = LoRa.parsePacket();
if (packetSize) {
// Read the received packet
Serial.print("Received packet: ");
while (LoRa.available()) {
Serial.print((char)LoRa.read());
}
Serial.println();
}
}
what happens when you run the programs?
are the result as expected? what do you expect? if not what do you get?
upload serial monitor output (as text not a screen image)
be careful you are using host microcontrollers which use 5Volt logic
the majority of LoRa devices use 3.3V logic and can be damaged when connected directly to 5V logic devices
For the nano lora, I only get "Message sent: Hello, LoRa" Then for the mega lora, it varies. Some times I get "Message sent: Hello, LoRa" multiple times and then I get "Received packet: Hello, LoRa!, Hello, LoRa!, Hello, LoRa!, Hello, LoRa!, Hello, LoRa!, Hello, LoRa!, Hello, LoRa!, Hello, LoRa!, Hello, LoRa!, Hello, LoRa!, Hello, LoRa!, Hello, LoRa!, Hello, LoRa!...." but as it receives data, the lora does not send the message. I connected both LoRa's to 3.3V
You also need logic level conversion circuits for the SCK, MOSI, MISO, NRESET, NSS and DIO pins of the LoRa device.
The 3.3V supply pin on the Nano and Mega may not provide enough current for the LoRa device that is transmitting.
Its easier to use 3.3V logic Arduinos.
tested your code using Adafruit 32u4 LoRa modules
you appear to be transmitting packets too fast
if I change your sendInterval to 5seconds (as the comment states)
const unsigned long sendInterval = 5000; // Send message every 5 seconds
it works - both modules display
Message sent: Hello, LoRa!
Received packet: Hello, LoRa!
Message sent: Hello, LoRa!
Received packet: Hello, LoRa!
Message sent: Hello, LoRa!
Received packet: Hello, LoRa!
Message sent: Hello, LoRa!
I got: LoRa initialized.
Message sent: Hello, LoRa!
Received packet: o, lo, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!H
Message sent: Hello, LoRa!
Received packet: ello,
Received packet: LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!oRa!Hello, LoRa!Hello,
Message sent: Hello, LoRa!
Received packet: !oRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!oRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!oRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!oRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!oRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello, LoRa!Hello,
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.