From cff059d952c12aa1d295b61a9b75bb5342a10e83 Mon Sep 17 00:00:00 2001 From: Simon Milvert Date: Sun, 21 Apr 2024 15:19:50 +0200 Subject: [PATCH] Added example of reciver --- .gitignore | 6 +- receiver/README.md | 7 +++ receiver/doc/board_pins.webp | Bin 0 -> 57486 bytes receiver/include/README | 39 +++++++++++++ receiver/lib/README | 46 +++++++++++++++ receiver/platformio.ini | 18 ++++++ receiver/src/main.cpp | 108 +++++++++++++++++++++++++++++++++++ receiver/test/README | 11 ++++ 8 files changed, 234 insertions(+), 1 deletion(-) create mode 100644 receiver/README.md create mode 100644 receiver/doc/board_pins.webp create mode 100644 receiver/include/README create mode 100644 receiver/lib/README create mode 100644 receiver/platformio.ini create mode 100644 receiver/src/main.cpp create mode 100644 receiver/test/README diff --git a/.gitignore b/.gitignore index e257658..ef06222 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,8 @@ +.pio +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/ipch # ---> C++ # Prerequisites *.d @@ -31,4 +36,3 @@ *.exe *.out *.app - diff --git a/receiver/README.md b/receiver/README.md new file mode 100644 index 0000000..210dfd6 --- /dev/null +++ b/receiver/README.md @@ -0,0 +1,7 @@ +#### Board + +https://www.banggood.com/2Pcs-LILYGO-TTGO-433-or-470MHz-SX1278-ESP32-LoRa-0_96-Inch-Blue-OLED-Display-bluetooth-WIFI-Module-p-1271663.html?akmClientCountry=SE&utm_design=18&utm_email=1618462506_2324&utm_source=emarsys&utm_medium=Shipoutinform190813&utm_campaign=trigger-logistics&utm_content=leander&sc_src=email_2671705&sc_eh=b89a072d6be32cd21&sc_llid=28998133&sc_lid=104858042&sc_uid=I3GU9NeuSO&cur_warehouse=CN + +#### PINS +![alt text](doc/board_pins.webp) + diff --git a/receiver/doc/board_pins.webp b/receiver/doc/board_pins.webp new file mode 100644 index 0000000000000000000000000000000000000000..8f503df6a41ab264c78806e2e9f38a6d71bf8304 GIT binary patch literal 57486 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%0DFu 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 z THIS FILE +| +|- platformio.ini +|--src + |- main.c + +and a contents of `src/main.c`: +``` +#include +#include + +int main (void) +{ + ... +} + +``` + +PlatformIO Library Dependency Finder will find automatically dependent +libraries scanning project source files. + +More information about PlatformIO Library Dependency Finder +- https://docs.platformio.org/page/librarymanager/ldf.html diff --git a/receiver/platformio.ini b/receiver/platformio.ini new file mode 100644 index 0000000..bcee878 --- /dev/null +++ b/receiver/platformio.ini @@ -0,0 +1,18 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:ttgo-lora32-v1] +platform = espressif32 +board = ttgo-lora32-v1 +framework = arduino +monitor_speed = 115200 +lib_deps = + thingpulse/ESP8266 and ESP32 OLED driver for SSD1306 displays@^4.5.0 + sandeepmistry/LoRa@^0.8.0 diff --git a/receiver/src/main.cpp b/receiver/src/main.cpp new file mode 100644 index 0000000..c58f4c7 --- /dev/null +++ b/receiver/src/main.cpp @@ -0,0 +1,108 @@ +#include "SSD1306.h" // alias for `#include "SSD1306Wire.h"` +#include +#include +#include +// #include "SSD1306.h" +#include + + +//OLED pins to ESP32 GPIOs via this connecthin: +//OLED_SDA GPIO4 +//OLED_SCL GPIO15 +//OLED_RST GPIO16 + +SSD1306 display(0x3c, 4, 15); + + // WIFI_LoRa_32 ports +// GPIO5 SX1278 SCK +// GPIO19 SX1278 MISO +// GPIO27 SX1278 MOSI +// GPIO18 SX1278 CS +// GPIO14 SX1278 RESET +// GPIO26 SX1278 IRQ(Interrupt Request) + +#define SS 18 +#define RST 14 +#define DI0 26 +// #define BAND 429E6 //915E6 + +// #define BAND 434500000.00 +#define BAND 434500000.00 + +#define spreadingFactor 9 +// #define SignalBandwidth 62.5E3 +#define SignalBandwidth 31.25E3 +#define preambleLength 8 +#define codingRateDenominator 8 + +int counter = 0; + +void setup() { + pinMode(25,OUTPUT); //Send success, LED will bright 1 second + + pinMode(16,OUTPUT); + digitalWrite(16, LOW); // set GPIO16 low to reset OLED + delay(50); + digitalWrite(16, HIGH); + + Serial.begin(115200); + while (!Serial); //If just the the basic function, must connect to a computer + +// Initialising the UI will init the display too. + display.init(); + display.flipScreenVertically(); + display.setFont(ArialMT_Plain_10); + display.setTextAlignment(TEXT_ALIGN_LEFT); + display.drawString(5,5,"LoRa Sender"); + display.display(); + + 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.print("LoRa Spreading Factor: "); + Serial.println(spreadingFactor); + LoRa.setSpreadingFactor(spreadingFactor); + + Serial.print("LoRa Signal Bandwidth: "); + Serial.println(SignalBandwidth); + LoRa.setSignalBandwidth(SignalBandwidth); + + LoRa.setCodingRate4(codingRateDenominator); + + LoRa.setPreambleLength(preambleLength); + + Serial.println("LoRa Initial OK!"); + display.drawString(5,20,"LoRa Initializing OK!"); + display.display(); + delay(2000); +} + +void loop() { + Serial.print("Sending packet: "); + Serial.println(counter); + + display.clear(); + display.setFont(ArialMT_Plain_16); + display.drawString(3, 5, "Sending packet "); + display.drawString(50, 30, String(counter)); + display.display(); + + // send packet + LoRa.beginPacket(); + LoRa.print("Hello.."); + LoRa.print(counter); + LoRa.endPacket(); + + counter++; + digitalWrite(25, HIGH); // turn the LED on (HIGH is the voltage level) + delay(1000); // wait for a second + digitalWrite(25, LOW); // turn the LED off by making the voltage LOW + delay(1000); // wait for a second + +// delay(3000); +} diff --git a/receiver/test/README b/receiver/test/README new file mode 100644 index 0000000..9b1e87b --- /dev/null +++ b/receiver/test/README @@ -0,0 +1,11 @@ + +This directory is intended for PlatformIO Test Runner and project tests. + +Unit Testing is a software testing method by which individual units of +source code, sets of one or more MCU program modules together with associated +control data, usage procedures, and operating procedures, are tested to +determine whether they are fit for use. Unit testing finds problems early +in the development cycle. + +More information about PlatformIO Unit Testing: +- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html