You've already forked arduino-LoRa
							
							
				mirror of
				https://github.com/sandeepmistry/arduino-LoRa.git
				synced 2025-10-30 22:05:40 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|   LoRa Duplex communication with Spreading Factor
 | |
| 
 | |
|   Sends a message every half second, and polls continually
 | |
|   for new incoming messages. Sets the LoRa radio's spreading factor.
 | |
| 
 | |
|   Spreading factor affects how far apart the radio's transmissions
 | |
|   are, across the available bandwidth. Radios with different spreading
 | |
|   factors will not receive each other's transmissions. This is one way you
 | |
|   can filter out radios you want to ignore, without making an addressing scheme.
 | |
| 
 | |
|   Spreading factor affects reliability of transmission at high rates, however,
 | |
|   so avoid a hugh spreading factor when you're sending continually.
 | |
| 
 | |
|   See the Semtech datasheet, http://www.semtech.com/images/datasheet/sx1276.pdf
 | |
|   for more on Spreading Factor.
 | |
| 
 | |
|   created 28 April 2017
 | |
|   by Tom Igoe
 | |
| */
 | |
| #include <SPI.h>              // include libraries
 | |
| #include <LoRa.h>
 | |
| 
 | |
| const int csPin = 7;          // LoRa radio chip select
 | |
| const int resetPin = 6;       // LoRa radio reset
 | |
| const int irqPin = 1;         // change for your board; must be a hardware interrupt pin
 | |
| 
 | |
| byte msgCount = 0;            // count of outgoing messages
 | |
| int interval = 2000;          // interval between sends
 | |
| long lastSendTime = 0;        // time of last packet send
 | |
| 
 | |
| void setup() {
 | |
|   Serial.begin(9600);                   // initialize serial
 | |
|   while (!Serial);
 | |
| 
 | |
|   Serial.println("LoRa Duplex - Set spreading factor");
 | |
| 
 | |
|   // override the default CS, reset, and IRQ pins (optional)
 | |
|   LoRa.setPins(csPin, resetPin, irqPin); // set CS, reset, IRQ pin
 | |
| 
 | |
|   if (!LoRa.begin(915E6)) {             // initialize ratio at 915 MHz
 | |
|     Serial.println("LoRa init failed. Check your connections.");
 | |
|     while (true);                       // if failed, do nothing
 | |
|   }
 | |
| 
 | |
|   LoRa.setSpreadingFactor(8);           // ranges from 6-12,default 7 see API docs
 | |
|   Serial.println("LoRa init succeeded.");
 | |
| }
 | |
| 
 | |
| void loop() {
 | |
|   if (millis() - lastSendTime > interval) {
 | |
|     String message = "HeLoRa World! ";   // send a message
 | |
|     message += msgCount;
 | |
|     sendMessage(message);
 | |
|     Serial.println("Sending " + message);
 | |
|     lastSendTime = millis();            // timestamp the message
 | |
|     interval = random(2000) + 1000;    // 2-3 seconds
 | |
|     msgCount++;
 | |
|   }
 | |
| 
 | |
|   // parse for a packet, and call onReceive with the result:
 | |
|   onReceive(LoRa.parsePacket());
 | |
| }
 | |
| 
 | |
| void sendMessage(String outgoing) {
 | |
|   LoRa.beginPacket();                   // start packet
 | |
|   LoRa.print(outgoing);                 // add payload
 | |
|   LoRa.endPacket();                     // finish packet and send it
 | |
|   msgCount++;                           // increment message ID
 | |
| }
 | |
| 
 | |
| void onReceive(int packetSize) {
 | |
|   if (packetSize == 0) return;          // if there's no packet, return
 | |
| 
 | |
|   // read packet header bytes:
 | |
|   String incoming = "";
 | |
| 
 | |
|   while (LoRa.available()) {
 | |
|     incoming += (char)LoRa.read();
 | |
|   }
 | |
| 
 | |
|   Serial.println("Message: " + incoming);
 | |
|   Serial.println("RSSI: " + String(LoRa.packetRssi()));
 | |
|   Serial.println("Snr: " + String(LoRa.packetSnr()));
 | |
|   Serial.println();
 | |
| }
 | |
| 
 |