Так как мы будем использовать готовую библиотеку, для подключения модуля LoRa к плате Arduino Nano, соединение двух плат будет по следующей схеме (модуль LoRa и плата Arduino Nano):
#include <OneWire.h>
#include <SPI.h>
#include <LoRa.h>
void setup(){
Serial.begin(9600);
while (!Serial);
Serial.println("LoRa Sender");
if (!LoRa.begin(433E6)) { // or 915E6, the MHz speed of yout module
Serial.println("Starting LoRa failed!");
while (1);
}
}
void loop(){
// Определяем температуру от датчика DS18b20
byte data[2]; // Место для значения температуры
ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров
ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устрйоство
ds.write(0x44); // Даем датчику DS18b20 команду измерить температуру. Само значение температуры мы еще не получаем - датчик его положит во внутреннюю память
delay(1000); // Микросхема измеряет температуру, а мы ждем.
ds.reset(); // Теперь готовимся получить значение измеренной температуры
ds.write(0xCC);
ds.write(0xBE); // Просим передать нам значение регистров со значением температуры
// Получаем и считываем ответ
data[0] = ds.read(); // Читаем младший байт значения температуры
data[1] = ds.read(); // А теперь старший
// Формируем итоговое значение:
// - сперва "склеиваем" значение,
// - затем умножаем его на коэффициент, соответсвующий разрешающей способности (для 12 бит по умолчанию - это 0,0625)
float temperature = ((data[1] << 8) | data[0]) * 0.0625;
// Выводим полученное значение температуры в монитор порта
Serial.println(temperature);
LoRa.beginPacket();
temperature=temperature*100;
LoRa.print(temperature);
LoRa.endPacket();
delay(50);
}
Программный код для приемника:
#include <SPI.h>
#include <LoRa.h>
int LED = 3;
String inString = ""; // string to hold input
int val = 0;
float temperature = 0;
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("LoRa Receiver");
if (!LoRa.begin(433E6)) { // or 915E6
Serial.println("Starting LoRa failed!");
while (1);
}
}
void loop() { // try to parse packet
int packetSize = LoRa.parsePacket();
if (packetSize) { // read packet
while (LoRa.available()) {
int inChar = LoRa.read();
inString += (char)inChar;
val = inString.toInt();
temperature = val*0.01;
}
inString = "";
LoRa.packetRssi();
}
Serial.println(temperature);
}