本期任务
使用LoRaUNO采集SHT30温湿度数据通过是sx1278 LoRa模组发送到ESPLoRa单项网关,ESPLoRa单项网关获取到温湿度数据上传到点灯科技平台进行展示。可通过点灯科技平台进行数据下发开关指令控制电机和风扇,电机和风扇连接在ESPLoRa单项网关上,从而实现控制。
视频
框架

ESPLoRa接收端
#define BLINKER_WIFI#define TEXTE_1 "TextKey"#include <Blinker.h>#include <U8g2lib.h>#include <LoRa.h>#include <SPI.h>char auth[] = "点灯科技KEY";char ssid[] = "wifi名称";char pswd[] = "wifi密码";U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R2, /* reset=*/U8X8_PIN_NONE, /* clock=*/22, /* data=*/21); // ESP32使用SCL:D22 SDA:D21//开机画面---显示ESPLoRa图片const unsigned char bmp1[] U8X8_PROGMEM = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0xfc,0x0f,0xff,0x3f,0xff,0x3f,0xf0,0x01,0xc0,0x18,0xfe,0x7f,0x00,0x00,0x00,0x00,0xff,0x8f,0xff,0x3f,0xff,0x7f,0xf0,0x01,0x00,0x00,0xfe,0xff,0x00,0x00,0x00,0x80,0xff,0xcf,0xff,0x3f,0xff,0xff,0xf0,0x01,0x00,0x00,0xfe,0xff,0x01,0x00,0x00,0x80,0x1f,0xc0,0x0f,0x00,0x1f,0xf8,0xf0,0x01,0x00,0x00,0x3e,0xf0,0x03,0x00,0x00,0xc0,0x07,0xc0,0x03,0x00,0x1f,0xf0,0xf0,0x01,0xe0,0x0f,0x3e,0xe0,0x03,0x00,0x00,0xc0,0x07,0xc0,0x03,0x00,0x1f,0xf0,0xf1,0x01,0xf0,0x3f,0x3e,0xe0,0xe3,0x7f,0x00,0xc0,0x03,0xc0,0x03,0x00,0x1f,0xf0,0xf1,0x01,0xf8,0x3e,0x3e,0xf0,0xe1,0xff,0x00,0xc0,0xff,0xcf,0x0f,0x00,0x1f,0xf8,0xf0,0x01,0x3c,0x78,0xfe,0xff,0x01,0xf0,0x01,0xe0,0xff,0x8f,0xff,0x0f,0xff,0xff,0xf0,0x01,0x3c,0x78,0xfe,0xff,0x00,0xe0,0x01,0xc0,0xff,0x0f,0xff,0x1f,0xff,0x7f,0xf0,0x01,0x3c,0x78,0xfe,0xff,0x00,0xe0,0x01,0xc0,0x07,0x00,0x00,0x3f,0xff,0x3f,0xf0,0x01,0x3c,0xf8,0x3e,0xfc,0xe0,0xff,0x01,0xc0,0x07,0x00,0x00,0x3c,0x1f,0x00,0xf0,0x01,0x3c,0x78,0x3e,0xf0,0xf1,0xff,0x01,0xc0,0x07,0x00,0x00,0x7c,0x1f,0x00,0xf0,0x01,0x3c,0x78,0x3e,0xf0,0xf1,0xe0,0x01,0x80,0x3f,0x00,0x00,0x3f,0x1f,0x00,0xe0,0x07,0x3c,0x78,0x3e,0xe0,0xf3,0xe0,0x01,0x80,0xff,0xcf,0xff,0x3f,0x1f,0x00,0xe0,0xff,0xf9,0x3e,0x3e,0xe0,0xf3,0xe0,0x01,0x00,0xff,0xcf,0xff,0x1f,0x1f,0x00,0xc0,0xff,0xf9,0x3f,0x3e,0xe0,0xf3,0xff,0x01,0x00,0xfc,0xcf,0xff,0x0f,0x1f,0x00,0x80,0xff,0xe1,0x0f,0x3e,0xe0,0xe3,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0e,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe0,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };// 水泵开关BlinkerButton Button1("button");BlinkerButton Button2("fan");BlinkerText Text1("text1");BlinkerText Text2("text2");//传感器数据BlinkerNumber TEMP("temp");BlinkerNumber HUM("hum");BlinkerNumber RSS("rssi");//Lora初始化#define SS 5#define RST 14#define DI0 2#define BAND 433E6//传感器初始化String temperature;String humidity;String RSSI;float temp = 0, hum = 0, rssi = 0;void setup(){Serial.begin(9600);u8g2.begin();check_lora(); //检查lorashowStart(); //显示启动界面pinMode(27, OUTPUT);pinMode(17, OUTPUT);pinMode(15, OUTPUT);digitalWrite(27, LOW);Blinker.begin(auth, ssid, pswd);LoRa.setSyncWord(0xA5); //可以设置信道(范围从0到0xFF)。LoRa.setTxPower(20);Serial.println("LoRa Initializing OK!");Button1.attach(button1_callback);Button2.attach(button2_callback);Blinker.attachHeartbeat(LORAMESSAGEDATA);//注册一个心跳包BLINKER_DEBUG.stream(Serial);Blinker.attachDataStorage(dataStorage);}void loop(){Blinker.run();Lora_packet(); //接收lora数据包u8g2.setFont(u8g2_font_t0_17_tr);u8g2.clearBuffer();u8g2.drawStr(0,14,"ESPLora Getway");//LORA---具体显示内容u8g2.drawLine(1,18,126,18); //画一条平面直线u8g2.drawStr(15,34,"Temp:");u8g2.setCursor(63, 34);//u8g2.print(temp);u8g2.drawStr(15,54,"Humi:");u8g2.setCursor(63, 54);u8g2.print(hum);u8g2.sendBuffer();}void dataStorage(){Blinker.dataStorage("temp", temp);Blinker.dataStorage("hum", hum);Blinker.dataStorage("rssi", rssi);}// 水泵void button1_callback(const String & state) {BLINKER_LOG("get button state: ", state);if (state=="on") {digitalWrite(27, HIGH);digitalWrite(17, HIGH);Text1.print("已打开"); // 反馈开关状态Button1.print("on");} else if(state=="off"){digitalWrite(27, LOW);digitalWrite(17, LOW);Text1.print("已关闭"); // 反馈开关状态Button1.print("off");}}//风扇void button2_callback(const String & state) {BLINKER_LOG("get button2 state: ", state);if (state=="on") {digitalWrite(15, HIGH);Text2.print("已打开"); // 反馈开关状态Button2.print("on");} else if(state=="off"){digitalWrite(15, LOW);Text2.print("已关闭"); // 反馈开关状态Button2.print("off");}}// 心跳包函数void LORAMESSAGEDATA() {TEMP.print(temp);HUM.print(hum);RSS.print(rssi);}//显示启动动画void showStart() {u8g2.clearBuffer();u8g2.drawXBMP(0,0, 128, 64, bmp1);u8g2.sendBuffer();delay(3000);}// 尝试解析数据包void Lora_packet(){int pos1;int packetSize = LoRa.parsePacket();if (packetSize) {// 如果收到包String LoRaData = LoRa.readString();//Serial.print(LoRaData);//读取数据包while (LoRa.available()) {Serial.print((char)LoRa.read());}//读取后开始拆包pos1 = LoRaData.indexOf('/');//解析后赋值变量temperature = LoRaData.substring(0, pos1);humidity = LoRaData.substring(pos1 + 1, LoRaData.length());RSSI = LoRa.packetRssi();temp = temperature.toFloat();hum = humidity.toFloat();rssi = RSSI.toFloat();TEMP.print(temp);HUM.print(hum);RSS.print(rssi);BLINKER_LOG(temperature);BLINKER_LOG(humidity);BLINKER_LOG(RSSI);}}//检查lora连接是否成功void check_lora(){while (!Serial);Serial.println("LoRa Receiver");LoRa.setPins(SS, RST, DI0);if (!LoRa.begin(BAND)) {Serial.println("Starting LoRa failed!");while (1);}}
LoRaUNO发送端
/* oled屏幕声明屏幕分辨率修改分辨率需要到Adafruit_SSD1306.h库中修改*/#include <LoRa.h>#include <SPI.h>#include <Arduino.h>#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>#include <Adafruit_SHT31.h>//lora模块声明#define BAND 433E6//Lora信号String LoRaMessage = "";//声明发送信息#define OLED_RESET -1 // 定义显示复位引脚Adafruit_SSD1306 display(OLED_RESET); //初始化Adafruit显示库// //启动界面static const uint8_t PROGMEM Starbmp[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xC7,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x83,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF0,0x03,0xC7,0x87,0xFF,0xC0,0x00,0x03,0xE0,0x3E,0x7E,0x07,0x80,0xFE,0x00,0x01,0xF0,0x01,0x01,0x07,0xFF,0xF0,0x00,0x03,0xE0,0x3E,0x7E,0x07,0x83,0xFF,0x80,0x01,0xF0,0x00,0x00,0x07,0xFF,0xF0,0x00,0x03,0xE0,0x3E,0x7F,0x07,0x87,0xFF,0xC0,0x01,0xF0,0x00,0x00,0x07,0xFF,0xF8,0x00,0x03,0xE0,0x3E,0x7F,0x07,0x8F,0xFF,0xE0,0x01,0xF0,0x00,0x00,0x07,0xFF,0xF8,0x00,0x03,0xE0,0x3E,0x7F,0x87,0x8F,0xC7,0xF0,0x01,0xF0,0x00,0x3C,0x07,0x80,0xF9,0xFF,0x83,0xE0,0x3E,0x7F,0x87,0x9F,0x83,0xF0,0x01,0xF0,0x00,0xFF,0x07,0x80,0xF9,0xFF,0xC3,0xE0,0x3E,0x7F,0xC7,0x9F,0x01,0xF0,0x01,0xF0,0x03,0xFF,0x87,0x80,0xF9,0xFF,0xE3,0xE0,0x3E,0x7F,0xC7,0x9F,0x01,0xF0,0x01,0xF0,0x03,0xFF,0xC7,0x81,0xF9,0xFF,0xF3,0xE0,0x3E,0x7F,0xC7,0x9F,0x01,0xF8,0x01,0xF0,0x07,0xFF,0xC7,0xFF,0xF9,0xFF,0xF3,0xE0,0x3E,0x7F,0xE7,0xBF,0x01,0xF8,0x01,0xF0,0x07,0xC3,0xE7,0xFF,0xF0,0x00,0xF3,0xE0,0x3E,0x7D,0xE7,0xBF,0x01,0xF8,0x01,0xF0,0x07,0x83,0xE7,0xFF,0xE0,0x7F,0xF3,0xE0,0x3E,0x7D,0xF7,0xBF,0x01,0xF8,0x01,0xF0,0x0F,0x83,0xE7,0xFF,0xE0,0xFF,0xF3,0xE0,0x3E,0x7C,0xF7,0x9F,0x01,0xF8,0x01,0xF0,0x0F,0x83,0xE7,0xFF,0xF1,0xFF,0xF3,0xE0,0x3E,0x7C,0xFF,0x9F,0x01,0xF8,0x01,0xF0,0x0F,0x83,0xE7,0x81,0xF9,0xFF,0xF1,0xE0,0x3E,0x7C,0x7F,0x9F,0x01,0xF0,0x01,0xF8,0x07,0x83,0xE7,0x80,0xFB,0xE0,0xF1,0xF0,0x3C,0x7C,0x7F,0x9F,0x81,0xF0,0x00,0xFF,0xF7,0xC7,0xE7,0x80,0xFB,0xE0,0xF1,0xF8,0xFC,0x7C,0x3F,0x8F,0xC7,0xF0,0x00,0xFF,0xF7,0xFF,0xC7,0x80,0xFB,0xFF,0xF1,0xFF,0xFC,0x7C,0x3F,0x8F,0xFF,0xE0,0x00,0x7F,0xF3,0xFF,0xC7,0x80,0xF9,0xFF,0xF0,0xFF,0xF8,0x7C,0x1F,0x87,0xFF,0xC0,0x00,0x3F,0xF1,0xFF,0x87,0x80,0xF9,0xFF,0xF0,0x7F,0xF0,0x7C,0x1F,0x83,0xFF,0x80,0x00,0x1F,0xF0,0xFE,0x07,0x80,0xFC,0x7F,0xF0,0x1F,0xC0,0x7C,0x1F,0x80,0x7E,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC7,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x83,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x01,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF0,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xC7,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//sht30地址声明Adafruit_SHT31 sht31 = Adafruit_SHT31();unsigned long previousMillis = 0; // will store last time LED was updated// constants won't change:const long interval = 3000; // interval at which to blink (milliseconds)void setup(void){delay(500);Serial.begin(9600);//串口比特率pinMode(7, OUTPUT);Lora_begin();//输出lora模块//使用I2C地址= 0x3C//初始化SSD1306 OLED显示器display.begin(SSD1306_SWITCHCAPVCC, 0x3C);//需要提前声明地址//开启动画display.clearDisplay(); // clears the screen and bufferdisplay.drawBitmap(0,0,Starbmp,128,64,WHITE);display.display();delay(2000);//初始化BMP180传感器if (! sht31.begin(0x44)) { // Set to 0x45 for alternate i2c addrSerial.println("Couldn't find SHT31");while (1) delay(1);}display.clearDisplay();display.setTextSize(1);display.setTextColor(WHITE, BLACK);display.setCursor(35, 0);display.print("LoRa Node");display.display();display.setCursor(10, 10);display.print("Tem:");display.drawCircle(72, 10, 1, WHITE);display.setCursor(74, 10);display.print("C");display.setCursor(10, 20);display.print("Hum:");display.setCursor(74, 20);display.print("%");display.setCursor(10, 30);display.print("Message:");display.setCursor(60, 30);display.print("SHT30 ok!");display.setCursor(60, 40);display.print("LoRa ok!");}//初始化lora模块void Lora_begin(){//初始化Lorawhile (!Serial);Serial.println("LoRa Sender");//检查lora模块if (!LoRa.begin(BAND)) {Serial.println("Starting LoRa failed!");while (1);}//没有问题初始化lora发送通道LoRa.setSyncWord(0xA5);//可以设置同步字(范围从0到0xFF)。LoRa.setTxPower(20);//发射功率}void loop(){float t = sht31.readTemperature();float h = sht31.readHumidity();display.setCursor(38, 10);display.print(t);display.setCursor(38, 20);display.print(h);display.display();unsigned long currentMillis = millis();if (currentMillis - previousMillis >= interval) {// save the last time you blinked the LEDpreviousMillis = currentMillis;digitalWrite(7,!digitalRead(7));LoRaMessage = String(t) + "/" + String(h);LoRa.beginPacket();//准备发送信息LoRa.print(LoRaMessage);//发送数据LoRa.endPacket();//发送完毕Serial.print(F("LoRaMessage Sender succ"));//温度信息Serial.print(F("Temp = "));Serial.print(t);Serial.println(F(" *C"));//气压信息Serial.print(F("HUM = "));Serial.print(h);Serial.println(F("%"));Serial.println();}}
界面配置
APP下载:https://www.diandeng.tech/dev
{¨version¨¨2.0.0¨¨config¨{¨headerColor¨¨transparent¨¨headerStyle¨¨dark¨¨background¨{¨img¨¨assets/img/headerbg.jpg¨¨isFull¨«}}¨dashboard¨|{¨type¨¨num¨¨t0¨¨温度¨¨ico¨¨fad fa-tachometer-alt-fast¨¨clr¨¨#FBA613¨¨min¨É¨max¨¢1c¨uni¨¨°C¨¨bg¨É¨cols¨Í¨rows¨Ë¨key¨¨temp¨´x´É´y´Ë¨speech¨|÷¨lstyle¨Ê}{ßCßDßE¨湿度¨ßGßHßI¨#076EEF¨ßKÉßLº0ßM´%´ßOÉßPÍßQËßR¨hum¨´x´Í´y´ËßT|÷ßUÊ}{ßC¨btn¨ßG¨fal fa-power-off¨¨mode¨ÊßE¨开启水泵¨¨t1¨¨文本2¨ßOÉßPËßQËßR¨button¨´x´É´y´ÍßT|÷ßUÊßIßW}{ßC¨tex¨ßE´´ßc¨水泵状态¨¨size¨¤EßOÉßG¨fad fa-faucet-drip¨ßPÍßQËßR¨text1¨´x´Ë´y´ÍßT|÷ßUÌßIßW}{ßC¨cha¨ßOɨsty¨¨line¨ßIßJ¨sty1¨ßm¨clr1¨ßW¨sty2¨ßm¨clr2¨¨#00A90C¨ßPÑßQÌßRßS´x´É´y´ÑßT|÷ßUÉßE¨温度趋势¨¨key0¨ßS¨key1¨´´ßc´´¨key2¨´´¨t2¨´´}{ßCßfßE¨基于EspLoRa温湿度检测¨ßc´´ßh¤EßOÉßG¨far fa-house¨ßPÑßQËßR¨tex-brb¨´x´É´y´ÉßT|÷ßUÏßI¨#EA0909¨}{ßCßfßE´正常´ßc¨工作状态¨ßh¤EßOÉßG¨fad fa-siren¨ßPËßQËßR¨tex-ad0¨´x´Ï´y´ÏßT|÷ßUËßIßr}{ßCßDßE¨RSSI¨ßG¨fad fa-signal¨ßI¨#6010E4¨ßKÉßLº0ßM´dB´ßOÉßPËßQËßR¨rssi¨´x´Ï´y´ÍßT|÷ßUÉ}{ßCßYßGßZßaÊßE¨排风扇¨ßcßdßOÉßPËßQËßR¨fan¨´x´É´y´ÏßT|÷ßUÊßIßr}{ßCßfßE´´ßc¨风扇状态¨ßh¤EßOÉßG¨fad fa-fan-table¨ßPÍßQËßR¨text2¨´x´Ë´y´ÏßT|÷ßUÌßIßr}{ßCßkßOÉßlßmßIßWßnßmßo¨#595959¨ßpßmßq¨#389BEE¨ßPÑßQÌßRßX´x´É´y´¤BßT|÷ßtßXßE¨湿度曲线¨ßUÉ}{ßC¨deb¨ßaÉßOÉßPÑßQÌßR¨debug¨´x´É´y´¤E}÷¨actions¨|÷¨triggers¨|¦¨range¨¨source¨¨source_zh¨¨unit¨‡|ɺ0÷ßSßF´℃´|ɺ0÷ßXßV´%´—{ß1Lßeß1M¨开关状态¨¨state¨|´on´¨off¨÷¨state_zh¨|´开启´´关闭´÷}÷´rt´|÷}
">

