/* * HelTec Automation(TM) WIFI_LoRa_32 factory test code, witch includ * follow functions: * * - Basic OLED function test; * * - Basic serial port test(in baud rate 115200); * * - LED blink test; * * - WIFI join and scan test; * * - LoRa Ping-Pong test(DIO0 -- GPIO26 interrup check the new incoming messages; * * - Timer test and some other Arduino basic functions. * * by Aaron.Lee from HelTec AutoMation, ChengDu, China * 成都惠利特自动化科技有限公司 * www.heltec.cn * * this project also realess in GitHub: * https://github.com/HelTecAutomation/Heltec_ESP32 */ #include "Arduino.h" #include "heltec.h" #include "WiFi.h" #include "images.h" //#define BAND 868E6 //you can set band here directly,e.g. 868E6,915E6 #define BAND 433E6 // Stationsmode (STA mode) #ifndef STASSID #define STASSID "Router3" #define STAPSK "1234123487658765" #endif const char* ssid = STASSID; const char* password = STAPSK; String rssi = "RSSI --"; String packSize = "--"; String packet; String message = "hallo-1"; unsigned int counter = 0; bool receiveflag = false; // software flag for LoRa receiver, received data makes it true. long lastSendTime = 0; // last send time int interval = 1000; // interval between sends void logo(){ Heltec.display -> clear(); Heltec.display -> drawXbm(0,5,logo_width,logo_height,(const unsigned char *)logo_bits); Heltec.display -> display(); } void WIFISetUp(void) { // Set WiFi to station mode and disconnect from an AP if it was previously connected WiFi.disconnect(true); delay(1000); WiFi.mode(WIFI_STA); WiFi.setAutoConnect(true); //WiFi.begin("Your WiFi SSID","Your Password");//fill in "Your WiFi SSID","Your Password" WiFi.begin(ssid,password); delay(100); byte count = 0; while(WiFi.status() != WL_CONNECTED && count < 10) { count ++; delay(500); Heltec.display -> drawString(0, 0, "Connecting..."); Heltec.display -> display(); } Heltec.display -> clear(); if(WiFi.status() == WL_CONNECTED) { Heltec.display -> drawString(0, 0, "Connecting...OK."); Heltec.display -> display(); // delay(500); } else { Heltec.display -> clear(); Heltec.display -> drawString(0, 0, "Connecting...Failed"); Heltec.display -> display(); //while(1); } Heltec.display -> drawString(0, 10, "WIFI Setup done"); Heltec.display -> display(); delay(500); } void WIFIScan(unsigned int value) { unsigned int i; if(WiFi.status() != WL_CONNECTED) { WiFi.mode(WIFI_MODE_NULL); } for(i=0;i drawString(0, 20, "Scan start..."); Heltec.display -> display(); int n = WiFi.scanNetworks(); Heltec.display -> drawString(0, 30, "Scan done"); Heltec.display -> display(); delay(500); Heltec.display -> clear(); if (n == 0) { Heltec.display -> clear(); Heltec.display -> drawString(0, 0, "no network found"); Heltec.display -> display(); //while(1); } else { Heltec.display -> drawString(0, 0, (String)n); Heltec.display -> drawString(14, 0, "networks found:"); Heltec.display -> display(); delay(500); for (int i = 0; i < n; ++i) { // Print SSID and RSSI for each network found Heltec.display -> drawString(0, (i+1)*9,(String)(i + 1)); Heltec.display -> drawString(6, (i+1)*9, ":"); Heltec.display -> drawString(12,(i+1)*9, (String)(WiFi.SSID(i))); Heltec.display -> drawString(90,(i+1)*9, " ("); Heltec.display -> drawString(98,(i+1)*9, (String)(WiFi.RSSI(i))); Heltec.display -> drawString(114,(i+1)*9, ")"); // display.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*"); delay(10); } } Heltec.display -> display(); delay(800); Heltec.display -> clear(); } } bool resendflag=false; bool deepsleepflag=false; void interrupt_GPIO0() { delay(10); if(digitalRead(0)==0) { if(digitalRead(LED)==LOW) {resendflag=true;} else { deepsleepflag=true; } } } void setup() { Heltec.begin(true /*DisplayEnable Enable*/, true /*LoRa Enable*/, true /*Serial Enable*/, true /*LoRa use PABOOST*/, BAND /*LoRa RF working band*/ ); logo(); delay(300); Heltec.display -> clear(); Serial.begin(115200); Serial.setDebugOutput(true); Serial.println("."); Serial.println("Start: ."); Serial.println("Prog.: WiFi-Lora-32-Ftest"); WIFISetUp(); WIFIScan(1); attachInterrupt(0,interrupt_GPIO0,FALLING); LoRa.onReceive(onReceive); send(); LoRa.receive(); displaySendReceive(); } void loop() { if(deepsleepflag) { LoRa.end(); LoRa.sleep(); delay(100); pinMode(4,INPUT); pinMode(5,INPUT); pinMode(14,INPUT); pinMode(15,INPUT); pinMode(16,INPUT); pinMode(17,INPUT); pinMode(18,INPUT); pinMode(19,INPUT); pinMode(26,INPUT); pinMode(27,INPUT); digitalWrite(Vext,HIGH); delay(2); esp_deep_sleep_start(); } if(resendflag) { resendflag=false; send(); LoRa.receive(); displaySendReceive(); } if(receiveflag) { digitalWrite(25,HIGH); displaySendReceive(); delay(1000); receiveflag = false; send(); LoRa.receive(); displaySendReceive(); } } void send() { Serial.print("send: ."); LoRa.beginPacket(); LoRa.print(message); LoRa.print(counter++); LoRa.endPacket(); Serial.println(message); } void displaySendReceive() { Serial.print("displaySendReceive: "); Heltec.display -> drawString(0, 0, "RecSize " + packSize + " pack"); Heltec.display -> drawString(0, 10, packet); Heltec.display -> drawString(0, 20, "With " + rssi); Heltec.display -> drawString(0, 30, "++++ " ); Heltec.display -> drawString(0, 50, "Pack " + (String)(counter-1) + " sent done"); Heltec.display -> display(); Serial.println("with "+rssi); delay(100); Heltec.display -> clear(); } void onReceive(int packetSize) //LoRa receiver interrupt service { Serial.print("onReceive: "); //if (packetSize == 0) return; packet = ""; packSize = String(packetSize,DEC); while (LoRa.available()) { packet += (char) LoRa.read(); } Serial.println(packet); rssi = "RSSI: " + String(LoRa.packetRssi(), DEC); Serial.println("RSSI: "+rssi); receiveflag = true; }