Created
January 24, 2018 08:25
-
-
Save monteslu/861abf12e2c5b87cd17eabcaa207b98b to your computer and use it in GitHub Desktop.
lora gateway esp32
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Adafruit_NeoPixel.h> | |
#include <SPI.h> | |
#include <LoRa.h> | |
#include<Arduino.h> | |
// #include <Wire.h> // Only needed for Arduino 1.6.5 and earlier | |
#include "SSD1306.h" // alias for `#include "SSD1306Wire.h"` | |
#define AUTO_PIXEL_PIN 16 | |
#define CONTROL_PIXEL_PIN 16 | |
Adafruit_NeoPixel autostrip = Adafruit_NeoPixel(4, AUTO_PIXEL_PIN, NEO_GRB + NEO_KHZ800); | |
Adafruit_NeoPixel controlstrip = Adafruit_NeoPixel(4, CONTROL_PIXEL_PIN, NEO_GRB + NEO_KHZ800); | |
#include <BLEDevice.h> | |
#include <BLEUtils.h> | |
#include <BLEServer.h> | |
// See the following for generating UUIDs: | |
// https://www.uuidgenerator.net/ | |
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" | |
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8" | |
#define PIXEL_SERVICE_UUID "bada5566-e91f-1337-a49b-8675309fb069" | |
#define PIXEL_RGB_CHAR_UUID "e92f" | |
char macString[] = "abcd"; | |
char sep[]= "|"; | |
// GPIO5 -- SX1278's SCK | |
// GPIO19 -- SX1278's MISO | |
// GPIO27 -- SX1278's MOSI | |
// GPIO18 -- SX1278's CS | |
// GPIO14 -- SX1278's RESET | |
// GPIO26 -- SX1278's IRQ(Interrupt Request) | |
#define SS 18 | |
#define RST 14 | |
#define DI0 26 | |
#define BAND 433E6 //915E6 -- 这里的模式选择中,检查一下是否可在中国实用915这个频段 | |
SSD1306 display(0x3c, 4, 15); | |
byte mac[6]; | |
int counter = 0; | |
BLECharacteristic *pSerialChar; | |
class MyCallbacks: public BLECharacteristicCallbacks { | |
void onWrite(BLECharacteristic *pCharacteristic) { | |
std::string value = pCharacteristic->getValue(); | |
char val[value.length()]; | |
if (value.length() > 0) { | |
Serial.println("*********"); | |
Serial.print("New value: "); | |
for (int i = 0; i < value.length(); i++) { | |
Serial.print(value[i]); | |
val[i] = value[i]; | |
} | |
Serial.println(); | |
Serial.println("*********"); | |
// send packet | |
LoRa.beginPacket(); | |
char outputStr[value.length() + 5]; | |
sprintf(outputStr,"%s|%i",macString,val); | |
LoRa.print(outputStr); | |
LoRa.endPacket(); | |
} | |
} | |
}; | |
class RBGPixelCallbacks: public BLECharacteristicCallbacks { | |
void onWrite(BLECharacteristic *pCharacteristic) { | |
std::string value = pCharacteristic->getValue(); | |
char val[value.length()]; | |
if (value.length() > 0) { | |
Serial.println("*********"); | |
Serial.print("New value: "); | |
for (int i = 0; i < value.length(); i++) { | |
Serial.print(value[i]); | |
val[i] = value[i]; | |
} | |
Serial.println(); | |
Serial.println("*********"); | |
// send packet | |
LoRa.beginPacket(); | |
char outputStr[value.length() + 5]; | |
sprintf(outputStr,"%s|%i",macString,val); | |
LoRa.print(outputStr); | |
LoRa.endPacket(); | |
} | |
} | |
}; | |
void writeOled(String message) { | |
display.clear(); | |
display.setTextAlignment(TEXT_ALIGN_LEFT); | |
display.setFont(ArialMT_Plain_10); | |
// TODO check if still drawing my mac | |
display.drawStringMaxWidth(0, 0, 128, "me: " + String(macString)); | |
display.drawStringMaxWidth(0, 11, 128, message); | |
display.display(); | |
} | |
void setup() { | |
pinMode(25, OUTPUT); //Send success, LED will bright 1 second | |
uint8_t chipid[6]; | |
esp_efuse_read_mac(chipid); | |
sprintf(macString, "%02x%02x", chipid[4], chipid[5]); | |
Serial.printf("%02x:%02x:%02x:%02x:%02x:%02x\n",chipid[0], chipid[1], chipid[2], chipid[3], chipid[4], chipid[5]); | |
Serial.begin(115200); | |
while (!Serial); //If just the the basic function, must connect to a computer | |
BLEDevice::init(macString); | |
BLEServer *pServer = BLEDevice::createServer(); | |
BLEService *pService = pServer->createService(SERVICE_UUID); | |
pSerialChar = pService->createCharacteristic( | |
CHARACTERISTIC_UUID, | |
BLECharacteristic::PROPERTY_READ | | |
BLECharacteristic::PROPERTY_WRITE | | |
BLECharacteristic::PROPERTY_NOTIFY | |
); | |
pSerialChar->setCallbacks(new MyCallbacks()); | |
pSerialChar->setValue("Hello World"); | |
// Start the service | |
pServer->getAdvertising()->addServiceUUID(SERVICE_UUID); | |
pService->start(); | |
// Start advertising | |
pServer->getAdvertising()->start(); | |
SPI.begin(5, 19, 27, 18); | |
LoRa.setPins(SS, RST, DI0); | |
// Serial.println("LoRa Sender"); | |
if (!LoRa.begin(BAND)) { | |
Serial.println("Starting LoRa failed!"); | |
while (1); | |
} | |
Serial.println("LoRa Initial OK!"); | |
pinMode(16, OUTPUT); | |
digitalWrite(16, LOW); // set GPIO16 low to reset OLED | |
delay(50); | |
digitalWrite(16, HIGH); // while OLED is running, must set GPIO16 in high | |
display.init(); | |
display.flipScreenVertically(); | |
writeOled("Hello world."); | |
} | |
void loop() { | |
int packetSize = LoRa.parsePacket(); | |
if (packetSize) { | |
// received a packet | |
String payloadBuffer = ""; | |
Serial.print("Received packet '" + packetSize); | |
// read packet | |
while (LoRa.available()) { | |
char thisChar = (char)LoRa.read(); | |
payloadBuffer = payloadBuffer + thisChar; | |
} | |
Serial.println(payloadBuffer); | |
writeOled(payloadBuffer); | |
char buf[packetSize]; | |
payloadBuffer.toCharArray(buf, packetSize); | |
pSerialChar->setValue((uint8_t*)buf, packetSize); | |
pSerialChar->notify(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment