// pinmapping for TTGO-Lora-v21
#include <LoRa.h>
#include <SPI.h>
#include <WiFi.h>
#include <Wire.h>
#include <stdio.h>
#include “SSD1306.h”
#include “rom/ets_sys.h”
#include “soc/rtc_cntl_reg.h”
#include “soc/sens_reg.h”
#define SCK 5 // GPIO5 – SX1278’s SCK
#define MISO 19 // GPIO19 – SX1278’s MISnO
#define MOSI 27 // GPIO27 – SX1278’s MOSI
#define SS 18 // GPIO18 – SX1278’s CS
//#define RST 14 // GPIO14 – SX1278’s RESET
#define RST 23 // GPIO14 – SX1278’s RESET
#define DI0 26 // GPIO26 – SX1278’s IRQ(Interrupt Request)
#define BAND 868E6
unsigned int counter = 0;
//SSD1306 display(0x3c, 4, 15);
SSD1306 display(0x3c, 21, 22);
String rssi = “RSSI --”;
String packSize = “–”;
String packet;
float intTemperatureRead() {
SET_PERI_REG_BITS(SENS_SAR_MEAS_WAIT2_REG, SENS_FORCE_XPD_SAR, 3,
SENS_FORCE_XPD_SAR_S);
SET_PERI_REG_BITS(SENS_SAR_TSENS_CTRL_REG, SENS_TSENS_CLK_DIV, 10,
SENS_TSENS_CLK_DIV_S);
CLEAR_PERI_REG_MASK(SENS_SAR_TSENS_CTRL_REG, SENS_TSENS_POWER_UP);
CLEAR_PERI_REG_MASK(SENS_SAR_TSENS_CTRL_REG, SENS_TSENS_DUMP_OUT);
SET_PERI_REG_MASK(SENS_SAR_TSENS_CTRL_REG, SENS_TSENS_POWER_UP_FORCE);
SET_PERI_REG_MASK(SENS_SAR_TSENS_CTRL_REG, SENS_TSENS_POWER_UP);
ets_delay_us(100);
SET_PERI_REG_MASK(SENS_SAR_TSENS_CTRL_REG, SENS_TSENS_DUMP_OUT);
ets_delay_us(5);
float temp_f = (float)GET_PERI_REG_BITS2(SENS_SAR_SLAVE_ADDR3_REG,
SENS_TSENS_OUT, SENS_TSENS_OUT_S);
float temp_c = (temp_f - 32) / 1.8;
return temp_c;
}
void setup() {
// pinMode(16, OUTPUT);
// pinMode(2, OUTPUT);
pinMode(25, OUTPUT);
// digitalWrite(16, LOW); // set GPIO16 low to reset OLED
// delay(50);
// digitalWrite(16, HIGH); // while OLED is running, must set GPIO16 in high
Serial.begin(115200);
while (!Serial)
;
Serial.println();
Serial.println(“LoRa Sender Test”);
SPI.begin(SCK, MISO, MOSI, SS);
LoRa.setPins(SS, RST, DI0);
if (!LoRa.begin(BAND)) {
Serial.println(“Starting LoRa failed!”);
while (1)
;
}
Serial.println(“init ok”);
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_10);
delay(1500);
}
void loop() {
display.clear();
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_10);
display.drawString(0, 0, "Sending packet: ");
display.drawString(90, 0, String(counter));
String NodeId = WiFi.macAddress();
float temp = intTemperatureRead();
// send packet
LoRa.beginPacket();
// Build json string to send
String msg = “{"model":"ESP32TEMP","id":"” + NodeId + “","tempc":” + String(temp) + “}”;
// Send json string
LoRa.print(msg);
LoRa.endPacket();
Serial.println(String(msg));
display.drawString(0, 15, String(NodeId));
display.drawString(0, 30, “tempc: " + String(temp) + " C”);
display.display();
counter++;
// digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level)
digitalWrite(25, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
// digitalWrite(2, LOW); // turn the LED off by making the voltage LOW
digitalWrite(25, LOW); // turn the LED off by making the voltage LOW
delay(60000); // wait for 60 seconds
}