#include #include #include #include #include #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 DI0 26 // GPIO26 -- SX1278's IRQ(Interrupt Request) #define BAND 915E6 unsigned int counter = 0; SSD1306 display(0x3c, 4, 15); 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); 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(msg); display.drawString(0, 15, String(NodeId)); display.drawString(0, 30, "tempc: " + String(temp) + " C"); display.display(); delay(5000); // Send makerfab soil sensor example packet LoRa.beginPacket(); String msg2 = "ID010770 REPLY : SOIL INEDX:5862 H:100.00 T:1.77 ADC:624 BAT:857"; LoRa.print(msg2); LoRa.endPacket(); Serial.println(msg2); counter++; digitalWrite(2, 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 delay(60000); // wait for 60 seconds }