In the figure below I show you the pieces that I print on the 3D printer. These pieces are used to fix the Arduino MKR WAN 1300 board and the LCD display.
![](https://cdn.hackaday.io/images/6822821658976236713.jpg)
In the image below you can see the assembly of the Arduino MKR WAN 1300 board.
![](https://cdn.hackaday.io/images/6449191658976261186.jpg)
And now in the image below you can see the assembly of the 20x4 LCD display.
![](https://cdn.hackaday.io/images/3911571658976287832.jpg)
After fixing the Arduino MKR WAN 1300 board, the 20x4 display, the antenna and the battery; the receiving device looks like the one shown in the figure below.
![](https://cdn.hackaday.io/images/1985291658976313357.jpg)
As a power supply I used Anker PowerCore II 6700. In addition to providing more accurate voltages, this device gave me better results since it has a power button, a voltage regulator and detects when a device is connected or not.
![](https://cdn.hackaday.io/images/2552091658976340300.jpg)
I also recommend using a heavy-duty USB to make a good connection
![](https://cdn.hackaday.io/images/6717411658976364203.jpg)
SCHEMATIC DIAGRAM
After adding the 16x2 display, the wiring diagram of the receiver is as shown below.
![](https://cdn.hackaday.io/images/1365901658976386868.png)
CODE
After several attempts to find a library that works well with the Arduino MKR WAN 1300 board, I finally found this one that worked very well for me: LiquidCrystal_I2C
After making these changes, the receiver code is shown below:
LoRaReceiver_v2.ino
// AUTHOR: GUILLERMO PEREZ GUILLEN
#include <SPI.h>
#include <LoRa.h>
#include <Wire.h> // Library for I2C communication
#include <LiquidCrystal_I2C.h> // Library for LCD
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4); // Change to (0x27,16,2) for 16x2 LCD.
char cadena[30]; //We create an array that will store the characters that we will write in the PC console. We assign a limit of characters, in this case 30
byte posicion=0; //Variable to change the position of the characters in the array
int valor; //Integer Variable
void setup() {
lcd.init(); // Initiate the LCD:
lcd.backlight();
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
Serial.println("LoRa Receiver");
if (!LoRa.begin(915E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
}
void loop() {
// try to parse packet
int packetSize = LoRa.parsePacket();
if (packetSize) {
memset(cadena, 0,sizeof(cadena));//memset deletes the contents of the array "cadena" from position 0 to the end sizeof
// received a packet
Serial.print("Received packet... ");
// read packet
while (LoRa.available()) {
char dedos= (char)LoRa.read();
Serial.print(dedos);
cadena[posicion]=dedos;//Read a character from the string "cadena" from "posicion", then read the next character with "posicion++"
posicion++;
}
valor=atoi(cadena);//Convert the string to integers
Serial.println();
Serial.print(" temp=");
Serial.print(valor);
posicion=0;
// print RSSI of packet
int dedal = LoRa.packetRssi();
Serial.print(" with RSSI: ");
Serial.println(dedal);
lcd.clear();
lcd.setCursor(0, 0); // Set the cursor on the first column and first row.
lcd.print("Temp:");
lcd.setCursor(6, 0);
lcd.print(valor);
lcd.setCursor(0, 2); // Set the cursor on the first column and second row.
lcd.print("RSSI:");
lcd.setCursor(5, 2); //Set the cursor on the fifth column and the second row (counting starts at 0!).
lcd.print(dedal);
digitalWrite(LED_BUILTIN, HIGH);
delay(2000);
digitalWrite(LED_BUILTIN, LOW);
}
}
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.